找回密码
 立即注册
查看: 541|回复: 1

Unity HDRP管线 反射探针分辨率只有256怎么办?

[复制链接]
发表于 2021-12-1 18:58 | 显示全部楼层 |阅读模式
综述

反射探针,顾名思义,就是为反射效果获取外界信息的探测器。
在场景中未使用反射探针时,场景中具有反射(包括镜面反射Specular和金属反射Metallic)的物体会使用天空贴图(包括天空面 Sky Plane / 天空盒 Sky Box / 天空球 Sky Dome)的信息来制作反射效果。
在简单场景中,只使用天空贴图的反射尚且勉强够用;在复杂多样的近真实场景中,这样的反射就有点不够看了。



因此,我们通过引入反射探针来为场景中需要生成更加真实的反射效果的物体提供额外的信息支持。
反射探针蕴含的思想,不仅和天空盒贴图一脉相承,而且实际上是互逆的:天空盒贴图通过Cube map纹理获取像素信息,渲染场景;而反射探针通过获取范围内场景信息,输出Cube map形式的反射贴图。



在添加了反射探针后,反射探针范围内的物体将自动获取该探针,并将其加入Mesh Renderer中。



类型 Type

烘焙 Baked

在默认设置下,反射探针的Reflection Probe组件类型为烘焙 Baked,只会在面板的烘焙按钮被按下的时候记录场景信息并生成一个固定的对应反照贴图;此后无论场景或物体本身是否移动,均不会对贴图进行更新。







虽然在运行模式 Play Mode中反射贴图是固定的,但在编辑模式 Edit Mode中搭建场景时,可以通过在光照设置的场景面板勾选自动生成光照的方式使编辑器在场景发生更改时自动更新烘焙光照。

自定义 Custom

自定义模式下反射探针提供了两个额外的参数:动态物体 Dynamic Objects和反射贴图 Cube map



其中,反射贴图用于接收指定的自定义反射贴图,并将其作为探针的输出贴图;而动态物体则在勾选后允许光照探针烘焙非静态物体到反射贴图上。
实时 Realtime

实时模式同样提供了两个额外的参数:刷新模式 Refresh Mode和 时间切片 Time Slicing



刷新模式 Refresh Mode

刷新模式提供唤醒时 On Awake、逐帧 Every frame和仅脚本 Via scripting三种参数。



在唤醒时模式下,光照信息只会在场景可见的第一帧生成一次,之后便不再更新。
使用该参数的实时类型反射探针和使用烘焙类型的探针的共同点是都只会生成一次,后续不再进行更新;
区别是烘焙类型的探针在开发周期中便已经完成生成,此后无论场景加载多少次,贴图都不再产生变化;
而使用唤醒时的实时反射探针在每次场景可见的第一帧都会生成一次贴图,从而支持昼夜、新增物体等效果。
逐帧模式则是每一帧都刷新一次光照贴图,能够保证最好的动态效果~~以及肉眼可见的巨大消耗~~。
仅脚本模式则是只有当有脚本调用时才进行光照贴图的刷新,这使得刷新的频率可以通过脚本进行控制(比如通过一个布尔值切换是否进行逐帧刷新,使探针仅在范围内有无法忽视的动态变化时启用逐帧刷新),但脚本调用无法在时间切片规定的最小刷新间隔内重复刷新
时间切片 Time Slicing

时间切片的参数决定了编辑器将如何分配反射探针的Cube map反射贴图的渲染负载。对唤醒时模式该选项不同参数的影响比较有限,然而在通过仅脚本和逐帧模式调用刷新时,这个选项的参数就会产生明显的区别。



