URP 渲染实战 / 第 14 章 卡通渲染 / 案例 14.2
案例 14.2阴影色:不要只是“变暗”入门
目标:理解为什么卡通渲染的暗部要用单独指定的颜色,而不是“固有色 × 系数”,并加上第二层阴影。
新手最常见的写法是 lerp(baseColor * 0.5, baseColor, band):暗部就是亮部乘个系数。结果是暗部又灰又脏——乘一个小于 1 的数,等于在 HSV 里同时降低明度和(相对)饱和度,色相不变。可是画师上阴影的时候从来不这么做:受光面偏暖,背光面偏冷,阴影往往是色相偏移(向蓝、紫方向)而饱和度不降甚至略升的颜色。这个规律来自真实世界——暗部主要接收的是天空的蓝色散射光——但被动画和插画大大夸张了。
所以 ToonRamp.shader 的暗部使用 _ShadeColor,由美术直接挑颜色;再用第二个阈值切出更暗的 _ShadeColor2,用于背光最深的区域(例如下巴底下、手臂内侧)。两层阴影在日式卡通渲染里很常见,有的项目叫“1st Shade / 2nd Shade”。

挑阴影色的几条经验
① 先定整个场景的“环境色调”(例如偏蓝的天光),所有材质的阴影色都往这个方向偏移,画面才统一。② 皮肤的阴影往红、粉方向偏(模仿次表面散射),金属和布料往冷色偏。③ 阴影色的明度大约是亮部的 60%~75%,比 PBR 的暗部亮得多——卡通画面是靠色相区分明暗,而不是靠明度。④ 用 Ramp 贴图时,可以把这几条直接画进贴图里;用纯色参数时,最好在材质面板上做一个“从固有色自动推算阴影色”的按钮,减少美术的重复劳动。