先讲结论:
将
vec3 diffuseContrib = diffuse / PI;
改为
#if CORRECT_LIGHTS
vec3 diffuseContrib = diffuse / PI;
else
vec3 diffuseContrib = diffuse
#endif
使用IBL时勾CORRECT_LIGHTS,使用方向光和点光源时再取消勾选CORRECT_LIGHTS。
下面解释原因:
Cocos3D的标准材质用的是PBR,在使用IBL的时候,他计算是正确的,但是使用普通方向光时,他的表现其实是错误的,具体现象是颜色表现上会偏黑。
而这问题的本质是因为使用非精准光源(IBL)时,diffuse需要除以PI,因为光源在计算的时候做了积分需要除以PI来配平保持能量守恒,而使用精准光源(平行光和点光源)时,diffuse是不需要除以PI的,因为不存在积分不需要配平 。
另外我建了一个3D交流群475557897,专门来解决cocos的这些奇葩问题,欢迎志同道合的小伙伴加入


