原理化毛发BSDF
Cycles Only
The Principled Hair BSDF is a physically-based, easy-to-use shader for rendering hair and fur.
Tip
逼真的头发应该在每条发股间具有些许差异。该着色器利用 随机色彩 和 随机粗糙度 来实现上述效果。实现方式是将 黑色素/粗糙度 的比值重新映射到 \(色彩/糙度 \pm 随机化\%\) 。
输入
- 颜色
发股的RGB颜色。仅在直接着色模式下起作用。
Hint
使用以下公式将所选颜色转换为吸收系数(参见 4.2 章 [CBTB16]):
\[\sigma_{a} = \frac{\ln(Color)} {\left(5.969 - 0.215\beta_{N} + 2.532\beta_{N}^{2} - 10.73\beta_{N}^{3} + 5.574\beta_{N}^{4} + 0.245\beta_{N}^{5}\right)^{2}}\]在指定了径向粗糙度的情况下, \(\beta_{N}\) 是应用随机化后头发的径向粗糙度。
- 黑色素
色素的绝对值。范围: \([0, 1]\) 对应于 \([0\%, 100\%]\) 。
Hint
这是对下面基础指数函数的线性映射:
\[melanin\_qty = -\ln(\max(1.0 - Melanin, 0.0001))\]- 黑色素红
褐黑素与真黑素的比例。范围: \([0, 1]\) 对应于 \([0\%, 100\%]\) 。
Hint
计算比例的公式为: \(eumelanin = Melanin*(1.0-MelaninRedness)\), \(pheomelanin = Melanin*MelaninRedness\).
在随机化后,得到的最终值会通过下式转化为吸收浓度(参见 6.1 章 [EFHLA11], 范围调整为 \([0, 1]\)):
\[\begin{split}\sigma_{a} = eumelanin * \left[\begin{matrix} 0.506 \\ 0.841 \\ 1.653 \\ \end{matrix}\right] + pheomelanin * \left[\begin{matrix} 0.343 \\ 0.733 \\ 1.924 \\ \end{matrix}\right]\end{split}\]- 染色
生成染发效果。不受随机化的影响。可以通过将颜色设置为白色来禁用它。
Hint
计算方式是通过将上面的 颜色 转换并添加到黑色素浓度的吸收系数中。
- 吸收系数
吸收系数 \(\sigma\) 。
- 粗糙度
Specify how much the glints are smoothed in the direction of the hair shaft. Too low values will smoothen the hair to the point of looking almost metallic, making glints look like Fireflies; while setting it too high will result in a Lambertian look.
- 径向粗糙度
指定发股切线方向上平滑闪烁的程度。数值太低会出现集中闪光效果;将其设置得太高会将光线扩散至发股的宽度上。
Hint
从数学层面上理解为:该参数可以映射到逻辑分布的比例因子 \(s\) 上 (参见 4.1 章 [CBTB16])。
- 涂层
通过将粗糙度降低到给定的数值,来模拟第一次光反射(漫反射),进而模拟出一层闪亮的毛发。范围: \([0, 1]\) 对应于将原始糙度调节至 \([0\%, 100\%]\) 。
- IOR
折射率 (IOR) 定义光线改变方向的程度。折射率设定为1.0时,光线可直接透过;值越高,折射越强。默认值为 \(1.55\) 。
- 偏移量
通过增加头发角质层相对于发股的角度来倾斜头发的闪烁。人类的头发通常具有较低的偏移值。
- 随机色彩
对于每根发股,通过 \(随机系数\) 改变黑色素浓度。范围: \([0, 1]\) 对应于初始黑色素浓度 \([0\%, 100\%]\) 。
Hint
黑色素浓度会与 \(随机系数\) 相乘得到最终值,其中 \(随机系数 = 1.0 + 2.0*(随机数- 0.5) * 随机色彩\) 。
- 随机粗糙度
对于每根发股,通过 \(随机系数\) 改变糙度。范围: \([0, 1]\) 对应于初始糙度值 \([0\%, 100\%]\) 。
Hint
使用的公式与 随机色彩 中的一致。
- 随机
产生随机数。如果没有与其它节点相连,则从
中获取随机数。
属性
- 颜色参数化
该着色器共有三种 参数化 的方式来对毛发进行着色。
- 直接着色
选择所需的RGB颜色,着色器会粗略计算必要的 吸收系数 (吸收系数详细说明见下文)。
- 黑色素浓度
现实生活中,真黑素(在棕黑色头发中普遍存在)和褐黑素(红色头发)的数量和比例决定着毛发的颜色。该模式利用输入的 黑色素 数值来确定两者的数量,利用输入的 黑色素红 的值来确定两者的比例,进而实现对毛发进行着色。提高浓度会加深毛发颜色(下面的五个颜色示例都是在 黑色素红 设定为 \(1\) 时的结果):
White (Melanin \(0\))
亚麻色 (黑色素值设为 \(0.25\))
淡红色 (黑色素值设为 \(0.5\))
棕色 (黑色素值设为 \(0.75\))
黑色 (黑色素值设为 \(1\))
设定好上述参数后,可利用 染色 输入项来实现染发的效果。
- 吸收系数
指定由 Beer-Lambert law <https://en.wikipedia.org/wiki/Beer%E2%80%93Lambert_law#Expression_with_attenuation_coefficient>`__定律确定的衰减系数 :math:sigma_{a}`。该模式主要针对技术用户,以便于他们直接使用文献中报道的系数。
输出
- 双向散射分布函数
标准着色器输出。
参考文献
该着色器最初由Chiang等人报道 [CBTB16],并已成功应用在迪士尼电影"疯狂动物城"® 中。
- CBTB16(1,2,3)
Chiang, M. J. , Bitterli, B. , Tappan, C. and Burley, B. (2016), A Practical and Controllable Hair and Fur Model for Production Path Tracing. Computer Graphics Forum, 35: 275-283. doi:10.1111/cgf.12830
- EFHLA11
d'Eon, E. , Francois, G. , Hill, M. , Letteri, J. and Aubry, J. (2011), An Energy‐Conserving Hair Reflectance Model. Computer Graphics Forum, 30: 1181-1187. doi:10.1111/j.1467-8659.2011.01976.x