移动端渲染

自动关联目录:移动端渲染

覆盖说明:官方 Mobile Development 大类的子条目无法静态抓取;本篇按引擎实际模块组织,涉及版本差异处标注"以目标版本为准"。移动端工具链部分见 Profile(UE性能优化工具.md 中 GPU/内存/功耗各节)。

1. 定位

移动端的渲染瓶颈和桌面完全不一样:桌面通常卡在 GPU 算力或 draw call,移动端几乎总是卡在带宽与发热。

一句话定位:**移动端优化的第一原则是"少读、少写、少全屏",而不是"少算"。**在 tile-based GPU 上,一次全屏 pass 的代价远高于一次复杂的片元着色。

2. 结构:三层选择

1. 平台与图形 API   Android / iOS  →  Vulkan / OpenGL ES / Metal
2. 渲染器路径       移动前向渲染(默认)
3. 特性开关         Mobile HDR、MSAA、后处理、阴影、反射方案

特性可用性的硬边界(这是和桌面最大的差异):

特性移动端
Nanite不支持(需 DX12 + SM6;官方列的平台是主机与桌面)
Lumen面向次世代主机与高端桌面,移动端需替代方案
虚拟阴影贴图平台列表不含移动端
替代方案烘焙 GI + Reflection Capture + 传统阴影

3. 带宽为什么是第一瓶颈

移动 GPU 多为 Tile-Based 架构:渲染时先把 tile 加载进片上高速内存,算完再写回主存。任何需要"读回整张 RT"的操作都会打破这个优化:

高代价操作为什么
全屏后处理 pass每个 pass 都是一次完整的读 + 写
MSAA需要保留多样本,解析时额外带宽
读 SceneDepth / SceneColor强制 resolve
大 RT 与高精度格式直接乘进带宽
频繁切换 RTtile 反复回写

因此移动端的优化顺序:

1. 砍全屏 pass 的数量(合并后处理)
2. 降渲染分辨率(r.MobileContentScaleFactor)
3. 用低精度格式(Mobile HDR 关掉 → LDR)
4. 最后才是简化材质指令

4. 纹理与压缩

格式平台说明
ASTCAndroid(新)+ iOS质量与压缩率平衡最好,首选
ETC2Android 兜底兼容老设备
PVRTC老 iOS需要 2 的幂尺寸
BC / DXTC桌面移动端不用
要点说明
按平台分别设置压缩纹理编辑器的平台覆盖
关闭不必要的 mip但必须保留 mip,否则远处采样抖动且带宽更高
纹理尺寸移动端贴图尺寸应显著低于桌面
纹理采样器数量移动端 sampler 上限更低

5. 参数与设置

设置 / CVar作用代价
r.MobileContentScaleFactor渲染分辨率缩放直接决定带宽,收益最大
Mobile HDR是否用 HDR 渲染管线开启成本高(高精度 RT + 带宽);关闭则 LDR,某些效果不支持
Mobile MSAA抗锯齿带宽代价大,通常改用 TSR/后处理方案
r.Mobile.AllowGPUSceneGPU Scene—
Max Movable Point/Spot Lights动态光数量前向渲染下每多一个光源就多一次光照计算
Vertex Fogging for Opaque Only顶点雾便宜,但精度低
Use Full Precision in Pixel Shader片元精度关掉用半精度更快,可能有精度问题
r.Mobile.EnableStaticAndCSMShadowReceivers阴影接收—
反射方案Reflection Capture 为主SSR/Lumen 代价高
Shader Permutation材质开关数量移动端编译时间与包体更敏感(见 材质与着色器编译)

具体开关名随版本变化,以目标版本的 Project Settings(Rendering / Mobile 分组)实际条目为准。

6. 代价与权衡

选择收益代价什么时候不该用
降分辨率收益最直接糊已降到可接受下限就只能砍 pass
关 Mobile HDR明显省带宽与内存失去 HDR 相关效果需要强 HDR 表现时不能关
开 MSAA抗锯齿质量带宽代价大移动端一般不该开
烘焙 GI运行时几乎免费不能动态变化、包体增大、要烘焙时间需要昼夜循环时不行
全屏后处理画面风格每个 pass 一次全屏读写移动端应当合并与精简
高精度 PS精度慢移动端默认可用半精度

7. 踩坑与排查

坑现象怎么验证
帧率低但 GPU 算力不满带宽瓶颈用移动端 GPU 剖析工具看带宽/片元吞吐
发热降频跑一会儿变卡功耗与发热是移动端特有的时间维度问题,见 Profile 功耗节
包体过大商店限制纹理压缩与 shader permutation
某些效果在移动端消失分平台分支(ES3.1 等)检查材质的 feature level 分支
精度问题(z-fighting、条纹)半精度导致开 Use Full Precision in Pixel Shader 对比
阴影不对移动端阴影路径不同检查 r.Mobile.* 阴影开关
编译慢、包体大permutation 膨胀减少 Static Switch(见 材质与着色器编译)
桌面跑得好移动端崩超出 sampler / RT 上限查 RHI 校验日志
MSAA 开启后骤降解析带宽移动端改用 TSR 类方案

8. 排查顺序

1. 先确认瓶颈类型:带宽 / 片元 / 顶点 / CPU
   └─ 移动端大概率是带宽
2. 砍全屏 pass 数量
3. 调 r.MobileContentScaleFactor
4. 检查 Mobile HDR 是否必要
5. 看纹理格式是不是 ASTC
6. 发热降频?→ 看功耗曲线(时间维度,别只看瞬时帧率)
7. 用平台工具:Android GPU Inspector / Xcode / Adreno / Mali(见 Profile)

参考