我正在尝试弄清楚我的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需要环境光,因为它是到达表面的照明的一部分。但另一方面,它已经通过与反照率颜色相乘并添加为基色来计算。
任何帮助都是非常感谢的!
发布于 2017-03-04 06:51:34
正确的公式是这样的(在我看来):
vec3照度= sunDiffuseRadiance * NdotL;
https://stackoverflow.com/questions/42586533
复制相似问题