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

188 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 前言
## 相关变化
### 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,888**99.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有这个玩意的改进方案。