Фиолетовый луч Хуанга.

Или как мы попробовали украсить свою инди-игру трассировкой лучей спустя семь лет после выхода технологии на массовый рынок.

Фиолетовый луч Хуанга.

Привет, ДТФ! Как гласит название поста, небольшая история про использование любимого всеми рейтрейсинга в инди-игре, стоило оно того или нет, какую RTX-вундервафлю нужно для комфортной игры и мысли в общем.

Первое знакомство с лучами.

Начну пост копипастой из гугла, чтобы на миг мы вернулись в тихое, мирное прошлое:

В 2018 году NVIDIA представила революционную линейку видеокарт GeForce RTX 20-й серии, которая ознаменовала переход к новой эре графики. Эти все видеокарты NVIDIA стали первыми массовыми GPU, поддерживающими трассировку лучей в реальном времени (Ray Tracing).

(с) копипаста из гугла

И вот на носу август 2025 года, т.е. с тех пор прошло практически семь лет. Время, как же быстро ты летишь и в какую же задницу мы все попали.. Возможно, я выскажу не слишком популярное мнение, но сам лично с большим позитивом и надеждой тогда отнёсся к появлению данной технологии. Немного позже даже прикупил себе RTX 2060 Super взамен старой видеокарты, но так и не смог оценить все прелести этих хуанговских лучей в Unreal Engine 4. При активации RT картинка просто начинала люто шуметь и превращалась в слайд-шоу, кек. Ну, неудивительно, 2060S в плане трассировки была вообще ни о чём. На тот момент что-то из себя представляла разве что топовая 2080, сегодня дела обстоят куда лучше. Так что единственную пользу от новых аппаратных RT-блоков в то время я ощутил лишь в программах вроде Substance Painter, стало куда шустрей запекать всякие текстурные карты и на этом всё.

Но, несмотря на так себе впечатления, у меня ещё в те времена появилась "мечта идиота" однажды сделать игру с использованием RT. И вот, спустя семь лет, такая игра, сделанная полтора землекопами, вскоре отправится в своё собственное плавание по просторам Стима. Сбылась "мечта идиота", получается.

Что до трассировки лучей в Unreal Engine 4, то Эпики что-то там немного повозились с RT, что-то поулучшали, вывели фичу из экспериментальной в разряд production-ready и всё. Из по-настоящему полезного для разработчиков добавили возможность запекать освещение на GPU, что кратно сократило время данного "весёлого" процесса ожидания. Ну а дальше началась эра Unreal Engine 5 - Lumen софтварный, Lumen хардварный, MegaLights и ещё туева хуча всего, что страшно туда лезть. Да и незачем, спокойно себе сидим-пердим на Unreal Engine 4, его возможностей под наши игрушки хватает за глаза.

Графика, фичи, минусы.

Собственно, чтобы графика была окей по умолчанию, и игра шустро работала не только на навороченном железе, освещение в игре было запечено на GPU. Да, графоний всратый по стилю, но всё равно приятно видеть мягкое освещение. Да ещё и по сути бесплатное, оно просто есть, работает и ~ничего не просит. Всеми источниками освещения в игре выступает геометрия с emissive-материалами - слайды на стенах, лампы в светильниках. Единственным "настоящим", динамическим источником света выступает лишь фонарик, который можно найти по ходу игры. Небольшой пример освещения:

Фиолетовый луч Хуанга.

Теперь перейдёт к фичам, которые просят аппаратную поддержку трассировки лучей и кушают FPS. Начать стоит с того, что сразу был отключен RTGI ( RayTracing Global Illumination). Во-первых, всё это освещение уже запечено, специально. Во-вторых, RTGI довольно шумная штука и больше всего нагибает видеокарту. Так что это, можно сказать, основная и базовая оптимизация без потери визуального качества. Ниже список того, что используется в игре и небольшие картинки сравнения (на которых нихиба невидно, кек):

* Ray Traced Ambient Occlusion, приятные и более корректные затенения:

Фиолетовый луч Хуанга.

* Ray Traced Reflections, трушные отражения от "зеркальных" поверхностей:

Фиолетовый луч Хуанга.

* Ray Traced Translucency, более правдоподобное стекло с поддержкой отражений от его поверхности:

Фиолетовый луч Хуанга.

* Ray Traced Shadows, применяется для теней от фонарика. Картинки-сравнения не будет, просто. :D
Вместо картинки вставлю здесь игровой трейлер с включенной трассировкой лучей, можете взглянуть на всё это в динамике:

Можно ли сказать, что "всё это не нужно", "разницу искать под лупой", "FPS упал, а толку ноль"? Да можно, кто же запретит. Потому здесь я хочу подчеркнуть "бонусный" статус данной опции в игре. Можно включить и играть с этими плюшками, а можно забить и не включать. Сама игра, игровой геймплей от того ни хуже, ни лучше не станут.

