Unity实时全局光照和烘焙全局光照 Unity2019

上一篇我们了解了,直接光照、间接光照和全局光照,也知道全局光照会带来的计算量的问题。这一篇我们就要来看看Unity提供的解决方法。

 

Unity的全局光照模式

我们可以首选打开Uinty的照明设置面板,Window->rendering->lighting setting,这个面板是Unity全局照明(GI)功能的主要控制面板。通过Lighting窗口,你可以调整GI进程中的各个方面,根据需要来自定义场景或优化质量,性能和存储空间。 这个窗口还包括环境光,雾效、光晕等设置。这里我们先只关注红色框内的部分。
Unity实时全局光照和烘焙全局光照 Unity2019_第1张图片

Unity提供了两种全局光照模式,实时全局光照和烘焙全局光照。看到这儿的小伙伴可能要骂人了,不是说计算量大,不能实时计算的吗?其实这里的实时只是部分实时,后面会详细讲到。

 

物体的动静和light组件的模式

在讲两种全局光照模式之间,我们先讲一下物体的动静和light组件的模式,这二者是和光照模式相互配合的。

在Unity中,物体是可以区分静态和动态的,你需要明确指出哪些物体是静止的,并且在游戏中永远不会移动、旋转和缩放。

注意:灯光也是要区分动态和静态的,因为灯光在Unity中可能会发生移动,旋转等

Unity实时全局光照和烘焙全局光照 Unity2019_第2张图片

 

混合光照——烘焙全局光照(Baked Gloabl lllumination)

控制“混合”和“烘焙”光照是否使用烘焙全局照明。如果启用,“混合”光照将使用指定的“照明模式”进行烘焙,“烘焙”光照将完全烘焙,且在运行时无法调整。

1、这里说的“混合”和“烘焙”光照就是上面说的light组件的mixed和baked模式

2、如果light组件是baked模式,则该组件产生的直接光照、间接光照和阴影都烘焙成全局光照贴图,运行时是无法调整的。这就要求光照要是静态的,光照下的物体也要是静态的

Unity实时全局光照和烘焙全局光照 Unity2019_第3张图片

我们烘焙之后,把场景中的灯光关掉,发现场景中的光照信息都还是在的

3、如果light组件是“混合”模式,将使用指定的“照明模式”进行烘焙。这里提到了照明模式,我们将对照明模式做解释

 

照明模式lighting mode

Unity提供了三种照明模式,对三种模式的解释

Unity实时全局光照和烘焙全局光照 Unity2019_第4张图片

我们将场景中的cubeA立方体改动动态物体,其他仍然保持静态,等华灯落下,我们来看看它们的正面目

1、subtractive 减性

混合灯光为静态物体提供烘焙直接照明和间接照明。动态对象接受实时直接光照,并使用场景中的主方向光在静态对象上投射阴影

  • 关闭灯光,静态物体的灯光没有变化,说明静态物体的直接照明和间接照明都是烘焙成贴图了
  • 关闭灯光,cubeA全黑的,说明动态物体的直接光照是实时的,没有间接光照

Unity实时全局光照和烘焙全局光照 Unity2019_第5张图片

Unity实时全局光照和烘焙全局光照 Unity2019_第6张图片

2、ShadowMask

混合灯光提供实时直接照明。间接照明会被烘焙到光照贴图和光照探测器中。会为烘焙阴影生产Shadowmasks和光照探测器遮挡。运行时使用的“Shadowmask模式”可以在“质量设置”面板中设置

  • 关闭灯光,静态物体的的直接光照没有了,说明静态物体的直接照明是实时的,间接照明是烘焙的
  • 关闭灯光,cubeA全黑的,说明动态物体的直接光照是实时的,没有间接光照

3、baked indirect 间接烘焙

混合灯光提供实时直接照明,而间接照明则会被烘焙到光照贴图和光照探测器中。

  • 关闭灯光,静态物体的的直接光照没有了,说明静态物体的直接照明是实时的,间接照明是烘焙的
  • 关闭灯光,cubeA全黑的,说明动态物体的直接光照是实时的,没有间接光照(这和ShadowMask是一致的)
Unity实时全局光照和烘焙全局光照 Unity2019_第7张图片 灯光后,cubeA只有直接光照 Unity实时全局光照和烘焙全局光照 Unity2019_第8张图片 关闭灯光后,cubeA没有任何光照 Unity实时全局光照和烘焙全局光照 Unity2019_第9张图片 光源已经移动到远处,场景中已经没有直接照明,但间接照明还在

baked indirect最高配的光照模式,同时也最耗性能

 

三种照明模式总结:

三种模式有一个共同点,对于静态物体的间接光照,一定都是烘焙的,这就导致

1、如果光源改变位置或方向的话,静态物体的间接光照是不变的

2、对于动态物体压根不支持间接光照

3、在shadowMask和baked indirect模式下,无论光源变化,至少静态和动态物体的直接光照一直都是正确的

 

实时全局光照(Realtime Gloabl lllumination)

所谓的实时并非真的完全实时的,准确的说应该是预计算Precomputed

启动实时全局光照的时候,Unity仅预先计算表面到表面的信息:物体间光线可能会经过的路径,会预先计算好了反射以及二次反射的一些条件,并把这些计算好的数据存了起来,你要计算场景中的光和影的时候,实时全局光照会把数据拿出一部分来去运用到你的计算,所以我们看到实时全局光照也是有贴图的。

Unity实时全局光照和烘焙全局光照 Unity2019_第10张图片

下面我们看下实时全局光照的烘焙特性,实时全局光照只对“实时”的光照组件有效

  • 关闭灯光,漆黑一片。说明静态物体的直接照明是实时的,间接照明也是实时的

  • 将scene的绘制模式切换到Indirect模式,发现CubeA消失了,说明动态物体没有间接光照
  • 灯光位置变化后,静态物体的直接光照和间接照明都发生了变化

Unity实时全局光照和烘焙全局光照 Unity2019_第11张图片

Unity实时全局光照和烘焙全局光照 Unity2019_第12张图片

Unity实时全局光照和烘焙全局光照 Unity2019_第13张图片 灯光的高度是6,距离拉进了,直接光照和间接光照都发生了变化 Unity实时全局光照和烘焙全局光照 Unity2019_第14张图片 将scene的绘制模式切换到Indirect模式,发现CubeA消失了

 

 

两种全局光照总结:

1、实时全局光照和烘焙全局光照下,都不支持动态物体的间接光照

2、如果灯光改变,需要使用实时全局光照

3、混合光照和实时光照是可以同时使用的

Unity实时全局光照和烘焙全局光照 Unity2019_第15张图片 两种模式都勾选上 Unity实时全局光照和烘焙全局光照 Unity2019_第16张图片 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全局光照详解(参数篇)

你可能感兴趣的:(web,3D开发)