在讲参数细节之前,我们首先需要简单说一下,Unity本身是如何计算反射探针产生的反射贴图的。
一个实时的反射贴图通常需要三步生成:计算贴图的所有面(对Cube map而言,是六个),选择合适的降采样 mipmap 级别 *level(用于支持平滑反射 Glossy Reflection*,提升Smoothness调节效果),将计算结果拷贝到贴图中
而时间切片的参数,就决定了编辑器在刷新时如何分配这些计算任务。
全面渲染 All faces at once 模式下,贴图的所有面会在第1帧就全部渲染,然后使用接下来的8帧完成剩余工作。也就是说,在该模式下一次刷新需要一共9帧,在上一次刷新9帧以内的任何调用都是无效的。
而在逐面渲染 Individual faces 模式下,编辑器会给每一个面分配一整个帧进行渲染。在反射探针的Cube map背景下,这个模式会在全面渲染的基础上要求额外的五帧,用于从第1帧分出来的另外五个面。因此,该模式下一次刷新需要14帧。同样地,在这个刷新周期内发生的任何重复调用也不会被响应。
不切片 No time slicing 模式正如其名,编辑器会直接将所有的渲染任务全部扔进1帧执行,配合使用逐帧选项的刷新模式,就能实现真正的实时动态反射~~但代价是突破天际的沉重负载~~。
对于不希望陷入过多细节中的小伙伴,这里提供一个简单的感性认知供参考:no time slicing提供~~整盒德芙级别的~~ 非常丝滑的过渡,all face at once 就有一点卡顿的感觉,而individual faces 卡顿感更强,但性能表现最佳。
运行设置 Runtime Settings

重要性 Importance

重要性属性提供了一个高优先级参数,用于在同一个网格渲染器 Mesh Renderer 中有多个能产生影响的反射探针时,计算各探针的权重。最终的结果将根据权重比例对各探针输出进行混合得到。
在计算权重时,编辑器首先将对比各影响探针的重要性数值,并只保留数值最大的一批探针,其余探针权重直接置0。如果保留的探针数量多于1个,再根据各探针的相对体积计算权重。
这是默认的探针排序选项所采用的设置,通过在项目设置中进行修改,可以使探针只使用重要性或只使用大小进行排序,同样也可以关闭探针排序。




当一个物体逐渐离开当前重要性最高的探针的包围盒时,将使用混合过渡到新的最重要探针。
关于交叉体积的定义:反射探针包围盒与物体之间相交体积的大小。
关于交叉体积权重的计算:即各反射探针交叉体积占所有探针交叉体积之和的比例。
如甲探针交叉体积为1,乙探针交叉体积为2,设甲乙探针重要性相同且均为影响物体丙探针中重要性值最高的一批探针;那么有甲探针影响权重 W甲 = 1.0/(1.0+2.0) = 0.33,乙探针影响权重 W乙 = 2.0/(1.0+2.0)=0.67
特别地,对于一组拥有俄罗斯套娃式包围盒的探针组合,当一个物体被里面的小探针包围盒完全覆盖时,小探针对该物体的影响权重将置1,大探针权重置0;当物体逐渐脱离小探针包围盒,则会使用混合逐渐过渡到大探针。即当处于多个探针包围盒中且各探针包围盒逐级包裹下级探针包围盒时,默认最小包围盒探针为最重要探针
当然,这一切的前提是项目设置中将反射探针的混合开启。如果将反射探针的启用选项设为关闭或简单,将不会进行混合。
强度 Intensity

反射强度决定了物体反射多大比例的光到附近的环境中。这不仅决定了物体表面反射贴图的亮度,也会导致投射的阴影(如果开启了阴影投射)和周围的环境光发生对应改变。







盒体投影 Box Projection

在未开启盒体投影时,反射贴图的图像通常是通过从无限远处投射的。这使得不同的角度都能看到反射图案,但同时也使反射图案不会因观察者的距离改变而相应改变。在室内场景中,这可能会导致失真和僵硬的画面表现。
此处欠一个室内的动图债
开启盒体投影允许我们使用探针包围盒尺寸Probe Size 、探针包围盒偏移 *Probe Offset 以及*镜头与反射物体的距离作为参数,控制反射探针所生成的反射贴图的尺寸和效果。
此处欠一个室内开启投影的动图债
通常情况下,Unity默认开启反射探针的盒体投影支持。如果想自定义不同画面质量是否支持盒体投影效果,可以在编辑面板 Edit →项目设置 Project Settings →图像设置 Graphics →画面分级设置 Tier Settings 中取消勾选使用默认设置 Use Defaults ,并进行自定义设置。



混合距离 Blend Distance

这个选项需要使用延迟渲染路径 Deferred Rendering Path 才能开启,因为该选项用于延迟探针控制混合效果距离,而延迟探针需要延迟渲染路径的支持。
与UE默认延迟渲染路径不同,Unity默认工程设置均为前向渲染路径 Forward Rendering Path ,因此如果需要使用延迟探针,同样需要手动在画面分级设置中调整渲染路径。



