HDRP物理光照系统实现昼夜效果
  2023/11/30 22:31:41
关键词:HDRP Unity 光照 贴图烘焙 
  作者:Unity官方 https://www.bilibili.com/read/cv12055381/ 出处:bilibili
  如果你用一个炫目的全景图片作为天空,需要将图片Type设置为Cube类别,然后:在HDRP天空里引用,如图:

  本教程将会详细讲解如何使用 Unity HDRP 中基于物理的光照系统来为上述室外场景打光,我们会通过一系列步骤来完成同一个场景白天和夜晚两种光照条件的打光操作,并讲解光照相关的知识。最终完成的两个场景光照效果如图 1 和图 2 所示。


  因为 HDRP 的光照系统模拟的是真实物理世界光照的行为,我们就要为 HDRP 场景中的灯光设置正确的光照强度和色温数值。正是因为可以在 HDRP 的光照系统中使用真实世界的光照单位和参数数值,这让我们在 HDRP 进行打光变得更容易了。因为只要你按照正确的光照参考值来打光,就可以获得物理正确的光照效果。除此之外,我们还要正确设置场景的曝光,因为人眼既可以适应很暗的环境,也可以适应很亮的环境。人眼可以通过适应和调整场景中对黑色的感知来自动适应多种光照条件。在为场景打光时,我们可以自上而下地来为场景添加光照信息:环境光 -> 主光源 + 次光源(如果有次要光源的话)-> 添加反射信息 -> 添加全局光照 -> 调整场景曝光

设置环境光
把模型导入场景以后,当前场景中没有任何的光照设置,所以我们在 Scene 和 Game 窗口看到的场景如图所示。

图中场景中的模型表面呈现一片银色,这是因为当前场景的环境光来自 Project Settings(质量设置)中的 HDRP Default Setting(HDRP默认设置)> Default Volume Profile Asset(默认Volume配置文件)。这些默认的 Volume 设置是为了让新建项目有一个基础的环境光而设的。我们也可以不用这些默认的 Volume 设置,自己在场景中创建这些 Volume 设置。目前场景模型表面的银色大部分来自反射信息,因为我们场景中不存在任何屏幕空间反射的设置,也不存在任何反射探针可供采样,所以材质系统就默认使用了来自天空的反射信息。
为了更好地理解之后的打光步骤,我们把默认 Volume 配置文件里的设置勾选全部去掉。这时可以看到整个场景漆黑一片(除了自发光材质和主相机上设置的天空背景色)。物体表面的银色反射信息也消失了,因为我们把 HDRP 默认 Volume 中的 HDRI Sky 关闭了,所以材质系统也就无法再从天空采样反射信息了。
然后我们在 Hierarchy 窗口中,通过菜单 GameObject > Volume > Sky and Fog Volume 来创建一个自带环境光设置的 Sky and Fog Volume。新创建的 Sky and Fog Volume 如图所示。

此 Volume 的模式自动设置为 Global(全局模式),也就意味着场景中所有的相机都会受到此 Volume 的影响。另外,HDRP 还会自动生成一个名为 Sky and Fog Settings Profile 配置文件,并自动关联到 Volume 组件上的 Profile 参数。Volume 组件上的 Visual Environment(视觉环境)和 Physically Based Sky(基于物理的天空)两个功能配合使用,将会为场景提供来自程序化生成的基于物理的天空所带来的环境光。基于物理的天空拥有很多不同的参数设置,可以用于模拟很复杂的环境天空,除了地球环境,也可以用于模拟外星球环境。因为我们要模拟的环境属于写实类的地球环境,所以我们可以使用设置更为简便的 HDRI Sky 来为整个室外场景提供环境光。因此,我们要把 Visual Environment 的 Type(类型)设置为 HDRI Sky,移除 Physically Based Sky 重载,然后通过 Add Override(添加重载)按钮打开重载功能界面,在 Sky(天空)分类中选择 HDRI Sky 添加到 Volume 组件上。
HDRI Sky 的 Intensity Mode(强度模式)默认选择的是 Exposure(曝光),我们也可以选择 Multiplier(乘数)或者 Lux(勒克斯)。目前的曝光数值设置为 0,相当于多云黑夜中的光照强度。因为我们要模拟的是白天中午阳光很好的光照条件,所以我们可以把曝光值(Exposure)设为 14(单位为EV100),如果我们在 Volume 的 HDRI Sky 中的 Intensity Mode 里选择 Exposure 并输入 14,可以得到一个比较刺眼的画面。
此数值参考自 HDRP 文档中的“自然光强度 - 中午的蓝天“,官方参考如下。

