mcpField
R
reduce-draw-calls

reduce-draw-calls

github.com/playcanvas开发31286 次安装1 周前更新
代码仓库

关于 reduce-draw-calls

此图形优化 Skill 指导开发者测量并减少绘制调用,并在适用时使用批处理或硬件实例化。它还建议进行像素验证,以检查渲染图像是否保持不变。

主要功能

  1. 01测量绘制调用数量
  2. 02禁用隐藏元素
  3. 03使用 BatchManager 分组几何体
  4. 04采用硬件实例化
  5. 05通过像素验证检查渲染

适用场景

  1. 01诊断绘制调用瓶颈
  2. 02批处理静态或动态几何体
  3. 03渲染同一网格的多个副本
  4. 04优化后验证视觉输出

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/playcanvas/skills --skill reduce-draw-calls

安装后在 Claude Code 中输入/reduce-draw-calls确认已加载。

详细介绍

减少 draw call

先用 app.stats.drawCallCount 或 MiniStats 进行测量;按 pass 细分的 app.stats.drawCalls 明细仅在 profiler 构建中填充。此外,将像素比减半并调用 app.resizeCanvas(): 如果帧时间下降,说明瓶颈是填充率,而不是 draw call。在满足预算的第一个层级就停止,并报告优化前后的数量。

1. 停止绘制隐藏对象

不透明度为 0 的元素仍会被绘制。请设置 enabled = false。

2. BatchManager

调用 app.batcher.addGroup(name, dynamic, maxAabbSize),然后在 render、sprite 或 element 组件上设置 batchGroupId。对于永不移动的几何体,使用 dynamic: false。成员在实时树中被启用时加入,顺序不限,且当成员关系变化时分组会自动重新生成。仅在移动静态分组的成员后调用 markGroupDirty(id)。手动 AppOptions 引导必须设置 batchManager。

3. 硬件实例化

适用于同一 mesh 和材质的大量副本,且每帧变换不同的情况。使用 VertexFormat.getDefaultInstancingFormat(device) 构建缓冲区,每个实例一个 mat4,并调用 meshInstance.setInstancing(vb);instancingCount 随缓冲区而定。

没有逐实例剔除。默认情况下该分组始终绘制;setInstancing(vb, true) 会将其作为一个整体,针对覆盖所有实例的 RenderComponent#customAabb 进行剔除。将大型 实例集拆分为空间块。自定义顶点块需要 INSTANCING 路径 (override-shader-chunks)。从 graphics/instancing-basic 和 graphics/instancing-custom 示例开始。

使用 verify-pixels 确认图像未发生变化。

评论

支持 Markdown