Перейти к основному содержимому

G-buffer

G-buffer (geometry buffer) - набор render targets (текстуры, в которые можно рисовать) хранящих в себе информацию о текущей сцене. Размеры всех render targets одинаковые и как правило равны размеру окна рендера. G-buffer используется в технике deferred shading. На основании информации в G-buffer можно произвести полноценное освещение с учетом всех материалов. Преимуществом deferred shading является неограниченное количетсво источников света в сцене, так как этапы рендера геометрии и освещения отделены.

G-buffer в SkyXEngine

В SkyXEngine G-buffer введен с версии 0.9.0 и состоит из 4 render targets:

  • color - albedo цвет сцены
  • normals - нормали и слои
  • parameters - параметры освещения
  • depth - линейная глубина
Render targetФорматКомпоненты
colorrgba8rgb - красный/зеленый/синий цвета сцены, a - коэффициент освещенности (1 - полное освещение; 0 - не принимает свет)
normalsrgba8xyz - нормаль, w - коэффициент f0
parametersrgba8r - шероховатость (roughness), g - отражательная способность (f0), b - просвечиваемость (thickness), a - затенение (fake occlusion)
depthr16/r32 (предпочтительно)r - линейная глубина

Color render target

Color render target содержит albedo цвета сцены, а именно всех сущностей обладающих материалами, и коэффициент освещаемости стандартным шейдером освещения.

Normals render target

Нормали хранятся вместе с дополнениями (микрорельеф и прочее).

Упаковка нормалей простая:

vNormal * 0.5 + 0.5

Распаковка тоже простая:

vNormal * 2.0 - 1.0

Код упаковки/распаковки w компоненты находится в shaders/mtrl.h в функциях NormalEncode/NormalDecode.

Хранение глубины

Глубина хранится линейная с инверсией

1 - z / near

Предпочтительно использование R32 глубины для большей точности.