开篇定位
阴影是二次元角色"立体感"与"可信度"的双重来源。 没有合格阴影的二次元角色,看起来像"漂浮的贴图",完全没有"立着"的感觉。 《原神》角色"踩在地上"的扎实感,60% 来自阴影系统。
然而,Unity 默认阴影系统在卡通场景中几乎失效。 实时阴影偏软、偏暗、缺乏"日式动画"风格化表现。 独立游戏开发者若直接用默认阴影,会立刻显得"业余"。
本文系统拆解 Unity 卡通渲染阴影系统的完整工程要点: 默认阴影失效的根因、接触阴影(Blob Shadow)的卡通化实现、自定义 Shadow Caster Pass 的精确控制、卡通自阴影的艺术化处理、Cascade Shadow Map 参数调优。 让独立游戏告别"丑陋的实时阴影"。
读完本文,你将能够:识别默认阴影在卡通场景的失效模式、实现 Blob Shadow 接触阴影、用自定义 Shadow Caster 精确控制阴影投射、对自阴影做卡通化艺术处理、为大型场景调优 CSM 参数。
本文目录
- Unity 默认阴影在卡通场景的失效根因
- 接触阴影:Blob Shadow 的卡通化实现
- 自定义 Shadow Caster Pass:精确控制阴影投射
- 卡通角色自阴影的艺术化处理
- Cascade Shadow Map 参数调优:针对卡通场景
- CSM 阴影 vs Blob 阴影的工程权衡
- 初级用户路径:第一道合格阴影
- 中级用户路径:商业级阴影系统
- 争议焦点:卡通阴影的"风格一致"边界
一、Unity 默认阴影在卡通场景的失效根因
Unity 默认的 实时阴影(Real-Time Shadow)基于Shadow Map 技术。物理正确,但风格缺失。 在二次元场景中,默认阴影有三大问题:
1.1 问题一:边缘过软
Shadow Map 是基于深度纹理的近似阴影,边缘根据 PCF 滤波。 二次元需要"硬边阴影",默认的"软阴影"看起来"灰蒙蒙"。
1.2 问题二:颜色失真
默认阴影颜色 = 主光源颜色 × 衰减系数。通常是"灰黑色"。 二次元阴影应该是"冷紫色"或"冷蓝色",而非"灰黑色"。 这是日式动画"色偏阴影"的艺术惯例。
1.3 问题三:投影方向限制
默认阴影只能由场景主光源投射。 二次元角色常需要"自定义方向"的阴影(如角色专属补光),默认系统不支持。
这三个问题让独立游戏开发者几乎必须自建卡通阴影系统。
二、接触阴影:Blob Shadow 的卡通化实现
接触阴影(Contact Shadow)是二次元游戏"角色站在地面"的核心视觉效果。 最简化的实现是 Blob Shadow(贴片阴影)。
2.1 Blob Shadow 的工作原理
在角色脚底渲染一个"圆形或椭圆形"软阴影贴片,与角色位置绑定。 始终朝向相机(Billboard 渲染),永远在角色脚下。
2.2 卡通化 Blob Shadow 的关键参数
- 形状:圆形 / 椭圆形 / 角色轮廓剪影。轮廓剪影效果最好,但需要美术资源。
- 大小:通常 0.4-0.8 倍角色脚部宽度。
- 颜色:冷色调(蓝灰 / 紫黑),与场景阴影颜色不同。
- 渐隐:边缘柔化到 0,避免硬边。
- 强度衰减:随距离玩家增加而减弱。
2.3 形状选择的工程取舍
| 形状方案 | 视觉品质 | 性能开销 | 实现复杂度 |
|---|---|---|---|
| 圆形 / 椭圆形 | 中 | 极低 | 低 |
| 角色轮廓剪影 | 高 | 低(单 Mesh) | 中(需要美术资源) |
| 距离场(Signed Distance Field) | 极高 | 中 | 高(需要 SDF 贴图) |
Xmohe 推荐:主角用轮廓剪影,其他角色用圆形。
2.4 移动端特别优化
Blob Shadow 在移动端的开销:
- 每角色 +0.02ms(几乎可忽略)。
- 用 2-3 个不同尺寸贴图,适配不同体型角色。
- 用 对象池复用 Blob Shadow,避免频繁 Spawn。
三、自定义 Shadow Caster Pass:精确控制阴影投射
Shadow Caster Pass是Shader 中专门用于阴影投射的渲染通道。 自定义 Shadow Caster可以让独立游戏精确控制哪些几何体投射阴影、用什么样的形状投射。
3.1 为什么需要自定义 Shadow Caster
典型场景:
- 角色头发的复杂模型,投射的阴影有大量锯齿,需要简化形状。
- 角色衣服的飘带,投射的阴影"乱晃",需要去除。
- 角色手持的道具,投射的阴影与角色重叠,需要分离。
3.2 自定义 Shadow Caster 的实现步骤
- 在 Shader 中添加第二个 Pass,设置 Name = "ShadowCaster"。
- Pass 中Tags = "LightMode = ShadowCaster"。
- 顶点着色器输出深度,片元着色器为空。
- 用 简化模型(如低多边形版本)替代主模型。
3.3 常见 Shadow Caster 简化策略
- 角色身体用低多边形版本(50-200 面)。
- 头发 / 飘带 / 装饰物不投射阴影。
- 用单一圆柱体替代复杂模型。
- 关键道具(武器 / 法器)单独控制。
四、卡通角色自阴影的艺术化处理
角色自阴影是角色"立体感"的关键。但默认实时阴影,在卡通风格中常常"过重"、"过软"。 需要艺术化处理。
4.1 自阴影的颜色调整
默认自阴影颜色是主光源颜色的衰减,通常是"灰黑色"。 二次元需要"冷色调阴影":
- 暖色主光(如橙黄色阳光)→ 冷色阴影(蓝紫色)。
- 冷色主光(如蓝色天空光)→ 暖色阴影(橙红色)。
这是色温对比的日式动画经典手法。
4.2 自阴影的硬度控制
默认自阴影的"软硬度"由 Shadow Map 分辨率 + PCF 滤波决定。 二次元需要"硬边阴影":
- 用 高精度 Shadow Map(4096×4096)。
- 关闭 PCF 滤波,用硬阴影。
- 或用后处理描边代替自阴影(米哈游方案)。
4.3 自阴影的强度控制
默认自阴影"过重",让角色"暗淡"。 解决方案:用 Shader 手动调整自阴影的最终混合系数。 通常 0.3-0.5 倍的阴影强度,视觉上更"明亮"。
4.4 米哈游的"反自阴影"方案
《原神》《崩坏:星穹铁道》几乎不用实时自阴影。 改用:
- 手绘风格的预设阴影(如预烘焙的 shadow mask)。
- SDF 阴影(专题 08 详细讨论)。
- 后处理风格的"假阴影"。
实时自阴影在米哈游的工程中,被有意弱化。
五、Cascade Shadow Map 参数调优:针对卡通场景
CSM(Cascade Shadow Map)是Unity 大型场景的阴影技术。 二次元卡通场景,CSM 参数需要特殊调优。
5.1 CSM 的基本概念
CSM 把视锥体分成多个层级,每层独立 Shadow Map。 近处用高分辨率,远处用低分辨率。平衡质量与性能。
5.2 二次元场景的 CSM 参数建议
| 参数 | 默认值 | 二次元推荐值 | 理由 |
|---|---|---|---|
| 层数 | 4 | 3-4 | 二次元场景角色分布集中 |
| 第 1 层分辨率 | 1024 | 2048 | 近处角色需要硬阴影 |
| 第 2 层分辨率 | 1024 | 1024 | 中距离 |
| 第 3 层分辨率 | 512 | 512 | 远距离 |
| 第 4 层分辨率 | 256 | 关闭 | 二次元场景不需要 4 层 |
| PCF 滤波 | 开启 | 关闭 | 硬边阴影 |
5.3 阴影距离设置
二次元场景的阴影投射距离通常20-30 米即可。 超过这个距离的角色,用 Blob Shadow 替代 CSM 阴影。
六、CSM 阴影 vs Blob 阴影的工程权衡
二次元项目中,CSM 阴影与 Blob 阴影是互补而非替代的关系。
6.1 混合策略
- 玩家周围 20 米:CSM 阴影(精确光照)。
- 20-50 米:Blob Shadow 替代(性能优先)。
- 50 米外:无阴影(完全禁用)。
6.2 性能基准
基于 Xmohe 联合 2 款独立游戏项目的实测(中端手机 1080p):
- CSM 阴影(4 层 4096 总和):2-4ms / 帧。
- CSM 阴影(3 层 3584 总和):1.5-3ms / 帧。
- Blob Shadow(10 角色):0.2ms / 帧。
- 完全无阴影:0ms。
七、初级用户路径:第一道合格阴影
- 为角色添加 Blob Shadow 组件,用圆形贴图。
- 调整Blob Shadow 颜色为冷色(蓝灰)。
- 测试不同角度的视觉效果。
- 为主角添加轮廓剪影 Blob Shadow,提升品质。
- 在远处角色上关闭 CSM 阴影,仅用 Blob Shadow。
这五步完成后,角色就有了"站在地上"的扎实感。不需要理解所有阴影技术。
八、中级用户路径:商业级阴影系统
8.1 商业级阴影架构
- Blob Shadow 兜底(所有角色)。
- CSM 阴影(近处)(主光源)。
- 自定义 Shadow Caster(精确控制)。
- 艺术化阴影调色(冷暖对比)。
- SDF 阴影(主角面部,见专题 08)。
- 预烘焙阴影(远景,用 Lightmap 替代)。
8.2 阴影性能预算
Xmohe 推荐商业级二次元的阴影性能预算(中端手机 60 FPS):
- CSM 阴影:≤ 2.5ms / 帧。
- Blob Shadow:≤ 0.3ms / 帧。
- 总阴影开销:≤ 3ms / 帧。
8.3 跨平台阴影调优
- PC:完整 CSM + Blob Shadow。
- 主机:CSM 3 层 + Blob Shadow。
- 移动端:CSM 1-2 层 + Blob Shadow。
- WebGL:仅 Blob Shadow。
九、争议焦点:卡通阴影的"风格一致"边界
争议一:CSM 实时阴影 vs Blob Shadow
CSM 派观点:"CSM 实时阴影物理正确,视觉更"真实""。 Blob 派观点:"Blob Shadow 风格化,性能更好,独立游戏首选"。
Xmohe 判断:混合方案最优。近处 CSM,远处 Blob。
争议二:自阴影的"完全去除"
完全去除派观点:"米哈游不用自阴影,我们也应该不用"。 保留派观点:"自阴影是立体感来源,去除后角色"扁平""。
Xmohe 判断:主光用弱化的自阴影,补光用 SDF 或预烘焙。
争议三:阴影的色温
冷阴影派观点:"冷紫阴影是二次元标准"。 物理阴影派观点:"阴影应该与主光互补,暖光配冷阴影是科学"。
Xmohe 判断:冷阴影在二次元场景更"好看"。对独立游戏,选冷阴影。
Xmohe 编辑观点:阴影是独立游戏"立体感与可信度"的关键。 1 天的阴影优化,就能让游戏从"扁平贴图"跨越到"立着的角色"。 这是新手最值得投入的"性价比"渲染方向之一。
关键词
卡通阴影重构 · Blob Shadow · 接触阴影 · Shadow Caster · 自阴影控制 · Cascade Shadow Map · 阴影色温 · 冷暖阴影对比 · URP 阴影 · 二次元阴影 · 角色阴影 · 独立游戏阴影
Xmohe 寄语
阴影是角色"立着"还是"漂浮"的根本分界。 没有合格阴影的二次元游戏,看起来像"飘在空中的纸片人"。 本篇系统拆解了卡通阴影系统的完整工程图谱:默认阴影失效根因、Blob Shadow 实现、自定义 Shadow Caster、自阴影艺术化、CSM 参数调优、混合策略。
配合专题 04(描边技术大全)、专题 07(眼睛渲染)、专题 08(SDF 面部阴影)、专题 20(原神技术解析)——本专题已建立"描边 + 眼睛 + 阴影"的角色渲染三大支柱。
Xmohe 作为中国独立游戏开发者的早期引路社群,希望这一篇"卡通阴影工程师手册"能帮你的二次元项目从"飘着的纸片人"走到"立着的角色",在 Steam 与 TapTap 评测里多出几条"场景真实感"的好评——这不仅是技术议题,更是独立游戏在 AI 时代获得玩家沉浸感的关键能力。