Дядя Миша писал: какие-то маркетологические штучки на 144 герца
У меня монитор на ПК 75 гц, на ноуте 120, у брата 144. Разница между 75 и 120 огромная, на 120 в лучшую сторону. Между 144 и 120 разницы я не увидел - было так же супер-плавно. Насчет значений выше, сказать уже не могу - не видел, могу лишь предположить, что разница будет почти незаметной.
Цитата:
Дядя Миша писал: Потому что ни физику ни сеть нет резона обновлять чаще 60 раз в секунду.
Так я не понимаю, сделай чтобы локально там все интерполировалось на тыщу фпс или сколько там пользователю надо, а по факту обновляй 60 раз.
Дядя Миша писал: Ну да, всё разом. А как надо? Время идёт одинаково для всех объектов.
Так у тебя физика от фпс плавать начнёт. У неё должны быть свои такты и фпс. А так же некоторые события могут выполняться до или после обновления физики. Как то глупо всё в апдейт пихать чтобы потом каждый раз мучаться как с дрожащими монстрами на платформах, но может в этом есть какие то свои приемущества? Да и дельта тайм куда делся?
Дядя Миша писал: Потому что ни физику ни сеть нет резона обновлять чаще 60 раз в секунду. А без синхронизации с кадровой частотой монитора получаем вот такие лаги. Причём не у всех, не всегда и при разных условиях.
У меня и на 60 гц тоже лаги есть, но только если фпс выше 60ти и выключен всинк.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Aynekko писал: Между 144 и 120 разницы я не увидел
Так я ровно про это и говорю - выше ста герц разница уже не видна.
Цитата:
Aynekko писал: а по факту обновляй 60 раз.
Оно и обновляется по факту 60 раз. Возможно проблема в том, что 1 / 60 по нормальному не делится.
Цитата:
FiEctro писал: Так у тебя физика от фпс плавать начнёт.
С чего бы она начнёт плавать если для физики синхронный поток на 60 кадров в секунду?
Цитата:
FiEctro писал: А так же некоторые события могут выполняться до или после обновления физики.
Могут. И выполняются.
Цитата:
FiEctro писал: каждый раз мучаться как с дрожащими монстрами на платформах
В QuakeNT монстры на платформах не дрожат, если ты не заметил. Можешь на e1m1 поехать вместе с солдатом вниз - дрожать он не будет и будет спокойно бегать по едущей платформе.
Цитата:
FiEctro писал: Да и дельта тайм куда делся?
Никуда не делся.
Цитата:
FiEctro писал: В Юнити можно внедриться на любой этап пайплайна.
Ну у меня всё же более сетевая архитектура, поэтому такого попросту нет. Да оно и не нужно. В рендеринг тем более нет смысла вмешиваться - достаточно отправить некоторые параметры в шейдер. XashNT использует полностью аппаратное ускорение. В Юнити есть партиклы? Там можно внедриться в процесс их рендеринга из C#?
У меня есть функция ServerStartFrame - вызывается до начала физики.
И функция ServerRunPhysics - вызывается для каждого объекта.
И вот в ней ты делаешь абсолютно всё что угодно. Физика полностью находится в скриптах, по крайней мере на данный момент.
Если надо передать какой-то параметр в материал - просто в самом материале пишешь обращение entity->paramname. А в объекте регистрируешь свойство с именем "event.parmname" и к этому свойству подцепляешь то что тебе нужно - переменную член класса, функцию, виртуальную функцию. И при рендеринге это свойство автоматически вызывается и передаёт в шейдер нужный параметр. При соблюдении ряда условий - что объект виден в кадре, что шейдер вообще использует этот параметр. Это гораздо удобнее, чем вручную что-то сетапить в соответствующих эвентах. Но и гораздо сложнее в реализации, нежели внутри пайплайна понаделать вызова функций в скрипты.
Добавлено 01-10-2023 в 09:17:
Вообще, каллбэки на каждом этапе конвейера - это признак очень топорной и неоптимальной архитектуры, потому что ядро оказывается плотно связано этими калбэками и начинаются разные проблемы при попытке внедрить в движок какую-то новую подсистему, например ту же поддержку сети или нормальную сериализацию. В результате при смене мажорной версии может сломаться совместимость или просто скорость работы окажется неудовлетворительной. В халфе точно также понаделали этих грёбанных каллбэков и никто с ними толком не умел работать. Зато между движком и пользовательской частью образовалась громадная куча паразитных связей.
Т.е. ты по сути хвастаешься неоптимальной слаборасширяемой архитектурой, которая видимо была принята от балды еще в середине нулевых, как наиболее влобное решение.
Проведи слепой тест - сделай 2 простых билда, с логикой залоченной на 60 фпс, а другой на 144 например. Назови их билд1 и билд2. Я более чем уверен, что все скажут, что 144 плавнее.
Немножко картинок вам в ленту. Вот так выглядит визуальный профайлер игрового кода. Раздельно для серверной и клиентской части (потом ещё аналогичный сделаю для меню).
Можно посмотреть сколько в среднем опкодов виртуальная машина выполняет за кадр, а так же наглядно - в виде графика. Соответственно, если график начинает краснеть - пора оптимизировать ваш код.
Впрочем, когда я напишу JIT, лимиты на оптимизацию отодвинутся. Ну а пока - вот так.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Ладно, то что напротив CPU иконка часов - это я понять могу. То что напротив памяти - изображение микросхемы в принципе тоже. Но то что напротив рендеринга нарисован не то бублик, не то дырка от него - это вот вообще взрыв мозга какой-то.
Цитата:
FiEctro писал: Всё мелкое да и данных мало.
Это in-game статистика. Предлагаешь ей вообще весь экран покрыть?
В редакторе с окошками можно будет сделать подробнее.
Ну и да - это профайлер не всего кода, это профайлер именно скриптовых машин. Учитывая что в юнити из каждого участка ядра растёт пользовательский каллбэк конечно данных будет намного больше, а у юзера будет активнее болеть голова, как это всё разрулить и соптимизировать.
Добавлено 01-10-2023 в 13:36:
Или вот к примеру в Юнити есть статистика GC Allocated, как я понимаю Garbage Collector. У меня его нет, он просто не нужен, как я выведу по нему статистику?
Добавлено 01-10-2023 в 13:36:
Кстати вот это вот Physics.FetchResults - это чисто PhysX-овая заморочка.
Дядя Миша писал: Или вот к примеру в Юнити есть статистика GC Allocated, как я понимаю Garbage Collector. У меня его нет, он просто не нужен, как я выведу по нему статистику?
Дядя Миша писал: Это in-game статистика. Предлагаешь ей вообще весь экран покрыть?
Можно оставить как есть, но для больших подробностей Tab окно сделать как окно убийств и смертей в мультиплее. Когда надо игрок сам его выведет.
Цитата:
Дядя Миша писал: Ну и да - это профайлер не всего кода, это профайлер именно скриптовых машин. Учитывая что в юнити из каждого участка ядра растёт пользовательский каллбэк конечно данных будет намного больше, а у юзера будет активнее болеть голова, как это всё разрулить и соптимизировать.
Там можно каждый скрипт отдельно просмотреть.
Цитата:
Дядя Миша писал: Но то что напротив рендеринга нарисован не то бублик, не то дырка от него - это вот вообще взрыв мозга какой-то
Ну читать то умеешь? По мне эти иконки вообще лишние.
Цитата:
Дядя Миша писал: В редакторе с окошками можно будет сделать подробнее.
Потому я и говорил что возможность запускать игру внутри редактора это не просто фишка от балды. Это часть отладчика, и очень важная часть. Когда ты можешь запустить игру и посмотреть в реальном времени на сцене чем занимается каждая отдельно взятая энтития.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Там можно каждый скрипт отдельно просмотреть.
А ну у меня тоже такое можно сделать. Но специально я этим заниматься не буду, только по мере возникновения потребности.
Если игра и так быстро везде работает - зачем её оптимизировать?
Только тратить время на бесполезные вещи.
Дядя Миша писал: Если игра и так быстро везде работает - зачем её оптимизировать?
Только тратить время на бесполезные вещи.
А если утечка памяти? И гарбаж коллектора нет? Нет ну я с тобой согласен, может в конктексте кваки действительно смысла никакого нет, поскольку она сама по себе маленькая и легковесная. Но вот если у тебя более сложный проект, с десятками тысяч объектов? Как ты всё это отлаживать собираешься?
Не знаю, мне кажется такой подробный отладчик в первую очередь сократил бы много времени тебе как разработчику движка. А так же помог собирать больше данных от пользователей которые жалуются что у них что то тормозит. Вспомни сколько возни было с рендером второй паранойи.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Когда ты можешь запустить игру и посмотреть в реальном времени на сцене чем занимается каждая отдельно взятая энтития.
Оно как правило самоочевидно и безо всякого отладчика.
Впрочем я пока ничего утверждать не буду. Инструменты должны появляться по мере возникновения потребности в них. Скажем первобытные люди уже вполне использовали камень в качестве молотка, а вот отвертки им были совершенно ни к чему.
Добавлено 01-10-2023 в 13:53:
Цитата:
FiEctro писал: А если утечка памяти?
Невозможна by design. У меня же стековая машина. Дальше стека не утечёт.
Дядя Миша писал: Оно как правило самоочевидно и безо всякого отладчика.
Это как очевидно? Ну вот ты создаёшь в реалтайме ригидбоди, запустил игру, а его в игре нет, т.к. его под землю вытолкало, как это с ходу определишь? В реалтайм отладчике это видно с первых секунд, в ином случае придётся тратить куда больше времени.
У Годота кстати такая же фигня, при запущенной игре внутри сцены объекты все статичны, и ты нифига не видишь что происходит с ними. Это ооочень неудобно.
Цитата:
Дядя Миша писал: Невозможна by design. У меня же стековая машина. Дальше стека не утечёт.
Вылет будет давать? Или что? Ну вот вместо ГарбажКоллектора можно статистику юзания и переполнения стека показывать. Я правда не знаю всех подробностей и насколько это актуально в твоём движке.
Цитата:
Дядя Миша писал: Скажем первобытные люди уже вполне использовали камень в качестве молотка, а вот отвертки им были совершенно ни к чему.
Зависит опять же от сложности. Энтитии в квейке довольно простые и работают в основном в глобальном пространстве. Но вот если ты машинку например собрал, да ещё и с использованием физики? Запустил, а она вроде и едет но как то не так. Сколько тебе времени придётся потратить чтобы выяснить какой фрагмент этой сложной системы косячит?
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: а его в игре нет, т.к. его под землю вытолкало
Но почему?
Цитата:
FiEctro писал: Вылет будет давать? Или что?
Ничего. Просто не будет утечек и можно вообще об этом не думать.
Ты же когда с халфой работал не думал об утечках.
Цитата:
FiEctro писал: Запустил, а она вроде и едет но как то не так. Сколько тебе времени придётся потратить чтобы выяснить какой фрагмент этой сложной системы косячит?
А как мне в этом деле поможет профайлер и анализатор утечек памяти?
К тому же едет "как-то не так" это очень субъективное ощущение. Может у нее подвеска жостче чем надо или мощность мотора выставлена слабая, например. Но при чём тут тогда вообще отладка? Берёшь и играешься с параметрами.
Добавлено 01-10-2023 в 14:43:
Цитата:
FiEctro писал: и работают в основном в глобальном пространстве.
Абсолютно все объекты в конечном счёте высчитывают своё положение в глобальном пространстве. Локальные пространства это всего лишь удобная абстракция.
Дядя Миша писал: А как мне в этом деле поможет профайлер и анализатор утечек памяти?
Не профайлер, а на сцене в реалтайме. Когда ты можешь кликнуть мышкой на объект во время игры и посмотреть что творится с его значениями и координатами.
Профайлер может помочь не только программисту, но левелдизайнеру когда он например переборщил с материалами, и хочет выяснить откуда просадки.
Цитата:
Дядя Миша писал: Берёшь и играешься с параметрами.
Ну тоесть заниматься брутфорсом?
Каким параметрами, если где то в коде баг?
Цитата:
Дядя Миша писал: Абсолютно все объекты в конечном счёте высчитывают своё положение в глобальном пространстве. Локальные пространства это всего лишь удобная абстракция.
Надеюсь сделаешь какие то инструменты для работы с дочерними и родительскими объектами. Чтобы не лезть в матрицы как в Годоте.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro писал: Когда ты можешь кликнуть мышкой на объект во время игры и посмотреть что творится с его значениями и координатами.
Это я тоже могу сделать. Но для начала надо убедиться, что в отладке такого рода вообще возникнет потребность.
Цитата:
FiEctro писал: левелдизайнеру когда он например переборщил с материалами, и хочет выяснить откуда просадки.
r_speeds есть. Там сразу видно сколько переключений шейдера, сколько флушей и сколько треугольников. Память разумеется тоже показывает. Ну может не так красиво как в Unity. Но опять же, на моей памяти народ на всё это стабильно забивает болт.
Цитата:
FiEctro писал: Каким параметрами, если где то в коде баг?
"Машина едет как-то не так" - это ты описал свои субъективные ощущения, например. Это необязательно баг, может настройки такие.
Цитата:
FiEctro писал: Надеюсь сделаешь какие то инструменты для работы с дочерними и родительскими объектами
В сорсе есть такие инструменты? Я что-то не видел. И не помню, чтобы у кого-то там аттач объектов вызывал проблемы.
Добавлено 01-10-2023 в 18:50:
FiEctro ты, чем приводить в пример разные отладочные инструменты, которые красивые и наглядные, лучше расскажи реальный опыт их применения. Было ли такое, что баги ты находил именно с помощью этих самых инструментов, а не самостоятельно вспоминал где именно ты налажал.
Добавлено 01-10-2023 в 19:08:
C# абсолютно не годится для игр. Он даже для приложений особо не годится. Вспоминаем Paint.NET. Кто-то может сказать, мол, там работа с пикселями. пикселей много, вот и не справляется. Хорошо, но у меня есть софтина для внутрисхемного программирования на шарпе. Там одно небольшое окошко и несколько кнопок. Как жы люто это говно лагает. И всё время норовит зависнуть. А ведь оконному интерфейсу никто и не гарантирует мгновенно отклика. Там окошки неперерисованными могут оставаться долгое время и типа нормально. Прогресс-бары зависают, к примеру. И вот на таком языке вы собрались делать игру. Хуже СиШарпа только годотовский клон Питона под названием GDScript. Он настолько тормозной, что даже Юнити на его фоне кажется чем-то сверхбыстрым.
Эпики, устав бороться со всем этим дерьмом запилили блюпринты, которые в финале просто транслируются в обычный С++ код. Решение спорное, но по производительности наверняка лучшее. Однако у них другая проблема - разобраться в здравом уме с кодобазой анрила практически невозможно.
Уж слишком она гигантская. Многие и не пытаются - выбирают Юнити или тот же Годот. Вот такая вот диалектика. Кстати с КрайЭнджином была аналогичная шляпа - разобраться с его игровой кодобазой могут не только лишь все. И большинство предпочло не связываться.
Добавлено 01-10-2023 в 19:10:
И ещё один момент. Казалось бы в чём разница между кодобазой Анрила и Края? И там и там тёмный лес. Но у Эпиков более дружелюбное коммунити, а у Края насколько я понял было всё очень токсично.