Blenderであそんでみた

3D-CGソフトBlenderの小技や豆知識など。

プリンシプルBSDFでサブサーフェスの使い方/後編

f:id:hainarashi:20201019220511j:plain

※記事製作時のバージョン:Blender2.90.1

 

プリンシプルBSDFで、いろいろな質感表現の方法を探っていくシリーズ。
第8回はサブサーフェススキャッタリング(略称 "SSS")の使い方/後編です。

 

今回の記事は長いので、前・後編に分けています。
前編はSSSの基礎知識とパラメーターについて、
後編はSSSの設定方法など、具体的な使い方について説明します。

 

前編はこちらのリンクからどうぞ。

hainarashi.hatenablog.com

 

SSSの設定手順

SSSは次の手順で設定すると、分かりやすく、やり直し無く設定できます。

 

1. オブジェクトの拡大縮小を済ませ、サイズを確定する。
 (スケールの適用はしなくてもOK)

2. ベースカラーとサブサーフェスカラーに同じ色(またはテクスチャ)をつなぐ。

3. サブサーフェスを1.0にする。

f:id:hainarashi:20201021110857j:plain

設定手順 1~3

 

4. サブサーフェスに値ノードをつなげる(※)。

5. サブサーフェス範囲(0.0~1.0)で散乱光の色味を、
 値ノード(0.0~100.0)で光の届く範囲を設定する。

※値ノードをサブサーフェス範囲につなげると色味の設定ができなくなってしまうので、この段階ではサブサーフェスにつなぎます。

f:id:hainarashi:20201013213019j:plain

設定手順 4~5

 

6. 設定が済んだら、サブサーフェスからサブサーフェス範囲に値ノードをつなぎ直す。
 これで、サブサーフェスでSSSの強さを調整できるようになります。

f:id:hainarashi:20201013214416j:plain

設定手順 6

 

以上で完了です。

オブジェクト内でSSSに強弱をつけたい場合は、サブサーフェスにテクスチャをつないでサブサーフェスマッピングをします。

 

EEVEEの設定

サブサーフェスの透光

EEVEEでSSSを使う際は「マテリアルタブ > サブサーフェスの透光」をONにします。
これで、後ろから光が当たった時に、手前まで光が通って明るく見える様子が描画されるようになります。

f:id:hainarashi:20201014133825j:plain

サブサーフェスの透光

 

設定の優先順位

EEVEEでの透過・屈折用の設定は、SSS用の設定よりも優先されます。
そのため、次のどちらかが設定されている場合、SSSは描画されません。

  • 「マテリアルタブ > 設定 > ブレンドモード」がアルファブレンドになっている
  • 「レンダータブ > スクリーンスペース反射 > 屈折」と
    「マテリアルタブ > 設定 > スクリーンスペース屈折」がONになっている

透過系のマテリアルを元にSSS用に作り直した場合、これらの設定が残っている事があるので要注意です。

f:id:hainarashi:20201021111053j:plain

設定の優先順位

 

サンプル数、ジッターのしきい値

EEVEEのSSSでは、計算処理の仕組みによる帯状の模様が発生します。

f:id:hainarashi:20201014211903j:plain

帯状の模様

 

この模様が出ないようにするには、「レンダータブ > SSS」から

を調整します。

 

・サンプル数

SSSを計算するサンプル数です。
数値を大きくするほど帯模様の間隔が狭まり、滑らかになります。

f:id:hainarashi:20201014215819j:plain

サンプル数

 

・ジッターのしきい値

この割合以下のサンプルをランダムに回転させて、帯模様が目立たないようにします。
数値が大きいほど効果が強くなり、帯模様が目立たなくなります。

f:id:hainarashi:20201014215826j:plain

ジッターのしきい値

 

イメージとしては、サンプル数が「解像度」、ジッターのしきい値が「デノイズ」または「アンチエイリアス」的な働きです。

どちらも数値が大きいほど綺麗になりますが、レンダリング時間も長くなります。
ある程度綺麗になると、それ以上見た目の変化はしなくなるので、必要な分だけ数値を上げます。

 

EEVEEとCyclesの違い

EEVEEとCyclesでは、SSSを使った仕上がりが大きく異なります。
マテリアルの調整は、どちらでレンダリングするか決めてから行います。

f:id:hainarashi:20201017144740j:plain

EEVEEとCycles

 

CyclesではSSSの計算方法(サブサーフェスメソッド)を「Christensen-Burley」と「Random Walk」の2種類から選択できます。

f:id:hainarashi:20201017150344j:plain

