皮肤是数字人渲染中最具挑战、也是最值得深挖的材质之一。 本文按照「提出问题 → 物理建模 → 实时近似的演进 → 工程落地 → 横向对比」的脉络,系统梳理近 20 年实时皮肤渲染的主流方案,重点解析 Pre-Integrated、Separable SSS (4S)、Spherical Gaussian (SG) 三大里程碑技术。
文章还在施工中
一、为什么皮肤渲染如此困难?
人眼对人脸有近乎本能的识别精度——一点点不自然的光照、一处过硬的高光,都足以让数字人陷入”恐怖谷”。它的难点本质上来自皮肤独特的物理结构:
皮肤不是一个表面,而是一摞有半透明属性的多孔层。
光线打到皮肤上后,约 6% 被表面油脂层直接反射形成镜面高光,剩下 94% 的能量会进入皮肤内部,在多个层之间被多次散射、部分波长被血红蛋白选择性吸收,最后从入射点附近的某处再次出射。

在医学上,仅皮肤表皮(epidermis)即被认为包含五个不同的层[Poirer 2004]。在这种复杂性下对散射进行模拟可能是过度和没有必要的,但是真实的渲染需要在油质层下面建模至少两个不同的层,因为至少有一个层要用于镜面反射(specular)项。并展示了使用三层建模的改进方案。

因为其具有半透明属性光线会在皮肤的表层进行多次散射,散射根据其通过的路径衰减,简单来说就是光线会扩散到周围,这对于表现皮肤的质感起到很大作用。

多次皮肤对光线的散射和吸收
物理上,最准确的描述是 BSSRDF(Bidirectional Scattering-Surface Reflectance Distribution Function)—— 一个 8 维函数
对比一下普通 PBR 材质所用的 BRDF:
核心矛盾:BSSRDF 物理准确,但需要在表面 A 上做积分,对每个出射点都要查询周围所有入射点的贡献——直接评估完全不可能用于实时。
因此所有的实时皮肤技术,本质上都是在回答同一个问题:
如何用低成本的近似手段,在不同硬件预算下拟合 BSSRDF 的视觉表现?
把握住这条主线,下文所有方案的取舍就都顺理成章了。
二、物理基础:三个必须先理解的概念
2.1 镜面反射 — 来自表面油脂层的 6%
虽然只占 6%,但镜面项决定了”湿润 / 干燥””油性 / 哑光”等关键观感,是数字人是否”活”的关键。
业界常见的高光模型有:
| 模型 | 特点 | 性能 |
|---|---|---|
| Cook-Torrance / GGX | 工业标准 PBR 微面元模型 | 中 |
| Beckmann | 早期皮肤渲染常用,搭配 LUT 预积分加速 | 低(LUT 化后) |
| Kelemen–Szirmay-Kalos | GPU Gems 3 推荐,与 Torrance-Sparrow 视觉接近但 ALU 显著更少 | 低 |
Cook-Torrance BRDF:
为了避免运行时再算法线分布函数
1 | |
Dual Lobe Specular(双镜叶高光)
UE 的数字人方案不再使用单一粗糙度。皮肤毛孔的亚像素级凹凸会同时产生柔和的大波瓣和锐利的小波瓣,UE 用两个独立粗糙度的高光分别采样再混合:
UE 默认
2.2 次表面散射 — 来自表皮 / 真皮的 94%
这是皮肤”通透感”的全部来源。在统计意义下,光线从入射点沿表面”扩散”出去的距离衰减规律,可以用一个一维函数表达:
Diffusion Profile(扩散剖面):当一束极细的光打到皮肤上时,从距入射点
处出射的能量比例 。
不同波长的光对应不同的 Profile —— 红光散射距离最远(这就是手指捂着手电筒会变红的原因),绿光次之,蓝光衰减最快。这正是皮肤背光处那一抹温暖的红色调的来源。
Diffusion Profile 是所有 SSS 算法的共同基础:之后的纹理空间模糊、屏幕空间模糊、4S、Pre-Integrated、SG,本质都是用不同手段去**”应用”这条曲线**。
2.3 交互:感受 R/G/B 散射差异
下面这个小工具可以拖动 RGB 散射半径,直观看出 Profile 形态变化与卷积出来的”晕开”效果:
三、次表面散射的实时近似演进
3.1 时间线:性能预算如何驱动技术演化
下面我们首先提一下Wrap方案,再逐个拆解三个里程碑级方案。
3.2 Light Warp 经验模型


