Raytracing что это unreal
Видеокарты RTX больше не нужны? Lumen GI в Unreal Engine 5 использует программную трассировку лучей
С появлением видеокарт Nvidia RTX пользователи смогли испытать всю мощь технологии трассировки лучей и все вытекающие оттуда особенности, вроде работы с тенями, освещением и отражением. Однако трассировка лучей основана на законах математики и трудах геймдизайнеров и не имеет ничего общего с физическими законами света реальной жизни. Соответственно, должен быть способ динамической работы с освещением и без аппаратного ускорения трассировки лучей. EGS нашли его и реализовали в Unreal Engine 5 таким инструментом, как Lumen.
В представленной демо-версии игры на Unreal Engine 5 Epic Games показали Lumen и другой инструмент для воссоздания реалистичной поверхности под названием Nanite. В Lumen реализовано программное ускорение трассировки лучей для работы с глобальным освещением в реальном времени, следовательно, нет необходимости в дополнительном аппаратном обеспечении. Показанная игра была запущена на PS5 с отключенными блоками RTX. Из этого следует вывод, что для игр на Unreal Engine 5 не потребуется видеокарта RTX, чтобы лицезреть большинство преимуществ трассировки лучей.
Другим новшеством Unreal Engine 5 является инструмент Nanite. Эта технология использует огромное количество полигонов, которые масштабируются и изменяются в режиме реального времени. Помимо этого Nanite использует множество библиотек, включающих в себя модели грунта, флоры, камней, пород и тому подобных декоров локаций. Это значит, что разработчики игр на Unreal Engine 5 смогут быстрее проектировать красивые локации без необходимости создания уровней детализации тех или иных объектов. А для поклонников игровой индустрии это означает, что все объекты локации будут прорисованы сразу, без подгрузок по мере приближения к ним. Другой вопрос, каких мощностей от видеокарты потребует эта технология.
Как бы то ни было, Unreal Engine 5 появится в руках разработчиков, преимущественно, к 2021 году. Следовательно, игр, построенных на этом движке, стоит ожидать не раньше конца 2021 или начала 2022 года. Тогда и будет возможность по достоинству оценить все преимущества Unreal Engine 5.
Впервые объявленная на GDC в марте 2018 года трассировка лучей в реальном времени (real-time ray tracing) в Unreal Engine прошла долгий и тернистый путь в 18 месяцев и продолжает изменяться. В этом обзоре мы постараемся посмотреть на путешествие от прототипа до доступной к использованию, проверенной в боях фичи, на ее эволюцию, и на то, с чем еще предстоит столкнуться при использовании данной технологии.
Для начала, что такое трассировка лучей?
Давайте быстро разберемся в определении понятия трассировки лучей. В общих чертах опишем, чем она отличается от растеризации (rasterization) — методе рендеринга, который традиционно применялся в игровых движках до появления метода трассировки.
Трассировка лучей (Ray tracing) — это метод определения цвета каждого пикселя изображения в финальном рендере за счет отслеживания всех отскоков лучей света в сцене с собиранием цветов объектов, от которых отражаются лучи, относительно камеры. Ввиду того, что подобный метод симулирует поведение физического света (фотонов), в итоговом результате будет гораздо более фотореалистичная картинка (с учетом отражений объектов за границами экрана и мягких детализированных теней) в отличие от метода растеризации.
Растеризация (Rasterization) — устоявшийся метод, при котором отрисовываются объекты в сцене от дальнего плана к переднему, отображая 3D объекты в 2D плоскости за счет трансформации матриц. Это определяет цвет каждого пикселя, основываясь на информации (цвет, текстура, нормаль), хранящийся в меш-объектах и комбинируется с освещением в сцене. Данный метод гораздо производительнее и быстрее, чем трассировка лучей, но он не может воспроизвести эффекты, основанные на отраженном свете, такие как реальное отражение, прозрачность и окклюзия окружающей среды (ambient occlusion).
Катализатор технологии
Трассировка лучей использовалась в индустрии кинопроизводства десятилетиями для достижения максимально реалистичного изображения. Но до последнего времени просчет трассировки лучей для одного кадра с пригодным для кинотеатров разрешением мог занимать несколько часов. Было сложно представить, что можно рендерить трассировку лучей 24 кадра в секунду (24 fps) и выше.
Затем появились две конкурирующие, изменившие наше представления о игровой графике технологии: DXR (DirectX Raytracing) фрэймворк от Microsoft и RTX платформа от NVIDIA. Сотрудничая с NVIDIA и ILMxLAB, Epic Games смогла представить общественности трассировку лучей в реальном времени впервые на GDC 2018 с невероятным техно-демо «Reflections» («Отражения»), в котором использовались персонажи из Star Wars: The Last Jedi.
Были продемонстрированы текстурированные источники освещения типа Area lights (источник света данного типа светит во всех направлениях на одной стороне прямоугольной области плоскости), мягкие тени от них, честные отражения, окклюзия окружающей среды, кинематографичная глубина резкости (depth of field) и NVIDIA GameWorks ray tracing denoising (шумоподавление), и всё это — в реальном времени и за счет просчета трассировки лучей.
А из-за гибридного подхода к рендеру в Unreal Engine проходы просчетов кадра, которые не нуждаются в трассировке лучей, по-прежнему растеризуются, что повышает общую производительность.
Это было начало. Прототип кода Unreal Engine ещё не был доступен для пользователей; для запуска демонстрации в реальном времени требовался NVIDIA DGX с четырьмя графическими процессорами Tesla V100 ценой в районе 100 000 долларов. Поэтому ни программное обеспечение, ни оборудование нельзя было назвать доступным для среднестатистического пользователя.
Демократизация трассировки лучей в реальном времени
Спустя всего 5 месяцев, на SIGGRAPH 2018, снова с NVIDIA, но на сей раз с присоединившимися Porsche, Epic Games показала реал-тайм кинематографический трейлер «The Speed of Light» Porsche 911 Speedster Concept.
И по всем правилам закона Мура на это демо потребовалось две видео-карты NVIDIA Quadro RTX — все еще требующие крупных вложений, по 6 000 долларов каждая, но это все же значительно дешевле предыдущей конфигурации.
В «The Speed of Light» были показаны полупрозрачные и прозрачные шейдеры (translucent and clear coat shading models) и глобальное освещение (global illumination), основывающиеся на трассировке лучей. При этом при производстве синематика команда создала интерактивное демо, чтобы проиллюстрировать, что это реал-тайм сцена.
И вот уже в марте этого года, на GDC 2019, Epic Games была готова сделать функциональность трассировки лучей доступной в качестве бета-фичи в Unreal Engine версии 4.22. И чтобы показать, насколько технология продвинулась вперед за 12 месяцев, наши партнеры Goodbye Kansas и Deep Forest Films создали «Тролль» — реал-тайм кинематографический фильм с оцифрованным человеком.
«Тролль» на порядок сложнее «Отражений». При 24 fps в синематике «Тролль» — 62 миллиона треугольников, в «Reflections» — пять, 16 источников света против четырех в «Reflections», и полноценное разрешение FullHD 1080p против половинного с масштабированием. «Тролль» также использовал трассировку лучей для частиц и взаимодействия с другими компонентами кинематографического пайплайна Unreal Engine, такими как с кэшем геометрии Alembic, технологиями волос и шейдеров кожи. Несмотря на все это, «Тролль» был представлен на одном NVIDIA RTX 2080 Ti с текущей ценой 1 199 долларов.
На сегодняшний день бесплатная модель распространения Unreal Engine в купе с тем, что для покупки видеокарты не нужно грабить банк, делают технологию трассировки лучей в реальном времени доступной для всех.
Трассировка лучей в Unreal Engine 4.23
Epic Games работала над первоначальной реализацией трассировки лучей в то же самое время, когда Microsoft доделывала DXR framework, а NVIDIA работала над новым железом и драйверами. Более того, для поддержки трассировки пришлось произвести серьезный рефакторинг конвейера рендеринга (rendering pipeline). Оба этих фактора существенно влияли на нестабильность кода. Но уже в Unreal Engine 4.23, анонсированном на SIGGRAPH 2019, была проведена огромная работа над исправлениями ошибок.
Оптимизация и производительность также были сильно улучшены во многих элементах, таких как просчет неба (sky pass), глобальное освещение и шумоподавление (denoising). Оно, шумоподавление, в свою очередь, является критичной для трассировки в режиме реального времени из-за крайне малого количества самих лучей (чем больше лучей, тем ниже скорость рендеринга из-за увеличения количества просчетов отскоков).
Также были реализованы шейдеры пересечений (intersection shaders), позволяющие вам использовать собственные типы примитивов и отображать сложные геометрические объекты, такие как волосы или фракталы. Была начата работа по поддержке множественных GPU; низкоуровневый доступ, добавленный в 4.23, теперь позволяет контролировать, какой GPU будет выполнять каждый конкретный проход. И Epic Games продолжает поддерживать дополнительные шейдеры и типы геометрии, включая геометрию ландшафтов, инстанцирование мешей (instanced static meshes), процедурные меши (procedural meshes) и спрайтовую систему частиц Niagara.
Что ждет трассировку лучей в UE4 в будущем
И это, конечно, только начало. Epic Games неустанно работает над улучшением имплементации технологии в движок. И хоть в 4.23 команда добилась больших успехов в производительности и стабильности системы, еще предстоит проделать огромную работу, прежде чем фича будет «официально готова». С другой стороны, многие пользователи движка уже с радостью пользуются бета-функциональностью фичи и «Эпиков» это только радует, ведь они проводят стресс-тестирование кода (как и внутренняя команда кинематографистов Fortnite, которая сейчас активно имплементирует технологию трассировки лучей).
Выше в тексте упоминалось, что была добавлена возможность низкоуровневого доступа к GPU и мультипроцессорность в 4.23, на данный момент Epic Games стремится сделать эту функциональность отполированной и «под ключ». Также будет добавляться поддержка различных типов геометрии; одним из наиболее сложных, в качестве примера, можно назвать фолиаж со смещением по мировым координатам (foliage with world position offset) — для игрока это будет выглядеть, как красивые анимированные листья деревьев, колышущиеся на ветру.
Если вам интересно глубже погрузится в результаты работы, заглядывайте в Tech Talk с конференции SIGGRAPH 2019.
Epic Games выражает искреннюю благодарность всем, кто уже опробовал трассировку лучей в реальном времени в Unreal Engine и активно присылает свои ценные отзывы. Если вы еще не взяли его на тест-драйв, почему бы не загрузить последнюю версию Unreal Engine сегодня? Мы с нетерпением ждем ваших отзывов в комментариях.
Real-Time Ray Tracing
An overview of Ray Tracing in Unreal Engine 4.
Ray tracing techniques have long been used in film, television, and visualization for rendering photo-realistic images for a long time but required powerful computers and time to render each image or frame. For film and television, it can take many hours or even days to render out high-quality image sequences, but the final result can create real-life 3D content that can blend seamlessly with real-life ones. For architectural visualization companies, ray tracing has meant creating beautiful renders for the automotive industry or showing what a densely-filled house or office complex could look like when complete all while achieving realistic-looking results. В
The power of Unreal Engine 4 (UE4) combined with Real-Time Ray Tracing (RTRT) makes it possible to create interactive experiences with subtle lighting effects comparable with many offline renderers in real time. Ray tracing effects look more natural, producing soft shadowing for lights, accurate ambient occlusion (AO), interactive global illumination, reflections and more.
Real-time rendering of Ray Tracing features in the Archviz Interior sample project available on the Epic Games Launcher.
Ray Tracing in Unreal Engine
Ray tracing in UE4 is composed of two techniques:
A hybrid Ray Tracer that couples ray tracing capabilities with our existing raster effects.
A Path Tracer for generating reference renders.
Ray Tracer
The Ray Tracer enables ray traced results for shadows, AO, reflections, translucency and global illumination all happening in real-time within your project. It uses a low number of samples coupled with a denoising algorithm that is perceptually close to the ground truth results of the Path Tracer.
Path Tracer
The Path TracerВ is an unbiased, physically based path tracer that is good for rendering reference images of your scene. It works similarly to offline renderers by gathering samples over time and, in its current state, is useful for generating ground truth renders of your scene rather than final pixels.
Enabling Ray Tracing in your Project
Follow these steps to enable ray tracing support in your project.В
Operating System
Verify your Windows build by typing winver in the Windows search bar.
Unreal Engine Version
Unreal Engine Rendering Path
Deferred path (See Supported Features below)
Enabling DX12 and Ray Tracing
Go to the main menu and use the Edit menu to open the Project Settings.
Under Platforms > Windows, use the Default RHI dropdown to select DX12.
Under Engine > Rendering, enable Ray Tracing.
To enable Ray Tracing, Support Compute Skincache must be enabled for the project. If it is not already enabled, you’ll receive a message dialogue asking if you would like to enable it now. If so, click Yes.
Restart the engine to launch the Editor with DX12 and to enable Ray Tracing for your project.
Real-Time Ray Tracing Features
Ray Traced Shadows
Ray Traced Shadows simulate soft area lighting effects for objects in the environment. This means that based on the light’s source size or source angle, an object’s shadow will have sharper shadows near the contact surface than farther away where it softens and widens.
Ray Traced Reflections
Ray Traced Reflections (RTR) simulates accurate environment representation supporting multiple reflection bounces.
This example shows a single bounce of ray traced reflections compared to multiple bounces of ray traced reflection. Using multiple bounces creates real-time inter-reflection between reflective surfaces in the scene.
In this comparison, SSR is only capable of a single reflection bounce and is limited to what is visible on the screen for representation. On the other hand, RTR is capable of multiple bounces and is not limited to what is visible, meaning that we can visibly see the sides of the book, reflected floor behind the camera, and additional lightings being reflected on surfaces coming through the window.
Ray Traced Translucency
Ray Traced Translucency (RTT) accurately represents glass and liquid materials with physically correct reflections, absorption, and refraction on transparent surfaces.
Ray Traced Ambient Occlusion
Ray Traced Ambient Occlusion (RTAO) accurately shadows areas blocking ambient lighting better grounding objects in the environment, such as shadowing the corners and edges where walls meet or adding depth to the crevices and wrinkles in skin.
When compared with Screen Space Ambient Occlusion (SSAO), RTAO grounds objects and adds depth to the scene to produce natural looking shadowing in indirectly lit areas.
By varying the Intensity and Radius properties of the Ambient Occlusion effect, you can control its size and strength.
Ray Traced Global Illumination
Ray Traced Global Illumination (RTGI) adds real-time interactive bounce lighting to areas of your scene not directly lit by a given light source.
Final Gather Method
This is currently an experimental RTGI method.
An alternative ray tracing based global illumination global illumination method using a final gather-based technique has been developed that seeks to give back some runtime performance. This technique is a two-pass algorithm. The first phase distributes shading points—similarly to the original RTGI method—but at a fixed rate of one sample per-pixel. A history of up to 16 shading point samples are stored in screen space during this phase. During the second phase, the algorithm attempts to reconnect to the shading point history, amortizing the cost of the method.
The original RTGI algorithm intends to emulate the Path Tracer’s ground truth reference and is similar in execution of the path tracing result. The new method trades that emulation for performance, which introduces some limitations; it’s currently limited to a single bounce of indirect diffuse GI, and reprojection of the previous frame GI sample data is susceptible to ghosting.
Enable the Final Gather method from the Ray Tracing Global Illumination section of a Post Process Volume using the Types dropdown selection.
To aid in suppressing temporal ghosting artifacts, you can use the following command to modify the world space rejection criteria.
It is currently based on a world distance measured from the original shading point. This rejection crieteria defaults to 10 units.
The Final Gather method also requires the following settings to be used in the Post Process Volume for it to work effectively:
Max Bounces: 1
Samples Per Pixel: 16
Any additional Max Bounces beyond 1 are silently discarded and when adjusting the Samples Per Pixel, it’s best to increase it by powers of two (for example, 8, 16, 32, 64).
Using Ray Tracing Features
Post Process Volume
Use Post Process Volumes in your scene to control Ray Tracing and Path Tracing features and properties. Volumes can be added to different areas for interiors and exteriors to apply the features and settings you want.
The following Ray Tracing features are controlled using Post Process Volumes:
Real-Time Ray Tracing
An overview of Ray Tracing features in Unreal Engine.
Ray tracing techniques have long been used in film, television, and visualization for rendering photo-realistic images for a long time but required powerful computers and time to render each image or frame. For film and television, it can take many hours or even days to render out high-quality image sequences, but the final result can create real-life 3D content that can blend seamlessly with real-life ones. For architectural visualization companies, ray tracing has meant creating beautiful renders for the automotive industry or showing what a densely-filled house or office complex could look like when complete all while achieving realistic-looking results. В
The power of Unreal Engine 4 (UE4) combined with Real-Time Ray Tracing (RTRT) makes it possible to create interactive experiences with subtle lighting effects comparable with many offline renderers in real time. Ray tracing effects look more natural, producing soft shadowing for lights, accurate ambient occlusion (AO), interactive global illumination, reflections and more.
Real-time rendering of Ray Tracing features in the Archviz Interior sample project available on the Epic Games Launcher.
Ray Tracing in Unreal Engine
Ray tracing in UE4 is composed of two techniques:
A hybrid Ray Tracer that couples ray tracing capabilities with our existing raster effects.
A Path Tracer for generating reference renders.
Ray Tracer
The Ray Tracer enables ray traced results for shadows, AO, reflections, translucency and global illumination all happening in real-time within your project. It uses a low number of samples coupled with a denoising algorithm that is perceptually close to the ground truth results of the Path Tracer.
Path Tracer
Enabling Ray Tracing in your Project
Follow these steps to enable ray tracing support in your project.В
Operating System
Verify your Windows build by typing winver in the Windows search bar.
NVIDIA RTX and some GTX series cards with DXR support using the latest device drivers.
Unreal Engine Version
Unreal Engine Rendering Path
Deferred path (See Supported Features below)
Enabling DX12 and Ray Tracing
Go to the main menu and use the Edit menu to open the Project Settings.
Under Platforms > Windows, use the Default RHI dropdown to select DX12.
Under Engine > Rendering, enable Ray Tracing.
To enable Ray Tracing, Support Compute Skincache must be enabled for the project. If it is not already enabled, you’ll receive a message dialogue asking if you would like to enable it now. If so, click Yes.
Restart the engine to launch the Editor with DX12 and to enable Ray Tracing for your project.
Real-Time Ray Tracing Features
Ray Traced Shadows
Ray Traced Shadows simulate soft area lighting effects for objects in the environment. This means that based on the light’s source size or source angle, an object’s shadow will have sharper shadows near the contact surface than farther away where it softens and widens.
Ray Traced Reflections
Ray Traced Reflections (RTR) simulates accurate environment representation supporting multiple reflection bounces.
This example shows a single bounce of ray traced reflections compared to multiple bounces of ray traced reflection. Using multiple bounces creates real-time inter-reflection between reflective surfaces in the scene.
In this comparison, SSR is only capable of a single reflection bounce and is limited to what is visible on the screen for representation. On the other hand, RTR is capable of multiple bounces and is not limited to what is visible, meaning that we can visibly see the sides of the book, reflected floor behind the camera, and additional lightings being reflected on surfaces coming through the window.
Ray Traced Translucency
Ray Traced Translucency (RTT) accurately represents glass and liquid materials with physically correct reflections, absorption, and refraction on transparent surfaces.
Ray Traced Ambient Occlusion
Ray Traced Ambient Occlusion (RTAO) accurately shadows areas blocking ambient lighting better grounding objects in the environment, such as shadowing the corners and edges where walls meet or adding depth to the crevices and wrinkles in skin.
When compared with Screen Space Ambient Occlusion (SSAO), RTAO grounds objects and adds depth to the scene to produce natural looking shadowing in indirectly lit areas.
By varying the Intensity and Radius properties of the Ambient Occlusion effect, you can control its size and strength.
Ray Traced Global Illumination
Ray Traced Global Illumination (RTGI) adds real-time interactive bounce lighting to areas of your scene not directly lit by a given light source.
Final Gather Method
This is currently an experimental RTGI method.
An alternative ray tracing based global illumination global illumination method using a final gather-based technique has been developed that seeks to give back some runtime performance. This technique is a two-pass algorithm. The first phase distributes shading points—similarly to the original RTGI method—but at a fixed rate of one sample per-pixel. A history of up to 16 shading point samples are stored in screen space during this phase. During the second phase, the algorithm attempts to reconnect to the shading point history, amortizing the cost of the method.
The original RTGI algorithm intends to emulate the Path Tracer’s ground truth reference and is similar in execution of the path tracing result. The new method trades that emulation for performance, which introduces some limitations; it’s currently limited to a single bounce of indirect diffuse GI, and reprojection of the previous frame GI sample data is susceptible to ghosting.
Enable the Final Gather method from the Ray Tracing Global Illumination section of a Post Process Volume using the Types dropdown selection.
To aid in suppressing temporal ghosting artifacts, you can use the following command to modify the world space rejection criteria.
It is currently based on a world distance measured from the original shading point. This rejection crieteria defaults to 10 units.
The Final Gather method also requires the following settings to be used in the Post Process Volume for it to work effectively:
Max Bounces: 1
Samples Per Pixel: 16
Any additional Max Bounces beyond 1 are silently discarded and when adjusting the Samples Per Pixel, it’s best to increase it by powers of two (for example, 8, 16, 32, 64).
Using Ray Tracing Features
Post Process Volume
Use Post Process Volumes in your scene to control Ray Tracing and Path Tracing features and properties. Volumes can be added to different areas for interiors and exteriors to apply the features and settings you want.
The following Ray Tracing features are controlled using Post Process Volumes: