mcpField
P
performance

performance

github.com/drawcall-ai开发112 次安装
代码仓库

关于 performance

面向游戏开发者的性能优化技能,指导如何先用 vitexec 分析运行时瓶颈,再针对绘制调用、GPU 工作量或逐帧 CPU 开销采取措施。内容涵盖实例化、剔除、对象复用和分摊计算。

主要功能

  1. 01用性能追踪定位瓶颈
  2. 02通过实例化减少绘制调用
  3. 03合并静态几何体
  4. 04使用剔除与 LOD 降低 GPU 负担
  5. 05复用对象并分摊逐帧计算

适用场景

  1. 01排查大型场景中的帧率卡顿
  2. 02优化大量重复物体的渲染
  3. 03减少透明粒子和阴影开销
  4. 04降低更新循环中的分配与垃圾回收

安装

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

$npx skills add https://github.com/drawcall-ai/skills --skill performance

安装后在 Claude Code 中输入/performance确认已加载。

详细介绍

性能

一个只有少量物体时运行流畅的场景,在加入人群、粒子和大型地图后就会卡顿。帧率受三项预算限制——绘制调用、GPU 工作量和每帧 CPU 开销/内存分配——下面的优化手段分别针对其中一项。先测量,再修复实际瓶颈。

先测量

不要凭猜测。使用 vitexec --performance-trace 对运行中的游戏进行性能分析(针对热点函数,还可以使用 --cpu-profile)。根据帧时间的来源判断:每帧脚本/JS 耗时长且主线程繁忙,说明受 CPU 限制(采用“减少每帧 CPU 开销”);主线程开销低,但 GPU/渲染耗时高、绘制调用多或过度绘制严重,说明受 GPU 限制(采用“减少 GPU 工作量”/“减少绘制调用”)。修复性能跟踪实际指出的瓶颈,而不是你假设的瓶颈。

减少绘制调用

每个独立网格大致需要一次绘制调用;成千上万个网格会让 CPU 在提交工作时受阻。

  • 实例化:将同一几何体的多个副本(树木、岩石、草、子弹、相同的敌人)作为一个 InstancedMesh 渲染。使用 mesh.setMatrixAt(i, matrix) 设置每个副本的位置,然后设置 mesh.instanceMatrix.needsUpdate = true——省略此标记会导致实例无法移动。
  • 合并静态几何体:将使用相同材质且不会移动的网格合并为一个缓冲几何体。需要权衡的是,合并后的网格只能整体剔除,因此不要合并分布在大范围内、适合按物体进行视锥体剔除的几何体。
  • 共享材质/纹理:重复使用材质和纹理实例;图集可以让不同道具共享一次绘制调用。

减少 GPU 工作量

  • 剔除:保留 frustumCulled = true(默认值),跳过视野外的物体;对于超大世界,还要按距离进行剔除。
  • LOD:将远处物体替换为开销更低的版本(THREE.LOD),或完全隐藏远处的细节。
  • 过度绘制:限制大型透明/加色粒子和全屏效果;限制阴影贴图尺寸和投射阴影的光源数量。

减少每帧 CPU 开销

  • 使用对象池,不要分配新对象:重复使用对象,并复用临时的 Vector3/Quaternion/Matrix4 实例,避免在更新循环中调用 new——每帧分配内存会造成 GC 卡顿。
  • 限制动态数量:限制存活的敌人、粒子和投射物数量;从对象池中回收,而不是反复创建和销毁。
  • 避免触发重新编译:运行时更改光源数量或材质的 defines 会导致着色器重新编译(参见 lights 技能)。请保持这些设置不变。
  • 分摊工作量:将寻路、AI 重新规划等开销大的系统分摊到多帧中执行,而不是每帧都完成所有工作。

评论

支持 Markdown