遮挡剔除
对象剔除允许您不渲染在视锥中未显示的对象。遮挡剔除的特殊情况如下:
- Occluders: box, mesh.
- 具有浓密着色器的对象的硬件遮挡查询。
封堵器#
遮挡物允许剔除隐藏在其后面的几何图形。封堵器有2种类型:
要使用的封堵器类型由要剔除的几何定义。
在复杂的环境中,当许多物体相互遮挡并且渲染成本很高(它们有很多多边形和/或较重的着色器)时,遮挡器可能会非常有效。
在使用封堵器之前,请检查以下内容:
- 启用遮挡物渲染:在菜单栏中,启用了Rendering -> Occlusion Culling -> Occluders。
- 禁用了遮挡对象的阴影渲染:在菜单栏中,选择Windows -> Settings -> Occlusion Culling并启用Shadows Culling。
如有必要,可以启用阴影渲染。
Usage of occluders is shown in the Content Optimization video tutorial.
使用盒形封堵器#
occluder是一个框形形状,用于剔除对象的表面,其后部的边界不可见。这是最简单的封堵器,应与阻挡其他物体的箱形物体一起使用。例如,您可以添加一个遮挡物,遮挡物的形状与建筑物的边界重合,以避免在该建筑物后面渲染对象。
要创建盒形封堵器,请执行以下操作:
- 在菜单栏中,选择Create -> Optimization -> Occluder并将遮挡物作为子项添加到应该遮挡其他对象的节点上。
- 在Parameters窗口的Node选项卡的Common部分中,将遮挡物的位置设置为父遮挡物的位置。
- 在Node选项卡的World Occluder部分中,单击Edit Size以启用封堵器的编辑模式。通过使用阻塞器框两侧的彩色矩形来调整阻塞器的大小,使其与父节点大小一致。
您还可以使用Size参数设置沿轴的大小。
- 在摄像机和遮挡件之间指定Distance,在该位置遮挡件不会遮挡任何东西,因此应将其禁用以避免对性能造成负面影响。
要检查阻塞器如何工作,请禁用父节点,然后尝试打开和关闭阻塞器。
默认情况下,封堵器的正面用于剔除对象。但是,如果摄像机位于遮挡物内部(例如建筑物内部),则不会执行遮挡剔除。为避免这种情况,请在NodeBack Face选项卡的World Occluder部分中启用参数。
使用基于网格的遮挡物#
occluder网格 是基于任意网格的,该网格对对象的表面进行剔除,其边界在后面不可见它。封堵器网格与无法用框近似的几何一起使用。
要创建基于网格的遮挡件,请执行以下操作:
- 准备要用于封堵器的低多边形网格。
不建议使用与应该阻塞其他对象的节点相同的详细网格:阻塞器的网格应尽可能简单,以避免性能损失。
- 在菜单栏中,选择Create -> Optimization -> Occluder Mesh并指定准备的网格。
您可以随时为咬合器加载新的网格物体。
- 将阻塞器作为子对象添加到应该阻塞其他对象的节点上。
- 在Parameters窗口的Node选项卡的Common部分中,将遮挡物的位置设置为父遮挡物的位置。
- 在摄像机和遮挡件之间指定Distance,在该位置遮挡件不会遮挡任何东西,因此应将其禁用以避免对性能造成负面影响。
硬件遮挡查询#
剔除在摄影机视口中不可见的几何的另一种选择是使用硬件遮挡查询。它允许跳过对象的渲染,这些对象的边界框被另一个实体几何覆盖。结果,减少了渲染多边形的数量,并提高了性能。
要在将数据发送到GPU之前对场景进行硬件遮挡测试,请在菜单栏中打开Rendering -> Occlusion Culling -> Occlusion Query标志。
要运行硬件遮挡测试,请执行以下操作:
- 在菜单栏中,将Rendering -> Occlusion Culling -> Occlusion Query标志打开,以启用对场景的测试,然后再将数据发送到GPU。
- 对于所有应该剔除的对象,在ParametersCulled by Occlusion Query窗口的Node选项卡中启用标志。
仅对设置了此标志的节点进行硬件遮挡剔除测试。
为对象启用剔除后,将为其呈现遮挡查询框。
遮挡查询框与对象边界框的大小一致。当此框重叠时(即不在相机视口中),将突出显示红色,这意味着未通过遮挡测试并且将不会绘制网格。
遮挡查询测试通过 |
遮挡查询测试失败,未显示实物球 |
您可以通过启用第二个线框模式以查看场景中的所有三角形来检查此技术的效果。在控制台中输入 render_show_triangles 2 并检查遮挡的多边形的作用方式。
“内容优化”视频教程中也提供了使用硬件遮挡查询的示例。内容优化 视频教程.