Files
BlueRoseNote/07-Other/AI/AI Agent/NeoX/H78 暴力优化结论.md

9.9 KiB
Raw Blame History

前言

相关变化

2.1 场景渲染设置(张子涵,写入 .scn/.postprocess 文件)

49 个场景被统一修改了渲染参数,这些参数写死在场景文件中,不随画质档位变化。

渲染功能 变更内容 影响面 变化幅度
泛光 (Bloom) Quality: High → Low 全部 49 场景 品质降一档
抗锯齿 (TAA) Quality: High → Low,关闭 Bicubic 采样 全部 49 场景 品质降一档 + 采样退化
环境遮蔽 (SSAO) 关闭滤波、关闭全分辨率 全部 49 场景 边缘噪点增加
景深 (DOF) 模式 Bokeh → Gaussian多个场景直接关闭 7-11 场景 虚化效果消失或退化
镜头光晕 直接关闭 22 场景 完全失去镜头感
自动曝光 关闭 主农场等场景 亮暗切换不再自适应
半透明阴影 关闭 主农场等场景 树叶/玻璃不投影

2.2 全局阴影(张子涵,写入 GlobalRenderComponentsConfig.xml

参数 旧值 新值 变化幅度
CSM 贴图分辨率 2048 1024 减半(像素量降 75%
CSM 级联层数 4 级 1 级 从 4 级联减为单级联
软阴影等级 Max High 降一档
场景 CastShadow True False 大部分场景静态物体不再投射阴影

2.3 LOD 策略(张子涵,修改 .lod2 文件)

33 个 LOD 配置文件(覆盖 44 个场景模型)的切换阈值被大幅提升:

指标 变化
LOD 切换阈值 普遍提升 6-7 倍
最远级别行为 从"显示最低精度网格"改为完全剔除(不渲染)
影响模型类别 树木、灌木、杂草、石头、建筑、装饰物
影响最大场景 NongChang_003主农场12+ 模型、neighbor01/H邻居13 模型)

2.4 顶点压缩(张子涵,修改 .mesh + neox.xml

  • 6,935 个骨骼网格文件全量开启顶点压缩
  • neox.xml 全局启用 CompressedVertexDataEnable + EnableVAT

2.5 贴图压缩(程侃,修改贴图源文件)

指标 数值
涉及贴图数 1,888 个
总大小变化 4,852 MB → 433 MB(减少 91.1%
分辨率降低的文件 1,876 / 1,88899.4%
缩小 2 倍 649 个34.6%
缩小 4 倍 428 个22.8%
缩小 16 倍以上 528 个28.1%
被压到 32×32≈纯色 387 个20.5%
法线/ORM 贴图清零 数十个 NPC 和场景贴图从 12 MB → 3 KB

注:此提交标注为"测试贴图压缩"。

2.6 脚本层画质分档(程侃,修改 SceneRenderHelper.py 等)

新建高/中/低三档画质系统:

功能 HIGH MEDIUM LOW
渲染管线 Forward Deferred Deferred
渲染分辨率 100% 70%(像素量 49% 50%(像素量 25%
SSR 场景默认 强制关 强制关
SSAO 场景默认 强制开 强制关
Bloom/DOF/TAA 场景默认 场景默认 全部强制关
LOD 偏移 0 0 +1降一级
阴影

2.7 材质合批程侃SVN r3306

  • fork 了约 7,200 个模型引用的 GIM 文件,消除 CustomMaterialFiles 造成的合批阻断
  • 覆盖 38 个场景,目标是减少 DrawCall

三、两人优化叠加后的综合结果

两层优化不是"取其一"的关系,而是逐层累加。最终移动端画面是场景文件中的降级设置 + 脚本层的动态控制同时作用的结果。

3.1 叠加链路

原始画质PC 编辑器,美术调校基准)
   │
   ├─ 第 1 层:张子涵 场景文件降级(写死)
   │   Bloom High→Low, TAA High→Low, SSAO 滤波关, DOF 关, 镜头光晕关
   │   CSM 2048→1024, 4级→1级, 大部分场景 CastShadow=False
   │   LOD 阈值提升 6-7x, 最远级剔除
   │   6935 mesh 顶点压缩
   │
   ├─ 第 2 层:程侃 贴图源文件压缩
   │   1888 贴图分辨率降低, 91% 空间节省
   │   28% 贴图缩小 16 倍以上, NPC 法线图清零
   │
   ├─ 第 3 层:程侃 脚本层动态降级
   │   MEDIUM: 分辨率 70%, SSR 关, 管线切 Deferred
   │   LOW: 分辨率 50%, Bloom/DOF/TAA/SSAO/阴影全关, LOD+1
   │
   └─ 第 4 层:打包管线 ASTC 压缩
       ASTC 8×8 (2 bpp) + level=0 最低编码质量 + 无 Mipmap

3.2 各档位实际效果

环节 PC 编辑器HIGH + 原始资源) 移动端 MEDIUM策划体验包 移动端 LOW仅 GM 可达)
泛光 High 品质 Low 品质(场景写死) 关闭
抗锯齿 High TAA + YCoCg + Bicubic Low TAA场景写死 关闭
景深 Bokeh 关/Gaussian场景写死 关闭
SSAO 有滤波、全分辨率 无滤波、半分辨率 + 强制开 关闭
阴影 4级联 2048 + 场景投影 1级联 1024 + 场景不投影 完全关闭
SSR 场景默认 强制关 强制关
渲染分辨率 100% 70%(像素量 49% 50%(像素量 25%
LOD 正常阈值 阈值提升 6-7x 阈值提升 6-7x + 再降一级
贴图 原始分辨率 降 2-64 倍ASTC 8×8 再压一轮) 同 MEDIUM
顶点 原始 压缩 压缩
镜头光晕 关(场景写死)
自动曝光 关(场景写死)

3.3 叠加效果量化

以移动端 MEDIUM 档(策划体验包的默认档位)为例,相比 PC 编辑器的累计劣化:

维度 劣化程度 说明
有效像素量 降至 ~49% 分辨率 0.7 × 0.7
贴图精度 降至 ~9% 91% 源文件压缩 + ASTC 8×8 运行时再压
阴影面积 降至 ~6% 分辨率减半×级联从 4 降到 1×场景不投影
后处理效果 大幅缩水 Bloom/TAA 从 High 降到 LowDOF/光晕/自动曝光关闭
模型精度 更早切换低模 LOD 阈值提升 6-7x远处植被直接剔除

四、移动端效果差的根因分析

核心问题不是某个 bug而是多层降级无节制地叠加且缺少分层控制机制。

4.1 架构缺陷:无设备适配,只有一刀切

代码库中不存在任何基于设备性能的自动画质选择逻辑

  • 无 GPU benchmarking / 设备评分
  • 无按机型分级的白名单/黑名单
  • 无运行时帧率自适应
  • game3d.get_platform() 在画质逻辑中被注释掉

策划体验包pub_design硬编码为 MEDIUM不区分旗舰机和低端机。骁龙 8 Gen 3 和骁龙 660 跑完全相同的画质配置。

4.2 场景文件降级无法按档位恢复

张子涵的场景降级Bloom Low、TAA Low、SSAO 滤波关、DOF 关等)是直接写入 .scn 文件的。程侃的脚本层画质系统中HIGH 档对这些功能设为"场景默认"mActive=False),意味着即使在 HIGH 档,美术原始的 High 品质设置也已经不存在了。

场景文件被改前的美术基准已经永久丢失(除非从 SVN 回退)。

4.3 贴图压缩过于激进且不分层

  • 28% 的贴图被缩小 16 倍以上30% 被压到 32×32
  • NPC 角色的法线贴图从 2048×2048 缩到 32×32表面凹凸细节完全丢失
  • 场景核心贴图(草地、树皮、岩石)从 4096 降到 64近看全是糊的
  • 贴图压缩对所有画质档位一视同仁HIGH 档也用压缩后的贴图

4.4 打包管线进一步劣化

ASTC 8×82 bpp+ 最低编码质量level=0+ 无 Mipmap 的打包配置,在已经降过分辨率的贴图上再做一轮有损压缩

  • 8×8 块大小会在法线贴图和渐变色上产生可见块状伪影
  • level=0 意味着编码器不做质量搜索,实际质量比 8×8 理论上限更差
  • 无 Mipmap 导致远处物体贴图闪烁、GPU 缓存效率低下

4.5 为什么旗舰机也差

旗舰手机(如 iPhone 16 Pro / 骁龙 8 Gen 3的 GPU 性能足以支撑远高于当前配置的渲染质量,但:

  1. 不识别设备能力 — 没有高/中/低端设备的分级逻辑,旗舰机和千元机跑同一套配置
  2. 策划体验包默认 MEDIUM — 即便 GPU 完全有余力跑 HIGH + 原始分辨率贴图,脚本直接把它按在 MEDIUM
  3. 场景降级不可恢复 — 即使手动切到 HIGH场景文件中 Bloom/TAA 已经是 Low恢复不到美术基准
  4. 贴图已在源头被压 — 无论什么画质档位GPU 拿到的都是降过分辨率 + ASTC 8×8 双重压缩后的贴图

简言之:优化措施假设了所有设备都是低端机,但实际上旗舰机有巨大的性能冗余没有被利用。


五、建议方向

  1. 建立设备分级机制:根据 GPU 型号/benchmark 分出至少旗舰/中端/低端三个设备层级,高端设备使用完整渲染配置
  2. 分离场景美术基准与移动端降级:场景文件保留美术原始设置,移动端降级通过脚本层覆盖实现,而非直接修改源文件
  3. 贴图分层管理:源文件保留原始分辨率,按设备层级在打包时选择不同的缩放比例,而非一刀切压缩
  4. 打包参数优化:对法线贴图使用更高质量的 ASTC 块大小(如 4×4 或 5×5开启 Mipmap 生成
  5. LOD 策略精细化:按模型重要性分级设置 LOD 阈值,主角/NPC/建筑用保守阈值,远景散件用激进阈值
  6. 分辨率问题很大建议上FSR2NeoX有这个玩意的改进方案。