减少着色器切换

每当渲染批次与上一批相比有不同的着色器时,Kanzi 就必须切换渲染器。由于材质可以具有自己的顶点着色器和片段着色器,因此在某些情况下,您的应用程序在渲染场景时必须多次切换着色器。

在 OpenGL 中,会将顶点着色器和片段着色器分别编译到着色器程序中,并在需要使用它们时将它们发送到 GPU 中。GPU 每次只存储一个程序。对于场景中的每个材质,必须进行至少一次着色器切换。如果对象的显示顺序需要在着色器程序之间进行频繁切换,渲染速度可能会下降。

您可以在 Kanzi Studio 预览 (Preview) 性能 HUD (Performance HUD) 中查看渲染器切换数量,也可以通过调用 getShaderSwitchCount()Kanzi Engine API 中查看。请参阅排除应用程序的性能问题

着色器切换操作会降低应用程序的性能,因此请尽量减少着色器切换次数。要减少着色器切换:

按材质类型渲染节点

要按材质类型渲染节点:

  1. 素材库 (Library) 中,按下 Alt 并右键点击 渲染 (Rendering) > 对象源 (Object Source),然后选择排序过滤器 (Sorting Filter)
  2. 属性 (Properties) 中设置:
    • 源 (Source) 是指您要从中收集节点进行过滤的源。
      例如,要将过滤器应用于工程中的所有节点,选择根对象源 (Root Object Source)。您可以选择另一个过滤器的输出作为您从中收集节点进行过滤的源。
    • 排序类型 (Sorting Type)材质类型 (Material type) 以按材质类型分组节点。
      通过按材质类型分组节点,您可以优化您的 Kanzi 应用程序,通过这种方式,Kanzi 可以减少着色器切换的数量。
    • 启用或禁用反向顺序 (Reverse Order) 属性:
      • 当启用时,它会反转节点的当前顺序。
      • 当禁用时,它会保留节点的当前顺序。
  3. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) 中,创建组渲染通道 (Group Render Pass),然后在其中创建:
    • 清除渲染通道 (Clear Render Pass)
    • 绘图对象渲染通道 (Draw Objects Render Pass)
  4. 素材库 (Library) 中选择您创建的绘图对象渲染通道 (Draw Objects Render Pass),并在属性 (Properties) 中将对象源 (Object Source) 属性设置为您创建的过滤器或设置为收集过滤器的对象资源。
  5. 工程 (Project) 中,选择您要应用过滤器的场景 (Scene) 节点,然后在属性 (Properties) 中将渲染通道 (Render Pass) 属性设为组渲染通道 (Group Render Pass),其子绘图对象渲染通道 (Draw Objects Render Pass) 用作您创建的过滤器的对象源。

    Kanzi Studio 渲染过滤器收集的节点。

另请参阅

使用二进制着色器

优化片段着色器

并行加载资源

着色器最佳实践

排除应用程序的性能问题

最佳实践