Приблизительный косвенный диффузный

Я работаю над реализацией непрямого 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 является обобщением этого, в котором предполагается, что в каждом из этих направлений используется различный свет. Отправленный вами код отвечает за выборку из этой специальной шестисторонней текстуры кубической карты.

Другие вопросы по тегам