Из минусов RT конкретно в данном проекте обнаружился лишь один. RT не поддерживает отображение декалей - "наклеенные" надписи на стенах, лужи крови на полу и прочее такое. Эти штуки не видно в отражениях, которые формируются благодаря трассировке. Где-то решили эту проблему использованием других техник вместо декалей, где-то этот "косяк" просто незаметен ( нашим легче).

Производительность с включенной трассировкой лучей.

Где-то своими силами, где-то благодаря помощи от других ребят-разработчиков удалось провести тесты производительности, как оно вообще работает по итогу. Получилось собрать немного данных для общего минимального представления:

1) RTX 4080 Super:
Native 1920x1080 - 260-280 FPS.
Native 2560x1440 - 160-180 FPS.

2) RTX 3080:
Native 1920x1080 - 165-190 FPS.
Native 2560x1440 - 90-120 FPS.

3) RTX 5060:
Native 1920x1080 - 120-140 FPS.

4) RTX 3070 Ti:
Native 1920x1080 - 110-120 FPS.
Native 2560x1440 - 70-80 FPS.

5) RTX 4060:
Native 1920x1080 - 100-110 FPS.

6) RTX 3070:
Native 1920x1080 - 100-110 FPS.
Native 2560x1440 - 60-70 FPS.

7) RTX 3060 8 Gb:
Native 1920x1080 - 55-70 FPS.

8) Laptop RTX 3060 ( TDP 95W):
Native 1920x1080 - 30-35 FPS.
DLSS=Quality 1920x1080 - 55-75 FPS.

Можно обратить внимание, что из представленного списка ужасно обстоят дела лишь у мобильной RTX 3060, с довольно недурным отставанием от её стационарного собрата. Хотя и он самую малость не дотягивает до заветной планки "не ниже 60 FPS" в нативном разрешении. Для этого потребуется следующая по ступени карточка RTX 3060 Ti, либо RTX 4060, которая благодаря внутренним улучшениям работает пошустрей. Либо можно обратиться за помощью к DLSS. Из минусов апскейлера: и старые игры и эта игра рассчитаны на полное отсутствие сглаживания, такой опции в играх попросту нет. DLSS же, в свою очередь, сильно сглаживает картинку. Но решили добавить в целях знакомства, посмотреть, как оно будет работать и будет ли работать вообще. Работает и недурно бустит количество кадров, но штука на любителя или в случае плохого фреймрейта.

Но то моя, кхе-кхе, "статистика", а если взглянуть на статистику Стим по видеокартам у игроков?

1050 Ti всё ещё достойна!
1050 Ti всё ещё достойна!

А она показывает, что довольно недурное количество игроков обладает современными народными ХХ60, их Ti-версиями, XX70 и даже свежая 5070 уже успела наесть себе процент. И всё это тоже добавляет немного смысла прикручивать все эти фичи, если они выглядят уместно и не мешают комфортно играть.

Мысли по итогу.

Что я понял для себя по итогам работы над данным проектом, так это то, что понемногу можно внедрять эти фичи в свои игры, время вполне себе пришло. Не такое уж оно страшное и прожорливое, вполне можно добиться комфортных 60 и более кадров. И нет, никакая вундервафля за $1000 не нужна, можно и чего побюджетней взять. Хотя, безусловно, зависит и от каждой конкретной игры. Мы можем себе позволить, поскольку изначально имеем дело с простенькой низкополигональной графикой, лоурез текстурами, закрытыми пространствами, возможностью запечь освещение, карту отсечений и т.д.

Что останется "проблемой" с трассировкой лучей, так это её не особо значительный вклад в картинку при внушительном снижении FPS. Эти фичи зачастую нужно разглядывать, увы. А не так, что галочку поставил и прям буквально другая игра. Хотя мне, например, очень нравится, как ведёт себя стекло с трассировкой. Очень прикольно видеть отражения на поверхности стёкол. Картинка становится более объёмной, да и само это стекло как-то лучше ощущается, что ли. Ну и зеркала, да. Например, если делать игру с обязательной трассировкой лучей и завязанную на всяких загадках и фокусах с зеркалами, то в таком случае трассировка будет более обоснованной для игрока. Если их будет много и постоянно нужно с ними взаимодействовать. Такие вот мыслишки, в общем.

Ну и да, в самом конце делюсь ссылкой на саму игру, которой посвящен весь пост. Добавьте в вишлист, если понравилось, вызвало интерес или просто ради поддержать наши скромные потуги:

Спасибо за внимание. Всем добра и света в наше неспокойное время!

14
1
12 комментариев