目录
2.3 Physically Based Sky(基于物理的天空)
4.2 Local Volumetric Fog(局部雾效)
一、Volume框架
Volume框架是HDRP最重要的组成部分之一。Volume框架的作用总结如下:
- 为场景设置来自天空盒的环境光照。
- 设置各种阴影效果,包括场景中的Contact Shadow和Micro Shadow。
- 设置场景中的雾效。
- 设置基于屏幕空间的反射和折射(Screen Space Reflection和Screen Space Refraction)、环境光遮蔽(Ambient Occlusion)。
- 设置后处理效果(Post-processing)。
- 设置实时光线追踪(Ray Tracing)。
每个Volume的模式可以按照需要设置成Global(全局)或者Local(本地):
- Global模式意味着这个Volume是针对整个场景生效。不管相机朝向哪里,Global模式的Volume都会被计算在内。
- Local模式的Volume则只在它的碰撞体(Collider)作用区域内生效。选择Local模式后,界面上会出现Add Collider按钮,你可以单击该按钮为当前的Volume添加一个碰撞体。一般我们使用性能最好的Box Collider。当然,如果有特殊需求,也可以使用其他类型的碰撞体。
全局Volume总是对场景中的相机产生影响,而本地Volume只有当相机进入所设定的碰撞体(Collider)范围以后才会对其产生影响。
二、Volume Profile
要让Volume组件生效,需要为它添加一个Profile(配置文件)。Profile的本质是一个Scriptable Object,它本身并没有任何特殊功能,只是一个用来保存配置数据的地方。
在菜单Edit→Project Settings→HDRP Default Settings中已经包含了一个默认的Volume Profile。如果你没有在场景中设置任何Volume,那么这个默认的Volume就会起作用。因此,在场景中添加的Volume的各项属性就称为Override(重载)。
三、Volume重载
单击Volume组件中的Add Override按钮可以看到目前的Volume重载被分成了9类(这个列表并不是固定不变的,随着HDRP版本的升级,里面的内容会越来越丰富)。
1.Visual Environment(环境设置)
1.1 Sky type
可以在Sky type中选择None、Gradient Sky、HDRI Sky和Physically Based Sky四种天空类型。
- None:此Volume不会渲染天空盒。
- Gradient Sky:将渲染的天空分成高、中和低三层,你可以为这三层分别指定一个颜色。
- HDRI Sky:使用一个Cubemap(立方体贴图)来渲染整个天空。
- Physically Based Sky:用于模拟一个球状星球的天空。天空的大气层有两个部分。随着海拔高度的降低,大气层的空气密度会以指数级的速度降低。
1.2 Ambient Mode
可以选择Static和Dynamic两种模式。
- Static(静态模式):在静态模式下,整个场景的环境光来自烘焙所得的Sky环境光。可以使用Lighting窗口中的Static Lighting Sky属性设置环境光。
- Dynamic(动态模式):在动态模式下整个场景的环境光来自在Visual Environment中设置的Sky环境光,这让我们可以动态地改变当前场景中的环境光。
2.Sky
Volume组件中的Visual Environment重载的类型设置为Gradient Sky、HDRI Sky和Physically Based Sky三种天空类型:
2.1 HDRI Sky(HDRI天空)
如果在Visual Environment中将Sky设置为HDRI类型,那么需要添加HDRI Sky这个重载并进行具体设置。
- Hdri Sky
指定一张用于渲染天空的Cubemap。
- Intensity Mode(光照强度模式)
用于控制来自天空的环境光强度,有如下三种模式可选:
- Exposure:使用单位为EV100的数值来计算天空的亮度。
- Multiplier:使用一个固定的乘数来控制天空的亮度。
- Lux:使用单位为Lux的数值来计算天空的亮度。
Lux光照单位:此单位表示的光照信息只有方向信息没有强度衰减信息,也就是说此单位适合用于表示太阳光这一类对于地球来说只有角度变化、没有强度变化的光照信息。
- Rotation(旋转HDRI贴图):
拖动滑块可以旋转Cubemap从而改变当前相机可视范围内的天空显示。
- Update Mode(更新模式):
有三种更新模式可选择:
- On Changed:当一个或者多个与天空相关的参数发生变化时更新。
- On Demand:只有通过脚本中API触发才会更新。
- Realtime:按照在Update Period中指定的间隔时间自动更新。
2.2 Gradient Sky(渐变天空)
- Top、Middle和Bottom
分别用于控制大气层上半层的颜色、地平线的颜色、大气层下半层的颜色(低于地平线的那部分)。
- Gradient Diffusion
用于控制地平线部分的颜色覆盖区域的大小(Middle),分成两种情况:
- 该值大于0,默认值为1。如果设为0,则地平线部分的颜色会覆盖整个天空;值越大,地平线部分的颜色覆盖区域越小(这部分大气层看上去越厚)。
- 该值小于0,如果值小于0,则Top和Bottom区域的颜色会互换。值越小,地平线部分的颜色覆盖的区域越小(这部分大气层看上去越厚)。
- Intensity Mode
可以选择使用Exposure(单位为EV100);也可以选择使用一个固定的乘数值。
2.3 Physically Based Sky(基于物理的天空)
基于物理的天空不仅适合用于创造地球环境,也可以用于创造外星球环境。
- Planet Center Position
因为地球的直径大约为12742km,所以将这里的Y轴数值设置为-6378100m。
- Ground Color Texture
用于控制星球表面的纹理。
- Ground Tint
用于为Ground Color Texture着色。
- Ground Emission Texture
用于控制星球表面自发光部分的纹理。
- Ground Emission Multiplier
应用于Ground Emission Texture的乘数器。
3.Exposure(屏幕曝光)
曝光指的是相机感光元器件接受的光线强度。曝光的数值越高,相机接受的光线强度就越大。在设置好Sky以后,需要通过控制Exposure重载来调整当前相机所看到的整个画面。
因为HDRP是完全基于物理的渲染系统,所有的灯光设置和材质设置都是基于物理的,所以要想正常显示场景画面,就必须为场景设置正确的曝光。
如果一个Volume被添加了Exposure重载,那么所有受当前Volume影响的相机都会使用这个Exposure重载,受它的影响。这个曝光影响的是在当前Camera窗口显示的最终效果。
3.1 Mode
Volume中的Exposure重载包含五种模式:Fixed、Automatic、Automatic Histogram、 Curve Mapping和Use Physical Camera。
Fixed(固定曝光) | 使用固定数值来控制曝光,该模式可应用于曝光变化不大的场景。 HDRP的光照系统是完全基于物理的,所以可以参考物理世界真实的曝光值。(见上图 EV100的数值) |
Automatic(自动曝光) | 根据当前相机的位置信息和相关场景信息来自动调节场景曝光。非常适用于曝光随位置不同而发生变化的场景。 |
Automatic Histogram(直方图) | 这种模式下,系统会根据场景中的亮度分布自动调整曝光值。通过分析场景中的直方图信息,系统会根据亮度范围和对比度调整曝光值。 |
Curve Mapping(曲线控制曝光) | 通过曲线来控制场景的曝光。X轴代表目前场景的曝光,Y轴代表我们想要的曝光。曲线控制的方式一般留给业内专家使用。 |
Use Physical Camera(物理相机控制曝光) | 物理相机的各项属性在Camera组件中。如果选择此选项,则Volume界面中只剩下Compensation(补偿)这一项。(使用物理相机的好处是,如果你对真实世界的各种相机参数很熟悉,就可以利用已有的知识来精确控制画面的曝光) |
3.2 Metering Mode(测光模式)
用于控制如何采样场景中的灯光以进行曝光计算,有五种模式可选择:
Average(平均) | 针对整个画面进行采样,计算结果很稳定。 |
Spot(点测光) | 只针对画面中央的区域进行采样,计算结果不大稳定。如果画面中央的采样区域较暗,则整个画面可能曝光过度;反之则可能曝光不足。 |
Center Weighted(中心加权) | 取前两者的优点。相机会为画面中的每个像素添加一个权重,最中心的像素权重最大,离开中心越远的像素权重越小。最后按照每个像素的权重对曝光进行计算。 |
Mask Weighted(遮罩加权) | 该模式使用遮罩来定义不同区域的权重。用户可以创建遮罩,根据遮罩的强度或颜色等属性,调整不同区域的测光权重。 |
Procedural Mask(程序化遮罩) | 该模式使用程序化生成的遮罩来定义不同区域的权重。用户可以使用代码或着色器生成程序化的遮罩,并根据生成的遮罩调整测光权重。 |
3.3 Limit Min和Limit Max
分别用于控制场景自动曝光的最小值和最大值。可以用这两个值分别调节当相机处于场景的暗部和亮部时整体的曝光。
3.4 Compensation
类似于很多相机上的设置,用于对通过自动计算获得的曝光进行补偿。如果你想获得曝光过度或者曝光不足的效果,可以使用这个参数来控制。通常情况下设置为0。
3.5 Adaptation(适应)
用于控制画面在明暗之间变化过程中,也就是从黑暗到光明或者从光明到黑暗的转变过程中画面曝光的变化速度。可以有如下选择:
- Fixed(固定的):HDRP固定的方式,无须输入任何参数。
- Progressive(渐变的):可以设置Speed Dark to Light(从黑暗到光明的变化速度)和Speed Light to Dark(从光明到黑暗的变化速度)的值。参数值越大,曝光的变化速度越快。
4.Fog(雾效制作)
如果要制作体积雾效果(Volumetric Fog),首先要确保已经打开当前项目使用的HDRP配置文件中Lighting下的Volumetric Fog。
- Volume组件中的Fog:适合制作全局雾效。
- 顶部菜单GameObject→Rendering下的Local Volumetric Fog(需要与Fog配合使用):适合制作局部雾效,比如漂浮在空中的云团。
4.1 Volume组件中的Fog(全局雾效)
- Fog Attenuation Distance(雾效衰减距离)
用于控制雾的能见度,数值的单位为m。如果设置为10m,则意味着只能从当前位置看到10m开外的地方。
- Base Height(基础高度)
用于控制连续雾效与指数雾效的边界高度。(eg:把Base Height参数的值设置成2m,表示在从地板开始向上2m的空间里,雾是连续的,没有衰减;从2m的高度开始向上,雾开始会以指数衰减的方式显示。)
- Maximum Height(最大高度)
用于控制能够显示雾的最高高度,到了这个高度,雾的浓度会降到最底部雾浓度的37%。
- Max Fog Distance(雾效最大距离)
此最大距离以当前相机为起点。超过此最大距离以后,雾将不再被渲染。建议将此距离设置为大于相机组件中Clipping Planes→Far的数值,以防止天空盒上的雾和场景中物体上的雾看起来不一致。
- Color Mode(颜色模式)
用于控制雾的颜色:
- Constant(不变的颜色):也就是使用单一颜色;
- Sky Color(天空颜色):该颜色适合在添加了天空盒的场景中使用,HDRP会对天空的颜色进行采样来控制雾的颜色。
在Sky Color模式下,会多出一个Tint选项。Tint中的颜色会与天空色进行相乘的操作(Multiply),因此这个颜色不会大幅度改变雾的颜色。
- Volumetric Fog(体积雾)
要想让场景具有体积雾的效果或者所谓“上帝之光”的效果,就需要打开这个选项。注意,体积雾的效果比较消耗性能,所以在使用时要注意实际性能消耗,视情况而定。
- Albedo(反照率)
用于控制雾的整体颜色。不过在模拟真实世界时,我们一般不调整雾本身的颜色(雾本身是没有颜色的),因为雾反射的是天空和环境光的颜色。
- Ambient Light Probe Dimmer(环境光光照探针调光器)
使用这个参数可以调整来自天空的环境光强度。数值越大,场景中的雾越亮,反之越暗。
4.2 Local Volumetric Fog(局部雾效)
- Single Scattering Albedo(单次散射反照率)
用于控制雾的颜色。
- Fog Distance(雾效距离)
用于控制雾的浓度。
- Size(大小)
用于控制长方体的长宽高。
- Blend Distance(混合距离)
可以实现雾的边缘淡化,不让雾看上去是包含在一个长方体中。
- Density Mask Texture
可实现移动动画。
- 为它指定一个Texture3D资源作为输入,才能调整Scroll参数让雾移动起来。
- 可以设置Scroll X、Y和Z的数值,这样雾会沿着用三个数值综合计算出的移动方向进行移动。
- 可以通过调整Tiling参数在相应的方向上增加雾的厚度。
5.Material(材质)
在HDRP中,Diffusion Profile用于保存次表面散射(Subsurface Scattering)的配置信息。要让相关的次表面散射材质应用这些Diffusion Profile,需要先将它们添加到HDRP配置文件中。
HDRP允许在同一个场景中同时使用15个Diffusion Profile。
如果某些Diffusion Profile只被应用在部分场景中,我们也可以只把这些Diffusion Profile添加到当前场景的Volume组件中的Diffusion Profile Override中,这样就不需要将它们添加到应用于整个项目的HDRP配置文件中了。这样做的好处是可以减少渲染时因为要寻找到正确的Diffusion Profile而消耗的性能。这对于包含很多植被的场景尤其有用,因为通常这样的场景会有很多的重复绘制(Overdraw)。