盒体缩放和偏移 Box Size & Box Offset

这两个属性提供了对探针包围盒的缩放和偏移的控制,与碰撞盒控制类似。
下图可以看到,随包围盒逐渐离开右侧球体,中心物体反射出的贴图上右侧球体的纹理也越来越模糊。







盒体贴图捕捉设置 Cube map Capture Settings

分辨率 Resolution

控制反射贴图的精度,更高分辨率能够提供更加精准、细腻的贴图。



下图是使用2048分辨率的反射贴图。可以看到精细度和细节上比上图默认的128分辨率有了很大的提升。



高动态范围成像(HDR/HDRI)  High Dynamic Range Imaging

标旗选项,是否开启HDR纹理支持。
高动态范围图像(High-Dynamic Range,简称HDR),相比普通的图像,可以提供更多的动态范围和图像细节,根据不同的曝光时间的LDR(Low-Dynamic Range,低动态范围图像),并利用每个曝光时间相对应最佳细节的LDR图像来合成最终HDR图像。它能够更好地反映出真实环境中的视觉效果。
阴影距离 Shadow Distance

即阴影的反射距离控制参数。数值越小,在反射贴图中阴影显示越近,越精确。置0时会完全关闭阴影在反射贴图上的生成。



清除标旗 Clear Flags

这个标旗决定了在渲染探针时要清除的内容。
背景色 Background

提供背景色的自定义调色板。
裁剪遮罩 Culling Mask

裁剪遮罩允许反射探针对场景中物体进行筛选,只在贴图上反射通过反射遮罩过滤的物体。
下图中将右侧物体所在层级 Layer 在裁剪遮罩中取消了勾选。可以看到右侧物体现在完全不会在反射贴图中显示。



遮挡剔除标旗 Use Occlusion Culling

这个标旗提供了一个使用遮挡剔除的开关。开启后会依据场景的遮挡剔除设置相应对反射贴图进行修正,以提供与场景设置一致的,正确的反射效果。
裁剪面 Clipping Planes

裁剪面提供了最大范围和最小范围两个参数,用于控制探针渲染时的近裁剪面距离和远裁剪面距离。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-12-1 19:06 | 显示全部楼层
综述

反射探针,顾名思义,就是为反射效果获取外界信息的探测器。
在场景中未使用反射探针时,场景中具有反射(包括镜面反射Specular和金属反射Metallic)的物体会使用天空贴图(包括天空面 Sky Plane / 天空盒 Sky Box / 天空球 Sky Dome)的信息来制作反射效果。
在简单场景中,只使用天空贴图的反射尚且勉强够用;在复杂多样的近真实场景中,这样的反射就有点不够看了。




因此,我们通过引入反射探针来为场景中需要生成更加真实的反射效果的物体提供额外的信息支持。
反射探针蕴含的思想,不仅和天空盒贴图一脉相承,而且实际上是互逆的:天空盒贴图通过Cube map纹理获取像素信息,渲染场景;而反射探针通过获取范围内场景信息,输出Cube map形式的反射贴图。




在添加了反射探针后,反射探针范围内的物体将自动获取该探针,并将其加入Mesh Renderer中。




类型 Type

烘焙 Baked

在默认设置下,反射探针的Reflection Probe组件类型为烘焙 Baked,只会在面板的烘焙按钮被按下的时候记录场景信息并生成一个固定的对应反照贴图;此后无论场景或物体本身是否移动,均不会对贴图进行更新。








虽然在运行模式 Play Mode中反射贴图是固定的,但在编辑模式 Edit Mode中搭建场景时,可以通过在光照设置的场景面板勾选自动生成光照的方式使编辑器在场景发生更改时自动更新烘焙光照。

自定义 Custom

自定义模式下反射探针提供了两个额外的参数:动态物体 Dynamic Objects和反射贴图 Cube map




其中,反射贴图用于接收指定的自定义反射贴图,并将其作为探针的输出贴图;而动态物体则在勾选后允许光照探针烘焙非静态物体到反射贴图上。
实时 Realtime

实时模式同样提供了两个额外的参数:刷新模式 Refresh Mode和 时间切片 Time Slicing




刷新模式 Refresh Mode

