Skip to content

Three.js 性能面板必备指标:9 个核心指标与阈值解释

做性能面板最容易走偏:指标太多、解释太少,最后“看得见但看不懂”。本文把三维实时渲染最关键的 9 个指标收敛为一套可落地的面板规范,并给出阈值与诊断逻辑,适合直接抄到面板里做规则提示。

一、先看结论:9 个指标 + 阈值汇总

指标优秀正常警告严重主要影响
三角面数(Triangles)< 10 万10 万 ~ 30 万30 万 ~ 60 万> 60 万GPU 算力、帧率
顶点数(Vertices)< 20 万20 万 ~ 50 万50 万 ~ 100 万> 100 万GPU 顶点计算
纹理数量(Textures Count)≤ 5 张6 ~ 10 张11 ~ 20 张> 20 张显存、带宽
最大纹理尺寸(Max Texture Size)≤ 1024 px1024 ~ 2048 px2048 ~ 4096 px> 4096 px单张显存占用
材质数量(Materials Count)≤ 5 个6 ~ 15 个16 ~ 30 个> 30 个DrawCall、稳定性
DrawCall(桌面)< 100100 ~ 300300 ~ 600> 600CPU 提交开销
DrawCall(移动)< 5050 ~ 150150 ~ 300> 300CPU 提交开销
FPS55 ~ 6040 ~ 5425 ~ 39< 25体验与综合压力
JS Heap< 300 MB300 ~ 600 MB600 MB ~ 1 GB> 1 GB卡顿、崩溃、加载卡死
显存估算(VRAM Estimate)< 150 MB150 ~ 300 MB300 ~ 600 MB> 600 MB闪退、黑屏、掉帧

说明:

  • 表格阈值是“经验阈值”,用于面板提示与早期诊断,不等同于硬性指标;不同机型、分辨率、后处理强度都会影响最终体验
  • 若面板只能放 5 个指标,优先:FPS、DrawCall、三角面数、显存估算、JS Heap

二、指标详解:每项要解释清楚“口径 + 影响 + 阈值”

1)三角面数(Triangles)

口径:

  • 常用估算:position.count / 3(一个三角面通常由 3 个顶点组成)

影响:

  • GPU 每帧要对三角面做光栅化与片元着色计算
  • 面数越多,GPU 压力越大,帧率越容易下滑

阈值:

  • 优秀:< 10 万
  • 正常:10 万 ~ 30 万
  • 警告:30 万 ~ 60 万
  • 严重:> 60 万(移动端更容易直接不可用)

2)顶点数(Vertices)

口径:

  • 顶点数一般可从几何体属性统计得到(与面数强相关)

影响:

  • 顶点变换、法线计算、蒙皮等主要在顶点着色器阶段执行
  • 顶点数偏高会放大 GPU 顶点计算压力,尤其在骨骼动画/实例较多时更明显

阈值:

  • 优秀:< 20 万
  • 正常:20 万 ~ 50 万
  • 警告:50 万 ~ 100 万
  • 严重:> 100 万

3)纹理数量(Textures Count)

影响:

  • 纹理需要上传 GPU 并占用显存;数量越多,显存占用与采样开销越高
  • 多纹理场景在镜头快速旋转、频繁切换材质时更容易出现掉帧

阈值:

  • 优秀:≤ 5 张
  • 正常:6 ~ 10 张
  • 警告:11 ~ 20 张
  • 严重:> 20 张

4)最大纹理尺寸(Max Texture Size)

口径:

  • 取当前场景中纹理宽高的最大值(宽或高任意一边超标即降级)

影响:

  • 单张纹理尺寸决定显存占用与带宽压力,是“显存爆炸”的高频根因

阈值:

  • 优秀:≤ 1024 px
  • 正常:1024 ~ 2048 px
  • 警告:2048 ~ 4096 px
  • 严重:> 4096 px

显存经验值(RGBA8):

  • 4096 × 4096 ≈ 64 MB / 张
  • 2048 × 2048 ≈ 16 MB / 张
  • 1024 × 1024 ≈ 4 MB / 张

5)材质数量(Materials Count)

影响:

  • 材质越多,越难被合批,往往直接推高 DrawCall
  • 材质数量偏高时,帧率更容易出现“忽高忽低”的不稳定体验

阈值:

  • 优秀:≤ 5 个
  • 正常:6 ~ 15 个
  • 警告:16 ~ 30 个
  • 严重:> 30 个

6)DrawCall 数量(DC)

影响:

  • WebGL 每个 DrawCall 都伴随状态切换与 CPU→GPU 命令提交
  • DrawCall 偏高会首先压垮 CPU 主线程,导致帧率不稳甚至输入卡顿

阈值(桌面):

  • 优秀:< 100
  • 正常:100 ~ 300
  • 警告:300 ~ 600
  • 严重:> 600

阈值(移动):

  • 优秀:< 50
  • 正常:50 ~ 150
  • 警告:150 ~ 300
  • 严重:> 300

7)渲染帧率(FPS)

影响:

  • 最直观的体验指标,综合反映 CPU 与 GPU 的整体压力
  • 低 FPS 往往意味着:三角面/纹理/DrawCall/后处理至少有一项已超标

阈值:

  • 优秀:55 ~ 60
  • 正常:40 ~ 54
  • 警告:25 ~ 39
  • 严重:< 25

8)内存占用(JS Heap)

影响:

  • 影响模型解析、资源缓存、运行时对象数量与 GC 压力
  • JS Heap 偏高常见表现:页面切换卡、按钮响应延迟、崩溃或加载卡死

阈值:

  • 优秀:< 300 MB
  • 正常:300 ~ 600 MB
  • 警告:600 MB ~ 1 GB
  • 严重:> 1 GB

9)显存占用估算(VRAM Estimate)

口径:

  • 面板可按纹理解压后的体积做近似估算:显存 ≈ 所有纹理解压后总和(实际还包含几何体、FBO、后处理等占用)

影响:

  • 显存是三维应用的“生死线”:超限会出现黑屏、贴图丢失、闪退、频繁掉帧

阈值:

  • 优秀:< 150 MB
  • 正常:150 ~ 300 MB
  • 警告:300 ~ 600 MB
  • 严重:> 600 MB

三、快速诊断规则(面板内置提示可以直接用)

  • 面数高 → GPU 压力高 → 掉帧、旋转卡
  • 纹理大 / 多 → 显存/带宽压力高 → 掉帧、黑屏、闪退
  • 材质 / DrawCall 高 → CPU 提交压力高 → 帧率不稳、忽高忽低、交互不跟手
  • JS Heap 高 → 解析/缓存/对象过多 → 卡顿、加载卡死、崩溃
  • FPS 低 → 综合压力已超标 → 优先排查 DrawCall 与纹理/面数

架构思考

性能面板的价值不在“展示更多数字”,而在“把问题定位成本降下来”。一套好的指标体系必须同时满足三点:口径一致(可比)、影响可解释(可行动)、阈值可落地(可告警)。只要围绕这 9 个核心指标做统一口径与提示规则,团队就能用同一套语言讨论性能问题,减少争论与反复试错。