Principled Hair BSDF(プリンシプルヘアーBSDF)
Hair (ヘアー) BSDF
The Principled Hair BSDF is a physically-based, easy-to-use shader for rendering hair and fur.
ちなみに
リアルな髪の毛は、各毛束間で最小限の差異を持つ必要があります。シェーダーは、 Random Color と Random Roughness の 2つの値を指定することでこれを可能にし、指定されたMelanin / Roughness値を範囲に再マッピングします。\(Color/Roughness \pm Randomization\%\).
入力
- Color(カラー)
毛束のRGBカラー。 Direct coloring (ダイレクトカラーリング)でのみ使用されます。
ヒント
選択した色は、次の式で吸収係数に変換されます( [CBTB16] のセクション4.2 )。
\[\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}\) はランダム化を適用した後のヘアの放射状粗さです。(指定されている場合)
- Melanin (メラニン)
色素の絶対量。範囲 \([0, 1]\) は \([0\%, 100\%]\) に相当。
ヒント
これは、基になる指数関数へのリニアマッピングです。
\[melanin\_qty = -\ln(\max(1.0 - Melanin, 0.0001))\]- Melanin Redness (メラニンの赤成分)
フェオメラニンとユーメラニンの比率。範囲 \([0, 1]\) は \([0\%, 100\%]\) に相当。
ヒント
比率の式は次の通りです。 \(eumelanin = Melanin*(1.0-MelaninRedness)\), \(pheomelanin = Melanin*MelaninRedness\)
結果の量は、(指定されている場合はランダム化した後)次の式( [EFHLA11] のセクション6.1)を介して吸収濃度に変換され、 \([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}\]- Tint (チント)
メラニン色素をつけた後、髪を染めるのに使う色。ランダム化の対象ではありません。色を白に設定することで無効化します。
ヒント
これは上記のカラーマッピングで変換され、メラニン濃度の吸収係数に追加されます。
- Absorption Coefficient (吸収係数)
吸収係数 \(\sigma\) 。
- Roughness
髪の毛の軸方向において、輝きをどの程度滑らかにするかを指定します。値が小さすぎると、髪が滑らかで、金属に見えるようになり、輝きが Fireflies のように見えます。設定が高すぎると、ランバート風の外観になります。
- Radial Roughness (天使の輪の粗さ)
Specify how much the glints are smoothed in the direction of the hair tangent. Too low values will concentrate the glint; while setting it too high will spread the light across the width of the strand.
ヒント
数学的には、このパラメーターはロジスティック分布のスケール係数 \(s\) にマッピングされます。( [CBTB16] のセクション 4.1)。
- Coat (コート)
最初の光のバウンス(ディフューズ)についてのみ、粗さを所定の係数まで下げることにより、光沢のある毛皮のコートをシミュレートします。元の粗さの \([0\%, 100\%]\) の範囲の換算に相当します。
- IOR
レイが方向を変える量を定義する屈折率( IOR )。1.0では、レイは透明なマテリアルのように直進します。値が大きいほど屈折が大きくなります。デフォルト値は \(1.55\) 。
- Offset(オフセット)
毛幹に対する毛のキューティクルの鱗の角度を大きくすることにより、髪の輝きを傾けます。通常、人間の髪の毛の値は低い値です。
- Random Color (ランダムカラー)
各毛束について、メラニン濃度を \(RandomFactor\) において変化させます。\([0, 1]\) の範囲は初期メラニン濃度の \([0\%, 100\%]\) に相当します。
ヒント
メラニン濃度は次のように \(randomFactor\) によって乗算されます。\(randomFactor = 1.0 + 2.0*(Random - 0.5) * RandomColor\).
- Random Roughness (ランダムな粗さ)
各毛束について、両方の粗さを \(RandomFactor\) において変化させます。\([0, 1]\) の範囲は初期粗さ値の \([0\%, 100\%]\) に相当します。
ヒント
適用される数式は、 Random Color と同じです。
- Random(ランダム)
乱数ソース。ここにノードが接続されていない場合、ノードは
から取得した値で自動的にインスタンス化されます。
Properties(プロパティ)
- Color Parametrization (色のパラメータ化)
シェーダーは、髪束に色を付ける3つの異なる方法、つまりパラメーター化を提供します。
- Direct Coloring (ダイレクトカラーリング )
目的のRGBカラーを選択すると、シェーダーが必要な absorption coefficient (吸収係数:下記) を概算します。
- Melanin Concentration (メラニン濃度)
このモードは、髪と毛皮における、ユーメラニン(茶色がかった黒髪に多く見られる)、フェオメラニン(赤髪)に見られる色素量と比率として色を定義します 。量は Melanin 入力で指定され、それらの間の比率は Melanin Redness で指定されます。濃度を上げると髪が暗くなります(以下は Melanin Redness が \(1\) の場合です)
白 (Melanin \(0\))
ブロンド (Melanin \(0.25\))
赤 (Melanin \(0.5\))
茶 (Melanin \(0.75\))
黒 (Melanin \(1\))
さらに、 Tint 入力により、髪を希望の色に染めることができます。
- Absorption Coefficient (吸収係数)
減衰係数 \(\sigma_{a}\) を指定します。 Beer-Lambert law によって適用されます。このモードは、主に文献からの係数を変換せずに使用したいテクニカルユーザーを対象としています。
出力
- BSDF
標準シェーダー出力。
参考文献
このシェーダーは、ディズニー映画 "ズートピア" ® で使用された、Chiang et alによる論文の実装です。[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