Axıs
技能目录

反模式 02 · 坏例 → 好例改写对照

反模式 02 · 坏例 → 好例改写对照

同样的场景,两种做法。左边是独立游戏常见的错误做法,右边是正确的。


1. 面对"想要更漂亮的画面"

❌ 坏例

"我们想让画面更精致,所以打算:把所有纹理提到 2048,给每个资产单独做材质,加上 SSAO + DOF + Bloom + 色差 + 动态模糊,再上一个实时 GI 插件。"

问题:没有预算表;没有招牌;技术堆叠;纹理浪费;每个资产独立材质(破坏合批 + 风格散)。

✅ 好例

目标:让画面更有辨识度,帧预算 GPU 后处理只剩 1.5ms。

方案:

  1. 招牌:全场景手绘笔触噪声法线 + 边缘溶解(3 天,0.8ms)——这是我们的那一招
  2. 母材质:3 个(环境/角色/植被),所有资产重映射,覆盖率目标 90%
  3. 纹理:保持 1024,Rough/AO/Metal 打包成 ORM,省 2 次采样
  4. 后处理:保留 LUT + 颗粒 + 半分辨率 Bloom(0.9ms),去掉 SSAO(改用烘焙 AO)、DOF、动态模糊
  5. 降级:招牌技术有画质开关,低端机关闭笔触噪声

预算:GPU 后处理 1.5ms → 0.9ms;纹理内存 -30%;DrawCall -40% 不做的:实时 GI、SSAO、DOF、2048 纹理、独立材质


2. 面对"玩家看不清敌人"

❌ 坏例

"敌人颜色改成红色,更醒目。"

问题:只靠色相(最不可靠通道);色盲无效;没解决根本的明度分层问题。

✅ 好例

问题:敌人在暗场景中与背景明度差仅 12(L*),灰度下不可分辨。

方案(三通道冗余):

  1. 明度:敌人 shader 加明度保险,_MinLuminance 保证 ≥ 背景 +35 L*
  2. 运动:加 Rim 光(Fresnel,强度 0.4),任何背景下都浮出
  3. 形状:加背面外扩描边,宽 2px 屏幕空间恒定
  4. 额外:被遮挡时用纯色剪影显示

验证:灰度测试 ✅ / 红绿色盲模拟 ✅ / 缩略图 320×180 ✅ 成本:0.1ms(共用母材质,无新增变体)


3. 面对"战斗打击感不够"

❌ 坏例

"我们做了更华丽的挥剑特效,加了 200 个粒子。"

问题:数量不等于手感;200 粒子会 overdraw 炸;没有 hitstop 和音效同步。

✅ 好例

时间轴(t=0 命中):

  • t=0:Hitstop 80ms(时间缩放 0.05,特效用 unscaled time 继续播)
  • t=0:受击者闪白 2 帧
  • t=0:音效同帧播放
  • t=0:屏震 5px / 150ms / 12Hz(<20Hz 防晕)
  • t=0:命中粒子 8 个(锥形喷射)
  • t=60ms:冲击波环 mesh 缩放 0.5→1.5 淡出
  • t=80ms:Hitstop 结束,击退位移 0.3m
  • t=150ms:屏震结束

粒子:8 个(不是 200),overdraw 贡献 0.3 层 成本:GPU 0.4ms 关键:音效与闪白同帧;Hitstop 期间特效不冻结


4. 面对"美术每天花很多时间导资产"

❌ 坏例

"我写了一个通用的资产管理系统,有数据库、有 Web 界面、有权限管理。"(3 周)

问题:ROI 极低;维护成本无限;美术不一定用。

✅ 好例

最小方案(合计 2.5 人天):

  1. 导入预设脚本(1 天):按命名后缀自动设 sRGB/尺寸/压缩/格式
  2. Blender 导出预设(0.5 天):一键导出正确的 FBX(单位/轴向/应用变换)
  3. 批量材质实例生成(0.5 天):按贴图名自动建实例挂母材质
  4. 校验器(0.5 天):菜单一键跑,输出可点击的错误列表

ROI:

  • 导入预设:2 分钟 × 500 次 = 16.6h / 8h = 2.1(+ 消除 500 次人为错误)
  • 导出预设:3 分钟 × 300 次 = 15h / 4h = 3.75
  • 批量实例:5 分钟 × 200 次 = 16.6h / 4h = 4.2
  • 校验器:避免后期 40h 大扫除 / 8h = 5.0

不做:Web 界面、数据库、权限系统


5. 面对"想要那种说不清的氛围"

❌ 坏例

美术:"你想要什么样的?" 设计:"就是……那种感觉,你懂吧。" 美术:"……我试试看。"(做了 3 版都不对,浪费 2 周)

问题:用形容词沟通;没有翻译方法;迭代靠猜。

✅ 好例(三小时工作流)

0:00–0:20 问内核 "玩家在这里应该感到什么?" → "孤独" "绝对不要感到什么?" → "不要温馨,不要有希望"

0:20–0:40 排序参考图 从情绪库挑 5 张,让设计只排序(不描述)→ 排序结果:大负空间的排前,暖色的排最后

0:40–1:00 反推视觉语法 构图:大量负空间 · 光:单一冷光源 · 色:低饱和冷色 · 运动:慢

