188 lines
9.5 KiB
Markdown
188 lines
9.5 KiB
Markdown
# 前言
|
||
|
||
|
||
|
||
## 相关变化
|
||
### 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 降到 Low,DOF/光晕/自动曝光关闭 |
|
||
| **模型精度** | 更早切换低模 | 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×8(2 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. **分辨率问题很大**:建议上FSR2,NeoX有这个玩意的改进方案。
|