Общая интерполяция успешно задействована и работает. Осталось самое сложное - интерполяция монстров. Потому что монстры играют анимацию со своим fps, который не совпадает с тем, как часто сервер посылает пакеты.
В первой и второй кваке это несоответствие было решено в лоб. Все анимации были на 10 фпс (и быстрее нельзя) и сервер тоже отправлял пакеты 10 раз в секунду. Вот оно так и получилось, автоматически.
Но уже в ку3 так легко отделаться не получилось.
Тут нужны промежуточные стейты для хранения текущих значений анимации, а так же время переключения кадра для локального значения интерполяционного фактора.
Добавлено 18-08-2024 в 10:04:
А ведь есть ещё такая штука как ходьба монстров. Тут уже не просто локальный лерпинг, тут смешивание двух разных интерполяторов.
Потому что монстры могут находиться на движущейся платформе и одновременно куда-то идти. Самый простой способ устранить это несоответствие - проинтегрировать скорость движения монстра.
Например через velocity. Собственно, в Doom3 оно именно так и сделано.
Добавлено 18-08-2024 в 10:06:
Да и в халфе ведь тоже. Никогда не задумывались, почему монстры моргают на движущихся платформах, а игрок - нет. Да потому что игрок передвигается с помощью заданного ускорения в velocity, а у монстров дискретные шаги, которые интерполируются на клиенте.
Дядя Миша А как происходит фильтрация списка объектов, тех которые нужны конкретному клиенту, например чисто визуальных объектов, которые не взаимодействуют с другими объектами, и их не нужно каждый тик обновлять, если объект сейчас не в кадре?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
А что собственно показывать, скриншот из IDE? Пожалуйста На данном этапе я ковыряю Vulkan, думаю отказаться от OpenGL полностью, почти весь рендер приходится переделывать, параллельно изучая Vulkan.
В Vulkan оказался другой подход к юниформам, памяти и т.д.
То что я говногодил примерно год недостаточно абстрактно для Vulkan.
Сейчас готово:
Свой формат/загрузка сцен, текстур, моделей, материалов, UI(подобие QML).
UI на Skia(GPU)
Звук
Физика на Bullet
Скрипты на Angle(думаю перейти на Lua)
Несколько тулз для конвертации ресурсов.
Android/Windows ввод, окна, различные нативные штуковины, Linux на 70% примерно, IOS и MAC в планах.
Если у Вас есть интерес, допилю рендер, выложу демку.
Цитата:
FiEctro писал: Ничего он не расскажет, он гуманитарий.
Unit писал: Если у Вас есть интерес, допилю рендер, выложу демку.
Интересно, а что это вообще за проект такой? )
__________________
Kiss my ass if you don't like my Ford!
------------------------------------------ Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.
(_-=ZhekA=-_) Да глобально ничего так-го, есть интерес сделать для мобилок и пк мини-движок, что-бы уровни маппить можно было в "Хамерской" концепции, затем, если не перегорит, выпустить небольшую игру, сейчас использую Hammer для Source 2, написал конверт из VMAP.
SNMetamorph писал: Почему именно всё нативно, а не просто взять SDL?
С основной работой кроссплатформа связана, я почти весь код уже писал ранее, в такой ситуации SDL избыточен, если не охота разбираться в платформах, то да SDL хороший выбор.
Unit писал: А что собственно показывать, скриншот из IDE? Пожалуйста
Благодарю. Всё что я хотел узнать, я узнал из этого скриншота.
Цитата:
Unit писал: Если у Вас есть интерес, допилю рендер, выложу демку.
Заценим конечно
Цитата:
Unit писал: А как происходит фильтрация списка объектов, тех которые нужны конкретному клиенту, например чисто визуальных объектов, которые не взаимодействуют с другими объектами, и их не нужно каждый тик обновлять, если объект сейчас не в кадре?
Никак не происходит. Все объекты обновляются на сервере всегда.
Ибо без ярко выраженных допущений невозможно определить какие именно объекты нужны конкретному клиенту. А допущения определяются жанром игры. Для FPS что-то подобное в общем случае определить невозможно в принципе. Единственное что пожалуй можно допустить - это выключать AI у монстров, которых игрок не видит. Или если быть точным - ни один игрок не видит.
Впрочем там в любом случае масса всяких условий чтобы совершать как можно меньше работы, но функция обновления вызывается всегда.
Дядя Миша писал: Никак не происходит. Все объекты обновляются на сервере всегда.
Ибо без ярко выраженных допущений невозможно определить какие именно объекты нужны конкретному клиенту. А допущения определяются жанром игры. Для FPS что-то подобное в общем случае определить невозможно в принципе. Единственное что пожалуй можно допустить - это выключать AI у монстров, которых игрок не видит. Или если быть точным - ни один игрок не видит.
Впрочем там в любом случае масса всяких условий чтобы совершать как можно меньше работы, но функция обновления вызывается всегда.
Я вот подумываю разбить на категории объекты: обязательные и не обязательные для pertick апдейта, вторые будут обновляться, например если находятся в радиусе дальности прорисовки камеры, даже если они не в кадре, например если резко повернуть камеру. Но вытекает проблема, если резко телепортировать камеру, а данные с сервера еще не пришли по новым координатам камеры, тогда blink эффект возникнет, пока не решил этот вопрос.
Unit писал: что-бы уровни маппить можно было в "Хамерской" концепции
Опять, что-то хл1 подобное...
__________________
Kiss my ass if you don't like my Ford!
------------------------------------------ Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.
@Acerola__t
there's also this fun bug where Unity just randomly stops recompiling your compute shaders, and it gives no indication of this, other than making you think you're insane; so if you make a change to your shader, and it doesn't do anything, it's the bug and you need to restart unity
Сеть была успешно поломана в августе 2019-го года. Пять лет. Пять лет эта ситуация ждала своего часа. Одно цеплялось за другое, без третьего не имело смысл реализовывать четвертое, без которого было бы невозможно пятое, а без пятого реализация сети была попросту невозможна.
Ну я условно. Сперва собственный язык, потом организация игровых библиотек, успешное тестирование прототипа реальной игры (в качестве прототипа выступил первый Quake), перенос Quake2, подключение AI-навигации, поддержки монстров с вершинной анимацией и вот наконец-то очередь дошла и до сети. И эта задача практически выполнена.
Я не стал там изобретать ничего нового, остановился на классической клиент-серверной архитектуре в духе Quake World. Ну или GoldSource, кому как больше нравится. У подобной реализации было несколько слабых мест.
Во первых невозможность передать на клиент новые параметры - только те, что заранее прописаны в entity_state_t. И сам entity_state_t тоже менять нельзя - сломается сетевой протокол. Очень неудобная конструкция.
Второй момент - невозможность передачи на клиент никаких глобальных переменных. В Half-Life была структура movevars_t, но пользовательских переменных там не было. Приходилось городить какие-то отдельные пользовательские сообщения, проверки на время их передачи.
Третий момент - нельзя было передавать на клиент строки. Только числа.
Четвертое - вещественные числа отсылались на клиент в фиксированном виде, надо было подбирать множитель. Легко догадаться в каком исковерканном виде они туда приходили.
Пятое - невозможность нормальной работы с клиентскими энтитями.
Исторически это началось ещё в первого квейка, где пользовательский доступ к клиентским энтитям не предполагался вовсе, в халфе вывели какие-то непонятные каллбэки, вся роль которых сводилась к тому, чтобы скопировать какие-то переменные из одного стейта в другой. Что именно там происходило понять было практически невозможно. Зато все клиентские эффекты так и оставались захардкодены в движке.
XashNT предполагает иной подход. Он позволяет создавать клиентские энтити на основе таких же классов, как и на сервере. При желании можно передать практически все параметры и замутить предиктинг всех объектов, но я пока что так далеко не заглядываю. На данный момент имплементация объектов нужна, чтобы навешивать на них всякие визуальные эффекты - партиклы, динамический свет, лучи.
И будет новая концепция временных энтить. Параллельного массива с этими объектами в новом ксаше больше не будет, а все энтити такого рода будут полностью контролироваться с сервера. Тут как раз и пригодится возможность не наследовать объекты от базового, с целью оптимизации траффика. Впрочем, думаю, уже скоро сами всё увидите и пощупаете.
Добавлено 20-08-2024 в 22:24:
Кстати, по лимитам скажу. Поскольку оно на сетевой протокол подзавязано.
Можно отвязать в дальнейшем, но пока что смысла не вижу.
8192 энтити на сервере. Мог бы поставить меньше, но тогда не заведётся ad_sepulcher из Arcane Dimensions, а я планирую его тоже использовать в качестве стресс-теста. Увеличивать этот лимит едва ли возможно - виртуальная машина без JIT не вытянет.
4096 уникальных моделей
8192 уникальных звука
65535 уникальных строк, которые могут быть переданы на клиент.
При всём при этом, разумеется ничего не мешает засеять сцену двумя-тремя миллионами кустов травы или прочими детайлами - они станут частью мировой модели. Ну или любой другой модели, это не так уж и важно.