« Daz Studio用 AO+ キャッチャー v2 (照度計付) | トップページ | Daz Studio用 UberSurface設定ツール: Facile UberSurface »

2012/06/02

Daz Studioで SSSスキン (UberSurface)

今回はツールではなく SSS (Subsurface Scattering:表面下散乱) を使った実験です。
D|Sでは使用することの多い UberSurface の SSS 機能を使っています。

問題の背景

人物が入ったシーンで、毎回のように直面する問題の一つに「肌テクスチュア」
があります。その理由は、D|Sの人物用の肌マップ画像には「光の効果としての」
明暗や色合いの変化までもが、既に描かれてしまっている場合が多いからです。

シーン中で特に具合の悪いそんな部分をなんとか消すべく、ペイントソフトで
マップ画像を調整しては、別マップとの継ぎ目の問題などが出てきてあきらめる。
そんな悪戦苦闘を何度か繰り返していたのですが、ふと最近
  『だったらそもそも肌の部分にマップ画像は要らないのでは?』
と、またまた「おそまき」ながら気付きました(笑)

とは言っても、完全に単色で塗りつぶした肌では、あまりに単調すぎます。
そこでまず、「変化付けにSSSを使ってみたらどうだろうか」と思い立って、
少しテストしてみたのが以下の結果です。

D|S 3Delight と UberSurface の SSS 機能

D|S の SSS は、レンダラ― 3Delight に備わっている機能を使っています。
3Delightマニュアルによると、そのSSS機能はRGB別散乱率・RGB別吸収率・
寸法単位係数などから成っていて、D|S には ShaderMixer の Subsurface
ブリックで、これらの 3Delight パラメータを操作する機能が準備されています。
また人肌など幾つかの種類については、そのプリセット値も準備されています。

しかし(良く使うので便利な) UberSurface の SSS 部は簡略化されていて、
RGB別散乱率とRGB別吸収率をユーザーが直接決めることはできません。

UberSurfaceでは、ユーザーが表面下色(SS Color)を決めると
(やや複雑な方式により)散乱率と吸収率の両方がRGB別に自動決定されます。
色合いとして、散乱色は与えた表面下色に近く、吸収色は散乱の弱い色成分
ほど早く減衰して散乱の強い色成分が支配的になるような値になります。
(表面下色はRGB各値の最大・最小値にある程度以上の幅が必要。グレイ系不可)

SSSの原理的な効果の確認 - 表面下散乱と吸収・透過

UberSurface-SSS機能の特徴を見るために、まず表面下散乱と吸収・透過の
様子が、はっきりわかりやすい例を作ってみることにしました。硝子人形です。

 ※微妙な明暗・色合い変化を扱うために、以下すべて Susu-Harai を使っています。
   SSS効果のような「色の加法」では、線形色空間でないと明暗・色合い歪みが強く出ることに注意。

SSS Glass Doll ←クリック拡大
  左右両端像:SSSの無い状態(全材質100%白)、中央2像:SSS適用(表面4%白、SS色:ごく薄い赤)
  照明:スポットライト100%白一灯、フィギュア:A4 for Genesis

上体部 SSS Glass Doll - Upper Body ←クリック拡大
  【諸元】  [ ] 内はレンダラ―に渡される時の線形色空間値(省略時は同一)
   光源 - SpotLight 強度100% … 色100%白、レイトレ影
   全材質(UberSurface) - 線形色空間で大雑把に Diffuse 約4% + SSS 約96% になる明るさ
   1) Diffuse   色100%白 [ RGB(44,44,44) ]、強度23%
   2) Specular  色RGB(100, 100,100)、強度100%, Glossiness 10%
   3) Subsurface 強度 1000%, 色RGB(255,244,244) [ RGB(255,231,231) ];
     SS Refraction = 1.5; SS Scale = 8.00; SS Group = 0; SS Shading Rate = 1.00

