3.3 LOD 与纹理流送:让手机按需加载
核心结论
移动设备内存有限(中端机可用显存常不足 2GB),把整个游戏的所有高精度资产一次性载入是耍流氓。LOD 管几何、纹理流送管贴图,两者配合让手机"用到什么载什么"。
LOD:多级几何细节
为静态网格设置 3~4 级 LOD,远处自动换成低面数模型。官方有专门的按平台 LOD 指南(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/setting-up-per-platform-lods-5141),要点是移动端可以为每个平台单独配 LOD——同一个模型在 PC 上 4 级、移动上 3 级(合并最远的两级)。
LOD 配置建议表
| LOD 级 | 屏幕占比(Screen Size) | 三角面策略 | 用途 |
|---|---|---|---|
| LOD0 | >= 1.0 | 全精度 | 近景 |
| LOD1 | 0.3~0.5 | 减面 50% | 中景 |
| LOD2 | 0.15~0.25 | 减面 75% + 合并材质 | 远景 |
| LOD3 | 0.05~0.1 | 极简(或 billboard) | 超远/俯瞰 |
移动端我一般砍掉 LOD0 的极端精度(比如把 LOD0 也稍微减面 10%),因为手机屏幕小,玩家根本贴不到 PC 那么近。
HLOD:大场景的终极大招
对大世界,把多个远处的物体合并成 HLOD(层级 LOD)集群,DrawCall 直降一个数量级。代价是构建时间长、内存占一份。中小关卡(<1km 见方)用不上,开放世界必备。
纹理流送:贴图的"按需取用"
纹理流送(Texture Streaming)决定贴图按相机距离分 mip 逐步载入。核心配置官方有专页(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/texture-streaming-configuratio-cbd2),移动端要调的关键项:
| 设置 | 移动建议 | 说明 |
|---|---|---|
| Texture Streaming Pool | 512MB 起,看机定 | 内存池上限 |
r.Streaming.PoolSize |
同上(控制台变量) | |
| mip 纹理尺寸 | 不必超 2048 | 手机屏看不见 4096 的细节 |
| 纹理组(Texture Group) | 按类型分(角色/道具/地表) | 各组独立 LOD 偏移 |
纹理流送"看不见的坑"
坑 1:贴图闪一下才变清晰 —— 流送池太小,切镜头时引擎来不及加载高 mip。解法:加大池子或降低 mip bias 需求。
坑 2:池子爆导致全场景糊 —— 内存紧张时引擎会丢弃高 mip。表现为整屏马赛克。解法:查 stat streaming,看是不是某些 4096 贴图把池子吃光——美术规范移动端最大 1024/2048。
坑 3:流送与烘焙光照贴图冲突 —— Lightmap 也走流送池,大场景烘焙后池子吃紧。解法:r.Streaming.LightingPoolSize 单独设。
我的资产规范(团队级)
导入资产时在编辑器 自动化 script 里强制:
| 资产类型 | 最大尺寸 | 压缩 | LOD |
|---|---|---|---|
| 角色(主角) | 2048 | TC_SRGB / DXT | 3 级 |
| 次要角色/NPC | 1024 | 同上 | 3 级 |
| 道具 | 512 | 同上 | 2 级 |
| 地表 splat | 1024 | TC_Masks | - |
| UI | 2048 | 无压缩(UI 要清晰) | - |
配套流程:写个 EditorUtilityWidget 扫全库,凡有超尺寸/无 LOD 的资产打报告(扫描脚本怎么写见本系列编辑器工具那本书)。
相关节点速查
- LOD:静态网格编辑器 -> LOD Settings -> Build(或手动导入各 LOD 级模型)
- 按平台 LOD:
DeviceProfile里的r.ForceLOD/ LOD Bias - 流送池:
r.Streaming.PoolSize;查看stat streaming - 纹理组:
Texture Group属性 + 设备描述里Texture LOD Bias
心得:纹理流送池大小是移动项目最常被"事后发现"的配置。默认值按桌面给,中端机上不是爆池子就是贴图闪。我一般是项目立项第二周就把池子、纹理规范、LOD 规范三件事先定死,后期几乎没有资产返工。
