研究手记 / 2026.10STYLIZED FACE RENDERING第 01 辑
LIGHT,
then SHAPE.
从来光统计到面部阴影形状
本次研究用少量曲线参数预测卡通阴影边界,再与 Cycles 的真实照明合成。
关注两个问题:阴影形状能否平顺?
间接反射的颜色能否保留?
查看旋转实验 ↘
色彩与构图参考 01 / SEA BREEZE
01 / 问题定义研究起点
我们如何提取出
稳定的 SDF 阴影形状?
不同来光方向下,面部需要不同的阴影设计。我们关注的是:如何从已有的 SDF 明暗中提取平顺、稳定的主边界,并让它随光照连续变化。
以 SDF 明暗作为监督,将阴影轮廓表示为少量曲线参数,再学习从来光统计到边界形状的映射。
为什么使用 SDF?阅读背景与传统做法 ↗

02 / 方法推导从采样来光到连续阴影
阴影边界是怎样算出来的?
训练时学习来光与边界的关系。
预测时用固定权重生成新的明暗形状。
悬停公式中的符号,查看含义 · 键盘 Tab 或触屏轻点也可查看
光照输入 + SDF 边界答案→RBF 特征 + 岭回归五步训练流程 · 左侧场景与训练说明,右侧主要公式
01
准备不同的光照场景
改变灯光方向、大小和强度,生成训练案例。这版用了 204 个训练案例,另外留出验证和测试案例。
(T1)
固定人物和相机:34 个角度大小 × 左右两侧 × 3 组灯面大小、强度与采样变化。每个案例对应一组输入和答案;同一方位的三组案例共享目标边界。
02
采样实际光照,作为输入
在脸上选取一些位置,追踪光线,记录光从哪里来、贡献有多大。
把观测汇总成按光照贡献加权的平均来光方向。输入来自采样结果,不直接使用灯光的设定角度,也不使用脸型几何特征作为预测输入。
03
从 SDF 目标中提取“正确边界”
将已有 SDF 明暗显示到固定相机视角下,逐行寻找黑白分界,平滑细小、偶然的突起,再用平滑曲线压缩成24 个曲线系数。
这些系数是模型需要学习的答案,共同控制曲线形状,不分别代表 24 个具体面部部位。它们与第二步的光照输入对应同一个训练场景。
(T4)
y 是归一化图像纵坐标,b(y) 是该行边界的横向位置。Bₖ(y) 是预先固定、平滑重叠的三次 B 样条基函数;aₖ 是从 SDF 目标边界拟合的 24 个系数之一。它们共同描述整条曲线。这里 b(y) 表示边界函数,与第四步的回归偏置 b 不同。
04
训练“光照 → 曲线系数”的对应关系
将每个案例的光照输入与 24 个目标系数配成一组,训练RBF 特征 + 岭回归模型:看到这种来光方向,就输出相应的阴影边界。
减小预测系数与目标系数的误差,用正则项限制参数过大;通过验证集比较设置,选择兼顾准确度与边界平滑程度的版本。
这是关于 W、b 的凸二次优化问题,通过线性方程组求解。这里的最优针对系数拟合目标,不等于最终图像 IoU 或视觉效果的全局最优。
(T5)
(T6)
(T7)
(T8)
N = 204;zᵢ ∈ ℝ²⁴ 是标准化光照特征,aᵢ* ∈ ℝ²⁴ 是目标样条系数;W ∈ ℝ²⁴ײ⁴ 与 b ∈ ℝ²⁴ 为优化变量,λ = 0.01。偏置 b 不参与正则惩罚。由于 Z 已按训练均值中心化,令 A₀ = A − 1ā,求得 W* 后,b* = ā。实际求解线性方程,不显式计算逆矩阵。W 是回归映射权重,与旧光路类别权重 γg 不同;岭正则限制参数,并非直接惩罚图像边缘。
05
用未参与训练的场景检查效果
新场景经过光照采样 → 预测 24 个系数 → 生成平滑边界 → smoothstep 柔和过渡,即可得到明暗形状。
此时不读取 SDF 作为答案,也不重新优化光路权重。之后才将明暗遮罩送入“压平照明、保留贴图和光照颜色”的渲染步骤。
用留出场景评估形状误差与阴影 IoU。原测试集曾在迭代中查看;冻结模型后另采 8 个新角度检查,未再据此调参。
(T9)
(T10)
(T11)
u(v) 表示第 v 行的边界横坐标,用于区分回归偏置 b;Bₖ 是固定的三次 B 样条基函数。u′ 按来光左右侧镜像,δ = 4/320,对应 320 像素图上的 4 像素艺术过渡。每行一个主分界的表示约束避免主遮罩中的独立碎块。当前固定角色、正面视角与单个水平面光源范围已验证。
训练完成后保存映射权重 W*、偏置 b*、特征均值与标准差,以及固定的 RBF 中心、宽度和 B 样条基函数。新场景直接复用这些参数。
输入:新光照的采样统计→输出:连续明暗遮罩复用训练参数;不查询原 SDF,不重新优化光路权重。
01
从实际光路统计得到来光方向
对采样光路的来光方向按直接照明贡献加权,再计算方位特征。这里的角度来自采样统计,不是直接读取灯的角度;左右侧由平均方向的正负另行记录。
(P1)
dⱼ 是表面指向灯面样本的单位方向;eⱼ ≥ 0 是该样本的照明贡献。左右方向由 d̄ₓ 的符号另行保存;θ 使用规范化后的正侧方位。总贡献为零时,没有可靠的来光方向,应视为输入失效。
02
用训练好的权重预测 24 个边界参数
先把方位角展开成 24 维 RBF 特征,使用训练集的均值与标准差进行标准化,通过提前训练好的岭回归系数与偏置,得到边界参数。
特征标准化后,通过岭回归得到边界参数:
(P2)
â:预测出的 24 个边界参数。
W、b:提前训练好的回归系数和偏置。
μφ、σφ:训练集的特征均值与标准差。
03
用这些参数生成平滑边界,再生成明暗
将预测的 24 个参数与固定的三次 B 样条基函数组合。这些函数平滑重叠,因此控制参数组合出的是一条平滑曲线。
再统一到“右侧为亮区”的坐标中,以边界为中心,通过 smoothstep 生成明暗形状。
(P3)
y:归一化图像纵坐标。
Bₖ(y):预先固定的三次 B 样条基函数。
b(y):这一行的阴影边界横坐标。
这些函数平滑重叠,因此控制参数组合出的是一条平滑曲线。
在统一到“右侧为亮区”的坐标中:
(P4)
x 是统一左右方向后的横坐标,左侧来光时先镜像横坐标,再应用公式。x、b(y)、w 使用同一坐标单位;当前 w = 4/320,对应显示图中的 4 像素过渡。m = 0 为暗区,m = 1 为亮区,中间为柔和过渡。这是艺术软边;鼻影和后续照明合成在主遮罩之后处理。
预测流程光路贡献统计 → 24 个预测参数 → 平滑边界 → 明暗形状
运行时不查询原始 SDF;SDF 仅在训练阶段提供参考边界。每行一个主分界的表示约束,避免主遮罩出现独立黑洞;独立鼻影另行处理。
03 / 光照合成光照合成
LIGHTING LAYERS +40°