刷新模式提供唤醒时 On Awake、逐帧 Every frame和仅脚本 Via scripting三种参数。




在唤醒时模式下,光照信息只会在场景可见的第一帧生成一次,之后便不再更新。
使用该参数的实时类型反射探针和使用烘焙类型的探针的共同点是都只会生成一次,后续不再进行更新;
区别是烘焙类型的探针在开发周期中便已经完成生成,此后无论场景加载多少次,贴图都不再产生变化;
而使用唤醒时的实时反射探针在每次场景可见的第一帧都会生成一次贴图,从而支持昼夜、新增物体等效果。
逐帧模式则是每一帧都刷新一次光照贴图,能够保证最好的动态效果~~以及肉眼可见的巨大消耗~~。
仅脚本模式则是只有当有脚本调用时才进行光照贴图的刷新,这使得刷新的频率可以通过脚本进行控制(比如通过一个布尔值切换是否进行逐帧刷新,使探针仅在范围内有无法忽视的动态变化时启用逐帧刷新),但脚本调用无法在时间切片规定的最小刷新间隔内重复刷新
时间切片 Time Slicing

时间切片的参数决定了编辑器将如何分配反射探针的Cube map反射贴图的渲染负载。对唤醒时模式该选项不同参数的影响比较有限,然而在通过仅脚本和逐帧模式调用刷新时,这个选项的参数就会产生明显的区别。




在讲参数细节之前,我们首先需要简单说一下,Unity本身是如何计算反射探针产生的反射贴图的。
一个实时的反射贴图通常需要三步生成:计算贴图的所有面(对Cube map而言,是六个),选择合适的降采样 mipmap 级别 *level(用于支持平滑反射 Glossy Reflection*,提升Smoothness调节效果),将计算结果拷贝到贴图中
而时间切片的参数,就决定了编辑器在刷新时如何分配这些计算任务。
全面渲染 All faces at once 模式下,贴图的所有面会在第1帧就全部渲染,然后使用接下来的8帧完成剩余工作。也就是说,在该模式下一次刷新需要一共9帧,在上一次刷新9帧以内的任何调用都是无效的。
而在逐面渲染 Individual faces 模式下,编辑器会给每一个面分配一整个帧进行渲染。在反射探针的Cube map背景下,这个模式会在全面渲染的基础上要求额外的五帧,用于从第1帧分出来的另外五个面。因此,该模式下一次刷新需要14帧。同样地,在这个刷新周期内发生的任何重复调用也不会被响应。
不切片 No time slicing 模式正如其名,编辑器会直接将所有的渲染任务全部扔进1帧执行,配合使用逐帧选项的刷新模式,就能实现真正的实时动态反射~~但代价是突破天际的沉重负载~~。
对于不希望陷入过多细节中的小伙伴,这里提供一个简单的感性认知供参考:no time slicing提供~~整盒德芙级别的~~ 非常丝滑的过渡,all face at once 就有一点卡顿的感觉,而individual faces 卡顿感更强,但性能表现最佳。
运行设置 Runtime Settings

重要性 Importance

重要性属性提供了一个高优先级参数,用于在同一个网格渲染器 Mesh Renderer 中有多个能产生影响的反射探针时,计算各探针的权重。最终的结果将根据权重比例对各探针输出进行混合得到。
在计算权重时,编辑器首先将对比各影响探针的重要性数值,并只保留数值最大的一批探针,其余探针权重直接置0。如果保留的探针数量多于1个,再根据各探针的相对体积计算权重。
这是默认的探针排序选项所采用的设置,通过在项目设置中进行修改,可以使探针只使用重要性或只使用大小进行排序,同样也可以关闭探针排序。




当一个物体逐渐离开当前重要性最高的探针的包围盒时,将使用混合过渡到新的最重要探针。
关于交叉体积的定义:反射探针包围盒与物体之间相交体积的大小。
关于交叉体积权重的计算:即各反射探针交叉体积占所有探针交叉体积之和的比例。
如甲探针交叉体积为1,乙探针交叉体积为2,设甲乙探针重要性相同且均为影响物体丙探针中重要性值最高的一批探针;那么有甲探针影响权重 W甲 = 1.0/(1.0+2.0) = 0.33,乙探针影响权重 W乙 = 2.0/(1.0+2.0)=0.67
特别地,对于一组拥有俄罗斯套娃式包围盒的探针组合,当一个物体被里面的小探针包围盒完全覆盖时,小探针对该物体的影响权重将置1,大探针权重置0;当物体逐渐脱离小探针包围盒,则会使用混合逐渐过渡到大探针。即当处于多个探针包围盒中且各探针包围盒逐级包裹下级探针包围盒时,默认最小包围盒探针为最重要探针
当然,这一切的前提是项目设置中将反射探针的混合开启。如果将反射探针的启用选项设为关闭或简单,将不会进行混合。
强度 Intensity

