- 【Unity3D技术文档翻译】第3.6.1篇 Enlighten
- 【Unity3D技术文档翻译】第3.6.6.1篇 光照探针:技术
- 【Unity3D技术文档翻译】第3.2篇 光照设置窗口(Ligh
- 【Unity3D技术文档翻译】第3.6.4篇 烘焙环境遮蔽(Ba
- 【Unity3D技术文档翻译】第2.3.2篇 金属与镜面工作流对
- 【Unity3D技术文档翻译】第3.6.2.1篇 光照贴图:入门
- 【Unity3D技术文档翻译】第3.6.6.2篇 放置光照探针
- 【Unity3D技术文档翻译】第3.6.7.1篇 反射探针类型
- Unity3D技术文档翻译】第3.6.6.6篇 Light Pr
- 【Unity3D技术文档翻译】第3.6.6篇 光照探针概述 (L
![](https://img.haomeiwen.com/i2464776/03bfd04e6425e1f2.png)
上一章:【Unity3D技术文档翻译】第3.0篇 光照总览 & 灯光
本章原文所在章节:【Unity Manual】→【Graphics】→【Graphics Overview】→【Lighting】→【Lighting overview】
光照概述
为了计算3D物体的阴影,Unity需要知道落在物体上的光的强度、方向和颜色。
这些属性由场景中的 Light 对象提供。不同类型的灯光,以不同的方式发射它们的颜色光; 有些光可能随着距离光源的距离而减弱,并且根据来自光源灯光的角度不同而具有不同的规则。想了解 Unity 中不同类型灯光的细节可以查阅 Types of light 一节。
Unity 能够以不同的方法计算复杂、高级的光照效果,每种适用于不同的情景。
选择一种光照技术
一般来说,Unity 中的光照在某种程度上可以被分为“实时(realtime)”和“预计算(precomputed)”两种,并且它们可以被组合使用,以创造一个拟真的场景光照。
在本节中,我们将简要概述不同技术提供的效果、它们的相对优势,以及各自的性能特征。
实时光照(Realtime lighting)
默认情况下,Unity 中的灯光——线性光、聚光、点光都是实时的。这意味着它们为场景提供了直接光照,并且在每一帧更新。随着灯光与游戏对象在场景中移动,光照将立即随之更新。这一效果在场景和游戏视图中都能看到。
![](https://img.haomeiwen.com/i2464776/7334e3eadb766328.png)
实时光照是场景中最基本的光照方式,可用于照亮移动的角色或其他几何体。
然而,Unity 中只使用实时灯光的时候不能反弹(bounce)。为了使用全局照明等技术创建更真实的场景,我们需要启用 Unity 预先计算的照明解决方案。
烘焙光照贴图(Baked lightmaps)
Unity 能够计算复杂的静态光效果(使用一种叫全局光照的技术: global illumination,简称 GI),并将它们存储进一张被称为光照贴图(lightmap)的参考纹理贴图中。这个计算过程被称为:烘焙(baking)。
当烘焙一张光照贴图时,场景中光源在静态对象上的效果将被计算,计算结果被写入纹理贴图中。这些纹理贴图将覆盖在游戏对象的表面,以创造出光照效果。
![](https://img.haomeiwen.com/i2464776/951e8eaa1e7bf880.png)
这些光照贴图中,不仅包含了照射表面的直接光,还包含反弹自场景中其他物体的反射光。光照纹理可以与物体材质上着色器的颜色(albedo(反照率))和地形(normals(法线))一起使用。
使用烘焙光照时,这些光照贴图在游戏中不能被改变,因此被称为“static(静态)”。实时光照可以覆盖和叠加在光照贴图上,但是不能改变光照贴图本身。
使用了该方法,我们就可以用游戏中移动灯光的能力换取潜在的性能提升,适配像移动平台一样的低性能硬件。
想要了解更多信息,请查看 the Lighting window reference 一节与 Using precomputed lighting 一节。
预计算实时全局照明(Precomputed realtime global illumination)
静态光照贴图不能响应场景中光照变化的情景,但是 Precomputed Realtime GI(预计算实时全局照明)能够为我们提供一个可交互的、刷新复杂场景光照的技术。
有了这种方法,就有可能创造出具有丰富的全局照明和反射光线的照明环境,这些光线会对照明的变化做出实时反应。一个很好的例子就是一天中的时间系统——光源的位置和颜色一直在变化。使用传统的烘焙光照就不可能实现这点。
![](https://img.haomeiwen.com/i2464776/a5ec00f6c0292694.gif)
为了在可玩的帧率下实现这些效果,我们需要将一些冗长的数字处理,从实时处理转换为预先计算的处理。
预计算将游戏过程中发生的计算复杂光照行为的负担,转移到计算不那么关键的时候。我们将该过程称为“offline(脱机)”处理。
想要了解更过信息,请查看 lighting and rendering tutorial(光照与渲染教程) 一节。
收益与损耗
尽管可以同时使用 Baked GI lighting(烘焙全局光照) 和 Precomputed Realtime GI(预计算实时全局光照),然而需要注意的是:同时渲染这两个系统的性能消耗,完全等于它们各自消耗之和。不仅仅包括我们不得不存储在显存中的光照贴图配置,还包括在着色器中解码处理的性能消耗。
选择哪一种光照方法,取决于你的项目的特性和目标设备的处理性能。举个例子,在显存和处理能力比较受限的移动设备上,Baked GI lighting(烘焙全局光照)表现会更好。而在具有独立显卡,以及最新发布的主机上,使用 Precomputed Realtime GI(预计算实时全局光照),甚至两种光照方法都使用,都是可以的。
选择哪种处理方式,应该基于你的项目的特性和目标平台。注意,如果目标平台是范围较大的不同设备,通常最低性能将决定你采取哪种方式。
更多信息,请查看 Light Troubleshooting and Performance(灯光问题诊断与性能) 一节。
如果本文对你有帮助的话,点个赞或者评论一下吧!
网友评论