在照明通道上去噪,再加入设计的阴影。贴图不参与模糊。
形状与照明,分开处理。
低饱和灰绿色环境呼应页面配色,保留 80W 主光、40W 补光与右侧发光板。背景稍作提亮,环境光与面部目标照明亮度保持不变;以下均为同一 +40° 场景的重新渲染结果。
① 两条支路,分别获得形状与照明
↓② 对照明去噪,保留局部反射颜色
只处理照明通道,原材质贴图不参与模糊。
↓③ 融合鼻影,确定目标照明亮度
N 为宽、高扩大 12% 后的鼻影遮罩,α 随来光角度变化;
鼻影局部明暗取反,眼眉不增加恒亮保护区域;
Ylight、Ydark 是亮暗区代表照明亮度。
↓④ 保色亮度映射,再结合原贴图
统一缩放 RGB,保留去噪后的逐点颜色比例。
亮度 Y(E) = 0.2126ER + 0.7152EG + 0.0722EB。
04 / 旋转展示新的环境光 · 同步对照
光源旋转,形状与照明同步变化。
低饱和灰绿色环境与提亮后的背景。
拖动角度,对照原始光照、SDF+鼻影与最终合成。
01 / 原始光照Cycles
02 / SDF+鼻影局部明暗取反
03 / 最终合成保留贴图与光照颜色
05 / 结果与资料研究档案
实验结果与使用范围
下面是冻结模型阶段的历史评估,
不将后续人工校准计入预测性能。
90° 阴影 IoU0.8356 → 0.9296
旧光路权重 → 平滑边界预测新增留出角度 · 平均 IoU0.8654
冻结后 8 个案例 · ±43 / 83 / 103 / 133°当前旋转演示37 frames
−90° 至 +90° · 320 × 320 · 256 spp 已经做到 / 仍需验证
已验证 固定角色、正面相机、单个水平环绕面光源下的形状预测与光照合成。
尚未验证 新脸型、自由转头、多光源和间接光主导场景;近正面的小角度包含训练范围外推。
工程约定 当前 Blender 工程使用对应 37 帧的预计算遮罩。任意移动灯或相机后,仍需重新预测。
查看完整研究演进 +
- 按光路属性建立响应矩阵,优化类别权重与补光。
- 加入亮暗分区误差与阴影惩罚,尝试保留阴影。
- 改为连续软阴影,并在相机与模型交点直接计算。
- 预测平滑主边界,避免局部照度形成独立黑洞。
- 接入 Cycles 真灯光、照明去噪、鼻影与保色合成。
- 调整红板反射,并按红线校准 45° 边界。
FILES / 可复现资料工程与模型文件
包含已计算的遮罩序列、真实 Cycles 灯光、
鼻影和照明合成设置。
下载 Blender 工程包 ↓解压并保留 controls 文件夹 · F12 查看最终合成