反射强度决定了物体反射多大比例的光到附近的环境中。这不仅决定了物体表面反射贴图的亮度,也会导致投射的阴影(如果开启了阴影投射)和周围的环境光发生对应改变。








盒体投影 Box Projection

在未开启盒体投影时,反射贴图的图像通常是通过从无限远处投射的。这使得不同的角度都能看到反射图案,但同时也使反射图案不会因观察者的距离改变而相应改变。在室内场景中,这可能会导致失真和僵硬的画面表现。
此处欠一个室内的动图债
开启盒体投影允许我们使用探针包围盒尺寸Probe Size 、探针包围盒偏移 *Probe Offset 以及*镜头与反射物体的距离作为参数,控制反射探针所生成的反射贴图的尺寸和效果。
此处欠一个室内开启投影的动图债
通常情况下,Unity默认开启反射探针的盒体投影支持。如果想自定义不同画面质量是否支持盒体投影效果,可以在编辑面板 Edit →项目设置 Project Settings →图像设置 Graphics →画面分级设置 Tier Settings 中取消勾选使用默认设置 Use Defaults ,并进行自定义设置。




混合距离 Blend Distance

这个选项需要使用延迟渲染路径 Deferred Rendering Path 才能开启,因为该选项用于延迟探针控制混合效果距离,而延迟探针需要延迟渲染路径的支持。
与UE默认延迟渲染路径不同,Unity默认工程设置均为前向渲染路径 Forward Rendering Path ,因此如果需要使用延迟探针,同样需要手动在画面分级设置中调整渲染路径。




盒体缩放和偏移 Box Size & Box Offset

这两个属性提供了对探针包围盒的缩放和偏移的控制,与碰撞盒控制类似。
下图可以看到,随包围盒逐渐离开右侧球体,中心物体反射出的贴图上右侧球体的纹理也越来越模糊。








盒体贴图捕捉设置 Cube map Capture Settings

分辨率 Resolution

控制反射贴图的精度,更高分辨率能够提供更加精准、细腻的贴图。




下图是使用2048分辨率的反射贴图。可以看到精细度和细节上比上图默认的128分辨率有了很大的提升。




高动态范围成像(HDR/HDRI)  High Dynamic Range Imaging

标旗选项,是否开启HDR纹理支持。
高动态范围图像(High-Dynamic Range,简称HDR),相比普通的图像,可以提供更多的动态范围和图像细节,根据不同的曝光时间的LDR(Low-Dynamic Range,低动态范围图像),并利用每个曝光时间相对应最佳细节的LDR图像来合成最终HDR图像。它能够更好地反映出真实环境中的视觉效果。
阴影距离 Shadow Distance

即阴影的反射距离控制参数。数值越小,在反射贴图中阴影显示越近,越精确。置0时会完全关闭阴影在反射贴图上的生成。




清除标旗 Clear Flags

这个标旗决定了在渲染探针时要清除的内容。
背景色 Background

提供背景色的自定义调色板。
裁剪遮罩 Culling Mask

裁剪遮罩允许反射探针对场景中物体进行筛选,只在贴图上反射通过反射遮罩过滤的物体。
下图中将右侧物体所在层级 Layer 在裁剪遮罩中取消了勾选。可以看到右侧物体现在完全不会在反射贴图中显示。




遮挡剔除标旗 Use Occlusion Culling

这个标旗提供了一个使用遮挡剔除的开关。开启后会依据场景的遮挡剔除设置相应对反射贴图进行修正,以提供与场景设置一致的,正确的反射效果。
裁剪面 Clipping Planes

裁剪面提供了最大范围和最小范围两个参数,用于控制探针渲染时的近裁剪面距离和远裁剪面距离。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-23 03:23 , Processed in 0.122605 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表