移动平台与图形 API
自动关联目录:移动平台与图形 API
1. 定位
平台与图形 API 的选择是移动端第一个、也是最难改的决定:它决定了哪些渲染特性可用,也决定了后面所有配置的上限。
一句话定位:先选 API,再选特性,最后调参数——顺序反了会一路返工。
2. 三个 API
| API | 平台 | 特点 |
|---|---|---|
| Vulkan | Android(新) | 现代、开销低、支持更多特性;兼容性碎片化 |
| OpenGL ES | Android(兜底) | 兼容性最好、特性最少、驱动开销较高 |
| Metal | iOS / macOS | Apple 平台唯一选择,工具链好 |
Android 上通常的策略:高配设备用 Vulkan,低配回退 GLES。但这带来一个实际成本——两条路径都要测。
3. API 决定特性可用性
| 特性 | 与 API 的关系 |
|---|---|
| 高级渲染特性 | 依赖 API 与硬件能力,按需开启 |
| 计算着色器 | Vulkan / Metal 支持更好 |
| 某些后处理 | 受 API 与精度限制 |
| MSAA | 移动端代价大,通常不用(见 移动端渲染) |
| 精度(半精度 PS) | 移动端默认可用,但可能有精度问题 |
关键动作:在项目设置里明确目标 API,并逐项验证你要用的特性在该 API 上可用——不要假设桌面能用的移动端也能用。
4. 特性可用性清单(移动端常见限制)
| 特性 | 移动端 |
|---|---|
| Nanite | 不支持(DX12 + SM6,见 Nanite) |
| Lumen | 面向次世代主机与高端桌面(见 Lumen) |
| 虚拟阴影贴图 | 平台列表不含移动端(见 VSM) |
| 替代方案 | 烘焙 GI + Reflection Capture + 传统阴影 |
这三条是硬边界:它们不是"性能差",而是"不支持/不适用"。移动端项目必须走传统方案。
5. 选择流程
1. 目标市场的最低配机型是什么?
2. 该机型支持哪些 API?
3. 需要的渲染特性在那些 API 上可用吗?
├─ 否 → 降级方案(烘焙 GI 等)
└─ 是 → 配置并逐项验证
4. 两条 API 路径都要测(Android)6. 代价与权衡
| 设计 | 收益 | 代价 | 什么时候不该用 |
|---|---|---|---|
| 只支持 Vulkan | 特性最好、开销最低 | 丢失老设备 | 目标市场含大量低端机时不行 |
| 只支持 GLES | 兼容性最好 | 特性受限、开销高 | 需要高级特性时不行 |
| 双路径 | 覆盖广 | 测试量翻倍、两套配置 | 小团队应权衡 |
| Metal(iOS) | 无选择 | — | — |
| 追求桌面同等特性 | — | 移动端做不到 | 应走替代方案 |
7. 踩坑与排查
| 坑 | 现象 | 怎么验证 |
|---|---|---|
| 假设桌面特性移动端可用 | 打包后失效/崩 | 逐项验证 |
| 只测 Vulkan | GLES 设备出问题 | 两条路径都测 |
| 没定最低配机型 | 优化无目标 | 先定机型 |
| MSAA 沿用桌面配置 | 带宽爆 | 移动端关掉 |
| 精度问题 | 条纹/z-fighting | 半精度 vs 全精度对比 |
| 只在模拟器测 | 与真机差异大 | 必须真机测 |
8. 排查顺序
1. 先确认目标 API 与最低配机型
2. 逐项验证所需特性在该 API 上可用
3. 不可用 → 走替代方案(烘焙 GI / 传统阴影 / Reflection Capture)
4. Android 双路径都要真机测
5. 精度问题 → 半精度/全精度对比参考
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/2e300d6d.html
更新于:2026年10月10日