透過率の高い白い表面から入った光が、ごく薄い赤
  Sss1_ssscolor1 線形色空間値 RGB(255,231,231)
を持つ表面下材質内で散乱して、減衰しながら徐々に赤成分が支配的になり、
そして物体の逆側の面まで透過する様子がわかります。

UberSurfaceでのSSS吸収率の調整

身長約175cmの A4G の素体に、横から強さ100%のスポットライトを当てて
光が逆側まではっきりと透過するには、かなり高い透過率(=かなり低い
吸収率)が必要です。しかし UberSurfaceではSSS吸収率をユーザーが
直接扱うことはできません。

ところで 3Delight は汎用のレンダラーなので、与えられたSSS散乱率と
SSS吸収率を、組み込まれた3Dソフト側の距離単位に合わせてレンダー
するためのパラメータ SS Scale が準備されています。
例えば SS Scale = 4 なら、与えられたSSS散乱率と吸収率は、対象物体の
世界では 4 寸法単位(D|S では 4cm)間の効果、SS Scale = 10 なら
10 寸法単位(D|Sでは 10cm)間の効果・・・という関係を表す係数です。

上の例では、このSSS効果の物体側での寸法単位を SS Scale = 8(cm) と、
やや大きめの値(UberSurface既定値 4cm)で定義しました。もっと小さな値では
すぐに光の緑・青成分が減衰してしまって、赤成分だけになってしまうためです。
これにより UberSurface が決める散乱率や吸収率の数値は、3Delight レンダラ―
には「表面下材質 8cm あたり」という意味になります。
そして散乱強度 SS Strength を上げて行くと、ちょうど強度 1000% の時に
上のような明るさの結果が得られました。
(内部散乱光が外から見える時の色合いと明るさは、表面色である Diffuse色
とその強さにも依存するので、実際には Diffuse 強度も後から微調整)

つまり UberSurface は、内部材質の吸収率を「物体側寸法単位 SS Scale」
で調整する仕様になっているわけです。

この物体側の「寸法単位 SS Scale」を大きくするほど同じ D|S距離間での
吸収は逆に少なくなるので、使用時には「SS Scale = 透過度」と読み替える
のがわかりやすいかもしれません。
ただし SS Scale を大きくすると同じ D|S距離間での散乱も減少するため、
散乱色の画面上での明るさを保つには、散乱強度 SS Strength も同時に
(ほぼ比例的に)大きくする必要があります。

また UberSurface の寸法単位既定値 SS Scale = 4cm では、散乱強度
SS Strength = 100% の光は、その数倍の厚みの物体をかなり顕著に透過します。
したがって人物の頭や腕などを、光が(無視できる程度しか)通り抜けないためには、
散乱強度 SS Strength を下げて SSS 効果そのものを弱くするか、あるいは
寸法単位を 1mm ~ 1cm 程度まで下げて(散乱が明るくなりすぎた分は
散乱強度 SS Strength をほぼ比例的に下げて)物体の逆側に抜けて見える
度合を減少させる必要があります。

SSSスキンの作成

UberSurfaceでのSSSによる色合い変化や減衰距離のコントロールが、大体
掴めたところで、目的の「SSSスキン」を作ってみました。
肌の表面材質は白、表面下色には少し濃い目の肌色
  Sss1_ssscolor2 線形色空間値 RGB(255,123,90)
を選んだ時の結果は、以下のようになりました。

SSS Human Skin←クリック拡大
  左右両端像:SSSの無い状態(肌100%白)、中央2像:肌にSSS適用(表面60%白、SS色:少し濃い肌色)
  照明:環境光20%白(AOつき)、スポットライト80%白一灯。
  衣装:Top & Bottom for A4
