减少着色器切换¶
Kanzi 必须在每次渲染批次与前一个批次的着色器不同时切换着色器。因为材质可以有自己的顶点和片段着色器,在某些情况下,您的应用程序在渲染场景时必须多次切换着色器。
在 OpenGL 中,顶点和片段着色器各自编译成一个着色器程序,并在需要使用时发送到 GPU。GPU 一次只存储一个程序。在场景中的每种材质至少需要进行一次着色器切换。如果对象的呈现顺序需要频繁切换着色器程序,渲染速度可能会变慢。
您可以在 Kanzi Studio Preview Performance HUD 中查看着色器切换的数量,或在 Kanzi Engine API 中通过调用 Renderer::getShaderSwitchCount 查看。请参阅 排除应用程序性能问题。
着色器切换操作会降低应用程序的性能,因此请尽量减少着色器切换次数。要减少着色器切换:
尽量多次使用相同的着色器。这种方法的缺点是它可能会增加 uniform 发送的次数。
按材质类型渲染对象以提高性能。请参阅 按材质类型渲染节点。
按材质类型渲染节点¶
要按材质类型渲染节点:
在 Library 按 Alt 并右键单击 Rendering > Object Sources 中选择 Sorting Filter。
在 Properties 集中:
Source 到您要从中收集节点以进行过滤的源。 例如,要将您的过滤器应用于项目中的所有节点,请选择 Root Object Source。 您可以选择另一个过滤器的输出作为您收集节点以进行过滤的源。
Sorting Type 到 Material type 以按材质类型对节点进行分组。通过按材质类型对节点进行分组,您可以优化您的 Kanzi 应用程序,因为这样 Kanzi 可以减少着色器切换的次数。
启用或禁用 Reverse Order 属性:
当启用时,它会反转节点的当前顺序。
当禁用时,它会保留节点的当前顺序。
在 Library > Rendering > Render Pass Prefabs 中创建一个 Group Render Pass,并在其中创建:
Clear Render Pass
Gather Lights Render Pass 和其中的 Draw Objects Render Pass
在 Library 中,选择您创建的 Draw Objects Render Pass,并在 Properties 中将 Object Source 属性设置为您创建的过滤器或收集过滤器的对象源。
在 Node Tree 中,选择要应用过滤器的 Viewport 2D 节点,并在 Properties 中将 Render Pass Prefab 属性设置为其后代 Draw Objects Render Pass 使用您创建的过滤器作为其对象源的 Group Render Pass。
Kanzi Studio 渲染由过滤器收集的节点。