Subsurface Scattering

Maya の Subsurface Scattering

Subsurface Scattering (SSS, 表面下散乱)は人間の皮膚や、蝋燭・大理石・ミルクなどの液体のような、 表面が半透明な物体の質感を表現するための技法です。
Maya (7.0)では、 mentalray において以下のようなシェーディングノードが用意されています。

misss_fast_simple_maya (Materials)
misss_fast_skin_maya (Materials)
Lightmap を使って計算をおこないます。 メモリ使用量も少なく、軽い計算になります。
misss_fast_lmap_maya (Light Maps)
Subsurface Scattering 用の Lightmap。
misss_physical (Materials)
misss_physical_phen (Miscellaneous)
photon を使った物理シュミレーションによって計算をおこないます。 メモリ使用量も多く、計算時間がかかります。

misss_fast_simple_maya の例

ここでは、最もシンプルな misss_fast_simple_maya ノードを使用した Subsurface Scattering を試してみましょう。
なお、misss_fast_skin_maya の作成方法も同じです。

  1. オブジェクトを作成します。
    Subsurface Scattering の効果を見るために、 カメラから見てオブジェクトの前後に pointLight を配置しておきます。
    [サンプルシーン]
  2. misss_fast_simple_maya ノードを作成します。
    [misss_fast_simple_maya ノード]
  3. オブジェクトに misss_fast_simple_maya をアサインします。
  4. mentalrayTexture ノードを作成します。
    misss_fast_simple_maya ノードのアトリビュートエディタを開き、 Lightmap セクションにある Lightmap の [テクスチャーボタン] ボタンを押します。
    [misss_fast_simple_maya のアトリビュートエディタ]
    作られた mentalrayTexture ノードの名前は、 後で入力するので覚えておきます。
    [mentalrayTexture のアトリビュートエディタ]
  5. 作られた mentalrayTexture ノードのアトリビュートを変更します。 以下の図は 640 X 480 でレンダリングする場合です。
    [mentalrayTexture のアトリビュート変更]
  6. misss_fast_simple_maya ノードに対応しているシェーディンググループノードの アトリビュートエディタを開きます。
    misss_fast_simple_maya ノードのアトリビュートエディタで [→ボタン] ボタンを押すことによってシェーディンググループノードに移ることができます。
    [misss_fast_simple_maya のアトリビュートエディタ]
    misss_fast_simple_maya1 という名前なら misss_fast_simple_maya1SG がシェーディンググループノードの名前になります。
    [シェーディンググループノードのアトリビュートエディタ]
  7. misss_fast_lmap_maya ノードを作成します。
    シェーディンググループノードのアトリビュートエディタで、 mentalray セクション → Custom Shaders → Light Map Shader にある [テクスチャーボタン] ボタンを押します。
    [misss_fast_lmap_maya のアトリビュートエディタ]
    Create Render Node ウインドウの Light Maps セクションにある misss_fast_lmap_maya ボタンを押して misss_fast_lmap_maya ノードを作成します。
    [misss_fast_lmap_maya ボタン]
  8. misss_fast_lmap_maya ノードの Lightmap Write セクションにある Lightmap に 4. で作った mentalrayTexture ノードの名前を入力します。
    [Lightmap Write セクション]
    ここまでで、以下のようなシェーディングネットワークが作成されます。
    [シェーディングネットワーク]
  9. misss_fast_simple_maya ノードのアトリビュートを適当に変更します。
    Subsurface Scattering Layer セクション
    Front SSS Color
    カメラから見てオブジェクトの前面で反射する光の色
    Front SSS Weight
    Front SSS Color が影響する度合
    Front SSS Radius
    Front SSS が反射する距離
    Back SSS Color
    カメラから見てオブジェクトの後面から透過する光の色
    Back SSS Weight
    Back SSS Color が影響する度合
    Back SSS Radius
    Back SSS が反射する距離
    Back SSS Depth
    通常 Back SSS Radius と同じ値
    Lightmap セクション
    Samples
    サンプリング数
    256, 512, 1024, 2048 などの値
    [Subsurface Scattering Layer セクション]
    misss_fast_lmap_maya ノードの Lightmap Write セクション
    Scatter Bias
    前面・後面どちらからの光を強調するかを決める
    0.0 以上
    後ろからの光が強調される(forward scattering)
    0.0 以下
    前からの光が強調される(backward scattering)
  10. Render Globals でレンダラーを mentalray にして、レンダリングします。
    [Render Globals]
    [レンダリング結果]
  11. もし、Final Gather をかけてレンダリングしたい場合は、 以下の設定を行ないます。 [レンダリング結果]

