HDRP物理光照系统实现昼夜效果
  2023/11/30 22:31:41
关键词:HDRP Unity 光照 贴图烘焙 
  
添加全局光照
这一步我们将为场景添加 Light Probe(光照探针)和进行光照贴图烘焙。
01  添加 Light Probe(光照探针)为动态物体提供间接光照
为了给场景中的动态物体提供间接光照,我们需要为场景添加 LightProbe Group(光照探针组)。如图所示,我们在场景中动态物体需要经过的区域都放置了光照探针组,一共8组。

光照探针除了可以给动态物体提供间接光照,也可以为场景中的其他物体提供间接光信息,比如植被,较低等级的 LOD,不值得参与光照烘焙计算的小物体。这样做可以避免烘焙所得的光照贴图过大,导致占用过多内存。
02  光照贴图烘焙
放置完光照探针组以后,我们就可以进行光照烘焙操作了。首先我们来了解用于控制光照烘焙功能的 Lighting 界面。如图所示,Lighting 窗口由三个部分组成:Scene,Environment 和 BakedLightmaps。

通过 Scene 界面,我们可以创建一个 Lighting Settings(光照烘焙设置)。这个配置文件会保存相应的光照烘焙参数。你可以把同一个 Lighting Settings 配置文件应用到多个场景的光照烘焙中。只有创建并关联了相应的 Lighting Settings 配置文件后,Lighting 界面上的 Mixed Lighting 和 Lightmapping Settings 区域才会被激活并允许设置参数。 Scene 旁边的Environment是用于控制环境光的界面。此界面可以关联一个 Volume Profile(Volume配置文件),然后将 Volume 里相关联的天空,比如 HDRI Sky,Physically Based Sky 或 Gradient Sky 关联到 Static Lighting Sky 参数。此处设置的环境光也会被烘焙到光照贴图中,这与之前通过 Volume 组件上的 Visual Environment 和 HDRI Sky 提供的天空环境光是不同的。Lighting界面的环境光参数
Baked Lightmaps(烘焙完成的光照贴图)可以在查看当前场景所关联的已经烘焙完成的光照贴图,也可以临时把 Lighting Data Asset 的关联移除,查看当前场景没有应用光照贴图时的情况,或者用代码动态关联其他 Lighting Data Asset 以应用其他与当前场景匹配的光照贴图。我们在 Environment 界面里关联了当前场景所用的 Volume Profile,并把 HDRI Sky 关联到 Static Lighting Sky 参数上。

对于 HDRP 中如何进行光照烘焙,大家可以访问此 URL 详细了解:https://developer.unity.cn/projects/progressive-lightmapper
白天场景光照烘焙参数

图为场景添加 Fog(雾效),Shadows(平行光阴影控制),Contact Shadow(接触阴影),Indirect Lighting Controller(间接光控制)和 Ambient Occlusion(屏幕空间环境光遮蔽)。

白天打光完成以后的光照效果


调整场景曝光
在之前的步骤中我们为整个场景设置了一个固定的曝光值,但这可能不符合实际情况。图示为 Volume 组件中 Exposure 设置为 Fixed(固定曝光)模式,数值为 12(EV100)时的画面表现。可以看到目前的固定曝光数值 12,对于场景的亮部(阳光下的部分)是适用的,但是对于场景的暗部(屋檐下的部分)会导致曝光不足,让屋檐下的暗部几乎漆黑一片。

解决上述问题的一个快速方法是使用自动曝光模式。Volume 组件中 Exposure 设置为 AutomaticHistogram(自动曝光直方图)模式,Limit Min 数值设置为 7(EV100),Limit Max 数值设置为 12.5(EV100)时的画面表现。把曝光模式设置成自动模式以后,HDRP 可以为场景的不同部分设置相对正确的曝光值。我们可以通过调节 Limit Min 和 Limit Max 这一对参数的数值,为场景的不同部分找到一个合适的曝光数值区间。

另外一个方法为场景的不同部分设置本地模式(Local)的 Volume。使用方式描述如下:
为明亮的地方设置一个 Volume 并添加一个模式为 Fixed(固定曝光)的 Exposure(曝光控制),参数设置为 12。
然后为暗部,比如走廊下的部分,设置另一个固定模式的曝光控制,数值设置为 7。然后为这两个本地 Volume 设置长度为 1~2 米的混合距离。
使用本地 Volume 的好处是可以精确控制场景中每个部分的曝光数值。坏处是如果场景比较复杂,就要摆放多个互相嵌套的 Volume,为后期维护和更新带来一些麻烦。

室外场景夜晚打光
完成白天场景打光以后,我们可以通过以下步骤来为夜晚的场景打光。
修改环境光
因为白天和夜晚的环境光相差很大,所以我们首先要改变场景的环境光。如图所示,首先创建一个新的 Volume Profile 用于保存夜间场景的各项参数。把 Volume 组件中 HDRI Sky 替换成夜晚的天空盒,然后把 Desired Lux Value(期望的勒克斯数值)改为 3,用于模拟夜晚光照条件下的环境光强度。

把 Lighting 窗口 Environment(HDRP)中的 Profile与夜晚的 VolumeProfile 进行关联。这样当我们进行光照烘焙时,光照贴图才会有正确的夜间环境光。
修改主光源
我们要将 Directional Light(平行光)的色温和强度做相应调整,用于模拟月光。

修改次要光源
把场景中预先放置好的所有次要光源,比如街灯,墙下的射灯,汽油桶中模拟火光的点光源,屋檐下的顶灯,以及天空中三盏氛围灯都启用,如图 46 所示。因为我们已经为所有的光源设置了正确的强度(参考物理数值),照射范围和色温,所以我们自然就得到了正确的光照。这也是使用完全基于物理的光照系统的好处所在。


反射信息和光照探针
我们无需调整 ReflectionProbe(反射探针)和 Light Probe Group(光照探针)的任何设置。在后续的光照贴图烘焙中它们都会获得正确的反射信息和间接光信息。
处理全局光照
因为我们修改了场景环境光和主光源参数,并且添加了更多光源,所以我们要重新烘焙夜间场景的光照贴图。光照烘焙参数如图 47 所示。为了给夜间场景添加一些细节,所以我们将 Lightmap Resolution(光照贴图分辨率)从原先白天场景的 15 提高到夜晚场景的 20。

调整场景曝光
因为夜晚和白天的曝光也是不同的,所以我们也要调整如图 48 所示的曝光数值。

当然我们也需要相应地调整 Fog(雾效),Volume 上的 White Balance(白平衡),Bloom(泛光)等后处理效果也需要做相应的调整。因为后处理调整属于可见即所得的效果,使用也相对简单,这里就不再赘述了。最后获得的夜间打光效果

总结
通过上述内容,我们完整了解了如何为一个 HDRP 场景进行打光,也从中学习到 Unity HDRP 完全基于物理的光照系统为我们带来的好处。

作者:Unity官方 https://www.bilibili.com/read/cv12055381/ 出处:bilibili
 [1] [2] [3] [4]

相关文章(向右看)..

·相关
HDRP物理光照系统实现昼夜效果
unity之HDRP性能质量最优/图
Unity提升画质的几点注意,U
Unity3d鼠标缩放拖动固定步/图
Unity开发常见报错信息解析揭
unity使用GUI及时控制文字
unity控制物体运动标准代码
Unity如何使用HDRP,项目/图
利用UnityWebReques
Unity 3D Text 穿透

·热点