Інтерполяція між двома мережевими станами?


11

У мене на клієнті багато сутностей, які моделюються (їх швидкості додаються до їх позицій за кадром), і я дозволяю їм мертвим вважати себе. Вони надсилають оновлення про те, де вони востаннє бачились, і швидкість їх зміни. Це чудово працює, і інші гравці бачать цю роботу. Однак через деякий час ці гравці починають десинхронізуватися через деякий час. Це через затримку.

Мені хотілося б знати, як я можу інтерполювати між державами, щоб вони виявилися в правильному положенні. Я знаю, де гравця ОСТАНО бачив, і їх поточна швидкість, але інтерполяція до останнього стану, що бачиться, призводить до того, що гравець насправді рухається-назад-. Я взагалі не міг використати швидкість для інших клієнтів і просто "прискорив" їх до відповідного напрямку, але я думаю, що це спричинить нерівномірний рух. Які альтернативи?

Відповіді:


9

З цієї причини ви виявите, що симуляції часто виконуються на 1 або більше кадрів попереду того, що насправді виводиться в даний момент на клієнта, що надає. Отже, іншими словами, те, що ви робите, може бути насправді другим останнім кадром, а не останнім кадром.

Шукайте в цій статті всі випадки слова "попереду", і я думаю, ви почнете отримувати картинку краще, ніж я, можливо, пояснював це вище.


Гаразд, значить, ви маєте на увазі, що я дійсно повинен зробити плеєр таким, як вони були 300 мс тому, і інтерполювати в майбутнє? (В окремому штаті, коли прийде новий штат; це перемкнеться)
Вон Хілтс

@VaughanHilts Знову, будь ласка, прочитайте статтю та коментарі. Гаффер є експертом у цій галузі, і він пояснює це набагато чіткіше, ніж я можу. Але загальна ідея полягає в тому, що так, ваша імітаційна модель попереду, тоді як ваша візуалізація дещо відстає від того, щоб врахувати описаний вами ефект. Це далеко не єдине місце, де я бачив описану цю техніку.
Інженер

2

Коли ви говорите:

ці гравці починають десинхронізуватися через деякий час

це змушує мене думати, що ваша проблема може мати більше спільного з тим, як годинники виходять із кроку, ніж з будь-якими проблемами затримки. Якщо це затримка, вона повинна бути такою ж поганою на початку, ніж 10 хвилин дюйма. Якщо один ігровий годинник працює трохи швидше, ніж інший, з’являться якісь дивні трепетні артефакти, які з часом стануть гіршими та гіршими. Клієнт може симулювати в майбутньому, коли теперішні пакети надходять з сервера, він відтягне клієнта назад, внаслідок чого суб'єкти можуть стрибати. Проведіть ще кілька тестів, щоб дізнатися.

Якщо ігрові годинники синхронізації справді є проблемою, вам потрібно буде дуже уважно ознайомитися з циклом оновлення та переконатися, що кожне оновлення базується на кількості пройденого ігрового часу (фіксованого чи змінного) та на грі -time розширено, використовуючи щось на кшталт настінного годинника (не відображати час або інші змінні). У Гаффера є кілька хороших статей з цього приводу, і тут є пристойне питання, що стосується фіксованих та змінних часових кроків . Сподіваюсь, це допомагає.


Це не так, справа справді в тому, що я мертвий - вважаю занадто далеко (затримка або щось таке - пакет для "зупинки" не отриманий вчасно, і клієнт не може вчасно виправити себе. Я це точно знаю) випадок тому, що після того, як клієнт зупинився, я можу ВЗАЄМО ВІДПОВІДИТЬ інтерполяцію назад на своє місце
Vaughan Hilts
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.