(evilinnocenceさん)、髪:Divine Hair (fabianaさん)
上体部 SSS Human Skin - Upper Body ←クリック拡大
  【諸元】  [ ] 内はレンダラ―に渡される時の線形色空間値(省略時は同一)
   光源 - 線形色空間で 環境光約20% 主ライト約80% になる明るさ
   1) UberEnvironment2 強度50% [ Ground 21.8% ] … 色100%白, AO:100%,色RGB(14,10,10) [ RGB(14,7,7) ]
   2) SpotLight 強度50% [ 78.4% ] … 色100%白、レイトレ影
   肌の材質(UberSurface) - 線形色空間で大雑把に Diffuse 60% + SSS 40% になる明るさ
   1) Diffuse   色100%白 [ RGB(195,195,195) ]、強度80%
   2) Specular   色RGB(100, 100,100)、強度25% [ 26.7% ], Glossiness 6%
   3) Subsurface 強度 80%, 色RGB(255,183,159) [ RGB(255,123,90) ];
      SS Refraction = 1.5; SS Scale = 0.50; SS Group = 0; SS Shading Rate = 1.00

どうでしょう?
全体的には地が単調で少し物足りないですが、肌の基礎としては十分使えそうです。
何よりも便利なのは、肌の色の変更が簡単で、その色選択が比較的自由なこと。
ちなみに眉毛は顔肌の一部なので、付属のディスプレイスメント・マップを反転して使用しました。
さらには、乱数ムラとか、脂肪層の厚みで明暗を変えたりとか、静脈が青く透けたりとか・・・
そんな材質マッピングも機会があれば試してみたいです。

----
【補足1】 Susu-Haraiフォルダ内の変更処理: Subsurface Strength を煤払いしないために
 1) Susu-Harai/shaderLibフォルダの削除 または その中の DzShaderMaterial_omUberSurface_….txt の削除
 2) Susu-Harai.ini の以下の行の変更
      // 同 「Color-Strengthペア」で Strength または Intensity を不変にする色名リスト("英小文字"の文字列配列)
      shaderMatStrengthNGList = ["opacity","occlusion", "shadow","velvet", "subsurface","translucency"]
----
【補足2】 上の記事で「
1 - 透過率」のことを「吸収率」と呼んでいるのはソフト利用者的な感覚であって、
「吸光率」あたりが正しいようです。また 3Delight パラメタの absorption の方は「吸収係数」と
呼ぶべきでしょうか。ここでは「距離当たり」というニュアンスを優先して「率」を使いました。[2012/05/26]
----
【補足3】 上のフィギュア頭部を少し調整したあとの拡大画像です。

頭部 SSS Human Skin - Head
←クリック拡大
    肌材質の変更追加点
    1) Diffuse強度 80% -> 75% (白とび調整)
    2) Subsurface 色RGB(255,227,155) [ RGB(255,198,85) ]; SS Refraction 1.30
    3) Velvet効果を追加 色RGB(255,251,230) [ RGB(255,246,203) ]; 強度25%

唇もマップを外して単色でSSS化しました(色は今風の口紅色)。
上目蓋のアイライン&シャドウを眉毛と同じ顔肌のDiffuseマップに追加。
新たに「表皮感」を付加 ー 薄黄色のUberSurface-Velvet効果(強度25%)
  Sss1_ssscolor3 線形色空間値 RGB(255,246,203)
  ・形状の輪郭部で表皮が横から透けて見える感じや短い体毛の雰囲気が生まれます。
  ・また顔・唇のバンプにも表皮のトロ味が加わります。
この少し黄色掛かった表皮層に溶け込むように、表面下色も黄色寄り
  Sss1_ssscolor4 線形色空間値 RGB(255,198,85) 
に色合いを変えました。[2012/06/02]

|

« Daz Studio用 AO+ キャッチャー v2 (照度計付) | トップページ | Daz Studio用 UberSurface設定ツール: Facile UberSurface »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/554431/54784029

この記事へのトラックバック一覧です: Daz Studioで SSSスキン (UberSurface):

« Daz Studio用 AO+ キャッチャー v2 (照度計付) | トップページ | Daz Studio用 UberSurface設定ツール: Facile UberSurface »