设置剔除

在 Kanzi 渲染过程中,您可以通过设置剔除属性来优化应用程序中网格的性能。

设置剔除模式

默认情况下,Kanzi 会剔除 3D 内容中其法线背离所激活的摄像机的那些多边形。要覆盖此行为,您可以在 Pipeline State 渲染通道中设置剔除模式。

要设置剔除模式:

  1. 在 Library > Rendering > Render Pass Prefabs 中创建一个 Pipeline State 渲染通道,或选择一个现有的 Pipeline State 渲染通道。请参阅 渲染通道。

    ../../_images/create-pipeline-state-render-pass.png
  2. 在 Pipeline State 渲染通道中,创建用于绘制您要剔除的节点的渲染通道。

    例如,创建一个 Clear 渲染通道和一个 Gather Lights 渲染通道,并在 Gather Lights 渲染通道内创建一个 Draw Objects 渲染通道。

    您可以使用过滤器收集特定节点进行渲染。请参阅 过滤器 (Filters)。

  3. 在 Library 中选择 Pipeline State 渲染通道,并在 Properties 中将 Cull Mode 属性设置为:

    • Back,使 Kanzi 不渲染法线背离活动摄像机的多边形。这是 Cull Mode 属性的默认值。如果您未在 Pipeline State 渲染通道中设置 Cull Mode 属性,Kanzi 将使用最近的祖先 Pipeline State 渲染通道中为该属性设置的值。如果没有祖先 Pipeline State 渲染通道,Kanzi 将使用默认值。

    • Front 使 Kanzi 不渲染法线指向活动摄像机的多边形。

    • None 禁用剔除。

    ../../_images/cull-mode-set-to-back.png
  4. 应用您创建的渲染通道:

    1. 在 Node Tree 中选择包含您要渲染内容的 Viewport 2D 节点。

    2. 在 Properties 中,将 Render Pass Prefab 属性设置为您创建的 Pipeline State 渲染通道,或设置为包含该 Pipeline State 渲染通道的渲染通道预设。

控制视锥体剔除

当您有大量网格位于相机视锥体之外时,使用视锥体裁剪。视锥体是活动相机可见的体积,并包含其边界体积剪裁视锥体的节点。视锥体裁剪使您能够用裁剪网格所花费的 GPU 时间来换取 CPU 时间。

要控制视锥体剔除:

  1. 在 Library 中,选择您用于渲染要设置视锥体剔除的网格的 Draw Objects 渲染通道。请参阅 渲染 (Rendering)。

  2. 在 Properties 中添加并启用 Frustum Culling 属性。

    这样,Kanzi 在网格位于视锥体之外时不会渲染它们。

    ../../_images/frustum-culling-enabled.png
  3. (可选) 在 Node Tree 中,选择包含您要设置视锥体裁剪的网格的节点,在 Properties 中点击 image0,添加 Frustum Cull Margin 属性,并将其设置为您不想裁剪的节点周围的空间量。

    例如,在顶点着色器对节点的几何形状进行大幅修改时(如顶点蒙皮节点),这种做法会非常有用。

    ../../_images/frustum-cull-margin.png

要查看视锥体剔除设置是否按预期工作,请在 Preview 中单击 image1 进入 Analyze 模式,右键单击 image2,选择 Performance HUD,然后将摄像机移离您要控制剔除的节点。当该节点不再发生剔除时,Draw Count 值会下降。

另请参阅

渲染 (Rendering)

过滤器 (Filters)

减少渲染顶点的数量

设置顶点缓存的正确大小

并行加载资源

排除应用程序性能问题