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 の作成方法も同じです。
- オブジェクトを作成します。
Subsurface Scattering の効果を見るために、
カメラから見てオブジェクトの前後に pointLight を配置しておきます。
- misss_fast_simple_maya ノードを作成します。
- オブジェクトに misss_fast_simple_maya をアサインします。
- mentalrayTexture ノードを作成します。
misss_fast_simple_maya ノードのアトリビュートエディタを開き、
Lightmap セクションにある Lightmap の
ボタンを押します。
作られた mentalrayTexture ノードの名前は、
後で入力するので覚えておきます。
- 作られた mentalrayTexture ノードのアトリビュートを変更します。
- Writable にチェックを入れます。
- File Size Width をレンダリング解像度の 2 倍にします。
- File Size Height をレンダリング解像度と同じにします。
- File Size Depth を 32bits に変更します。
以下の図は 640 X 480 でレンダリングする場合です。
- misss_fast_simple_maya ノードに対応しているシェーディンググループノードの
アトリビュートエディタを開きます。
misss_fast_simple_maya ノードのアトリビュートエディタで
ボタンを押すことによってシェーディンググループノードに移ることができます。
misss_fast_simple_maya1 という名前なら
misss_fast_simple_maya1SG がシェーディンググループノードの名前になります。
- misss_fast_lmap_maya ノードを作成します。
シェーディンググループノードのアトリビュートエディタで、
にある
ボタンを押します。
Create Render Node ウインドウの Light Maps セクションにある
misss_fast_lmap_maya ボタンを押して
misss_fast_lmap_maya ノードを作成します。
- misss_fast_lmap_maya ノードの Lightmap Write セクションにある Lightmap に
4. で作った mentalrayTexture ノードの名前を入力します。
ここまでで、以下のようなシェーディングネットワークが作成されます。
- 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 などの値
misss_fast_lmap_maya ノードの Lightmap Write セクション
- Scatter Bias
- 前面・後面どちらからの光を強調するかを決める
- 0.0 以上
- 後ろからの光が強調される(forward scattering)
- 0.0 以下
- 前からの光が強調される(backward scattering)
- Render Globals でレンダラーを mentalray にして、レンダリングします。
- もし、Final Gather をかけてレンダリングしたい場合は、
以下の設定を行ないます。
- misss_fast_lmap_maya ノードの
にチェックを入れます。
- Render Globals の
にチェックを入れます。
その他の例
球の中にコーンを入れて、それら 2 つのオブジェクトに上記と同じ misss_fast_simple_maya をアサインし、
後ろからスポットライトをあててレンダリングしてみました。
球の中にコーンがうかび上がっているのがわかります。
Tips (Image Name)
もし、大きなオブジェクトに misss_fast_simple_maya などをアサインする場合は、
mentalrayTexture ノードのアトリビュート Image Name に
ライトマップを保存する適当なファイル名を入力し、
Writable のチェックをはずします。
すると、2 度目以降のレンダリングでライトマップの計算が省略できるので、
計算を速くすることができます。
misss_physical の例
- 適当にシーンを作成しておきます。
- misss_physical ノードを作成します。
- misss_physical ノードの OutValue アトリビュートと、
misss_physical1SG ノードの MiPhotonShader アトリビュートをコネクトします。
コネクション後のアトリビュートエディタ
- 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 の計算をするかどうか(通常オン)
アトリビュート値の例
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 |
ひすいのアトリビュート値でレンダリングした例
Absorption coeff には
0.00053 0.00123 0.00213
が入力されています。
(Attribute Editor には 0.001 以下の数値が表示されません)
- SpotLight の mentalray Caustic and Global Illumination の Emit Photons にチェックを入れて、
Global Illum Photons を 20000 に設定。
- Render Settings の Caustics and Global Illumination の Global Illumination にチェックを入れて、
Global Illum Accuracy を 512、
Global Illum Radius を 4.0 に設定。
- Render Settings の Final Gather をオン。
参考