密度体积 (Density Volume)
您可能希望在场景中使用雾效,但全局雾无法自动产生。在这些情况下,可以使用局部雾。要添加局部雾,请使用“密度体积”。密度体积是一种表示为定向包围盒的加法雾效体积。默认情况下,雾是恒定的(均质),但可以通过在 Density Mask Texture 部分下的 Texture 字段中指定密度遮罩 (Density Mask) 3D 纹理来进行更改。目前,HDRP 支持 32x32x32 分辨率的 3D 纹理。
HDRP 对密度体积进行体素化以提高性能。这会导致两个限制:
- 密度体积不支持体积阴影 (volumetric shadowing)。如果在光源和表面之间放置一个密度体积,该体积不会降低到达表面的光强度。
- 密度体积以非常粗略的速率进行体素化,通常沿着摄像机的焦轴仅有 64 或 128 个切片。这可能会导致体积边界出现明显的锯齿现象。如果可能,可以使用密度体积和一些全局雾相结合的方式来隐藏锯齿问题。还可以使用密度遮罩 (Density Mask) 和非零的混合距离 (Blend Distance) 来降低边缘的硬度。
要创建密度体积,请在层级视图中单击鼠标右键,然后选择 Rendering > Density Volume。或者,也可以使用屏幕顶部的菜单栏,导航到 GameObject > Rendering > Density Volume。
属性
属性 | 描述 |
---|---|
Single Scattering Albedo | 设置雾效颜色。体积雾 (Volumetric Fog) 对光照进行着色,因此该雾效会将光散射到此颜色。只会对雾后方或内部的光源发出的光照进行着色。这意味着不会对雾后方或内部的游戏对象反射出去的光照进行着色:随着雾密度的增加,反射的光照只会变暗(逐渐变为黑色)。例如,如果使用红色 Single Scattering Albedo 在雾后面的白墙上发出光照,则雾看起来是红色的。如果在白墙上发出光照并从雾的另一侧观察,则会看到雾使光线变暗,而不会使光线着色为红色。 |
Fog Distance | 控制雾的基础密度,决定了透过雾可以看到的距离(以米为单位)。在此距离处,雾已吸收并散射 63% 的背景光。 |
Size | 控制体积尺寸。 |
Per Axis Control | 启用此属性可以控制每个轴的混合距离,而不是进行全局控制。 |
Blend Distance | Blend Distance 可以创建从体积内部雾化级别到外部雾化级别的线性淡化。这不是百分比,而是与体积(由 Size 属性定义)边缘开始淡化的位置之间的绝对距离。Unity 将此值的范围钳制为 0 到 Size 属性最低轴值的一半。如果使用 Normal 选项卡,则可以更改名为 Blend Distance 的单浮点值(该值使每个方向都均匀淡化)。如果打开 Advanced 选项卡,每个轴可以使用两个淡化(每个方向对应一个)。例如,在 X 轴上,从左到右可以有一个,从右到左也有一个。将此距离设置为 0 会隐藏淡化,而将此距离设置为 1 会产生淡化。 |
Invert Blend | 反转淡化方向。将每个轴上的 Blend Distance 设置为最大可能值可以使雾在体积中心保留,而使边缘淡化。反转混合设置会淡化中心而保留边缘。 |
Distance Fade Start | 距摄像机多远时密度体积开始淡出。当优化具有许多密度体积的场景并使远距离的体积消失时,此属性非常有用。 |
Distance Fade End | 距摄像机多远时密度体积完全淡出。当优化具有许多密度体积的场景并使远距离的体积消失时,此属性非常有用。 |
Density Mask Texture | 指定映射到体积内部的 3D 纹理。密度体积仅使用纹理的 Alpha 通道。纹理的值用作密度乘数。纹理值为 0 会产生体积为 0 的密度,而纹理值为 1 会产生原始恒定(均质)体积。 |
Scroll Speed | 指定密度体积滚动纹理的速度(按每个轴)。如果将每个轴设置为 0,则密度体积不会滚动纹理,因此雾是静态的。 |
Tiling | 指定纹理在每个轴上的平铺率。例如,将 X 轴分量设置为 2 意味着纹理在体积内部的 X 轴上重复 2 次。 |
创建密度遮罩纹理 (Density Mask Texture)
- 在自选的图像编辑软件中,准备一个灰度 2D 纹理,其值介于 0 和 1 之间,大小为 1024x32。此大小描述了一个大小为 32x32x32 的 3D 纹理(32 个切片逐个布局)。
- 将此纹理导入 Unity 编辑器中,并设置纹理导入设置 (Texture Import Settings):
2.1.将 Texture Type 设置为 Single Channel。
2.2.将 Channel 设置为 Alpha。
2.3.启用 Read/Write Enabled 复选框。
- 导航到 Window > Rendering > Density Volume Texture Tool。
- 将您的纹理拖放到 Slice Texture 字段中,并将 Texture Slice Size 设置为 32。
- 单击 Create 3D Texture,该工具将生成另一种格式的可用作密度遮罩的纹理。
- 打开 Density Volume 组件,并将刚刚生成的纹理指定给 Density Mask Texture 部分中的 Texture 字段。