现象:为什么皮肤看起来“透”?
在三维渲染中,皮肤是最难攻克的材质之一。不同于金属或塑料,皮肤在强光下会呈现出一种独特的半透明感——例如,手指在强光下会呈现红色,耳朵在逆光时边缘会发光。这种效果并非简单的透明度,而是光线在皮肤内部发生散射后重新出射的结果。Blender 的次表面散射(Subsurface Scattering,SSS)材质正是为了模拟这一物理现象而设计的。但你真的理解其背后的原理吗?为什么调整半径和权重就能改变散射效果?本文将带你从光子传输的底层机制出发,逐层剖析 SSS 的数学与物理基础,并给出实战调参的验证方法。

原理:光子在皮肤中的旅程
要理解 SSS,必须先理解光与物质相互作用的三种基本方式:反射、吸收和透射。对于不透明材质,光线仅在表面发生反射和折射;但对于皮肤这类半透明材质,一部分光线会进入内部,经历多次散射后从其他位置出射。这一过程称为次表面散射。皮肤由多层结构组成:表皮、真皮和皮下组织,每层对光的吸收和散射特性不同。例如,血红蛋白(在真皮层)吸收蓝光和绿光,而反射红光,因此皮肤呈现出红润的色调。当光线进入皮肤后,它会在这些层中随机行走(Random Walk),每次遇到细胞或纤维都会改变方向,同时被吸收一部分能量。最终,未被吸收的光子从表面出射,贡献了皮肤的半透明感。
散射模型:从 K-M 到 Random Walk
Blender 提供了两种 SSS 模型:Random Walk(随机行走)和 Burley(基于物理的散射模型)。Random Walk 模型基于蒙特卡洛模拟,追踪每个光子在介质中的随机路径,通过平均大量光子来模拟散射效果。它更精确,但计算量较大。Burley 模型则是一种近似,基于 Disney 的物理散射模型,通过一个简化的公式快速计算散射分布,速度更快,但精度略低。Blender 默认使用 Random Walk,因为它能更真实地表现皮肤在不同光照下的散射行为。
数学表达:散射系数与各向异性
在底层,SSS 的数学描述依赖于两个关键参数:散射系数(Scattering Coefficient)和吸收系数(Absorption Coefficient)。散射系数定义了光线在介质中被散射的概率,吸收系数定义了被吸收的概率。两者结合决定了光子的平均自由程(Mean Free Path),即光子在不被吸收或散射的情况下穿过的平均距离。在 Blender 中,这些参数被封装为 Radius(散射半径)和 IOR(折射率)。Radius 实际上是一个 RGB 向量,分别代表红、绿、蓝光在皮肤中的散射距离。由于红光散射距离远大于蓝光,因此 Radius 的红色分量通常远大于蓝色分量,这解释了为什么皮肤在逆光下呈红色。各向异性(Anisotropy)参数则控制散射的方向性,0 表示各向同性(所有方向概率相等),正值表示前向散射(光子倾向于沿原方向继续前进),负值表示后向散射。皮肤通常具有轻微的前向散射特性,因此各向异性值设为 0.8 左右。
推导:从物理参数到 Blender 的 SSS 节点
在 Blender 的 Principled BSDF 节点中,SSS 相关参数包括:Subsurface(权重)、Subsurface Radius(散射半径)、Subsurface Color(散射颜色)、Subsurface IOR(折射率)和 Subsurface Anisotropy(各向异性)。这些参数并非随意设置,而是从物理测量数据推导而来。例如,真实皮肤的散射半径大约为:R=1.0mm, G=0.5mm, B=0.25mm(在 Blender 中通常以米为单位,所以是 0.001, 0.0005, 0.00025)。Subsurface Color 则用于模拟吸收后的颜色,通常设置为浅红色(如 #FFB0A0),以模拟血红蛋白的吸收效应。权重(Subsurface)控制 SSS 效果在整体材质中的占比,0 表示完全漫反射,1 表示完全次表面散射。实际皮肤通常需要将权重设置为 0.5~0.8,并配合漫反射贴图来表现细节。
参数之间的数学关系
理解参数之间的数学关系对于调参至关重要。散射半径决定了光在皮肤内传播的距离,半径越大,散射越强,皮肤看起来越“透”。但半径过大,皮肤会失去细节,变得像蜡。折射率(IOR)影响光进入皮肤时的折射角度,进而影响散射路径。皮肤 IOR 约为 1.4,与水的 1.33 不同。各向异性则影响散射分布的形状,前向散射会使光线更倾向于穿透皮肤,产生更强烈的透射效果。在 Blender 中,这些参数共同作用于 Renderer 的 SSS 着色器,通过求解辐射传输方程(RTE)来模拟光子的传输。Random Walk 模型实际上是在求解 RTE 的蒙特卡洛近似,而 Burley 模型则是解析近似。
验证:实战调参的黄金法则
理论必须与实践结合。以下是我在项目中总结的调参验证方法:
- 第一步:建立基础材质。使用 Principled BSDF,设置 Subsurface 权重为 0.5,Subsurface Color 为浅红色,Radius 为 (0.001, 0.0005, 0.00025)(注意 Blender 中单位是米)。
- 第二步:测试光照。使用一个强点光源从侧面照射,观察皮肤边缘是否有红色透光。如果没有,增加 Radius 或权重;如果透光太强,降低权重。
- 第三步:检查细节。在正常光照下,皮肤应保留毛孔和皱纹的细节。如果细节丢失,降低 Subsurface 权重,或增加漫反射贴图的影响。
- 第四步:对比参考。使用真实皮肤照片作为参考,调整 Subsurface Color 和 IOR,直到效果匹配。
技巧提示:在 Cycles 渲染器中,使用 Open Shading Language (OSL) 可以编写自定义的 SSS 着色器,实现更精确的物理模拟,但性能开销较大。对于实时预览,可以使用 EEVEE 的近似 SSS,但效果不如 Cycles 真实。
行业案例:从电影到游戏
次表面散射在电影和游戏行业中被广泛应用。例如,皮克斯的《怪兽电力公司》中毛怪的皮肤,以及《阿凡达》中纳美人的蓝色皮肤,都依赖 SSS 来表现半透明感。在游戏领域,实时 SSS 技术(如屏幕空间次表面散射)被用于提高角色皮肤的真实感。Blender 的 SSS 能力已经达到生产级别,许多独立电影和广告项目都使用它来创建逼真角色。例如,Blender 官方电影《Spring》中的兔子角色,就使用了精细的 SSS 设置来模拟皮肤和毛发的散射。

总结:SSS 是艺术与物理的桥梁
次表面散射不仅仅是调整几个参数,它是对光与物质相互作用物理机制的模拟。理解光子传输的底层原理,能帮助你从“盲目调参”走向“科学调参”。下次当你调整 SSS 时,请记住:你是在模拟无数光子穿越皮肤的真实旅程。掌握这种思维方式,你就能在 Blender 中创造出令人信服的皮肤材质。








评论(0)