特效的第一任务是表达规则
个人游戏很容易把 VFX 当成“让画面更亮”的装饰,结果战斗中到处都是粒子,玩家看不清敌人攻击、自己受击和可交互物。好的特效首先表达规则:哪里危险,哪里可以互动,攻击是否命中,技能是否冷却,护盾是否破裂。好看是第二层。
Steam 玩家会在不同机器、不同分辨率、不同画质设置下玩游戏。特效如果只在开发机上好看,低配机器掉帧或小屏幕看不清,就会影响体验。
特效分层
先给特效分层:
| 层级 | 示例 | 优先级 |
|---|---|---|
| Gameplay | 伤害范围、命中、预警、状态 | 高 |
| Feedback | 拾取、升级、保存、UI 提示 | 中 |
| Atmosphere | 灰尘、雾、火星、背景光 | 低 |
| Decoration | 纯装饰粒子 | 低 |
Gameplay 特效不能被装饰特效盖住。危险范围、Boss 前摇、玩家受击提示必须清楚。装饰层可以在低画质下减少或关闭。
颜色和形状规则
特效颜色要有语义。比如红色危险、蓝色护盾、金色奖励、绿色治疗。但不要只靠颜色,还要加形状、方向、边框或动画。色盲玩家和低质量视频压缩下,单纯颜色不可靠。
| 信息 | 建议 |
|---|---|
| 危险区域 | 颜色加边界和填充动画 |
| 治疗 | 柔和上升粒子和加号图标 |
| 护盾 | 轮廓或环形效果 |
| 破防 | 碎裂形状和短音效 |
| 可互动 | 稳定高亮,不抢危险提示 |
特效语言要一致。不要在一个场景里红色代表危险,另一个场景里红色代表奖励。
Shader 变体控制
Shader 很容易造成变体爆炸。每多一个开关,就可能增加编译和加载成本。个人项目要控制材质变体数量,避免为了少量视觉差异创建大量 Shader。
做法:
- 通用材质尽量复用。
- 用参数控制颜色和强度。
- 高风险效果做低配替代。
- 不常见组合不要预编译太多。
- 构建前检查未使用材质。
Shader 编译卡顿在首次进入场景时很明显。即使引擎处理了大部分细节,也要在首次安装后的干净环境测试。
粒子预算
每个场景要有粒子预算。战斗高峰时,同时存在的粒子、透明材质、动态光源和后处理都可能叠加。
预算表:
| 场景 | 粒子限制 | 备注 |
|---|---|---|
| 普通战斗 | 中等 | 保持敌人动作清楚 |
| Boss 战 | 较高但可控 | 关键预警优先 |
| 主菜单 | 低 | 不让菜单耗性能 |
| 背景环境 | 可降级 | 低画质关闭部分 |
不要让主菜单跑大量粒子导致显卡升温。玩家停在菜单调设置时也会消耗性能。
命中和受击特效
命中特效要短、准、可读。它应该出现在命中点附近,和音效、停顿、敌人动画一致。受击特效要让玩家知道自己被打中,但不要遮挡接下来的操作。
常见问题:
- 命中特效太大,挡住敌人前摇。
- 暴击特效持续太久。
- 受击红屏过强,看不到危险。
- 多段攻击特效叠加导致看不清。
可以按攻击类型设置特效强度,普通攻击轻,重击明显,终结技才用大效果。
低画质降级
低画质不是简单关掉全部特效。Gameplay 特效必须保留,只降级装饰和高成本效果。比如危险范围仍显示,但去掉复杂光晕;命中仍有反馈,但减少粒子数量;环境雾降低密度。
| 特效 | 低画质处理 |
|---|---|
| 危险预警 | 保留核心形状 |
| 命中反馈 | 保留短效果 |
| 环境尘埃 | 降低或关闭 |
| 屏幕空间后处理 | 关闭或简化 |
| 动态光 | 减少数量 |
低配玩家也需要读懂玩法,不能因为画质低而看不见规则。
VFX 和音频同步
特效单独看可能正常,和音效、动画、镜头一起才是完整反馈。破防特效要和破防音效同一时刻出现,传送特效要和角色消失/出现同步,保存提示要和 UI 声一致。
可以在内部测试场放一个反馈测试台,逐个播放命中、破防、治疗、拾取、升级等效果,检查时序。
QA 清单
| 测试 | 检查 |
|---|---|
| 战斗高峰 | 是否看清敌人攻击 |
| Boss 技能 | 危险范围是否明显 |
| 低画质 | 核心规则是否保留 |
| 色彩检查 | 关键效果不只靠颜色 |
| 首次进入场景 | Shader 编译是否卡顿 |
| 长时间战斗 | 粒子是否泄漏 |
| 截图和视频 | 商店素材是否来自真实效果 |
最终检查清单
- 特效按 Gameplay、Feedback、Atmosphere 分层。
- 颜色和形状有稳定语义。
- Shader 变体数量受控。
- 粒子和透明效果有场景预算。
- 命中、受击和预警不互相遮挡。
- 低画质保留规则表达。
- VFX 与音频、动画、镜头同步测试。
- 发布前覆盖首次加载和战斗高峰。
特效越多不代表体验越好。对个人 Steam 游戏来说,能让玩家看懂、机器跑稳、反馈一致的 VFX,才是更可靠的开发目标。
特效命名和复用
VFX 文件命名要体现用途,例如 vfx_hit_slash_light、vfx_warning_circle_fire、vfx_pickup_coin_small。不要让项目里充满 NewParticle_03。命名清楚后,程序、美术和 QA 都能快速定位。
复用也很重要。普通命中、暴击、破防可以共享一套基础材质和不同参数,不必每个武器复制完整特效。复制越多,后期统一调整越难。
特效和截图素材
商店截图中常会展示技能特效。截图前要确认该效果在实际游戏中可触发,且低画质下仍保留核心表达。不要用编辑器里临时叠出的夸张效果做宣传,否则玩家进游戏会觉得落差。
如果某个特效还在试验阶段,不要过早放进商店页主图。视觉承诺也属于承诺。
Shader 兼容测试
不同显卡和驱动对 Shader 的表现可能不同。发布前至少在一台低配或集显机器上跑主场景,检查材质是否发黑、透明排序是否异常、后处理是否失效。发现问题时,低画质路径要能绕开高风险效果。
日志中记录画质档位和渲染后端,对玩家反馈“画面全黑”很有帮助。
特效生命周期
特效要有明确生命周期。命中粒子播放完销毁,持续区域跟随技能状态,环境特效随场景卸载。没有生命周期管理,长时间战斗后可能堆积隐藏对象,造成性能下降。
内部调试可以显示当前活跃特效数量。战斗结束后数量应回落到合理范围。如果只增不减,就说明有泄漏。
编辑器预览和真机构建差异
很多特效在编辑器里看正常,打包后因为压缩、排序、Shader 变体或光照设置不同而异常。发布前要在构建包中看,不要只看编辑器预览。尤其是透明排序和后处理,构建环境更接近玩家体验。
截图、预告片也应使用构建包录制,减少预期差异。
VFX 调整记录
特效参数调整也要记录。比如降低火焰粒子数量、延长危险预警时间、关闭低画质光晕。记录原因后,后续不会因为“看起来不够炫”把影响可读性的效果加回来。
特效复盘可以和战斗复盘放在一起,看玩家是否因为特效遮挡而受伤。
低配模式的特效清单
低配模式要有明确清单,而不是临时关闭。列出哪些保留,哪些降低,哪些关闭。危险预警、命中反馈、交互提示必须保留;环境尘埃、远景光晕、大量装饰粒子可以降低。
这张清单也方便 QA。测试低画质时,不是看画面是否还漂亮,而是看玩法信息是否仍然完整。
特效补丁的回归
修改一个通用 Shader 可能影响很多材质。补丁中改特效时,要抽测使用同一材质的场景。比如改透明溶解 Shader,可能同时影响敌人死亡、门开启、传送和 UI 过渡。通用资源越多,回归范围越要写清楚。
避免视觉噪音
特效过多会降低信息质量。发布前可以录一段战斗视频静音观看,观察是否仍能看懂危险和命中;再关掉伤害数字观看,检查特效是否承担了必要反馈。这样能判断哪些效果是信息,哪些只是噪音。
和美术风格保持一致
特效还要匹配整体美术。像素风游戏的高分辨率光效可能显得突兀,写实场景中过于卡通的爆炸也会破坏氛围。建立一组参考特效:命中、治疗、危险、奖励、传送。后续新特效都和这组参考对齐。
风格一致会让游戏显得更完整,也能减少补丁中新旧特效混杂的问题。特效不是单独炫技,而是整个画面语言的一部分。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。