Каков компромисс между быстрым и отложенным рендерингом?

9

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

Отложенный рендеринг часто представляется как оптимизация форвардного рендеринга. Одно из объяснений состоит в том, что освещение довольно дорогое, и если у вас есть перерасход, то вы освещаете пиксели, которые никогда не будут видны на экране, тогда как, если вы сохраняете свойства материала в G-буфере, а затем освещаете, вы освещаете только тот пиксель, который будет на самом деле появляются на экране. Является ли это на самом деле преимуществом отсрочки, учитывая, что вы также можете выполнить предварительный проход глубины, а затем выполнить проход прямого рендеринга с тестом глубины, равным D3D11_COMPARISON_EQUALили GL_EQUALэквивалентным?

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

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

Джон Калсбек
источник

Ответы:

11

Можно избежать перерисовки из непрозрачных объектов даже при прямом рендеринге, выполнив предварительный проход глубины и используя эту информацию для отклонения любого пикселя, который фактически не виден. Однако, в зависимости от стоимости вершины вашей сцены, предварительный проход глубины может добавить неприемлемое снижение производительности. Кроме того, оказание помощи затенения пиксельного конвейера из средств GPU , что вы не платите цену за пикселем, которая визуализируется, вы платите цену за 2х2 пикселей четырехугольника , которая визуализируется. Таким образом, даже предварительный проход глубины по-прежнему приводит к тому, что треугольные ребра теряют рабочие пиксели затенения, которые будут отбрасываться.

Планирование GPU - сложная тема, и компромисс между прямым и отложенным не сводится просто к тому, что «работает быстрее, но использует больше пропускной способности». Если у вас есть две одинаково дешевые операции, которые выполняются последовательно и каждая использует одинаковое количество ресурсов, нет смысла разделять их на отдельные шейдеры: два небольших волновых фронта, каждый из которых использует X-ресурсы, принципиально не работают лучше, чем один более длинный волновой фронт, который также использует X ресурсы. Однако если у вас есть дешевая операция и дорогая операция, выполняемая последовательно, может быть полезно разделить ее на отдельные шейдеры: шейдер в целом зарезервирует максимальное количество ресурсов, которое он может использовать в любой момент. Это' Можно предположить, что прямой рендеринг не сможет использовать всю полосу пропускания вашего графического процессора, потому что в полете так мало волновых фронтов, что он не может выполнить достаточно операций для насыщения полосы пропускания. Но если тыявляются пропускная способность ограничена, не может быть каких - либо преимуществ для отсроченного рендеринга (так как это будет , вероятно , использовать больше пропускной способности).

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

Джон Калсбек
источник