赞
踩
全局光照(GI)系统这个概念指的是:既要考虑场景中来自光源的直接光照,又要考虑经光在其他物体表面反射后的间接光照
在光线追踪技术成熟之前,全局光照往往无法应用于实时渲染,因为它的渲染成本实在是太高了,现在确实有不少相关的实时算法,但是这些就不在本次文章的范畴之内了
若考虑到离线,最简单的情况就是:场景在运行时是完全静态的的,光源也是,这时我们就可以提前计算出光照结果并保存到光照贴图中,在游戏运行时直接应用就好,尽管它有以下的局限性:
可以对上述的情况进行优化,最经典的技术就是光照探针(Light Probes),这些 Unity 当然都支持
留意其中的 Mode 属性,因为这直接决定了光源参不参与烘培
对于 Mixed Mode,它还拥有以下的额外设置(Windows → Rendering → Lighting → Scene):
这个后面再提,可以默认为 Baked Indirect
可以通过 Windows → Rendering → Light Explorer 打开光照资源管理器:它可以统一管理当前激活的光源
使用面板顶部的四个选项卡可以查看当前场景中的光源(Lights)、反射探针(Reflection Probes)、光照探针(Light Probes)和静态发射(Static Emissives)的设置,可编辑的参数都是每种组件类型最常用的字段
LightMode 设置为 Realtime 就为实时光照,实时光照 = 实时光源 + 实时 GI
实时光照与实时 GI 结合使用的缺点:
总结:实时光源会为场景提供实时的间接光照以及直接光照,非常适合光源会缓慢变化并且对场景具有很高的视觉影响(例如在天空中移动的太阳,或者在封闭的走廊中缓慢闪烁的光源)的情况,对于快速变化的光源或对于特殊效果,不建议使用,这样实在是太耗了
LightMode 设置为 Mixed 就为混合光照,一般情况下:混合光照 = 实时光源 + 烘焙 GI
通常烘培 Lightmap 需要用到 UV2 通道作为采样 Lightmap 的坐标,如果没有 UV2 则将使用 UV1,但使用 UV1 可能会得到不正确的光照信息
可以选择你需要烘焙的静态物体模型,勾选 Generate Lightmap UVs 选项,这可使得 Unity 生成 Lightmap 所需的 UV2
紧接着可以留意一下 Windows → Rendering → Lighting 中关于光照贴图的设置,暂时只需要关心这几个属性,前三个属性决定着光照贴图的质量
想要在场景中预览 Lightmap,只需修改场景可视化模式为 Baked Lightmap 即可
最关键的一步:找到游戏对象的 Mesh Renderer 或 Terrain 相关组件:其中
对于静态物体,Lightmap Static 默认是被勾选的,不过静态物体在运行时是固定的,位置不可以被移动
完事之后,就可以通过 Windows → Rendering → Lighting → Scene 最下方的 Generate Lighting 生成光照贴图了,也可以勾选旁边的自动,当然这需要花些时间,注意右下角的进度条
成功之后,Unity 就会自动向 Assets 文件夹中添加光照数据、烘焙光照贴图和反射探针等资源,如果你勾选了 Auto Generate 自动生成光照贴图,那么这个文件夹就不可见
也可以在 Mesh Renderer 或者 Terrain 相关组件找到其对应的 Lightmap,或者是 Windows → Rendering → Lighting 选择 Bakes Lightmaps 找到其对应的网格 UV 图表
先考虑最简单的情况:只保留平行光并设置其为烘焙光,关闭环境光照,所有的着色器使用内置的 Standard
如果一些物体带有自发光,使用光照烘焙当然也可以得到一个非常不错的效果
透明物体的烘焙可能会出现错误的结果,这是因为光照烘焙系统并不知道这个物体是透明的
想要解决这个问题也很简单。先检查 Cast Shadows 属性:
紧接着告诉光照烘焙系统这是透明物体:
将对象标记为透明也会更改它对间接照明的贡献,透明的物体会让间接光通过,而不透明的物体会阻挡它
参考文章:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。