2025-1016-2151 gdc - 3D Toon Rendering in Hi-Fi RUSH
Slip-box
To be fleeting notes
Fleeting
To be literature notes (Understanding)
L-Origin
下面是《Hi-Fi RUSH 的 3D 卡通渲染》演讲要点精炼版(中文)——聚焦“如何把 UE4 的现代管线做成全场景卡通渲染”,兼顾做法与取舍:
核心目标与取舍
- 关键词:Sharp / Clean / Colorful(锐利、干净、鲜艳)。
- 60fps 与高分辨率优先(原生分辨率为主,PC 低配可选超分插件)。
- 环境与角色全量卡通化,而非只卡人物。
核心管线:延迟式 Toon Renderer(基于 UE4 改造)
- 把“延迟光照 + Toon 后处理”合并为一个“延迟 Toon Pass”:
- 保留 UE4 延迟渲染优势(GBuffer、分层光照),但每一层光照都能独立做卡通化(阈值、颜色、描线等)。
- Toon 后处理体积(PostProcess Volumes)像“延迟光源”一样使用:用体积框控制局部卡通参数(非按摄像机全局),艺术可在同一镜头里分区调风格。
- 在 Toon Pass 中统一组合:场景颜色在 Toon 前几乎为空(只保留自发光),所有光照与阴影结果作为输入纹理,在 Toon 阶段统筹样式与叠加关系(如玩家影与级联阴影重叠时自动调深浅)。
环境“上色”的三件法宝
- 阴影颜色体积(3D 纹理)
- 以盒体映射 3D 纹理到世界坐标,按高度/位置渐变阴影颜色。
- 艺术可手工绘制 3D LUT来定制区域基调(尤其室内“底色在阴影里,再叠光”)。
- 环境 Cubemap 体积
- 依 GBuffer 法线取样,做方向性环境亮度(底/侧更亮、顶更暗等),同样体积化、可局域调。
- 漫画化着色(Comic Shader)
- 半调点(halftone)+ 线影(hatching):用 2D SDF 程序化生成,支持屏幕空间(雾、Bloom 等)与世界空间投影(贴在物体上)。
- 抗锯齿:阈值边缘用 smoothstep + ddx/ddy 控宽度;TAA 会模糊点阵,因此 AA 在 TAA 后的通道(如 Bloom 半调)更明显。
- 亮度驱动“点/线尺寸”,以尺寸变化表达距离衰减,避免连续明暗渐变的“3D 味”。
光照:Key Light + Decal Light
- Key Light(双主光):在 BasePass 前向计算 Toon 两段式明/暗(Lit/Shadow),当时为减少引擎侵入才选前向;后期也用 RenderCommand/Delegate 做了更多定制。
- Decal Light(延迟贴花光):
- 用“截断贴图”分级衰减(切成明暗台阶,杜绝渐变);提供 7 套切形图案做变化。
- 可指定 Decal 体积限制投射范围,避免漏光、提升性能;墙地不同图案各自投射。
- 仅环境受影响——角色光照走独立系统,避免穿帮。
阴影策略(质量 × 性能)
- 限制能投影的光源:Decal Light 不投影。
- 室外:UE4 Cascaded Shadow Maps(方向光),辅以静态 Shadow Map 代替部分级联以省成本。
- 角色:
- 玩家/巨型 Boss:专用 Shadow-Only Light 投影(与环境级联系统解耦),并在 Toon Pass 做线影过渡(离投影体越远线越细,形成卡通“明暗交界”)。
- NPC/小型:Capsule Shadows(UE4 标配、便宜),悬空小体用AO 贴花体积(CPU 射线找落点)。
- 环境局部戏剧性影:允许单个 Shadow-Only 聚光(仅投影,不加光)。
- 静态 Shadow Map 系统(自研):
- 本质:把**“从光源看去的深度图”预烘**(步骤1),运行时在体积里做屏幕空间深度比较(步骤2)。
- 4×4 PCF 抗锯齿;大量小相机分布场景(连扶手也单独烘),以小纹理多片降低显存与流加载峰值;放入独立流关卡,按帧限额流入。
全局光照(GI):体素化工作流的“卡通化改造”
- 需求:要 GI 质感,但不想折腾 Lightmap UV、也不想慢烘。
- 方案:基于 UE4 **Volumetric Lightmap(探针)**定制:
- 体积盒为单位选择性烘焙(按区域 1–2 分钟),每个体积单独存探针数据(不是按关卡),可快速迭代。
- 因为卡通风可有选择地只在强发光邻域放探针。
- 内存优化:只要无方向环境,把 SH 纹理从 8 降为 1 通道。
角色“脸部自阴影”的门面功夫:阈值贴图(Threshold Map)
解决传统“按顶点法线阈值分明暗”的三大痛点:曲线不顺、表情驱动会扭形、艺术家难以控制。
- 做法(借鉴 Unity 2018 MHO 方法):
- 固定步进(如 5°)绕头部水平方向旋转方向光,逐帧烘 36 张“脸部阴影贴图”(初稿可能仍有杂散阴影)。
- 美术在 DCC 中逐张修形,确保阴影边界干净顺滑、位置正确。
- 用工具把 36 张融合为一张“阈值贴图”(类似距离场插值,保证随角度平滑过渡)。
- 运行时:取头部坐标系的“水平夹角/π→[0,1]” 作阈值,在阈值贴图采样比较决定像素是否落在阴影区;仅水平方向已足够表意。
- 结果:
- 始终光滑、不受骨骼/表情影响(UV 映射)、可直观地由贴图修形;为保证特写锋利,用 2K 贴图。
其他实现细节
- 材质输入:主要用 BaseColor 与 Roughness(用于 SSR,UE4 SSR 低采样+二次卡通化),不走完整 PBR/金属度。
- GBuffer 位:把 UE4 未用槽位当作风格化标记位(bonus 幻灯提到)。
- Shader 代码:程序直写 HLSL(而非节点)便于版本管理与全项目检索;大部分材质/后处理均由程序实现。
- 与美术共建管线:体积化“阴影色/环境 Cubemap/GI/Toon 参数”让关卡内按区域精细定调,符合“干净、可控”的美术需求。
可借鉴的“方法论”
- 把“卡通风格控制权”下放给关卡美术:体积化的参数与资源(3D LUT、Cubemap、GI 盒、Toon 盒)。
- 先决定“不能有的东西”:拒绝连续渐变(距离衰减、阴影过渡),以切形/点线/离散尺寸替代。
- 用“预烘 + 运行时体积重组”换性能:静态阴影与 GI 都按小块多片流控。
- 角色脸部阴影用“角度→阈值贴图”:把“难以调的法线空间问题”变成可视贴图修形问题。
- 明确优先级:60fps 与原生分辨率先行,效果都要服务“锐利/干净”的最终观感。
如果你打算在 UE(或任意延迟管线)做全场景 Toon 化,上面这套“延迟 Toon 合并、体积化局部控制、漫画化着色”的组合拳,几乎就是一条可落地的路线图。
L-My Words
L-Zotero citation key
To be permanent notes (Complete Ideas)
P-Self Explained Sentences
P-Connection
- Parent
- Caused by::
- - Driven by::
- - Cite from::
-
- Caused by::
- Child
- Excalidraw::
- - Is source of::
- - Including::
- - Have Example::
- - Contributes to::
- - Consist of::
-
- Excalidraw::
- Friend
- Left
- Achieved with::
- - Affected by::
- - Supported by::
- - Enhanced by::
- - related::
-
- Achieved with::
- Right
- against::
- - Opposites::
-
- against::
- Left