Subsurface Scattering

Maya の Subsurface Scattering

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

misss_fast_simple_maya
misss_fast_skin_maya
Lightmap を使って計算をする。 メモリ使用量も少なく、計算は軽い。
misss_fast_lmap_maya
Subsurface Scattering 用の Lightmap。
misss_physical
misss_physical_phen
photon を使った物理シュミレーションによって計算をする。 メモリ使用量も多く、計算時間がかかる。

Subsurface Scattering の例

ここでは、最もシンプルな misss_fast_simple_maya ノードを使用した Subsurface Scattering を試してみましょう。

  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 度目以降のレンダリングでライトマップの計算が省略できるので、 計算を速くすることができます。

参考