Что такое отсроченный рендеринг?

Я слышал об отложенном рендеринге и о том, как его использование может позволить «много» огней в сцене без огромного успеха, но что это такое и (с высокого уровня), как это реализовано?

52 голоса | спросил Tetrad 14 J000000Wednesday10 2010, 23:38:55

3 ответа


55

Определяющей характеристикой отсроченного рендеринга является то, что он существенно меняет сложность рендеринга сцены от O (геометрия * огней) до O (геометрия + подсветка).

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

(*: Стоит отметить, что разработчики чаще предпочитают хранить глубину и использовать это для восстановления позиции, поскольку доступность глубины полезна для многих других эффектов. )

После создания G-буфера можно вычислить полностью освещенный результат для любого пикселя на экране, решая BRDF ровно один раз на пиксель на свет. Другими словами, если у вас есть 20 ячеек, на которые воздействуют 20 огней, традиционное («вперед») рендеринг потребует повторного рендеринга каждой сетки несколько раз, чтобы накапливать результат каждого воздействия на него. В худшем случае, это будет один призыв на призы за сетку за свет, или на 400 общих призывов к призыву! Для каждого из этих вызовов вызова вы избыточно ретранслируете вершины сетки. Также есть хороший шанс, что вы будете затенять пиксели, на которые на самом деле не влияет свет, или они не будут видны в конечном результате (потому что они будут закрыты другой геометрией сцены). Каждый из этих результатов приводит к растрате ресурсов графического процессора.

Сравнение с отложенным рендерингом: вам нужно только один раз отобразить ячейки, чтобы заполнить G-буфер. После этого для каждого света вы оказываете ограниченную форму, представляющую экстенты влияния света. Для точечного света это может быть небольшая сфера или для направленного света, это будет полноэкранный квад, поскольку затронута вся сцена.

Затем, когда вы выполняете шейдер пикселя /фрагмента для ограничивающего тома этого света, вы читаете атрибуты геометрии из соответствующей позиции в текстурах G-буфера и используете эти значения для определения результата освещения. Только пиксели сцены, которые видны в конечном результате, затенены, и они затенены ровно один раз за свет. Это потенциально огромная экономия.

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

ответил Neverender 15 J000000Thursday10 2010, 00:24:09
8

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

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

Существует много вариантов, включая, например, визуализацию информации о свете.

См. дополнительную информацию: http://en.wikipedia.org/wiki/Deferred_shading http://delicious.com/aancsiid/deferred-shading

ответил Vincent Scheib 14 J000000Wednesday10 2010, 23:59:19
-3

Отложенный рендеринг обрабатывает, где геометрия перед тем, как сделать второй проход, чтобы затенять все. Это полезно, потому что он меняет облегаемость на O (пиксельные источники света), что позволяет использовать сложные сцены с небольшим ударом по производительности.

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

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

ответил hellol11 21 Jam1000000amSat, 21 Jan 2017 03:24:21 +030017 2017, 03:24:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132