その他の例

球の中にコーンを入れて、それら 2 つのオブジェクトに上記と同じ misss_fast_simple_maya をアサインし、 後ろからスポットライトをあててレンダリングしてみました。

[シーン]

球の中にコーンがうかび上がっているのがわかります。

[レンダリング結果]

Tips (Image Name)

もし、大きなオブジェクトに misss_fast_simple_maya などをアサインする場合は、 mentalrayTexture ノードのアトリビュート Image Name に ライトマップを保存する適当なファイル名を入力し、 Writable のチェックをはずします。 すると、2 度目以降のレンダリングでライトマップの計算が省略できるので、 計算を速くすることができます。

misss_physical の例

  1. 適当にシーンを作成しておきます。
    [misss_physical ノード]
  2. misss_physical ノードを作成します。
    [misss_physical ノード]
  3. misss_physical ノードの OutValue アトリビュートと、 misss_physical1SG ノードの MiPhotonShader アトリビュートをコネクトします。
    [Connection Editor]
    コネクション後のアトリビュートエディタ
    [misss_physical1SG の Attribute Editor]
  4. misss_physical ノードのアトリビュートを適当に設定します。
    Index of refraction
    入射光が物体に入るときと、出てゆくときの屈折率
    Absorption coeff
    吸収率
    Scattering coeff
    拡散率
    Scale conversion
    単位変換
    SSS の単位は mm なので、 Maya に合わせて cm にするためには 10 にします。
    Scattering anisotropy
    拡散の次元 (-1.0 〜 1.0)
    入射光と拡散光の内積の値です。
    -1.0 〜 0.0 では、入射光が反対方向に拡散し、 0.0 〜 1.0 では、入射光が入射方向に拡散します。 0.0 では全方向に拡散します。
    Depth
    透過距離 (単位 mm)
    Max samples
    拡散のサンプリング数
    10 〜 30 くらいがよく使われます。
    Max photons
    フォトンの最大数
    100 〜 1000 くらいがよく使われます。
    Max radius
    フォトンを計算するための最大半径
    通常、物体の直径・幅の平均値と同じ値にします。
    Approx diffusion
    ディフーズの計算をするかどうか(通常オン)
    Approx single scattering
    single scattering の計算をするかどうか(通常オン)
    Approx multiple scattering
    multiple scattering の計算をするかどうか(通常オン)
    [misss_physical の Attribute Editor]
    アトリビュート値の例
    Material Scattering coeff Absorption coeff Index of refraction
    ひすい 0.657 0.786 0.9 0.00053 0.00123 0.00213 1.3
    ケチャップ 0.18 0.07 0.03 0.061 0.97 1.45 1.3
    大理石 2.19 2.62 3.00 0.0021 0.0041 0.0071 1.55
    脱脂粉乳 0.70 1.22 1.90 0.0014 0.0025 0.0142 1.3
    牛乳 2.55 3.21 3.77 0.0011 0.0024 0.014 1.3
    ひすいのアトリビュート値でレンダリングした例
    [misss_physical のレンダリング結果]
    Absorption coeff には 0.00053 0.00123 0.00213 が入力されています。 (Attribute Editor には 0.001 以下の数値が表示されません)
    [misss_physical のアトリビュート]

参考