# 对 Unity 烘焙的调研

1. 什么是烘焙 #

光照烘焙是计算机图形学领域的一种技术, 用于为计算量巨大的虚拟光照操作生成纹理, 称为光照贴图。光照贴图信息被烘焙到这些纹理中, 用来展现就像受实时灯光影响的虚拟场景, 而开销只是使用实时灯光的一小部分. 通常结合烘焙光及实时光使用以创建更真实的虚拟环境.

2. 烘焙的作用 #

如此理解即可 : 把模型放进场景之后, 引擎会计算光线, 光线照到物体表面形成反光和阴影. 如果不烘焙, 游戏运行的时候, 这些反光和阴影都是由显卡和 CPU 计算出来的. 如果烘焙了, 这些反光和阴影就都记录在模型里, 变成新的贴图, 运行的时候显卡和 CPU 便不需要对环境光效果进行运算了. 概括 : 节约 CPU 资源, 省去内存的大量计算.

3. 烘焙的要点 #

导入的模型都要在属性窗口中 Model 的 Generate LightMap UVs 勾选上, 这是让 lightmap 匹配你的 UV. 如果 UV 展的不均匀, 那么得到的烘焙阴影效果也不会好.

分好场景中 GameObject 的层, 灯光和烘焙照射时可以分得开, 例如 UI 就放到 UI 层, 人物等活动的就放到活动的层, 不动的建筑放到建筑层等.

把要烘焙的物体设置为 Static

Directional Light 设置一个主的实时光照, 其他的光都设置为 backed, 注意室内点光源也是这样, baked 的灯光根据实际情况选择是否开启阴影, 光线可以对某些层的物体不进行照射.

灯光的设置中 Render Mode 要选择 Important, 如果不选, 某些灯光的位置就会有闪烁的问题. 烘焙的效果也是按 Important 计算的, 如果发现烘焙后曝光, 就是因为没有选中这个, 才导致效果跟你现在的不一致. 选中后如果曝光, 说明灯光的 Intensity 设置的过高了.

烘焙中 OA 的参数最好设置一下, 效果不错. (Lighting ->> Scene ->> Baked GI ->> Ambient Occlution)

尽量不要室内室外都制作在一个场景里, 灯光会互相干预, 例如, 屋外的平行光的阴影硬度设置的很高, 光强设置的很高, 那么即使屋内的灯再亮看上去也会是漆黑一片, 不过可以用逻辑动态调整一下(人在屋内就减弱屋外的灯光)

好的效果要靠光线, shader, 烘焙出来的反射效果, 需要一台渲染工作站来加快烘焙速度.

在烘焙的时候会产生很多临时文件, 在 Edit ->> Preferences ->> GiCache 中设置临时文件的位置和大小. 如果设置的太小, 存不下的时候就会报错.

3. 学习引用资料 #

https://zhidao.baidu.com/question/502968057.html
http://www.manew.com/thread-91104-1-1.html

End.