基于物理的渲染:环境光在BRDF中的作用

时间:2017-03-03 19:00:34

标签: opengl glsl rendering pbr

我试图弄清楚我的BRDF方法是否正确。

// Calculate sun BRDF color
vec3 sunBrdf = brdf(tsLightSourceDir, tsEyeDir,
                    tsNormal, vtsTangent, vtsBinormal,
                    albedo.rgb,
                    NdotL, NdotV,
                    tRoughness, tMetallic, specular);

// brdf multiplied by incoming sun radiance -> color
vec3 irradiance = sunAmbientRadiance + sunDiffuseRadiance * NdotL;
vec3 brdfColor  = sunBrdf * irradiance;

// Add base ambient color
vec3 ambientColor = albedo.rgb * sunAmbientRadiance;
resultColor = ambientColor;

resultColor += brdfColor;

// Interpolate by shadow
resultColor = mix(ambientColor,
                  resultColor,
                  shadowAmount);

我的问题:我添加环境光2倍。计算环境颜色时为1倍,将其加入到进入BRDF的光量中为1倍。

我无法弄清楚这是否正确,因为我认为BRDF需要环境光,因为它是到达地面的照明的一部分。但另一方面,它已经通过将其与反照率颜色相乘并作为基色添加来计算...

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

正确的公式是这样的(在我看来):

vec3 irradiance = sunDiffuseRadiance * NdotL;