移动平台与图形 API

自动关联目录:移动平台与图形 API

1. 定位

平台与图形 API 的选择是移动端第一个、也是最难改的决定:它决定了哪些渲染特性可用,也决定了后面所有配置的上限。

一句话定位:先选 API,再选特性,最后调参数——顺序反了会一路返工。

2. 三个 API

API平台特点
VulkanAndroid(新)现代、开销低、支持更多特性;兼容性碎片化
OpenGL ESAndroid(兜底)兼容性最好、特性最少、驱动开销较高
MetaliOS / macOSApple 平台唯一选择,工具链好

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. 踩坑与排查

坑现象怎么验证
假设桌面特性移动端可用打包后失效/崩逐项验证
只测 VulkanGLES 设备出问题两条路径都测
没定最低配机型优化无目标先定机型
MSAA 沿用桌面配置带宽爆移动端关掉
精度问题条纹/z-fighting半精度 vs 全精度对比
只在模拟器测与真机差异大必须真机测

8. 排查顺序

1. 先确认目标 API 与最低配机型
2. 逐项验证所需特性在该 API 上可用
3. 不可用 → 走替代方案(烘焙 GI / 传统阴影 / Reflection Capture)
4. Android 双路径都要真机测
5. 精度问题 → 半精度/全精度对比

参考