Unity填坑-灯光烘焙相关
文章目录
- Unity填坑-灯光烘焙相关
- 前言
- 一、Light的模式
- 二、光的效果分类
- 三、各种Light模式与烘焙的说明
- 1.Realtime,实时光
- 2.baked,烘焙光
- 3.mixed,混合
- 四、实时全局光
- 五、其他说明
- 1.动态物体的全局光照效果
- 2.手机使用烘焙注意的点
- 3.其他设置
前言
项目组对灯光烘焙那块参数以及工作流程有一定疑问,单独抽时间把整个机制做了一次单独的调研,错漏之处恳请指点。
一、Light的模式
Unity中的Light模式分为三种:
实时,混合,烘焙。
这三种要结合在Lighting设置一起工作来看。
二、光的效果分类
一种是直接光照,即光直接照到物体上,反射到相机里。
二种是全局光,即光照到物体上,再反射到其他物体上,如此再反射到相机里的光。
三种是环境光,即没有任何灯的情况下,场景还会被天空盒、环境设置的光等照亮的光。
三、各种Light模式与烘焙的说明
1.Realtime,实时光
在运行时,直接对场景物体进行光照,产生高光、漫反射、阴影等实时效果。这时Light的变化,会带来场景物体接受灯光的实时变化。
备注:其中阴影通过实时的阴影深度图实现。
这个灯和Lighting设置有关系的是设置RealtimeLighting开启(即实时全局光),后面单独说这个设置的流程。
2.baked,烘焙光
提前利用这个灯的信息在场景里面找到设置Static(特别是ContributeGI)的物体,进行整个场景烘焙,得到场景的烘焙信息数据:光照贴图、光照方向、光照信息、ShadowMask贴图、光照探针的信息。其中光照贴图,会因为Lighting设置不同,生成不同的光照贴图(比如:用于采样间接光的间接光照贴图,用于实时计算间接光的物体位置信息贴图,用于阴影采样计算的ShadowMask贴图)。
需要注意的是,当场景中没有进行烘焙时(即没有烘焙数据时),baked光等同于Realtime光。
如果已经烘焙出了场景的各种贴图,那么baked光就无用了,在运行时无论是开启还是关闭都没有任何效果。
运行时,对应标记的物体,会直接去采样这些贴图信息(在shader中会有不同关键字去开启对应的流程)然后进行渲染显示各种效果。
3.mixed,混合
字面意思就是又有烘焙光的功能,又有实时光的功能。对于动态物体,它就是提供Realtime光的功能,提供实时照明效果。
对于标记了静态(特别是ContributeGI)的物体,要根据Lighting设置中的,MixedLighting设置会有不同效果。
如果LightMode是:BakedIndirct,烘焙只会包含间接光照数据,那么这些静态物体在渲染时,会去间接光照贴图中采样间接光照,从而显示出逼真的效果。
此时,如果灯光Light的RealtIme部分会产生实时阴影、高光漫反射等效果,即光源变化时,阴影等效果都会跟随变化,而间接光(比如上图中的泛红色部分不会变化)。
LightMode:subtractive,直接光与间接光效果都会进入烘焙贴图中,从而运行时这些静态直接采样这些贴图进行渲染,这个mix灯产生的直直接光与间接光效果(与baked灯效果一样,但是这个mix灯还可以对其他动态物体进行直接光照效果)都进入贴图。此时移动这个灯,不会产生任何变化。
LightMode:Shadowmask,比BakedIndirct多一个shadowMask贴图。即阴影也会进入到贴图信息中。此时需要关注Project中Quality设置的阴影模式,如果是shadowMask,那么这个静态物体产生的阴影会从贴图中读取,意味着mix的灯变化的话,阴影不会有任何变化。
如果Quality设置为Distance ShadowMask,那么在近距离内,阴影为mix灯产生的实时阴影,远距离时,会变为采样shadowMask中的阴影信息产生阴影。这个距离指的是摄像机与阴影的距离,在URP中的MaxDistance设置。
四、实时全局光
如果开启了实时全局光,那么烘焙会烘焙出静态物体的位置信息贴图数据,且关联的是场景中LightMode为Realtime的光。烘焙好之后,当这些灯(realtime)发生变化时,全局光也会相应的变化。可以理解为实时渲染出全局光照贴图,供给这些静态物体进行渲染,产生更加逼真的效果。
五、其他说明
1.动态物体的全局光照效果
可以看到以上并没有实时的全局光照给动态物体的,所以需要额外的手段进行烘焙,即光照探针贴图,他可以收集场景中的光照信息,并且投射给接受全局光照为光照探针的场景物体。此时物体移动(只勾选了全局光照的信息)可以接受来自光照探针的全局光照信息。同样的,当全局光照为实时,光照探针的光照信息也会跟随光变化。
反射探针与光照探针原理类似,它会收集探针的六个面,进行投射,从而采样。
默认情况下,动态物体的全局光照(间接光)都是来自于光照探针,如图:
如果要改成来自于光照贴图,那么就需要让其贡献全局光照将其信息烘焙到对应的贴图中(开启了static选项,所以就没有动态的间接光的效果了)。
2.手机使用烘焙注意的点
手机由于性能问题,不建议开启实时全局光照。同时有时候烘焙效果,在手机内有很大差异,原因在于光照贴图的格式,在手机与PC上格式不一样,设置LightMap的Encoding时会有不同的编码格式,注意设置光照强度,手机上光照强度超过一定值都会被限制到一定数值内,从而导致与PC上看起来相差很大。所以一定要注意物体表面烘焙的光照强度。
3.其他设置
Lightmapping Settings:光照贴图的生成设置,对照Unity文档就能知道差异
Workflow Settings:光照探针的一些可视化设置。
Environment设置,环境光照的一些设置,环境光设置后,可以保证场景中没有灯,也会被环境光照亮。