2000 年 6 月 23 日事件时间
造物立场:争议双轨影响量级 4/5

Toon Shader 的七条路径:卡通渲染核心实现方案的演进图谱

从阶梯式漫反射到混合渲染管线,七种方案的原理、代价与适用边界

史话编委会 · 技术组18 分钟2.6k 阅读
阅读提示 · 争议存在实质性分歧,本文并陈各方。本词条会并陈主要分歧,并在「溯源」中给出各方依据; 如你掌握与本文相左的一手材料,欢迎在议事厅提出。
Toon Shader 的七条路径:卡通渲染核心实现方案的演进图谱 - 游戏史话 · 引擎与工作流

Toon Shader 的七条路径:卡通渲染核心实现方案的演进图谱

为什么是七条路径而不是一个标准答案

赛璐璐(cel-shading,也称 toon shading)是一种以视觉目标定义的渲染风格,而非以数学模型定义的渲染理论。这一点决定了它从诞生起就没有唯一正确的实现路径。与基于物理的渲染(PBR)不同——PBR 拥有微表面理论、能量守恒、菲涅尔方程这样统一的理论框架,只要参数正确,不同引擎的结果应当趋同;而赛璐璐的目标是"看起来像手绘动画",这是一个美学命题,美学命题没有标准解。

七条路径并非凭空划分。它们分别诞生于不同的硬件时代、服务于不同的美术目标、受制于不同的性能预算。Dreamcast 时代的固定管线逼出了阶梯式离散化;可编程着色器的普及让 Ramp Texture 成为艺术家可控的工具;移动端的算力限制则让背面膨胀描边重新流行。本文把这七种核心方案的原理、代价与适用边界画成一张图谱,供开发者按需取用。

定位说明: 本文是对历史方案的一次分类学梳理,而非教程。每条路径都附有代表作品与硬件要求,目的是帮助开发者在立项阶段做出有依据的技术选型,而非提供可直接复制的代码。

基础三件套:阶梯漫反射、色带贴图与轮廓描边

方案一:阶梯式漫反射

阶梯式漫反射是几乎所有赛璐璐着色器的起点。它的核心思路是:取法线与光照方向的点积 NdotL,这个值原本在 PBR 中会经过平滑的漫反射积分,得到连续的明暗过渡;而在赛璐璐中,我们用阶梯函数把它离散化成有限的几段。比如阈值设在 0.5,则 NdotL 大于 0.5 取亮色,小于则取暗色,中间没有过渡。

可控参数是每一段的阈值与对应的颜色映射。段数越多越接近连续光照,段数越少越像漫画。2000 年 6 月 23 日发售的《Jet Set Radio》是首个商业上引人注目的 3D 赛璐璐游戏,它在 Dreamcast 上使用的就是这种离散化的早期形态,受限于当时硬件,段数极少。

方案二:Ramp Texture 色带贴图

阶梯式的问题是阈值写死在着色器代码里,美术想调整明暗交界的位置就得改代码。Ramp Texture 把这个控制权交还给了美术:用一张一维纹理,以 NdotL 作为 UV 坐标去采样,纹理上每个像素的颜色就是对应光照强度下的最终漫反射色。

美术可以直接在图像编辑器里画出他想要的色带过渡——硬边、软渐变、甚至带高光斑点,都不需要碰一行着色器。这种"数据驱动艺术控制"的思路在 2000 年代中期随着可编程着色器普及而成为主流,至今仍是大多数赛璐璐游戏的首选漫反射方案。

方案三:背面膨胀轮廓线

轮廓线是赛璐璐视觉的另一半。最古老也最可靠的画法是背面膨胀:把网格的背面沿顶点法线方向向外推一定距离,用纯黑渲染,再把正面正常渲染叠在上面,露出的那一圈黑色就是描边。

2002 年的《风之杖》用的是这种方法的成熟版本。它的优点是实现简单、对所有平台友好;缺点是描边宽度会随几何体曲率变化——曲面处线细,平面处线粗,细长结构如手指、天线可能完全得不到描边。这个缺陷直接催生了后世的描边优化方案。

进阶三式:双色调、法线风格化与描边优化

方案四:双色调着色

双色调是阶梯式的极端简化:只保留亮与暗两个颜色,完全取消中间过渡带。它适用于追求极致图形简化的项目,例如某些水墨或版画风格的环境元素。需要警觉的是,对大多数角色渲染而言双色调过于激进,会丢失体积感,更适合用在环境与道具上,而非人物面部。

方案五:法线映射风格化

这是把法线从物理属性变成艺术工具的关键一步。常规法线贴图用于模拟表面凹凸的真实细节;而风格化法线则用手绘或程序化修改过的法线替换原始法线,从而人为决定光如何落在模型上——在不改动几何体的前提下,让脸颊的明暗交界线恰好落在想要的位置。

核心洞察是:在赛璐璐中,法线不是物理量的近似,而是美术笔触的延伸。Arc System Works 在 2014 年的《罪恶装备 Xrd》中把这项技术用到极致,通过逐顶点手动调整法线,让 3D 模型在任何光照角度下都呈现手绘动画般的固定阴影形状。

