※記事製作時のバージョン:Blender2.90.1
プリンシプルBSDFで、いろいろな質感表現の方法を探っていくシリーズ。
第8回はサブサーフェススキャッタリング(略称 "SSS")の使い方/後編です。
今回の記事は長いので、前・後編に分けています。
前編はSSSの基礎知識とパラメーターについて、
後編はSSSの設定方法など、具体的な使い方について説明します。
前編はこちらのリンクからどうぞ。
SSSの設定手順
SSSは次の手順で設定すると、分かりやすく、やり直し無く設定できます。
1. オブジェクトの拡大縮小を済ませ、サイズを確定する。
(スケールの適用はしなくてもOK)
2. ベースカラーとサブサーフェスカラーに同じ色(またはテクスチャ)をつなぐ。
3. サブサーフェスを1.0にする。
4. サブサーフェスに値ノードをつなげる(※)。
5. サブサーフェス範囲(0.0~1.0)で散乱光の色味を、
値ノード(0.0~100.0)で光の届く範囲を設定する。
※値ノードをサブサーフェス範囲につなげると色味の設定ができなくなってしまうので、この段階ではサブサーフェスにつなぎます。
6. 設定が済んだら、サブサーフェスからサブサーフェス範囲に値ノードをつなぎ直す。
これで、サブサーフェスでSSSの強さを調整できるようになります。
以上で完了です。
オブジェクト内でSSSに強弱をつけたい場合は、サブサーフェスにテクスチャをつないでサブサーフェスマッピングをします。
EEVEEの設定
サブサーフェスの透光
EEVEEでSSSを使う際は「マテリアルタブ > サブサーフェスの透光」をONにします。
これで、後ろから光が当たった時に、手前まで光が通って明るく見える様子が描画されるようになります。
設定の優先順位
EEVEEでの透過・屈折用の設定は、SSS用の設定よりも優先されます。
そのため、次のどちらかが設定されている場合、SSSは描画されません。
- 「マテリアルタブ > 設定 > ブレンドモード」がアルファブレンドになっている
- 「レンダータブ > スクリーンスペース反射 > 屈折」と
「マテリアルタブ > 設定 > スクリーンスペース屈折」がONになっている
透過系のマテリアルを元にSSS用に作り直した場合、これらの設定が残っている事があるので要注意です。
サンプル数、ジッターのしきい値
EEVEEのSSSでは、計算処理の仕組みによる帯状の模様が発生します。
この模様が出ないようにするには、「レンダータブ > SSS」から
- サンプル数
- ジッターのしきい値
を調整します。
・サンプル数
SSSを計算するサンプル数です。
数値を大きくするほど帯模様の間隔が狭まり、滑らかになります。
・ジッターのしきい値
この割合以下のサンプルをランダムに回転させて、帯模様が目立たないようにします。
数値が大きいほど効果が強くなり、帯模様が目立たなくなります。
イメージとしては、サンプル数が「解像度」、ジッターのしきい値が「デノイズ」または「アンチエイリアス」的な働きです。
どちらも数値が大きいほど綺麗になりますが、レンダリング時間も長くなります。
ある程度綺麗になると、それ以上見た目の変化はしなくなるので、必要な分だけ数値を上げます。
EEVEEとCyclesの違い
EEVEEとCyclesでは、SSSを使った仕上がりが大きく異なります。
マテリアルの調整は、どちらでレンダリングするか決めてから行います。
CyclesではSSSの計算方法(サブサーフェスメソッド)を「Christensen-Burley」と「Random Walk」の2種類から選択できます。
Christensen-Burleyは2.7系から搭載されている古いバージョン。
Random Walkは2.8で搭載された新しいバージョン。
仕組み的な違いはよく分かりませんが、Random Walkの方が品質が良いようです。
下の画像は肌の部分にSSSを使用したモデルの比較です。
Random Walkの方がまぶた・耳・鼻・唇などのディテールがしっかりしていて、綺麗な仕上がりになっています。
※画像出典:YouTube "Blender Cycles Random Walk SSS (New Feature!)"
マニュアルによると、Random Walkは「閉じたメッシュに最適です。メッシュの面と穴が重なると、問題が発生する可能性があります」だそうです。
この点は検証していないので、どのような場合に問題が起こるのかは、皆さんで確かめてください。
なお、Random Walkが使えるのはCyclesのみです。
EEVEEでRandom Walkにしても、レンダリングはChristensen-Burleyの結果になります。
-------- 2021/08/23 追記 --------
Random Walkについては、dskjalさんのブログにもっと詳しい説明があります。
-------- 追記終了 --------
SSSの使い処
「半透明」の使い分け
解説サイトなどでは、SSSが「半透明な物体の質感」と書かれていることがあります。
しかし一言で「半透明」と言っても、言葉的な意味は
- 光は通すけれども、向こうは透けて見えない半透明
- 向こうがぼんやりと透けて見える半透明
(すりガラス、タッパー、プラスチックの収納ケース、レジ袋など)
の2種類があります。
SSSで表現するのは1の半透明です。
2の半透明はSSSではなく伝播を使って、「粗さ」または「伝播の粗さ」(Cycles限定)を上げて作ります。
-------- 2021/10/14 追記 --------
Blender2.93から、EEVEEでも伝播の粗さが使えるようになりました。
-------- 追記終了 --------
伝播の使い方はこちらの記事を参照してください。
実物の表面下散乱とマテリアルのSSS
プラスチックの洗面器やカーテンなどは、向こうの光や影が透けて見えます。
実のところ、プラスチック・木材・紙製品・布など、身の周りの多くの物が光を通す性質を持ち、表面下散乱があります。
しかしマテリアルを作る上では、普通これらにSSSは設定しません。
理由としては、まずSSSは使えば使うほどレンダリング時間が長くなるため。
それとSSSは表現力に限界があり、使うとかえって不自然になる場合があるためです。
SSSは「使わないと柔らかい質感が表現できない物」、つまり実物で考えると「光を通す性質が大きい物」に絞って使います。
障子やカーテンに映る影
障子やカーテンなどで、反対側の影が映って見える表現はSSSで作ります。
しかし、厚みの無いメッシュにSSSを設定すると、Cyclesではうまく描画されません。
Cyclesではボリューム(メッシュ構造内部の立体空間)を元にした丁寧な方法でSSSを計算しているため・・・らしいです(正確な仕組みはよく分かりません)。
EEVEEは簡易表現なので、逆にうまい具合に処理されるようです。
こういう場合は次のどちらかの方法で、ほんの少しでも面に厚みを付ければSSSが正常に描画されます。
- 編集モードで面を押し出す
- ソリッド化モディファイアを追加する
以上、サブサーフェスの使い方/後編『SSSの設定方法など、具体的な使い方について』でした。
※添削・構成アドバイス:相方
ミクさんの3Dモデル
ミクさんの3Dモデルはこちらからお借りしました。
参考サイト
Subsurface scattering - Wikipedia
An Introduction To Real-Time Subsurface Scattering
Principled (プリンシプル) BSDF — Blender Manual