Приблизительный косвенный диффузный
Я работаю над реализацией непрямого diffuse в моем рендере, и я смотрю на раздел 8.4.1 этого документа от Valve.
В моем рендерере у меня есть сетка вокселов 256x256x256 с добавлением сияния и тени, и я пытаюсь преобразовать / использовать этот фрагмент из бумаги для вычисления внешнего освещения против моих вокселей:
float3 AmbientLight( const float3 worldNormal )
{
float3 nSquared = worldNormal * worldNormal;
int3 isNegative = ( worldNormal < 0.0 );
float3 linearColor;
linearColor = nSquared.x * cAmbientCube[isNegative.x] +
nSquared.y * cAmbientCube[isNegative.y+2] +
nSquared.z * cAmbientCube[isNegative.z+4];
return linearColor;
}
Проблема в том, что не могу понять, что такое cAmbientCube в расчете...
Что это за переменная и откуда она взята?
1 ответ
Раздел 8.4.1 этого документа, откуда вы скопировали код, в значительной степени объясняет это. cAmbientCube
представляет собой массив из шести значений света, по одному для каждого основного направления: отрицательный x, положительный x, отрицательный y, положительный y, отрицательный z, положительный z. В то время как предполагается, что типичным окружающим термином является постоянный свет, который освещает со всех сторон, описанный в статье метод Ambient Cube является обобщением этого, в котором предполагается, что в каждом из этих направлений используется различный свет. Отправленный вами код отвечает за выборку из этой специальной шестисторонней текстуры кубической карты.