3.3 方案 A:Pre-Integrated Skin Shading(移动端首选)
核心思想(一句话):既然每帧都把 Diffusion Profile 在球面 + 曲率上积一遍太贵,那就离线积一次,把结果存成 2D LUT,运行时只查表。
Pre-Integrated Skin Shading是一个从结果反推实现的方案。我们在观察次表面散射效果可以发现:
- 「Surface Curvature」次表面散射的效果主要发生在曲率较大的位置(或者说光照情况变化陡峭的位置),而在比较平坦的位置则不容易显现出次表面散射的效果(比如鼻梁处的次表面散射就比额头处的次表面散射效果要强)
- 「Small Surface Bumps」在有凹凸细节的部位也容易出现次表面散射,这一点其实和(1)说的是一回事,只是(1)中的较大曲率是由几何形状产生的,而(2)中的凹凸细节则一般是通过法线贴图来补充。
- 「Shadows」when shadows fall on the surface, light will scatter into the shadows. 。当阴影落到表面上时,灯光将会散射到阴影中。

数学推导
结合以上 3 个观察,预积分的思路是把次表面散射的效果预计算成一张二维查找表,查找表的参数分别是**dot(N, L)和曲率「curvature (1/radius)」**,因为这两者结合就能够反映出光照随着曲率的变化。
对凸出表面,靠近终止线(
知乎答疑中更推荐的理解形式:
注意积分域是

图中的
核心实现(URP / HLSL)
具体包括 4 个实现要点:
- 曲率散射
- 法线过滤
- 阴影散射
- Filmic Tone-mapping「HDR,高动态范围应用」
阴影实现可以参考 GPU-Pro-2


1 | |
典型踩坑:曲率计算稳定性。直接
fwidth在低多边形或 MSAA 边缘会产生噪点;常见做法是把曲率烘到顶点色或单独贴图里,运行时插值即可。
3.4 方案 B:Separable Subsurface Scattering(4S,PC/主机首选)
演进起点:屏幕空间模糊(SSSSS)
屏幕空间方法的思路非常直接:
- 像普通光照那样把皮肤的 Lambert irradiance 输出到一张 RT;
- 用 Stencil Buffer 标记皮肤像素;
- 对该 RT 做 2D 卷积,卷积核形态由 Diffusion Profile 决定,核半径由像素深度推断(远的物体 SSS 范围视觉上更小)。

4S 的关键洞察:N×N → 1×N + N×1
朴素 2D 卷积的复杂度是
25×25 → 2×25 = 50 次采样,性能提升 12 倍,视觉损失却几乎不可察觉。
C
1 | |
Burley’s Normalized Diffusion(2018+)
迪士尼提出 Burley Normalized Diffusion 取代纯高斯,单一参数
UE5、Unity HDRP 当前的 SSS 都是基于这个 Profile 来采样的。
Zero-Radiance 还证明了它的 CDF 可解析求逆——这意味着可以做重要性采样,进一步减少 noise。
3.5 方案 C:Spherical Gaussian(数学解析派)

SG 用三个解析的球面高斯函数(分别对应 RGB)去直接卷积光源,绕开 LUT 和屏幕空间 blur 这两条路:
其中
1 | |
为什么 SG 在数学上很美:
| 优势 | 说明 |
|---|---|
| 任意方向 | |
| 任意锐度 | 单参数 |
| 严格能量守恒 | 球面归一化积分 = 1, |
| 与 IBL 兼容 | 球面环境光也可用 SG 拟合,统一框架 |
代价:单点光源效果好,但拟合 Burley Profile 需要至少 3~5 个 SG 叠加,且 SG 不能直接处理屏幕空间的”邻接像素散射”——它只能近似 punctual light 自身的散射,对透射、跨表面散射都没有解。所以更准确的定位是 “高质量 punctual light SSS 的解析方案”,而非屏幕空间 SSS 的替代。
四、工程实践:把方案塞进现代渲染管线
4.1 URP 中的 4S Pass 组织
Unity URP 的 ScriptableRendererFeature + ScriptableRenderPass 是注入屏幕空间后处理的标准方式:
SeparableSSSFeature.cs
1 | |
Unity URP Blit 默认行为会丢弃stencil,需要替代 Blit 的写法如下:
1 | |
4.2 Stencil 剔除的具体做法
为了避免对天空 / 衣服 / 地形等 94% 不需要 SSS 的像素也跑全屏 blur,必须用 Stencil 收窄运算范围:
- 皮肤材质的前向 / G-Buffer Pass 中,写入 stencil 的某一位(如
0x40); - SSS Blur Pass 在
RenderState里配置Stencil { Ref 0x40 ReadMask 0x40 Comp Equal },GPU 的 Early-Z/Stencil Reject 会自动剔除非皮肤像素; - 实测在 1080p 下能省约 40%~70% 的 blur 开销(取决于皮肤像素占比)。
1 | |
4.3 平台权衡:选型决策树
五、横向对比

1.Original 2.Wrap 3.Pre-Integrated 4.Screen Space
💡ss和sg可调整内容会更多,能方便的应用于其他SSS的物体上,lut调整起来就比较麻烦
5.1 多维对比表
| 维度 | Pre-Integrated | Separable SSS (4S) | Spherical Gaussian |
|---|---|---|---|
| 核心思想 | 离线把 NdotL × 曲率 积分进 LUT | 屏幕空间 N×N 卷积 → SVD 拆分两次 1D | 解析球面高斯函数卷积光源 |
| 性能(采样数) | 1 次 LUT + 1 次 Beckmann LUT | 2 × N 次纹理(典型 N=12~25) | ~5 次 ALU(无纹理) |
| 额外 RT | 0 | 2~3 张全屏 RT | 0 |
| 管线侵入 | 仅材质 Pass | 需要 SRP / Render Feature | 仅材质 Pass |
| 凹面处理 | 较弱(曲率定义在表面外) | 良好 | 中等 |
| 能量守恒 | 取决于 LUT 烘焙 | 取决于 Profile 归一化 | 严格守恒 |
| 美术工作流 | 烘 LUT,Profile 改动需重烘 | 只需调 Width 和 Profile 系数 | 改 ScatterAmt 即时预览 |
| 扩展到玉石/蜡 | 需为每种材质做一组 LUT | 改 Profile 即可 | 改 ScatterAmt 即可 |
| 移动端可行性 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
| 3A 数字人画质 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 代表项目 | 大量国产二次元手游 / Unity Demo | UE / Unity HDRP / Frostbite | MJP 个人研究 / 部分实验性引擎 |
5.2 雷达图(交互)
把鼠标悬停在三角形上可以高亮该方案:
5.3 选型建议
- 手游 / 中端机移动端 / 大量 NPC 共享材质:Pre-Integrated,权衡最优。
- 3A 数字人 / 影视级 cinematic:4S + Burley Profile + Dual Lobe Specular + Translucent Shadow Map。
- 次表面通用材质(玉、蜡、果冻、奶)/ 研究项目:SG,参数即时可调,能量守恒是其杀手锏。
- VR 应用:优先 Pre-Integrated,慎用屏幕空间方法(带宽 + 时延双杀)。
六、工程化清单
把要落地的工作拆成一个 checklist:
[ ] 资产:Albedo / Normal(含 Detail Normal)/ Roughness / Cavity / Curvature / Thickness
[ ] LUT:Beckmann LUT、SSS Diffuse LUT(如选 Pre-Integrated)
[ ] 管线:Stencil 写入位规划,避免与其他后处理冲突
[ ] 后处理顺序:SSS Blur 在透明物之前,Bloom 之前,TAA 之后(避免 ghost)
[ ] Detail:Cavity Map 抑制毛孔附近高光,Specular Occlusion 处理凹陷
[ ] 透射:Thickness Map + Translucent Shadow Map,背光从耳朵 / 鼻翼 / 手指透出
[ ] 眼角 / 嘴唇:单独材质,更湿润高光、更弱 SSS
[ ] TAA / MSAA:4S 在锯齿边缘容易出现摩尔纹,需要前置 TAA
经典 Paper / Talk
SSS 入门导引 | MJP — An Introduction To Real-Time SSS
Burley 扩散剖面采样 | Zero-Radiance — Sampling Burley’s Normalized Diffusion Profiles
中文优质解读
毛星云皮肤渲染总结 | 《GPU Gems 3》:真实感皮肤渲染技术总结 — 知乎
4S 皮肤详解 | 详解 4S 皮肤:可分离次表面散射(含透射项)— 知乎
UE4 角色渲染剖析 | 剖析 Unreal Engine 超真实人类的渲染技术 — Timlly
开源实现
Pre-Integrated 生成器 | Unity-URP-SkinSSSLUTGenerator (Nuomi-Chobits)
Unity 4S 实现 | separable-sss-unity (luxuia)
SSSSS PC 实现 | Unity-Human-Skin-Shader-PC (JohannesDeml)
Pre-Integrated 完整工程 | PreIntegrated-Skin (codewings)
Unity 官方数字人类 | Unity HDRP — The Heretic: Digital Human
写在最后:皮肤渲染的故事远没有结束。当下的研究热点正从”如何近似 BSSRDF”转向”如何让 SSS 与全局光照、半透阴影、Path-Traced Reference 端到端一致”——尤其是 Lumen / Restir-DI 等实时 GI 方案普及之后,屏幕空间 SSS 与间接光的耦合是新的工程难点。建议持续关注 SIGGRAPH / GDC 每年的 Advances in Real-Time Rendering 课程。