Открыть сервис

Отложенный рендеринг

Отложенный рендеринг (англ. deferred rendering, deferred shading) — это метод рендеринга в компьютерной графике, при котором вычисление освещения и затенения выполняется не на этапе отрисовки каждого объекта, а после того, как вся сцена была обработана в геометрическом буфере. В отличие от прямого рендеринга (forward rendering), где каждый объект освещается немедленно, отложенный рендеринг разделяет обработку геометрии и освещения, что позволяет эффективно работать с большим количеством динамических источников света.

История

Метод отложенного рендеринга впервые был описан в 1988 году Майклом Дирингом (Michael Deering) и его коллегами в работе «The Triangle Processor and Normal Vector Shader: A VLSI System for High Performance Graphics». Однако широкое распространение он получил в 2000-х годах с развитием программируемых графических процессоров (GPU) и шейдерных моделей. Первым коммерческим игровым движком, реализовавшим отложенный рендеринг, стал Unreal Engine 3 (2006 год), использованный в таких играх, как «Gears of War» и «Mass Effect». Впоследствии метод стал стандартом для AAA-проектов, включая серии «Battlefield», «Call of Duty» и «The Witcher 3».

Принцип работы

Отложенный рендеринг состоит из двух основных этапов: прохода геометрии (geometry pass) и прохода освещения (lighting pass). В первом проходе сцена рендерится в несколько текстурных буферов (G-буфер), которые хранят для каждого пикселя информацию о нормалях, глубине, цвете (альбедо), материале и других свойствах. Во втором проходе на основе данных из G-буфера вычисляется итоговое освещение для каждого пикселя, без повторной обработки геометрии.

G-буфер

G-буфер (geometry buffer) — это набор текстур, в которых сохраняются промежуточные данные о сцене. Типичный состав G-буфера включает:

  • Цвет (альбедо) — диффузный цвет поверхности без учёта освещения.
  • Нормали — векторы, указывающие направление поверхности.
  • Глубина — расстояние от камеры до точки.
  • Параметры материала — шероховатость, металличность, коэффициент отражения.
  • Позиция — мировые координаты точки (часто восстанавливаются из глубины).

Размер и состав G-буфера зависят от требований к качеству и производительности. В современных реализациях, например в Unreal Engine 5, G-буфер может содержать до 8 текстур с разрешением, соответствующим разрешению экрана.

Проход освещения

На этапе освещения для каждого источника света (точечного, направленного, прожекторного) выполняется отрисовка геометрической фигуры, покрывающей область его влияния (например, сфера для точечного света). Для каждого пикселя внутри этой области извлекаются данные из G-буфера и вычисляется вклад света. Это позволяет обрабатывать сотни источников света без значительного падения производительности, так как расчёты ведутся только для видимых пикселей.

Преимущества

  • Масштабируемость освещения: количество источников света не ограничивается сложностью сцены. В прямом рендеринге каждый дополнительный свет увеличивает количество вызовов отрисовки (draw calls), что критично для производительности. В отложенном рендеринге освещение вычисляется на этапе постобработки, и число источников может достигать нескольких сотен.
  • Эффективность при сложной геометрии: геометрия обрабатывается только один раз, независимо от числа источников. Это особенно полезно для сцен с большим количеством объектов (открытые миры, городские локации).
  • Поддержка сложных эффектов: отложенный рендеринг упрощает реализацию глобального освещения, теней от многих источников, отражений и объёмного тумана.

Недостатки

  • Высокое потребление памяти: G-буфер занимает значительный объём видеопамяти. Для разрешения 1920×1080 с 8 текстурами по 32 бита на пиксель требуется около 60 МБ, а для 4K — более 240 МБ.
  • Ограниченная поддержка прозрачности: отложенный рендеринг плохо работает с прозрачными объектами, так как G-буфер хранит только один слой геометрии. Для прозрачных объектов (стёкла, вода, частицы) обычно используется дополнительный проход прямого рендеринга.
  • Сложность с антиалиасингом: традиционные методы сглаживания (MSAA) несовместимы с отложенным рендерингом, так как G-буфер хранит один цвет на пиксель. Применяются постобработочные методы (FXAA, SMAA, TAA).
  • Проблемы с большими источниками света: направленные и прожекторные источники могут покрывать большие области, что увеличивает затраты на проход освещения.

Разновидности

Отложенный рендеринг с отложенным освещением (Deferred Lighting)

В этой вариации освещение вычисляется не для каждого пикселя, а для каждого фрагмента, что позволяет использовать больше источников света. Однако метод требует большего количества проходов и сложнее в реализации.

Отложенный рендеринг с отложенным затенением (Deferred Shading)

Классическая реализация, описанная выше. Включает вычисление всех эффектов (освещение, тени, отражения) на этапе постобработки.

Гибридный рендеринг

Современные движки, такие как Unreal Engine 5, используют гибридный подход: отложенный рендеринг для непрозрачных объектов и прямой рендеринг для прозрачных, частиц и UI. Это позволяет объединить преимущества обоих методов.

Применение

Отложенный рендеринг используется в:

  • Игровых движках: Unreal Engine (3, 4, 5), Unity (с 2018 года), CryEngine, Frostbite (EA DICE).
  • Симуляторах: авиасимуляторы (Microsoft Flight Simulator), гоночные симуляторы (Assetto Corsa Competizione).
  • Архитектурной визуализации: программы Lumion, Twinmotion.
  • Киноиндустрии: рендеринг в реальном времени для виртуальных съёмок (технология StageCraft от Industrial Light & Magic).

Примеры реализации

В Unreal Engine 4 отложенный рендеринг используется по умолчанию для всех материалов, кроме прозрачных. G-буфер состоит из 5 текстур: альбедо, нормали, глубина, параметры материала (металличность, шероховатость) и окружающее затенение. Освещение вычисляется в отдельном проходе, где для каждого источника света отрисовывается сфера или конус.

В Unity отложенный рендеринг доступен в настройках камеры (Deferred Shading path). Он поддерживает до 256 источников света и требует использования линейного цветового пространства. Для прозрачных объектов автоматически включается прямой рендеринг.

Критика

Основные критические замечания касаются неэффективности при работе с большим количеством мелких источников света (например, в сценах с множеством фонариков) и сложности с реализацией эффектов, зависящих от глубины, таких как глубина резкости (depth of field). Также отмечено, что отложенный рендеринг увеличивает задержку между вводом и выводом (input lag) из-за дополнительных проходов, что критично для соревновательных игр.

Интересные факты

  • В ранних версиях Unreal Engine 3 отложенный рендеринг был реализован с использованием только одного источника света на проход, что приводило к многократному рендерингу сцены.
  • Метод отложенного рендеринга лёг в основу технологии виртуального освещения (Voxel-based Global Illumination) в Unreal Engine 5.
  • В 2010-х годах компания NVIDIA разработала технологию Tile-based Deferred Rendering, которая разбивает экран на тайлы (квадраты) для более эффективного отбора источников света.

Источники

  • Deering, M., et al. «The Triangle Processor and Normal Vector Shader: A VLSI System for High Performance Graphics». ACM SIGGRAPH, 1988.
  • Akenine-Möller, T., Haines, E., Hoffman, N. «Real-Time Rendering», 4th Edition. CRC Press, 2018.
  • Документация Unreal Engine 4: «Deferred Shading».
  • Документация Unity: «Rendering Paths».
  • Pharr, M., Jakob, W., Humphreys, G. «Physically Based Rendering: From Theory to Implementation», 3rd Edition. Morgan Kaufmann, 2016.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →