在Unity中,有两种不同的技术可用于预计算全局光照global illumination(GI)或反射光照(bounced lighting)。分别为Baked GI和Precomputed Realtime GI。本教程重点介绍预计算实时GI。
使用预计算实时GI时,光照预计算是计算Unity编辑器中场景中静态几何体周围的反射光并存储这数据以供在运行时使用。此过程减少了必须在运行时执行的光照计算次数,在保持交互式帧速率(maintaining interactive framerates)下允许实时反弹灯光(bounced lighting)。
使用Baked GI时,在预计算过程中会离线生成传统的光照贴图纹理。然后,这些纹理作为项目中的资产(assets)存在,并且无法在运行时更改。预先计算的实时GI不会以相同的方式创建光照贴图资产。相反,光照数据(lighting data)以Lighting Data Asset保存,其中包含在运行的时候交互的(interactively)生成和更新一组低分辨率光照贴图所需的信息。
除非我们的场景已经过适当的准备和优化,否则完成这些计算所需的时间可能会过长。在本教程中,我们将学习如何优化Enlighten的场景(Unity的预计算实时GI和Baked GI解决方案的后台),以便使光照预计算需要几分钟而不是几小时。
教程文档将覆盖以下几点:
1)如何为场景确定合适的照明分辨率(lighting resolution)。
2)图表(Charts)是什么以及它们如何影响我们的预计算时间。
3)如何启动预计算过程。
4)使用探头照明来降低照明解决方案的复杂性。
5)通过Unity的预计算实时GI改进自动展开UV的生成。
6)集群(Clusters)是什么以及它们如何用于生成全局光照。
7)使用光照贴图参数可以基于每个对象微调我们的光照。
一旦我们学习并应用了这些技术,我们就可以利用预计算实时GI的优势:加快光照的迭代次数,在照明过程中更快速地进行实验的能力以及在游戏过程中实时反射光照。
一、Reducing precompute times from hoursto minutes
在本教程使用的Lighting Tutorial场景中,在我们的测试机器上使用默认的非优化设置对照明进行预计算需要大约7.5小时。对于这种复杂的场景,显然这是不可接受的。
使用本教程中介绍的技术进行场景准备约30分钟后,预计算时间为2.25分钟,以获得不错的结果。考虑到我们可以快速迭代场景照明而无需在游戏过程中重新计算GI并改变GI照明,这项技术的吸引人的好处很快就会显现出来。