Skip to content

简介

光照是指光的照射,SandMod 编辑器中的光照系统模拟了光对真实世界的影响。在场景中添加 光源(Light)可以使场景产生相应的光照和阴影效果,实现预期的视觉体验。

直接和间接光照

  • 直接光照(Direct Lighting),是发出的光照射到其他 游戏对象(Game Object)表面,然后直接反射到摄像机中。
  • 间接光照(Indirect Lighting),是最终反射到摄像机中的所有其他光,包括多次在游戏对象表面反射的光源和天空光。
Lighting001.pngLighting002.pngLighting003.png
无任何光照下游戏对象的基础颜色只有直接光照的效果直接光照加上间接光照的效果

全局光照

全局光照(GI,Global illumination)是一种对直接和间接光照进行建模、结合以实现逼真的照明效果的技术。在没有全局光照参与的情况下,只有直接光照对场景进行影响,场景的 游戏对象(Game Object)接收不到任何间接光照。SandMod 的全局照明系统同时模拟直接和间接光照,光线在游戏对象间进行了反弹,为游戏项目实现更真实的照明效果。

【Lighting004.png】

使用全局光照系统下 SandMod 中场景的显示效果。

实时和烘焙光照

在使用 SandMod 编辑器的过程中,您可以使用实时光照、烘焙光照或两者混合使用。

实时光照.

实时光照(Real-time Lighting)是在游戏项目运行或场景预览过程中实时通过光照系统计算模拟光照的效果。

SandMod 编辑器的光照系统中,定向光(Directional)聚光(spot)和 点光(point)等光源都是默认为实时的,它们发出的光线不会进行反弹,直接光照的光线范围内的 游戏对象(Game Object)才会受到光照的影响。而实时光照会根据场景中游戏对象变化、自身移动实时地改变光照的效果,因此实时光照常用于对角色等可移动的游戏对象的照明。

【Lighting005.png】

如在封闭的房间内,仅使用聚光(实时光照)照射游戏对象的效果。

烘焙光照.

烘焙光照(Baked Lighting)是指用光照系统提前进行光照计算,并将结果保存为光照数据和 光照贴图(Lightmapping),然后在项目运行时应用。

这种方式直接将 静态(Static)游戏对象(Game Object)受到的 全局光照(GI,Global illumination)烘焙成 光照贴图(Lightmap),并附着在游戏对象上,形成受到全局光照的效果。光照贴图可以被场景游戏对象 材质(material)的 着色器(Shader)所使用,着色器可以决定是否使用光照贴图以及使用的方式。

【Lighting006.png】【Lighting007.png】
使用了光照贴图的场景。该场景生成的光照贴图,包含了场景中游戏对象的光照信息和阴影信息。

由于光照贴图是静态的,因此光照贴图模拟的光照效果并不能实时改变,但是实时光照也可以在已经烘焙光照的场景中与光照贴图叠加产生效果,值得注意的是,实时光照并不会影响光照贴图本身。

Note:
烘焙静态场景游戏对象的光照有利于提升项目的性能,而且能更真实地表现光照效果,建议在游戏发布前都对静态的游戏对象进行烘焙光照处理并移除对应光源。

👉 光照编辑窗口(Lighting Window)中可以找到烘焙当前场景可配置项及烘焙和清除当前场景光照贴图的入口。

👉 光照贴图(Lightmap)中储存了对应场景的全局光照信息,并将光照信息映射在对应场景中。

光照方式

目前 SandMod 支持以下光照方式:

环境光.

环境光(Ambient)对于整个场景的光照和亮度有着非常重要的作用,可以将它视为一个从所有角度影响场景中所有 游戏对象(Game Object)的光源。环境光在没有启用任何全局光照系统计算的情况下不会受到游戏对象遮挡,即所有游戏对象都将均匀接受环境光,因此会导致光照显示效果不真实。

Lighting008.pngLighting009.pngLighting010.png
没有环境光(环境光为黑色)场景的显示效果仅有环境光(环境光为白色)场景的显示效果有环境光(环境光为灰色)且添加了光源的场景显示效果

渲染 环境光(Ambient)的性能损耗相比其他光照效果会低很多,您可以使用环境光模拟光照的效果以节省光源数量,提升游戏项目的性能。值得注意的是,改变环境光颜色并不会影响天空盒,只会对场景中的光照颜色产生影响。

👉 光照编辑窗口(Lighting Window)中可以找到配置环境光颜色的入口。

光源.

为了计算 游戏对象(GameObject)受光照影响的着色效果,光照系统需要知道落在其上的光的强度、方向和颜色。该信息由光源提供。

SandMod 目前支持以下类型的光源:

  • 定向光(Directional Lights)用于创建阳光的效果,可以被认为是存在于无限远的远处的光源。

【Lighting011.png】

定向光的效果示意图。

  • 点光源(Point Lights)由所附加的游戏对象的原点向周围所有方向发射光线的光源,在影响范围内会产生衰减,亮度与距离平方成反比,大于最远距离时衰减为 0。

Lighting012.png

点光源在场景中的效果。

  • 聚光灯(Spot Lights)聚光会向其所附加的游戏对象的前方(Z 轴正方向)投射锥形光束,可通过 光源(Light)组件的属性调整聚光灯的照明范围,亮度也会随着距离衰减,直到最远距离衰减为 0;亮度在光锥边缘也会随内角向外角产生衰减,直到大于外角范围衰减为 0。

Lighting013.png

聚光灯在场景中的效果。

👉 光源(Light)组件可用于为场景配置不同种类的光源以及设置光源的参数。

发光材质.

发光材质(Emissive Material)会从表面区域发射光,在场景中产生反射效果提供间接光照,并可以实时修改其亮度和颜色。

Lighting014.png

发光材质的 4 个立方体在场景中的效果。

👉 发光材质(Emissive Material)的配置方法与发光效果的实现方式。

光照反馈

阴影.

阴影(Shadows)为场景添加了一定程度的立体感和真实感,因为阴影显示了原本可能看起来很平坦的 游戏对象(Game Object)的凹凸和位置。SandMod 的照明系统中,光源可以将阴影从游戏对象投射到其自身的其他部分,或附近的游戏对象上。

【Lighting015.png】

场景中游戏对象的阴影在场景中的效果。

👉 阴影(Shadows)的配置方法与相关属性的配置方法。

光照探针.

SandMod 编辑器采用了 光照探针(Light Probes)的方式,将场景中的光照信息以易读取的方式存储下来,让全局光照(GI,Global illumination)不仅只对 静态(Static)游戏对象(Game Object)进行计算,而非静态游戏对象也可以获得这些丰富的间接光照效果。

光照探针的原理是通过在场景中放置采样点(光照探针),采样点获取周围的光照信息,将得到的颜色数据编码成一系列的参数值,以便在运行中能够快速计算。

使用光照探针后,非静态游戏对象就能同样获得丰富的间接光照等光照信息,并将附近的光照探针的数据进行插值并应用到 网格渲染器(Mesh Renderer)或 蒙皮网格渲染器(Skinned Mesh Renderer)上。游戏对象使用哪个光照探针上的颜色数据,取决于游戏对象的 轴心点(Pivot)落入哪个由光照探针组成的四面体中。

Attention:
当前 SandMod 并未支持光照探针功能在 SandMod 编辑器上进行编辑,仅为引擎层面的支持,您可以理解为暂时光照探针功能是不可使用的。