自然光源在不同条件下的光度量:
照度.勒克斯 自然光水平
120000 非常明亮的阳光。
110000 明亮的阳光。
20000 中午的蓝天。
2000 中午阴云密布的天空。
< 1 晴朗夜空中的月光。
0.002 没有月光的繁星之夜。包括大气辉光。

人造光源的近似光度量:
光通量(流明) 光源
12.57 烛光。
< 100 小装饰灯,如小型 LED 灯。
200 - 300 装饰灯,例如不是为明亮房间提供主照明的灯。
400 - 800 普通房间的吸顶灯。
800 - 1200 大型明亮房间的吸顶灯。
1000-40000 明亮的路灯。

室内光照水平
照度(勒克斯) 房间类型
150 - 300 卧室。
300 - 500 教室。
300 - 750 厨房。
300 - 500 厨房柜台或办公室。
100 - 300 浴室。
750- 1000 超市。
30 夜晚的城市街道。


不管将 Intensity Mode 设置为 Exposure 还是 Lux,虽然我们应用了正确的数值,但是整个画面都几乎变成了白色。这是因为我们还没有为画面应用正确的曝光控制(注:这里的曝光控制和 HDRI Sky 中的曝光数值是两回事。HDRI Sky 中的曝光数值是用来控制环境光强度的)。接着我们勾选 Volume 组件上的 Exposure(曝光控制)。
这里说明一下:为了便于演示,我已经在场景中的 Sky and Fog Volume 上添加了所有需要用到的 Volume Override(重载)。如果你新建了一个 Volume,你可以通过 Volume 组件中的 Add Override(添加重载)按钮为 Volume 组件添加所需的重载。这些 Override(重载)可以理解成为 Volume 组件提供的具体功能。
我们先把 Exposure(曝光控制)的 Mode(模式)设置为 Fixed(固定),数值设置为 12(EV100),这意味着不管相机对准的是场景中哪个部分,整个画面的曝光值将会是固定的。之后我们将会应用自动曝光,因为在我们场景中有的地方在屋檐下,曝光值与阳光下的部分有所区别。在图中也可以看到,Fixed Exposure(固定曝光值)界面右侧还贴心地提供了一个滑块,可以非常直观地看到哪个数值区间适合什么样的光照条件。到目前为止,其实我们还没有正确设置整个场景的环境光,因为在 Visual Environment 中的 Ambient Mode 默认设置为 Static(静态),所以环境光会采样自 Lighting 窗口 Environment(环境光)界面中的天空。如图 13 所示,因为我们还没有在 Lighting 窗口中设置任何的环境光来源,因此目前场景中并没有使用我们设置的 HDRI Sky 来提供环境光。现在模型表面上看到的只不过是反射 HDRI Sky 的效果。

Ambient Mode 为 Static 时场景中没有来自天空的环境光 [后在光照烘焙环节,我们会讲解如何设置 Static(静态)环境光]。
要让 Volume 组件上的 HDRI Sky 为场景提供环境光,我们需要把 Visual Environment 中 Ambient Mode(环境光模式)设置为 Dynamic(动态)。如果把 Ambient Mode 设置为 Dynamic,场景中就有了来自 Volume 组件上所关联的 HDRI Sky 的环境光。

通过上述步骤,我们就为场景完成了基础环境光的设置。针对现在场景中已设置完成的环境光,我们可以做出如下总结:
通过为 Volume 组件添加 Visual Environment 重载,我们选择了 HDRI Sky 作为我们室外场景的天空。通过添加 HDRI Sky 重载,然后关联一个 HDRI Sky 天空盒(类型为Cubemap),我们正确设置了环境光强度数值。环境光影响整个场景。通过添加 Exposure 重载,我们为整个画面设置了一个固定的曝光数值,从而近似地模拟了人眼的曝光控制功能。

[下页更精彩:点击>>>>]
 [1] [2] [3] [4]

相关文章(向右看)..

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

·热点