部分内容摘抄自:https://www.cnblogs.com/murongxiaopifu/p/8553367.html
直接光和间接光
大家都知道在Unity中,我们可以在场景中布置方向光、点光、聚光等类型的光源。但如果只有这些光,则场景内只会受到直接光的影响,而所谓的直接光简单理解就是从光源发出的直接影响物体的光。如果只考虑直接光的影响,则会缺乏很多光影细节,导致视觉效果很“平”。而间接光则描述了光子在物体表面之间的反弹,能够用来增加细节以及真实感。
例如上图中,位于天花板灯直射光线之外的区域缺乏光照效果。表现为四壁上没有明暗细节,相反此时直接光范围之外都是均匀的黑色,而整个空间同样也显得十分平。
而增加了间接光之后进行渲染,可以看到光被物体表面反弹,彩色光从一个表面转移到另一个表面。表现为红色墙壁和绿色墙壁(在右侧和红墙相对,没在画面内)的颜色反映到了场景中的其他表面上,四壁也不再是均匀的黑色,而有了层次感。
混合光照
使用混合光照和直接使用烘焙的lightmap有什么区别呢?简单来说,选择“混合”烘焙模式,会将标记为静态的GameObject受到的来自混合光源的光照信息保存为Lightmap。 然而,与标记为“烘焙”的灯光不同,混合光源也会为场景中的非静态(动态)GameObject提供实时的直接光照。
Unity HDRP中的测试
首先打开window - rendering - lighting setting ,可以看到Mixed Lighting 选项卡。
一 无Baked Global illumination
如果我们对Baked Global illumination不勾选,则会提示,场景中的Baked光源和Mixed的光源会被默认改成Realtime的实时光。
场景中Baked模式的光源,提示已被改为Realtime模式。
1.光照
黄色的光源为Baked模式,左侧球体为static,右侧球体为动态物体,此时可以发现由于Baked的光源被改成了Realtime模式,导致右侧的动态小球也可以接收到光照。
2.阴影
此状态下如果加入一个静态物体(红色面板)进行阴影的测试,也会发现本来是Baked模式的黄色光源对动态物体也会产生阴影
3.Emission
此模式下,由于没有烘焙,绿色和红色的emision物体也无法产生间接光,场景中的物体都没有受到红色和绿色物体的影响。
二 ShadowMask
当在Lighting Setting中设置为ShadowMask模式后,可以发现场景中类型为Mixed的Light中的ShadowMask Mode有两种模式,一种是ShadowMask,一种是Distance ShadowMask,两者的区别在于阴影的渲染。
1.光照
Mixed类型的光无论是设置为ShadowMask还是Distance ShadowMask,对光照的着色渲染都是相同的。对于静态物体使用lightmap,对于动态物体使用实时光。Baked类型的光则是只能对静态物体产生影响,动态物体需要使用LightProbe才能受到影响。
2.阴影
对于Baked类型的光源,静态物体对静态物体投射阴影是通过ShadowMask,静态物体对动态物体投射阴影也需要通过LightProbe。动态物体则不能投射阴影。无论是ShadowMask还是LightProbe,都是预先计算的,因此也没有实时阴影ShadowMap中的Shadow Distance的限制,也就是说无论物体距离多远都会有阴影。
ShadowMask模式
如果MixedLight中的Shadowmask Mode设置为ShadowMask(不要和Lighting Setting中的ShadowMask搞混)对于MixedLight类型的光源静态物体投射阴影时和Baked类型光源投射状况相同。动态物体投射阴影时则会采用ShadowMap的实时阴影。
如下图,MixedLight类型的光源,红色面板为静态物体,左侧球体为静态,可以通过ShadowMask正常接收静态阴影,右侧小球因为是动态,则不能直接接收静态物体投射的阴影,如果需要接收,则要使用LightProbe。
如果把红色面板改为动态的,则两个小球都会通过ShadowMap方式接收阴影。
ShadowDistance Mask模式
如果MixedLight中的Shadowmask Mode设置为Distance ShadowMask,在distance范围内,无论是静态还是动态物体投射阴影,都将使用ShadowMap的实时阴影。
而如果超出Distance,则对于静态物体投射时,回归到和ShadowMask一致,对于动态物体投射时则没有阴影。
在distance范围内,通过实时阴影都可以正常接收阴影。
3.Emission
由于有lightmap的支撑,emission对间接光的贡献也可展示出来,可以看到静态的球体(左下和右上)会受到右侧红色面板的影响。
三 Baked Indirect
此模式下,事实上这个混合模式的名字就已经十分直白了——它只烘焙间接光,其他的全部是实时的。Shadowmask贴图?不存在的。
因此我们有了实时光、实时阴影等等。所以,在Shadow Distance的范围之内和实时光下效果一样,阴影是实时的shadow map,并且在shadow distance之外不会有阴影产生——哪怕是分辨率比较低的模糊阴影也没有。
1.光照
对于mixed类型的光(紫色),左侧球体(静态)和右侧球体(动态)都会受到该光源的影响,左侧静态球体是通过lightmap获取,而右侧则是实时的。
对于baked类型的光(黄色),左侧球体(静态)受到该光源的影响,右侧球体(动态)则不会受到该光源的影响。动态物体需要使用LightProb才能接受到baked类型光的影响。
2.阴影
在Baked Indirect模式下,无论是Mised Light还是Baked Light,在距离小于shadow distance时都将会投射shadowMap实时阴影,而大于shadow distance后将没有阴影。
3.Emission
由于有lightmap的支撑,emission对间接光的贡献也可展示出来,可以看到静态的球体(左下和右上)会受到右侧红色面板的影响。
总结
1.总结下对于MixedLight类型的光,在各模式下其光照和阴影的情况(感谢此图原作者大佬)
2.Emission的间接光:只有静态物体可以产生,动态物体如果想接收需要LightProbe
3.动态物体想接收Baked的间接光或者阴影都得需要LightProbe
4.HDRP也有实时间接光,但是Spot和Point Lights并不支持。
5.别被ShadowMask搞蒙圈,对于Baked类型的光,只有ShadowMask和Baked Indirect的差别。