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