vault backup: 2026-04-19 20:50:55

This commit is contained in:
2026-04-19 20:50:55 +08:00
parent 9f92267c5d
commit 27aefe0a64
3 changed files with 1500 additions and 0 deletions

View File

@@ -0,0 +1,187 @@
# 前言
## 相关变化
### 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有这个玩意的改进方案。

File diff suppressed because it is too large Load Diff