1:00–2:00 做原型(不新建任何资产)

  • 角色屏幕占比从 22% → 7%(相机拉远 + FOV 从 60 → 35)
  • 指数雾 density 0.015 → 0.045
  • 环境饱和度 -35%,主体对比度 +40
  • 相机跟随阻尼 ×1.8
  • 加缓慢上升的尘埃粒子

2:00–2:30 拉设计到真机前,只问"更接近还是更远了" → 迭代 2 轮

结果:3 小时锁定方向,0 个新资产,全是参数调节


6. 面对"要不要上 Lumen / Nanite"

❌ 坏例

"UE5 有 Lumen 和 Nanite,都开呗,反正引擎自带。"

问题:没测过;没考虑最低机型;没有降级方案;可能不是你的招牌。

✅ 好例

Lumen:

  • 成熟度 80%;成本 2.5ms(Low 档预算只有 1.5ms 阴影+GI)
  • 本作是静态场景为主 + 手工布光,GI 动态性收益低
  • 决定:不开。用烘焙(0.2ms)+ Light Probe,省下 2.3ms 给招牌
  • 复审条件:若未来加入"可破坏光源"玩法再评估

Nanite:

  • 本作是低模风格化,模型本来就很轻,LOD 收益接近零
  • 代价:磁盘 +40%,内存 +25%,打包时间 +50%
  • 决定:不开

替代投入:把省下的 2.3ms + 一半磁盘预算,全给招牌技术(体积光 + 尘埃)


7. 面对"买的素材包太多,风格不统一"

❌ 坏例

"算了,凑合用吧,反正玩家看不出来。"

问题:玩家一定看得出来;评测会直接写"画面拼凑感强"。

✅ 好例(素材包统一流程,1–2 人天)

  1. 重映射母材质:所有资产改用项目的 3 个母材质(脚本批量)
  2. 色板重映射:写工具把贴图颜色吸附到项目色板(或调 Tint 参数)
  3. 统一比例:批量缩放脚本,统一到项目模数
  4. 统一老化:所有材质套用同一个 _Wear 范围
  5. 统一笔触:加一层项目的手绘噪声遮罩
  6. 校验器:禁止非母材质资产提交
  7. 台账:登记授权与使用范围

结果:1.5 天把 3 个素材包统一成一个世界


8. 面对"渲染做的很漂亮但玩家记不住"

❌ 坏例

"我们再多做几个场景,内容量上去就好了。"

问题:数量不等于记忆;没有招牌和记忆点。

✅ 好例

诊断:剥离测试 = L1 装饰(换皮也成立);记忆点 0 个;无招牌技术

处方:

  1. 选招牌:本作内核是"被注视",选屏幕外暗示系统(投影 + 声音先行 + 前景剪影)作为招牌,5 天做到极致
  2. 记忆点 ×3:
    • 第 2 关:第一次看到"巨大影子掠过但本体从未出现"(奇观)
    • 中段:发现影子其实就是自己(机制转折)
    • 终章:影子转身面对玩家(情绪爆点)
  3. 每个记忆点独占性能预算 + 3–5 秒停留 + 音效配合
  4. 色彩脚本:从冷灰 → 逐渐去色 → 终章单色
  5. 其余全部降到 60 分:场景减半,资产复用率拉到 80%

结果:内容量 -40%,记忆度大幅提升


9. 面对"要出货了,发现掉帧"

❌ 坏例

"快!把所有特效关掉,纹理降到 512,关掉阴影!"(画面崩坏,且不知道真正原因)

问题:没定位就乱砍;牺牲了不该牺牲的东西。

✅ 好例

  1. 定位(1 小时):真机 Development Build + GPU 分析 → 发现透明 pass 占 5.2ms(预算 2.0)
  2. 归因:两个全屏透明粒子层 + 软粒子深度采样 + 全屏半透明 UI
  3. 精准修:
    • 大气粒子层降采样到半分辨率(-1.8ms)
    • 关掉软粒子深度采样,改用高度淡出(-0.9ms)
    • UI 全屏半透明层改为不透明 + 局部透明(-0.6ms)
    • 粒子数 -40%,尺寸 +60%(-0.7ms)
  4. 结果:-4.0ms,视觉几乎无损,纹理和阴影一个没动

教训:先量,再改。永远不要"凭感觉砍画质"。


10. 面对"TA 太忙了"

❌ 坏例

继续加班救火,每天处理 10 个不同的问题。

✅ 好例

诊断:连续 3 周都在做 L0 救火,没有积累任何杠杆

处方:

  1. 统计本周 10 个问题的类型 → 4 个是"导入设置错误"、3 个是"材质用了独立材质"、2 个是"命名不规范"
  2. 针对性建杠杆:
    • 导入设置错误 → 导入预设(0.5 天)→ 消灭一类问题
    • 独立材质 → 校验器 P0 拦截(0.5 天)→ 消灭一类问题
    • 命名不规范 → 批量重命名工具(0.5 天)→ 消灭一类问题
  3. 结果:1.5 天投入,每周省 8 小时救火时间

铁律:同一个坑掉第二次 = TA 失职。


通用改写公式

遇到任何问题,按这个顺序重写:

① 量化现状(数字,不是感觉)
② 定位原因(归因到具体模块/技术)
③ 链接内核(这个服务于内核吗?)
④ 给 2–3 个方案 + 各自的成本数字
⑤ 选一个,写明不做什么(Non-Goals)
⑥ 写明降级方案与开关
⑦ 写明验收标准(可测量)
⑧ 记录决策与复审条件