Удалил наниты из своей экшен-рпг на Unreal Engine 5
Уже почти 2 года я делаю большую игру на анриле. Влетел без опыта, знаний и тому подобного. Учился всему с нуля. Хочу рассказать свой опыт использования "прорывных" технологий от Unreal Engine 5, и как я на нём споткнулся.
Изначально я планировал построить свою игру на использовании всех этих технологий - Nanite, Lumen, VSM (виртуальные тени), RVT (виртуальные текстуры), megalight (оптимизация света). Я подумал, ну раз эпики предоставляют такую возможность, то почему бы и нет? Я заблуждался.
Когда я плюс минус во всем этом разобрался, то понял накладные расходы каждой из технологий, но так как статья про наниты, опишу подробно их ну и ниже еще немного об остальном.
Nanite - оптимизация или лень разрабов?
Это технология, которая позволяет закидывать в движок геометрию (ассеты) с любым количеством полигонов. Можно 10К, и даже 100К, и даже 1000К. Анрил разделит всю эту движуху на кластеры по 128 шт и покажет только нужное, тем самым оптимизировав геометрию. Но у нанитов есть один минус, даже два.
Первый - это несет 2 дополнительные статьи расходов во время просчета кадра - Nanite Base Pass и Nanite Viz Buffer. Первый - это сложность просчета всех шейдеров, а второй - сложность перерисовки в кадре (типа когда много объектов нанитовых накладываются друг на друга и надо их посчитать для прохода). В итоге ты конечно можешь накидать 100500 бочек с 1 млн трианглов, но ты получишь +2-6 мс в кадре (общий бюджет 16.6 мс - это 60 фэпэс). Вот и считай, наниты сожрут 1/4 времени кадра примерно.
Да, это можно оптимизировать. Упростить шейдеры, уменьшить овердрав, врубить Frustum, ProgrammableRaster, уменьшить RootPages, врубить hzb и ид, не буду грузить вас этим, но все равно останется 1-3 мс. В итоге получаем что? Ну типа отдадим 10-15 фпс за то, что разрабу лень настроить лоды)) ок, думаю поняли.
Второй негативный след от нанитов - это потребление видеопамяти. У нанитов есть буфер и пул, которые требуют ресурсов. Это все конечно можно настроить, уменьшить буфер со стандартных 2 гигов до 512 мб например, но камон, а если лимит будет превышен, а у вас буфер занижен? Ну тогда привет статтеры. А если выпилить наниты, то и буфер никакой не нужен :)
А что с остальными технологиями?
В общем прикол с нанитами думаю понятен, а что Lumen? Он тоже жрет время кадра )) ну и видеопамять. Особенно если юзать его в хардварном режиме. Люмен я решил оставить, но выпилил наниты. Почему? Потому что я смог его засунуть в пайплайн так, чтобы он не жрал сильно много.
В итоге сегодня на моей видяхе 3060 ти игра в нагруженных сценах на высоких выдает стабильно выше 60-70, а то и 80-90 кадров и жрет не более 6 гигов видеопамяти. Люмен позволил мне не париться с запеканием света, что в соло для большого мира ад. Конечно, пришлось с ним повозиться, очень долго повозиться.
Как я его оптимизировал? Тут довольно много методов, например правильная установка DownsampleFactor и AllocationFraction позволили снизить общую нагрузку, а TracingOctahedronResolution упростил трассировку в софтварном режиме. Правильная установка MaxLumenMeshCards на мешах также снизила нагрузку на видеопамять и время в кадре. Ну и тд, методов много, просто надо не лениться. В итоге люмен жрет где-то 1/5 часть кадра, но я могу себе это позволить, так как вся геометрия в игре оптимизирована на данный момент.
При выключении нанитов мне также пришлось отказаться от виртуальных теней. Ну и в топку их, классические каскады отлично работают и приятны на глаз, к тому же понятно как их оптимизировать. Снизить разрешение, отключить все тени на не важных и дальних объектах - и получаем профит. VSM конечно тоже можно оптимизировать - поработать с клипмапом, снизить разрешение, Physical Page и тд и будет профит, но они лучше с нанитами работают. А нанитов нет. Так что в топку.
Виртуальные текстуры? Ну это полезно. В первую очередь для картинки - смешиваем объекты, чтобы не было резких стыков, ну и для ландшафта. Я полностью перевел его из BasePass в rvt и он не жрет теперь. А это колоссальная экономия, правда ценой около 512 мб видеопамяти, но допустимо.
Так что в итоге? А в итоге юзать технологии можно и нужно, но главное понимать как это делать и зачем тебе это надо. Откланялся. В вишлист игру можно добавить тут. Оформление в стиме старое еще, как и скриншоты, но скоро обновлю с новой графикой, пока не было времени.