你可以直接这样回答
Draw Call 合并是在不破坏材质、排序和阴影语义的前提下共享提交。材质合并/图集减少状态切换,Instancing 复用相同几何;我会同时记录 draw calls、GPU、带宽和画质,避免只报一个下降数字。
这道题真正想听什么?
先确认比较对象和回答边界,再决定要不要展开公式、工程实现或性能取舍。
它考你能不能把“合批”说成约束:相同材质/Shader 状态和合适的几何才能共享一次提交;图集减少纹理状态切换,但可能增加图集尺寸、mip 串色和内存。Instancing 适合大量相同网格,静态 batching 适合不变几何。没有项目证据时只说设计,不说“我在腾讯做过”。
把答案讲到 2 分钟面试必答 · 约 2 分钟 · 补足因果、输入和取舍
先分析批次为什么被拆:材质、纹理、透明、灯光 Pass 还是不同网格。静态物体可考虑 static batching,重复网格用 GPU instancing,贴图用带 padding 的 atlas。改完复测 mip 串色、阴影、剔除和内存;若片元是瓶颈,合批不一定解决。
面试官可能继续追问什么?补充自测 · 约 3 分钟 · 检查自己是不是真的懂了
- 问:为什么合批后画面可能变差? 答:图集 padding、mip 采样、材质参数被迫统一,都会造成串色或细节损失。
- 问:Instancing 等于合并所有材质吗? 答:不是。它复用几何/Shader 提交,材质变体、透明排序、阴影 Pass 仍可能拆批。
- 因果链: 材质/纹理状态 → 批次边界 → 提交数量 → GPU/CPU 成本 → 纹理与画质边界。
如果概念还是悬空,就去做实验关键证据 · 约 5–15 分钟 · 预测 → 单变量 → 观察
实验不是第二份答案,它只负责证明答案
如果上面的解释已经听懂,可以直接跳过。卡住时,再沿着这三步把抽象词变成画面证据。
- 先猜 输入经过哪些阶段才变成输出?最可能失败或变慢的那一步在哪里?
- 去取证 固定其他条件,只改一个参数。先写下变化,不用“更真实”“更高级”这种空词代替证据。
- 再追问为什么 是哪一步造成这个结果?如果结果相反,先检查输入、空间、算法,还是显示输出?
我完全没头绪,给我一个起点
先截下默认状态,只动页面当前开放的那个参数。你只需要说清楚“原来怎样 → 改了什么 → 现在怎样”。
1. 先预测
在 Engine Pipeline Lab 切 scene=runtime、debugMode=batching,先设 batchCount=30、atlasCoverage=0.2、instanceCount=20;在 Shader Performance Lab 切 scene=crowd,比较 useInstancing=true/false。预测:提高 atlasCoverage 或打开 Instancing 可能降低提交,但提高 shaderWork 后 GPU 仍会升。输入 → 变化 → 输出: 状态/实例数据 → 合批策略 → Draw Calls、GPU ms、带宽与画质。
老师追问
先别急着查答案: 先画出输入 → 处理 → 输出的路径:你猜瓶颈在哪一段,准备拿什么日志或 profiler 证明?
为什么: 你刚才的预测依赖哪个前提?如果把“Draw Call 合并”里最关键的变量或约束关掉,画面/输出会先坏在哪里?
如果结果相反: 先排除哪一层,再谈结论?这个规则的边界是什么?
2. 再动手
固定实例数,依次只改 batchCount、atlasCoverage、instanceCount 和 useInstancing;每轮记录 Engine Pipeline 的 draw calls、GPU ms、ATLAS/BATCHED 状态,以及 Shader Performance 的估算 ms 和 fragment work。把 Instancing 代码 与 批次代码 对照,写出“减少提交但没有减少片元”的反例。
3. 最后对证据
Engine Pipeline 的 atlas coverage 增大可能显示 BATCHED、draw calls 降低;Shader Performance 关闭 Instancing 时实例提交成本上升。若同时加大 shaderWork 或透明层,GPU 仍可能超预算。Lab 的数字是教学模型,图集实际收益还要在目标 GPU、mip 和纹理压缩设置下复测。
答案在代码哪里发生?实现定位 · 约 3 分钟 · 变量、函数和关键行
- 批次/图集:看 atlas 与 instance savings 如何进入估算。
- Instancing:看实例数据如何复用一次提交。
- 调试输出:区分 instance identity 与真正的材质共享。
完整 5 分钟版本面试扩展 · 约 5 分钟 · 项目边界、验证与降级
生产上会把批次规则写进导入/构建报告,保留原始材质、atlas 版本和回滚信息。按场景与设备设置实例数、材质变体和纹理预算;移动端宁可保住高辨识度主体,也不把远景全部塞进超大图集。最终验收包含 draw calls、GPU p95、bandwidth、VRAM、mip 质量和透明排序。
哪些说法最容易答歪?必看陷阱 · 约 1 分钟 · 面试前最后检查
- 看见 draw calls 下降就宣布性能完成。
- 忘了图集 padding、颜色空间和 mip 边界。
- 把 Instancing 当作跨材质、跨透明排序的万能开关。
- 合批后没有保留可回滚的材质/atlas 版本。