上一篇我们了解了,直接光照、间接光照和全局光照,也知道全局光照会带来的计算量的问题。这一篇我们就要来看看Unity提供的解决方法。
我们可以首选打开Uinty的照明设置面板,Window->rendering->lighting setting,这个面板是Unity全局照明(GI)功能的主要控制面板。通过Lighting窗口
,你可以调整GI进程中的各个方面,根据需要来自定义场景或优化质量,性能和存储空间。 这个窗口还包括环境光,雾效、光晕等设置。这里我们先只关注红色框内的部分。
Unity提供了两种全局光照模式,实时全局光照和烘焙全局光照。看到这儿的小伙伴可能要骂人了,不是说计算量大,不能实时计算的吗?其实这里的实时只是部分实时,后面会详细讲到。
在讲两种全局光照模式之间,我们先讲一下物体的动静和light组件的模式,这二者是和光照模式相互配合的。
在Unity中,物体是可以区分静态和动态的,你需要明确指出哪些物体是静止的,并且在游戏中永远不会移动、旋转和缩放。
注意:灯光也是要区分动态和静态的,因为灯光在Unity中可能会发生移动,旋转等
控制“混合”和“烘焙”光照是否使用烘焙全局照明。如果启用,“混合”光照将使用指定的“照明模式”进行烘焙,“烘焙”光照将完全烘焙,且在运行时无法调整。
1、这里说的“混合”和“烘焙”光照就是上面说的light组件的mixed和baked模式
2、如果light组件是baked模式,则该组件产生的直接光照、间接光照和阴影都烘焙成全局光照贴图,运行时是无法调整的。这就要求光照要是静态的,光照下的物体也要是静态的。
我们烘焙之后,把场景中的灯光关掉,发现场景中的光照信息都还是在的
3、如果light组件是“混合”模式,将使用指定的“照明模式”进行烘焙。这里提到了照明模式,我们将对照明模式做解释
Unity提供了三种照明模式,对三种模式的解释
我们将场景中的cubeA立方体改动动态物体,其他仍然保持静态,等华灯落下,我们来看看它们的正面目
1、subtractive 减性
混合灯光为静态物体提供烘焙直接照明和间接照明。动态对象接受实时直接光照,并使用场景中的主方向光在静态对象上投射阴影
2、ShadowMask
混合灯光提供实时直接照明。间接照明会被烘焙到光照贴图和光照探测器中。会为烘焙阴影生产Shadowmasks和光照探测器遮挡。运行时使用的“Shadowmask模式”可以在“质量设置”面板中设置
3、baked indirect 间接烘焙
混合灯光提供实时直接照明,而间接照明则会被烘焙到光照贴图和光照探测器中。
baked indirect最高配的光照模式,同时也最耗性能
三种照明模式总结:
三种模式有一个共同点,对于静态物体的间接光照,一定都是烘焙的,这就导致
1、如果光源改变位置或方向的话,静态物体的间接光照是不变的
2、对于动态物体压根不支持间接光照
3、在shadowMask和baked indirect模式下,无论光源变化,至少静态和动态物体的直接光照一直都是正确的
所谓的实时并非真的完全实时的,准确的说应该是预计算Precomputed。
启动实时全局光照的时候,Unity仅预先计算表面到表面的信息:物体间光线可能会经过的路径,会预先计算好了反射以及二次反射的一些条件,并把这些计算好的数据存了起来,你要计算场景中的光和影的时候,实时全局光照会把数据拿出一部分来去运用到你的计算,所以我们看到实时全局光照也是有贴图的。
下面我们看下实时全局光照的烘焙特性,实时全局光照只对“实时”的光照组件有效
关闭灯光,漆黑一片。说明静态物体的直接照明是实时的,间接照明也是实时的
1、实时全局光照和烘焙全局光照下,都不支持动态物体的间接光照
2、如果灯光改变,需要使用实时全局光照
3、混合光照和实时光照是可以同时使用的
两种模式都勾选上 spot是realtime模式,point是mixed模式
由于实时全局光照和烘焙全局光照只能作用于static的物体,所以导致运动的物体和场景中的光线无法融合在一起,显得不真实。
而Light Probes组件可以通过Probe收集光影信息,然后对运动物体附近的几个probe进行差值运算,最后将光照作用于物体上。
1、Unity2019已经提示实时全局光照(已弃用)
Enlighten即将弃用。请确保您的项目在弃用日期之后不再需要Enlighten支持
Unity官方有解释,由于Geomerics公司停止推出产品级的Enlighten,因此Unity必须移除
2023年之前都是可以用的
2、3D软件和Unity的烘焙思路差异
烘焙既可以在具有烘焙功能的3D建模软件中来完成,也可以在Unity3d中来烘焙
当然,在Unity3d中烘焙兼容性更好。Unity3d的烘焙是美工的一个环节,关系到Unity作品的颜值和卖相
3、Unity3d的最终作品是供受众对3D场景进行实时操作的,就像其他3D软件场景编辑状态的操作,而一般的3D软件最终作品是将场景渲染成图片或图片序列呈现给受众的,两者的最终作品有本质的区别,简单地说,前者呈现给受众的是3D场景,后者呈现给受众的是图片或图片序列(动画)。尽管如此,两者都必须有较强的立体感和较好的光影视觉效果,否则是不被受众所接受的。
预计算的实时GI模型?
灯光设置成mixed,就能同时满足动态和静态物体的需求
注意:环境光没有mixed模式
参考:
unity3d 为什么要烘焙/unity3d 烘焙作用是为了什么【2020】
写给美术看的Unity全局光照详解(参数篇)