2017-03-03 26 views
3

我試圖弄清楚我的BRDF方法是否正確。物理基礎渲染:環境光在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); 

我的問題:我添加環境光2x。計算環境顏色時爲1x,將其添加到進入BRDF的光量時爲1x。

我不明白這是否正確,因爲BRDF在我看來需要環境光線,因爲它是到達表面的照明的一部分。但另一方面,它已經通過將其與反照色相乘並添加爲基色來計算...

任何幫助非常感謝!

回答

0

正確的公式是這樣的(在我看來):

VEC3輻照度= sunDiffuseRadiance * NdotL;