首先理解一下直接光照和间接光照的定义

unity3d 渲染 发布网页端 unity3d渲染原理_unity


在Unity中 光照效果主要由两个地方进行控制1.灯光参数面板(即Light组件) 主要控制的是直接光照

unity3d 渲染 发布网页端 unity3d渲染原理_贴图_02


2.全局的Lighting界面来进行控制 主要控制的是间接光照

unity3d 渲染 发布网页端 unity3d渲染原理_Real_03


这两个面板之间是如何联系起来的

通过灯光的模式

unity3d 渲染 发布网页端 unity3d渲染原理_unity3d_04


Realtime:实时光模式如果勾选实时光realtime 再勾选 全局照明(本质上是间接照明 因为全局 = 直接+间接

unity3d 渲染 发布网页端 unity3d渲染原理_贴图_05


Mixed:混合光模式 对应的是烘焙全局光照

unity3d 渲染 发布网页端 unity3d渲染原理_unity3d 渲染 发布网页端_06


三种模式的区别

unity3d 渲染 发布网页端 unity3d渲染原理_Real_07


Realtime: Unity计算并更新实时灯光在运行期间的每一帧的照明。没有实时灯光是预先计算的。

即 每一帧都会进行计算照明信息

Mixed: Unity可以在运行时计算混合光的一些属性,但只有在很强的限制下。一些混合光是预先计算的。

很强的限制指的是什么 即 通过Lighting Mode进行限制 (不同的模式下面会进行提示

unity3d 渲染 发布网页端 unity3d渲染原理_贴图_08


比如:

unity3d 渲染 发布网页端 unity3d渲染原理_unity3d_09


混合灯提供即时的直接照明,而间接光被烘烤成光图和光探针。(即实时产生直接光照 间接光照被烘焙到贴图里

什么是贴图?

简单(通俗)理解一下 就是将灯光的数据化信息 进行计算 计算成一个具体的文件 放在硬盘上 当Unity去运行的时候 就不需要实时的每一帧
去进行计算这些信息 而是去读取这个文件 因此 对于优化性能来说 影响是很大的

关于贴图 注意 只能烘焙静态物体 也就是对于要烘焙的物体 需要勾选为static物体

unity3d 渲染 发布网页端 unity3d渲染原理_贴图_10


混合灯光提供实时直接照明。在光图和光探针中使用间接光源。阴影遮罩和光探针遮挡生成烘烤的阴影。运行时使用的阴影蒙版模式可以在质量设置窗格中设置。(即和上一种模式大致相同 多了对阴影效果的叠加

unity3d 渲染 发布网页端 unity3d渲染原理_贴图_11


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

(即预先计算直接光照和间接光照 计算量最大(针对于静态物体) 都会存储在贴图中这种模式经常和灯光参数面板下的Baked模式进行使用

unity3d 渲染 发布网页端 unity3d渲染原理_unity3d 渲染 发布网页端_12


如何使用:调整为Baked模式后 同时勾选

unity3d 渲染 发布网页端 unity3d渲染原理_贴图_13

这样 灯光所有的照明信息都计算到贴图内 这样 即使将游戏中的灯光删除 对于场景来说也不会产生任何影响

Baked: 烘焙光模式 Unity在运行时之前预先计算烘焙灯光的照明,并且不将它们包含在任何运行时照明计算中。所有烘烤灯都是预先计算好的。

下面这些是在实际过程中需要反复调整 配置的属性 需要根据效果去动态调整 再生成贴图 直到达到想要的效果(这部分一般交给美术来做

unity3d 渲染 发布网页端 unity3d渲染原理_unity_14