Отложенное освещение и затенение

Буфер диффузного цвета
Z буфер
Буфер нормалей
Финальное изображение (для рисования теней, показанных на данном изображении необходимо использовать технологии по типу теневой карты вместе с отложенным освещением).[1]

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

Главным отличием отложенного освещения и затенения от стандартных методов освещения является то, что эти методы немедленно записывают результат работы шейдера во кадровый буфер цвета. Реализации в современных аппаратных средствах по обработке графики имеют тенденцию использовать множественные цели рендеринга (англ. multiple render targets — MRT) для избежания избыточных трансформаций вершин. Обычно, как только построены все необходимые буферы, они затем считываются (обычно как вводная текстура) из шейдерного алгоритма (например, уравнение освещения) и объединяются для создания результата. В этом случае вычислительная сложность и полоса пропускания памяти, необходимые для рендеринга сцены, уменьшаются до видимых частей, таким образом уменьшая сложность освещаемой сцены.

Преимущества и недостатки

Первичным преимуществом отложенного рендеринга является совместимость с «грубым» и «ранним» тестированием Z-буфера, другие преимущества ещё не исследованы в должной степени. Эти преимущества могут включать более простое управление сложными ресурсами освещения, лёгкость управления другими сложными шейдерными ресурсами и упрощение программного конвейера визуализации.

Одним из ключевых недостатков техники отложенного рендеринга является неспособность обработать прозрачность в пределах алгоритма, хотя эта проблема является общей и для Z-буферизации; выходом из этой проблемы является задерживание и сортировка рендеринга прозрачных частей сцены[2]. Другое решение — использование вычислительных шейдеров Direct3D 11/OpenGL 4.3 для реализации алгоритма независимой от порядка прозрачности (англ. order independent transparency).

Другим довольно важным недостатком отложенного рендеринга является несовместимость со сглаживанием. Так как стадия освещения отделена от стадии геометрии, то аппаратное сглаживание не приводит к правильным результатам. Хотя первый проход, используемый при рендеринге базовых свойств (диффузная обработка, карта высот), может использовать сглаживание, к полному освещению сглаживание неприменимо. Одной из типичных методик для преодоления этого ограничения является метод выделения границ (en:edge detection) финального изображения и затем применения размытия к граням (границам)[3]. Однако этот недостаток был актуален для Direct3D 9. В более поздних версиях появилась возможность читать и писать отдельные семплы (англ. samples) MSAA-текстур (render target — в Direct3D 10, буферы глубины — в Direct3D 10.1). Это позволило разработчикам реализовывать свои алгоритмы MSAA для отложенного освещения.

Распространённость

Примерами игр с отложенным освещением и поддержкой MSAA являются Battlefield 3, Crysis 3, Grand Theft Auto V.

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

В частности, «Advanced Technology Group», команда специалистов компании Sony Computer Entertainment, исследовала эту область и помогает разработчикам встраивать эту технологию в графические движки. PhyreEngine, бесплатный графический движок разработки Sony Computer Entertainment, имеет поддержку отложенного освещения и затенения. Примерами игр, использующих отложенный рендеринг и разработку которых поддержала Sony Computer Entertainment, являются:

К играм, использующим отложенный рендеринг, но в разработке которых Sony не принимала участие, являются:

Технология отложенного освещения и затенения используется в игровом движке CryEngine 3 разработки Crytek.

История

Идея отложенного освещения и затенения изначально была представлена Майклом Дирингом и его коллегами[6] в работе под названием «The triangle processor and normal vector shader: a VLSI system for high performance graphics», опубликованной в 1988 году[7]. Хотя в работе нигде не используется слово «отложенный», концепция, представленная там, только недавно нашла практическое применение в таких приложениях, как компьютерные игры[8].

Примечания

  1. Hargreaves, Shawn; Harris, Mark 6800 Leagues Under the Sea: Deferred Shading. Nvidia (2004). Дата обращения: 6 января 2021. Архивировано 22 ноября 2009 года.
  2. NVIDIA SDK 9.51 - Featured Code Samples. NVIDIA (17 января 2007). Дата обращения: 28 марта 2007. Архивировано 29 марта 2012 года.
  3. Deferred shading tutorial. Pontifical Catholic University of Rio de Janeiro. Дата обращения: 14 февраля 2008. Архивировано из оригинала 29 марта 2012 года.
  4. Dead Space by Electronic Arts. NVIDIA. Дата обращения: 14 февраля 2008. Архивировано 29 марта 2012 года.
  5. Deferred shading in Tabula Rasa. NVIDIA. Дата обращения: 14 февраля 2008. Архивировано из оригинала 29 марта 2012 года.
  6. Deering, Michael; Stephanie Winner, Bic Schediwy, Chris Duffy, Neil Hunt. The triangle processor and normal vector shader: a VLSI system for high performance graphics (англ.) // ACM SIGGRAPH Computer Graphics : journal. — ACM Press. — Vol. 22, no. 4. — P. 21—30.
  7. Deferred Shading (PDF). NVIDIA. Дата обращения: 28 марта 2007. Архивировано 29 марта 2012 года.
  8. Klint, Josh. Deferred Rendering in Leadwerks Engine. — Leadwerks. Архивировано 9 декабря 2008 года.

Ссылки