サブサーフェスメソッド

 

Christensen-Burleyは2.7系から搭載されている古いバージョン。
Random Walkは2.8で搭載された新しいバージョン。
仕組み的な違いはよく分かりませんが、Random Walkの方が品質が良いようです。

 

下の画像は肌の部分にSSSを使用したモデルの比較です。
Random Walkの方がまぶた・耳・鼻・唇などのディテールがしっかりしていて、綺麗な仕上がりになっています。

f:id:hainarashi:20201017152631j:plain

サブサーフェスメソッドの違い

 

※画像出典:YouTube "Blender Cycles Random Walk SSS (New Feature!)" 

www.youtube.com

 

マニュアルによると、Random Walkは「閉じたメッシュに最適です。メッシュの面と穴が重なると、問題が発生する可能性があります」だそうです。
この点は検証していないので、どのような場合に問題が起こるのかは、皆さんで確かめてください。

 

なお、Random Walkが使えるのはCyclesのみです。
EEVEEでRandom Walkにしても、レンダリングはChristensen-Burleyの結果になります。

 

-------- 2021/08/23 追記 --------

Random Walkについては、dskjalさんのブログにもっと詳しい説明があります。

Principled BSDF の使い方 - dskjal

-------- 追記終了 --------

 

SSSの使い処

「半透明」の使い分け

解説サイトなどでは、SSSが「半透明な物体の質感」と書かれていることがあります。

しかし一言で「半透明」と言っても、言葉的な意味は

  1. 光は通すけれども、向こうは透けて見えない半透明
  2. 向こうがぼんやりと透けて見える半透明
    (すりガラス、タッパー、プラスチックの収納ケース、レジ袋など)

の2種類があります。

SSSで表現するのは1の半透明です。

2の半透明はSSSではなく伝播を使って、「粗さ」または「伝播の粗さ」(Cycles限定)を上げて作ります。

-------- 2021/10/14 追記 --------

Blender2.93から、EEVEEでも伝播の粗さが使えるようになりました。

-------- 追記終了 --------

f:id:hainarashi:20201018162718j:plain

向こうが透けて見える半透明

 

伝播の使い方はこちらの記事を参照してください。

hainarashi.hatenablog.com

 

実物の表面下散乱とマテリアルのSSS

プラスチックの洗面器やカーテンなどは、向こうの光や影が透けて見えます。
実のところ、プラスチック・木材・紙製品・布など、身の周りの多くの物が光を通す性質を持ち、表面下散乱があります。

しかしマテリアルを作る上では、普通これらにSSSは設定しません。
理由としては、まずSSSは使えば使うほどレンダリング時間が長くなるため。
それとSSSは表現力に限界があり、使うとかえって不自然になる場合があるためです。

f:id:hainarashi:20201018211249j:plain

SSSで不自然になる見本

 

SSSは「使わないと柔らかい質感が表現できない物」、つまり実物で考えると「光を通す性質が大きい物」に絞って使います。

 

障子やカーテンに映る影

障子やカーテンなどで、反対側の影が映って見える表現はSSSで作ります。

f:id:hainarashi:20201019210404j:plain

SSSで影絵表現


しかし、厚みの無いメッシュにSSSを設定すると、Cyclesではうまく描画されません。

f:id:hainarashi:20201019212742j:plain

厚みの無いメッシュのSSS

 

Cyclesではボリューム(メッシュ構造内部の立体空間)を元にした丁寧な方法でSSSを計算しているため・・・らしいです(正確な仕組みはよく分かりません)。
EEVEEは簡易表現なので、逆にうまい具合に処理されるようです。

 

こういう場合は次のどちらかの方法で、ほんの少しでも面に厚みを付ければSSSが正常に描画されます。

  • 編集モードで面を押し出す
  • ソリッド化モディファイアを追加する

f:id:hainarashi:20201019215107j:plain

CyclesのSSSは面に厚みが必要

 

 

以上、サブサーフェスの使い方/後編『SSSの設定方法など、具体的な使い方について』でした。

 

※添削・構成アドバイス:相方

 

twitter

灰ならし (@hainarashi) | Twitter

 

ミクさんの3Dモデル

ミクさんの3Dモデルはこちらからお借りしました。

3d.nicovideo.jp

 

参考サイト

Subsurface scattering - Wikipedia

An Introduction To Real-Time Subsurface Scattering

Principled (プリンシプル) BSDF — Blender Manual

SSS(サブサーフェイススキャッタリング)のお話|高原さと|note

Subsurface - Arnold for Maya User Guide - Arnold Renderer