赞
踩
Unity中有两种不同的光照方式:实时光照和烘焙光照。
Unity会在运行时实时计算光照。实时光源每一帧都会进行计算,这意味着它们对于场景中移动的角色和物体的响应性非常好,但它的开销也很大。
Unity会在运行前预先计算出烘焙光照。在运行时这些光照效果无法进行修改,对于动态的游戏物体来说,烘焙灯光不会有任何响应。
计算烘焙光照的过程涉及为整个场景生成UV坐标,这个坐标和材质里的纹理映射的UV坐标是类似的。烘焙后的纹理映射被称为光照贴图(lightmap),创建lightmap的过程被称为光照贴图映射(lightmapping)或烘焙(baking)。
烘焙光照更加高效,也能用于为用户提供更多更加真实和体验感的光照效果。
在Unity中,Light Mode设置能够让我们选择我们想要使用的光照方法:
如果要改变光照模式:
1. 选择场景中的某个光源游戏物体(比如Directional Light或Spot Light),查看其Inspector里LIght组件的Mode属性:
2. 将Mode修改为Baked,即可修改光照模式
3. 如果想要更快速地配置光源的光照模式,可以在Windows->Rendering->Light Explorer窗口中进行快速配置(避免从Hierarchy或场景中去一个个找):
如果在运行时一个游戏物体不会发生移动,那么它被认为是静态的(static)。对于此类物体我们可以标记这些游戏物体为static。当游戏物体标记为static时,Unity会预先计算一些相关数据,包括用于全局光照的光照贴图数据。
在烘焙光照贴图前,我们需要将场景中的光源设置为static。下面的例子以两个路灯模型为例。设置为static的路灯,光源的模式选择为Baked,另外一个非static的则是real-time。
我们可以为渐进光照贴图器(Progressive Lightmapper)选择两种后端。Unity默认使用渐进式CPU光照贴图器(Progressive CPU Lightmapper),这种后端计算上使用的是计算机的CPU和系统RAM。另一种光照贴图器,渐进式GPU光照贴图器(Progressive GPU Lightmapper),则使用计算的GPU和VRAM来计算光照贴图。
使用GPU方式的光照贴图能够极大地提升光照贴图计算的速度,但前提是计算机的配置能够满足相关的硬件和软件要求,这个要求在这里查看:
1. 在Lighting窗口中(Window -> Rendering -> Lighting),选择Scene标签页,然后点击New Lighting Settings
2. 将这个光照配置文件命名为BakedLighting
3. 将Lighting Mode设置为Baked Indirect。如果你的机器满足GPU光照贴图器的要求,可以将Lightmapper设置为Progressive GPU(Preview)以便加快烘焙速度
4. 在Lighting窗口,选择Generate Lighting来烘焙光照贴图。我们会在Unity Editor的右下角看到烘焙的进度。
5. 烘焙过程中注意观察场景中的两个路灯,选择了static和没有选择static的路灯模型有什么区别
6. 烘焙完成后,移动一下static的路灯模型,可以看到其光照和阴影没有随着路灯的移动而改变。
之前的笔记中提到过,Area Light仅能用烘焙方式作用。我们在场景中添加一个带面光源的模型来看看。
可以看到,这个模型添加到场景中后,并没有什么光照效果出来。
我们再次生成一下烘焙光照贴图,现在就能看到它的效果了。
如果我们要修改面光源的参数,修改之后,也必须再次烘焙才能看到效果。
我们还可以将Light Mode设置为Mixed来创建混合模式的光源,这种方式结合了动态(real-time)阴影以及烘焙的光照。相比于纯烘焙光照,它会增加存储和运行时开销,但也能改善阴影的质量。对于一个相对较小的轻量级项目来说,通常可以使用Mixed方式,虽然会消耗一定性能但很值得。
要切换光源为Mixed模式,和前面设置Light mode的操作是一样的,这里不再赘述。
选择完Mixed模式后,需要在Lighting窗口中点击Generate Lighting来更新烘焙光照贴图。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。