近似间接漫反射
Approximate Indirect Diffuse
我正致力于在我的渲染器中实现间接漫反射,我正在查看第 8.4.1 节 of this paper from Valve。
在我的渲染器中,我有一个 256x256x256 的体素网格,注入了辐射和阴影,我试图 convert/use 论文中的这个片段来计算我的体素的环境光照:
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是什么...
这个变量是什么,它来自哪里?
论文的 8.4.1 部分(您从中复制了代码)对它进行了相当多的解释。 cAmbientCube
是一个包含六个光值的数组,每个主方向一个:负 x、正 x、负 y、正 y、负 z、正 z。虽然典型的环境项被假定为从各个方向照亮的恒定光,但论文中描述的环境立方体技术是对此的概括,它假设每个方向都有不同的光。您发布的代码负责从这个特殊的六面立方体贴图纹理中采样。
我正致力于在我的渲染器中实现间接漫反射,我正在查看第 8.4.1 节 of this paper from Valve。
在我的渲染器中,我有一个 256x256x256 的体素网格,注入了辐射和阴影,我试图 convert/use 论文中的这个片段来计算我的体素的环境光照:
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是什么...
这个变量是什么,它来自哪里?
论文的 8.4.1 部分(您从中复制了代码)对它进行了相当多的解释。 cAmbientCube
是一个包含六个光值的数组,每个主方向一个:负 x、正 x、负 y、正 y、负 z、正 z。虽然典型的环境项被假定为从各个方向照亮的恒定光,但论文中描述的环境立方体技术是对此的概括,它假设每个方向都有不同的光。您发布的代码负责从这个特殊的六面立方体贴图纹理中采样。