4.1 摘要
本章和下一章将重点讲解如何给HDRP场景灯光。内容包喊一下及部分 :
- 为同一个场景制作白天(阳光明媚的中午时分)场景和夜晚(月光明亮带雾气的夜晚)场景。这部分内容提供了详细的操作步骤,建议大家按照步骤进行时间和学习。
- 介绍 HDRP的光源类型和相关模式。
- 介绍如何时用Light Layer(光照层)
- 详细如何使用Light Probe Group(光照探针组)为场景添加动态光照。
- 详细如何使用Reflection Probe (反射探针)为场景添加反射信息。
- 介绍如何在HDRP中处理各种类型的阴影
- 详解如何使用Light mapper 的整个场景进行光照烘焙以获取逼真的全局光照(第5章重点讲解)
4.2 Sponza_Day_Lighting场景打光步骤解析。
本节为上手操作环节
打开Sponza_Day_Lighting_Start场景。如图4.2所示,我们首先看一下这个场景的层级窗口(Hierarchy)。
可以看到,整个场景被分成了四个部分。
(1)Cameras
包含一个主相机和4个Cinenmachine虚拟相机(Virtual Camera)。Cinemachine是一套强大的虚拟相机系统,提供了的多种类型的相机组合方是,比如Dolly Track(模拟相机在一条指定轨道上运镜)。本场景中的虚拟相机的使用方式比较简单:与Timeline一起配合使用,用于切换不同的镜头。在Cameras_Timeline物体上有一个 Playeable Director组件和 Animator组件,它们的作用是关联Time line资源文件。Timeline和CInemachine的用法超出了 本书的范畴,建议大家通过文档和网上教程详细了解。
(2)Modles
包含当前场景中的大多数模型
(3)Lights & Probes
包含Directional Light(模拟日光)、灯笼模型和相关的Spot Light(点光源)、Light Probe Group(光照探针组,用于覆盖整个空间为 动态物体提供间接光照信息)和Reflection Probe(反射探针,用于为整个场景提供反射信息)
(4)Volumes
包含针对整个场景环境的Volume设置(Scene Setting Volume)和饥饿针对后处理的Volume设置(Post Processing Volume)。
因为Lights & Probes 和 Volumes 目前都是处于禁用的状态,所以理论上目前 场景中是没有任何光照信息的。当前场景的画面表现如图4.3所示。
可能有的读者就有疑问了,不是说目前场景中没有任何光照信息吗?为什么还可以看到场景中的物体呢?而且 位置什么所有的物体看起来有那么强烈的泛光?
这时因为在HDRP 的某项设置中关联默认的Volume。这项设置可以在Edit->Project Settings->HDRP Default Setting界面中找到,如图4.4所示。
在默认的Volume设置中已经启用哦那个了Visual Environment、HDRI Sky、Exposure、Tonemapping 这些设置。因为这些设hi的存在,所以我们看到了上述近似黑白的场景(虽然在Hierachy窗口中看不到任何光源和Volume设置)
特别是,因为我们在默认Volume设置中使用的HDRI Sky是Unity自带的默认天空盒(近乎纯色的蓝天 ),而HDRP场景在没有设置任何Reflection Probe的情况下,会默认使用天空盒作为反射信息的啦i元,从而导致整个场景中除了有来自HDRI Sky的环境光,还在所有物体上铁甲了一层来自 HDRI Sky的反射信息。
接下来我们按照具体的操作步骤来启用Hierarchy窗口中的各项组件,让整个场景亮起来。
4.2.1 步骤1:启用Scene Setting Volume
Volume组件的设置如图4.5所示
此Volume的模式为Global(全局), 意思是这个场景中的所有相机受它的影响(虽然当此前场景只有一个相机,但是在同一 个场景是可以同时摆放多个相机的)。
目前勾选了Visual Environment盒HDRI Sky 选项,它们的作用分别为;
- 在Visual Environment组件选择天空的类型(可以选择None,就是不显示任何类型的天空)。这里选择了HDRI Sky 作为天空的类型。
- 因为在Visual Environment组件中选择了HDRI作为天空的类型,所以需要为当前Volume 添加一个HDRI Sky来关联具体的HDRI Cubemap 作为天空。我们选择Lux光照强度模式,这里将Desired Lux Value设置为20000Lux。HDRP文档的 " Physical light Units and Intensities" 部分给出了其参考值,表4.1所示为“自然光”的参考值。
这里选择 Lux光照单位是因为此单位表示的光照信息只有方向信息没有强度衰减信息,也就是说此单位适合用于表示太阳光这一类对于 地球 来说 只是角度变化、没有强度变化的光照信息。 执行步骤1后得到的结果如图4.7所示。
4.2.2 步骤2:启用Directional Light(平行光)
因为我们要创造一个中雾时分阳光明媚的场景,所以必须为场景添加一个平行光源用于模拟太阳光。平行光不参数参考图4.7
(1)Color Temperature(颜色温度)
勾选此选项,HDRP会使用Filter 和 Temperature两个参数来计算光源所发出光线的最终颜色。色温越高,越偏向蓝色,反之越偏向黄色。色温大于 5000(单位Kelvin是,表示为K)时,通常称为暖色调。关于色温可以参考附录B的有关内容这里我们设置为6000K(参考的时垂直日光)。
(2)Intensity(光照强度)
光照强度用于控制实际太阳的亮度。这里将其设置为120000Lux。参考值来自HDRP文档中的 " Physical Light Units and Intensities" 部分,即表4.1中的 ” 非常明亮的光“。
(3)Indirect Multiplier(间接光倍数)
将其设置为1,用于模拟你真是世界的光照。如果设为0,那么这盏灯就不会在场景中产生简介光信息(注:如果在Window->Rendering->Lighting Settings界面中没有启用Baked Global Illumination选项,则此参数无效)。
如果你想加大当前灯光对场景简介光照的影响,则可以将此参数调整为大于1.但是副作用时可能产生过于强烈的简介光照,导致画面失真。
(4)Volumetrics(体积雾)
此参数用于模拟光源发射的光纤通过体积雾发生散射的现象。稍后我们会在Volume中启用Fog选项,然后可以看到平行光穿过雾发生散射的效果了。
(5)Shadows(阴影)
勾选Enable选项可以让当前光源投射伊宁。
Resolution(分辨率)用于控制阴影的质量,质量越高阴影效果越好,当然也会相应增加GPU的负担和内存的使用量,从而可能导致性能问题。
可以将Shadowmask Mode设置为Distance Shadowmask或者Shadowmask。Distance Shadowmask产生的阴影质量较高,不过对GPU的性能消耗较大。
执行步骤2后的到的结果如图4.8所示。