减少着色器切换
每当渲染批次与上一批相比有不同的着色器时,Kanzi 就必须切换渲染器。由于材质可以具有自己的顶点着色器和片段着色器,因此在某些情况下,您的应用程序在渲染场景时必须多次切换着色器。
在 OpenGL 中,会将顶点着色器和片段着色器分别编译到着色器程序中,并在需要使用它们时将它们发送到 GPU 中。GPU 每次只存储一个程序。对于场景中的每个材质,必须进行至少一次着色器切换。如果对象的显示顺序需要在着色器程序之间进行频繁切换,渲染速度可能会下降。
您可以在 Kanzi Studio 预览 (Preview) 性能 HUD (Performance HUD) 中查看渲染器切换数量,也可以通过调用 getShaderSwitchCount()
在 Kanzi Engine API 中查看。请参阅排除应用程序的性能问题。
着色器切换操作会降低应用程序的性能,因此请尽量减少着色器切换次数。要减少着色器切换:
- 尝试尽可能多地使用同一个着色器。这种做法的缺陷在于,它会导致 uniform 发送计数增加。
- 按材质类型对对象进行渲染可以提高性能。请参阅按材质类型渲染节点。
按材质类型渲染节点
要按材质类型渲染节点:
- 在素材库 (Library) 中,按下 Alt 并右键点击 渲染 (Rendering) > 对象源 (Object Source),然后选择排序过滤器 (Sorting Filter)。
- 在属性 (Properties) 中设置:
- 源 (Source) 是指您要从中收集节点进行过滤的源。
例如,要将过滤器应用于工程中的所有节点,选择根对象源 (Root Object Source)。您可以选择另一个过滤器的输出作为您从中收集节点进行过滤的源。 - 排序类型 (Sorting Type) 为 材质类型 (Material type) 以按材质类型分组节点。
通过按材质类型分组节点,您可以优化您的 Kanzi 应用程序,通过这种方式,Kanzi 可以减少着色器切换的数量。 - 启用或禁用反向顺序 (Reverse Order) 属性:
- 当启用时,它会反转节点的当前顺序。
- 当禁用时,它会保留节点的当前顺序。
- 在素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) 中,创建组渲染通道 (Group Render Pass),然后在其中创建:
- 清除渲染通道 (Clear Render Pass)
- 绘图对象渲染通道 (Draw Objects Render Pass)
- 在素材库 (Library) 中选择您创建的绘图对象渲染通道 (Draw Objects Render Pass),并在属性 (Properties) 中将对象源 (Object Source) 属性设置为您创建的过滤器或设置为收集过滤器的对象资源。
- 在工程 (Project) 中,选择您要应用过滤器的场景 (Scene) 节点,然后在属性 (Properties) 中将渲染通道 (Render Pass) 属性设为组渲染通道 (Group Render Pass),其子绘图对象渲染通道 (Draw Objects Render Pass) 用作您创建的过滤器的对象源。
Kanzi Studio 渲染过滤器收集的节点。
另请参阅
使用二进制着色器
优化片段着色器
并行加载资源
着色器最佳实践
排除应用程序的性能问题
最佳实践
打开导航