AstroNaughty Games показывает, как реализована трассировка лучей в космической игре Grimmstar

Космос огромный. Реально огромнный. Когда мы намеревались создать Grimmstar , мы должны были убедиться, что масштаб космоса был хорошо представлен. Это поставило проблему на передний план нашего развития: освещение. Благодаря использованию NVIDIA и Unreal Engine 4 трассировки лучей в реальном времени наши проблемы были решены, и результат даже лучше, чем мы ожидали.

Проблемы с освещением помещения

Grimmstar имеет целые солнечные системы, через которые игрок может свободно перемещаться. Мы должны включить довольно большие уровни, которые имеют огромные планеты, луны, звезды и другие небесные объекты в реалистичной пропорции к размеру корабля игрока. Это представило ряд вопросов.
TechBlog_Grimmstar_01.jpg
Во-первых, создание информации об освещении (даже с Lightmass Importance Volumes) для каждого уровня было слишком напряженным. Один подуровень дал нам 7 ГБ информации карты освещения. Это просто не сработает, поэтому у нас не было другого выбора, кроме как поставить флажок, чтобы не вызывать предварительно вычисленное освещение. Во-вторых, подавляющее большинство объектов находится в космосе, поэтому они динамически движутся. Кольца космической станции, астероиды, корабли, планеты и луны движутся, потому что нет сопротивления. Наконец, очень большие расстояния между объектами и огромные различия в размерах активов внутри уровней привели к некоторым нежелательным результатам при использовании Каскадных карт теней . Они неплохие, но они не совсем того качества, которого мы стремимся достичь.

Как трассировка лучей в реальном времени решает эти проблемы

Поскольку мы не используем какое-либо предварительно вычисленное освещение (без информации о формировании освещения), RTX позволяет нам достигать невероятных результатов в тенях в реальном времени, независимо от того, где находится игрок, независимо от того, установлен ли меш статическим или динамическим. Это добавляет правдоподобности пребывания в космосе.
TechBlog_Grimmstar_02_CSM.jpg
TechBlog_Grimmstar_02_RTX.jpg
Слева: мягкость теней универсальна для каскадных карт теней. Отражения ничего не захватывают;
Справа: тени переходят от резких к мягким, поскольку тени становятся более отдаленными. Окна шахтерского фрегата являются отражающими, а отраженные лучами отражают жизнь металлических поверхностей.

Решив информацию о тенях, мы пошли еще дальше и добавили отраженные лучи отражения. Это вывело определенные активы на совершенно новый уровень верности для нас. Небольшие детали, такие как козырек пилота, отражающий многофункциональные дисплеи внутри кабины корабля, повысили точность и выдали дополнительные кинематографические возможности.
TechBlog_Grimmstar_03.jpg
Некоторые активы, которые раньше были довольно плоскими и не имели глубины от теневой информации, теперь выглядели как блестяще окрашенные металлические конструкции. Точная настройка значений максимальной шероховатости в нашем глобальном объеме пост-обработки для контроля того, отражаются ли RTX-отражения и не рассчитаны ли на отражающей поверхности, позволила нам получить ошеломляющие, но все еще эффективные результаты.
TechBlog_Grimmstar_04_CSM.jpg
TechBlog_Grimmstar_04_RTX.jpg
Слева: использование стандартных моделей освещения с одним из объектов космической станции Grimmstar; Справа: включение теней и отражений RTX выводит станцию ​​на новый уровень жизни.

Улучшения производительности

Трассировка лучей в режиме реального времени является очень дорогостоящим методом освещения. К счастью, Unreal Engine отлично справляется с гибридизацией ряда используемых технологий освещения, так что вы можете смешать технологии RTX с более классическими методами освещения, чтобы получить лучшее из обоих миров. Например, мы используем материальный узел RayTracingQualitySwitch, чтобы отключить любую нормальную информацию от большинства наших отражений с трассировкой лучей. Интенсивное использование нормалей приведет к тому, что информация о освещении будет отражаться во многих различных направлениях, что потребует сбора дополнительной информации для получения правильных результатов. Отключая нормальную информацию с отражением отказов, мы отключаем некоторые из этих дополнительных вычислений. 
Кроме того, мы гарантируем, что некоторые настройки оптимизированы для игрока с самого начала, устанавливая некоторые консольные переменные во время запуска постоянного уровня, который мы используем для нашей текущей демонстрации. Многие из этих переменных можно найти, набрав «r.RayTracing» в консоли Unreal Engine. Вы можете посмотреть на все, что доступно в вашем распоряжении оттуда. Некоторые примеры переменных, которые мы используем, устанавливают r.RayTracing.Reflections.HeightFog в 0 и r.RayTracing.Reflections.ScreenPercentage до 50. Снижая процентное соотношение экрана отражения, мы можем значительно сократить вычисления, необходимые для трассировки лучей. отражения. Результаты все еще очень хороши и едва заметны в большинстве сценариев. Если нам нужны улучшенные отражения, мы всегда можем установить отдельную громкость, чтобы переопределить это.
TechBlog_Grimmstar_05.jpg
Освещение в режиме реального времени с трассировкой лучей является идеальным вариантом для игры масштаба и масштаба Grimmstar . Это не только решило некоторые технические проблемы для нас, но результат лучше, чем классические методы освещения. В то время как технология все еще совершенствуется, мы видим последовательные улучшения производительности и методов, которые позволяют нам предоставлять невероятно реалистичные результаты освещения с большой гибкостью. 

Ссылка на источник: https://www.unrealengine.com/en-US/tech-blog/astronaughty-games-shows-how-to-implement-ray-tracing-with-space-game-grimmstar


Комментарии