方案六:屏幕空间描边优化

第三种描边思路是后处理:对深度缓冲或法线缓冲做 Sobel、Laplacian 等边缘检测,在屏幕空间直接描出轮廓。它的优点是与几何体无关,描边宽度恒定,还能检测出内部折痕与材质边界;缺点是在移动端开销偏高,且描边质量依赖屏幕分辨率,低分辨率下会闪烁。

现代优化手段是用自定义模板缓冲(Custom Stencil)标记需要描边的对象,后处理时只对这些区域做边缘检测,从而大幅降低全屏计算成本。

第七条路:混合渲染管线的赛璐璐与 PBR 共存策略

当代最主流的做法是分层渲染:角色走赛璐璐管线,环境走 PBR 管线。《原神》(2020)及大量现代二次元游戏采用的就是这种策略。它的真正难题不在任一一条管线本身,而在于让两种风格看上去属于同一个世界。

常见的解法包括:共享光照方向,使角色与环境的明暗逻辑一致;统一阴影颜色,避免角色阴影与环境阴影色相冲突;以及用基于 LUT 的色彩校正把最终画面统一到同一色调下。

术语溯源: miHoYo 在 GDC 演讲中将这套角色赛璐璐加环境 PBR、再用色彩校正统一的做法称为"Stylized PBR"(风格化 PBR),这一术语已成为该路径的主流名称。

七种方案的技术特征矩阵

方案 核心原理 硬件要求 风格控制精度 代表作品
阶梯式漫反射 NdotL 离散化 极低 Jet Set Radio (2000)
Ramp Texture 1D 纹理查找 大多数现代赛璐璐游戏
背面膨胀描边 顶点法线外推 风之杖 (2002)
双色调着色 二值化光照 极低 特定风格化项目
法线风格化 修改法线贴图 极高 罪恶装备 Xrd (2014)
屏幕空间描边 后处理边缘检测 中高 原神 (2020)
混合渲染管线 Cel + PBR 分层 极高 原神、蔚蓝档案

至今未决的两个路线之争

后处理描边(屏幕空间)还是几何体描边(3D 空间):哪条路径才是赛璐璐的正统实现?

支持后处理的一方认为,描边宽度恒定、能抓内部边缘,才是动画感的来源;支持几何体描边的一方则认为,只有 3D 空间中沿法线外推的描边才能保证轮廓随镜头透视正确变化,屏幕空间描边在广角镜头下会出现"贴纸感"。两派至今没有定论,多数项目实际是混合使用:主轮廓用几何体,细节边缘用后处理。

Ramp Texture 是否应该成为赛璐璐的标准,还是阶梯式离散化仍有不可替代的价值?

主流观点认为 Ramp Texture 在美术可控性上全面胜出,理应成为标准。但坚持阶梯式的一方指出,硬编码的阶梯在低端硬件上几乎零成本,且其"生硬"的色阶本身正是某些复古风格的追求目标。两者并非替代关系,而是风格光谱的两端。

从七条路径中带走的四件事

起步基线: 从 Ramp Texture 加背面膨胀描边开始。这对组合用最少的代码覆盖了 80% 的赛璐璐需求,是立项阶段最稳的技术基线。
最高杠杆: 法线风格化是杠杆率最高的技术。它正是"通用 toon shader"与"看起来像某部特定动画"之间的分水岭,值得投入最多打磨精力。
克制混合: 单个项目里不要混合超过三种方案。维护成本随方案数量指数级增长,混得越多越难保持风格统一。
移动端陷阱: 屏幕空间描边对移动端是过度配置。低端机用背面膨胀,高端机才上后处理,按机型分档降级,否则低端机上会直接吃掉帧率预算。

本词条的下一步

  • 各方案在 Unity Shader Graph 和 Godot 中的具体节点拓扑(计划中)
  • 三大技术门派对这七种方案的不同取舍策略(即将上线)
  • 移动端赛璐璐的降级预案详细拆解
  • 欢迎在议事厅分享你的方案选择与踩坑经验
词条标签
Toon Shader阶梯式漫反射Ramp Texture背面膨胀描边法线风格化屏幕空间描边混合渲染管线赛璐璐实现方案
溯源 · 主要依据
  1. GDC 2015: The Technical Art of Guilty Gear Xrd - Junya C. Motomura (Arc System Works) — 法线风格化与多层描边系统的技术解析
  2. miHoYo GDC 2019: NPR in Genshin Impact 技术分享 — 风格化PBR与混合渲染管线的工业化实践
  3. Unity Toon Shader 开源项目文档(UniToon、Toony Colors Pro) — 社区实现方案的对照参考
星链 · 跨轴相关词条

议事厅ROUNDTABLE

5 个议题55 条回复33 位参与者最近活跃 2026/08/08

本词条尚无置顶观点。史话的议事规则很简单:反驳需要给出可核验的依据,补充需要标明出处, 立场分歧本身会被保留下来写进词条,而不是被删掉。

← 返回主题轴:引擎与工作流