为什么空场景没有任何光照,Unlit无光照材质还是会受影响,而在Unity里是不会的

Hi,

你的理解可能有些问题,无光照材质并不会受到光照影响。你搞错的原因是你这里看到的区别是由于debug的viewmode造成的。在lighting阶段后,所有的着色计算两者都是完全相同的,只是在pp的tonemapping阶段有了变化。而发生变化的关键是Exposure的值。在Unlit的viewmode下,引擎的debug标记会标记成全场景都不没有lighting,也就是整个渲染的EngineShowFlag.Lighting是0,也就无从进行EyeAdaption。否则即使你什么灯光都不放,引擎也并不知道你的自发光材质本身会不会对当前亮度产生影响,所以走的代码路径是不同的(注意这里的Unlit viewmode是个debug mode,在真实情况下是不可能存在并走到的)。

具体代码可以看ComputeEyeAdaptationValues方法,区别在于Unlit的的分支什么都没有计算,但是Lit的分支,默认会使用引擎默认设置的Settings.AutoExposureMinBrightness/Settings.AutoExposureMaxBrightness,从而影响了Out[0]的Z和W值,进而影响了FixedExposure值,会在tonemapping的时候造成影响。

非常感谢大神提供的帮助

278806-u24343513052788819326fm26gp0.png