3D 游戏卡在哪:一页看懂
用你这台平板(Mali-G52 / 1200×2000 / DPR 2)的实测数字讲(v2 更正版)
渲染慢,不是模型太精细。先看分辨率,再看动画,最后才轮到提交次数。
一句话结论
先更正上一版
同样的 480 只:各不相同 14 fps,合并成一个 15 fps,实例化 18 fps。提交次数从 463 降到 3,只换来 5%~26%。 真正的大头是渲染分辨率(DPR)和骨骼动画,不是 draw call。
一帧是怎么画出来的
480 只的实测(DPR 2,关闭阴影)
| 做法 | fps | 提交次数 |
|---|---|---|
| 每只都不同,各是独立物体 | 14 | 463 |
| 每只都不同,几何合并成一个 | 15 | 3 |
| 相同模型,实例化 | 18 | 3 |
| 相同模型 + 骨骼动画 | 8 | 482 |
| 实例化 + 打开阴影 | 14 | 3 |
| 每只都不同 + DPR 降到 1 | 27 | 463 |
怎么读
每只都不一样,也没有崩。真正的分水岭是分辨率和骨骼动画。
四个杠杆谁最有力
| 手段 | 480 只时 | 结论 |
|---|---|---|
| DPR 2 → 1 | 14 → 27 | 最有效 |
| 去掉骨骼动画 | 8 → 14 | 第二 |
| 合批(合并或实例化) | 14 → 18 | 只值 26% |
| 关实时阴影 | 14 → 18 | 看情况 |
那些词到底指什么
记住一句话就够
draw call一次提交。物体越碎、材质越多,次数越多
三角面模型由三角形拼成。几千面很小,几百万面才吃紧
贴图表面图案。2K 一张约 16 MB 显存
骨骼动画每帧在 CPU 重算骨骼。和数量成正比,且没法合批
DPR渲染分辨率倍数。DPR 2 表示像素数是 4 倍
阴影贴图把场景再画一遍给灯光看。等于多画一次全场
卡了怎么查
全是不一样模型的建议
| 做法 | 判断 |
|---|---|
| 同屏按 60–100 只设计 | 有余量 |
| 模型共用一个图集贴图 | 关键 |
| 少用骨骼动画,改用整体晃动 | 有效 |
| 渲染上限 DPR 1.5 | 推荐 |
| 阴影用贴图假阴影 | 推荐 |
| 每只都单独一张大贴图 | 带宽吃不消 |
| 每只都跑骨骼动画 | 480 只只有 8 fps |