サブサーフェス・スキャッタリング

外観の開発:サブサーフェス・スキャタリング(表面下散乱)

このガイドで使用するモデルのデフォルトレンダリング

Terragenのほとんどのシェーダでは、サーフェスから跳ね返る光をシミュレート出来ますが、一部のシェーダはオブジェクト内で跳ね回る光もシミュレートする事が出来ます。このガイドでは、『Glass shader』を使用して、オブジェクトを通過して散乱する光をシミュレートします。

『Default shader』(上下の画像)は、ほとんどのマテリアルを処理する事が出来ます。また、葉や紙などの希薄なオブジェクトの半透明性をシミュレートする事が出来ます。

黄色の半透明を表現した『Default shader』

適切なサブサーフェス外観を実現するには、『Glass Shader』が必要です。

さらに、レンダラーをパストレーサーに変更する必要があります。

『Glass shader』(デフォルト設定)

『Glass shader』のプロパティウィンドウには、サブサーフェスタブがあります。ここで、オブジェクト内での光の動作を調整します。

"Decay distance"は、減衰の色合いに達するまでに照明が移動する距離(メートル単位)です。純粋な赤の減衰の色合いは、マテリアルが赤以外のすべての波長を吸収する事を意味します。
リアルな結果を得るには、微妙な色を使用する事をお勧めします。減衰距離を下げると、薄い赤がどれほど濃厚になるかを確認して下さい。

"Volume density"は、モデルの内部がどの程度「密度が高いか」を定義します。これは、オブジェクト内で反射する光のすべての微細粒子をシミュレートする事を意味します。粒子が多いほど、バウンドが多くなるため、表面下の散乱が多くなります。
雲の中の水滴の量、または氷の中の気泡の量と考えて下さい。
"Volume colour"の色に使用されているのと同じ淡い赤です。"Volume density"の値を上げた時の動作を確認して下さい。

信じられないほどのサブサーフェス効果を達成するには、"Volume density"と"Decay distance"の両方のバランスを取る必要があります。
"Decay distance"を短くするほど、"Volume density"がオブジェクトに強く影響します。"Decay distance"によって光が奥深くまで伝わらない場合、オブジェクト内の密集度を散らせる必要があります。
これが、与えられたマテリアル内で光が実際にどれだけ伝わるかを考える必要がある理由です。宝石、氷、大理石、ワックス、人間の皮膚は、同じ減衰距離または体積密度を持ちません。従って、サブサーフェスの外観はモデルの比率に大きく依存します。

PT(パストレース)の照明方法には、2つのサブサーフェスオプションがあります:
"Subsurface scatter in all directions"は、閉じたオブジェクト内の光を正確に散乱するように設計されています。
"Subsurface scatter towards nomal"は、水面などのシンプルで平らなオブジェクト用に設計された高速な方法です。

オブジェクトの表面に向かってだけでなく、オブジェクト内で光が跳ね返る時に、すべての方向のサブサーフェスがより自然に見える事に注目下さい。
光はオブジェクトの縁や薄い部分をよりリアルに通過し、必要に応じてより深い陰影を作成する事もあります。

次に、色を追加します。"Decay tint"と"Volume colour"を異なる緑の値に変更します。
"Decay tint(減衰の色合い)"は、光が通過する時のマテリアルの色を決定します。
"Volume colour(ボリュームカラー)"は、内部で光が反射する時のマテリアルの色を定義します。

ここで、フラクタルノイズを作成し、"Volume density function"に差し込みます。

『Transform input shader』を作成し、それを"Use world space"に変更する必要があります。これにより、ノイズがサーフェスのUVにマッピングされるのではなく、3D空間に適用されます。
『Image map shader』を使用してテクスチャを入力する事も出来ます。

"Volume density function"で適用されるフラクタルノイズとの違いを次に示します。
光がマテリアルを通過する領域に注意して下さい。これにより、一部の領域の均一性が低下します。


『Glass shader,』の「Main」タブに戻り、"Specular roughness"を確認します。

"Specular roughness"は、より繊細でありながら、本質的なマテリアルを実現するために不可欠な役割を果たします。

オブジェクトの表面の微小な欠陥をシミュレートし、多少「研磨」します。これにより、鏡面反射と反射が制御されるため、屈折のシャープネスに影響します。

粗さが増すにつれて、ティーポットハンドルがより「グミ」に見える事に注視して下さい。
"Anti-aliasing"を3から6に増やし、"Max path per sample"を36に増やすと、かなりまともな画像が得られます。

"Volume Colour function"は、3Dノイズやテクスチャマップの両方を使用してモデルの表面の模様や質感を与える事が出来ます。
ただし、考慮すべき重要なパラメーターもあります。カラー関数を体積として数値化します。

これは、サブサーフェスの外観を意図するためにテクスチャを使用する場合に重要な役割を果たします。光線がオブジェクト内を進行する時にカラーを計算します。
このサンプルでは、テクスチャがオブジェクトに(Z軸上に)投影され、"Volume colour function"に差し込まれています。
2つの色の算出の違いをはっきりと見る事が出来ます。左図はサーフェスからテクスチャの色を保持し(ガラス効果を無視)、右図はボリューム内のポイントでテクスチャを算出します。
"Evaluate colour function volumetrically"にチェックを入れると、"Volume colour function"で指定した『Image map shader』の画像は3Dワールド空間でマッピングされますが、チェックを外すと、このノードツリー(上記のフラクタルノイズを入れる時と同様)のように『Transform input shader』を追加する必要があります。

代わりにObject UVを使用してテクスチャをマッピングすると、まったく異なる結果が得られます。
オブジェクトのUVにマッピングされたテクスチャを使用するには、Terragenはそのサーフェスを算出する必要があります。"Evaluate colour function volumetrically"をオンにすると、3Dワールド空間で算出します。
ある意味で、サーフェスにマッピングされたテクスチャによってボリュームカラーを定義しようとするのは奇妙なアイデアのように思われるかもしれませんが、オブジェクトのUVマッピングを使用してサブサーフェス効果を稼働したい場合(特に肌のシェーディング)に有用です。このため、この機能はデフォルトで無効になっています。

通常『Default shader』などでテクスチャをマッピングしますが、『Glass shader』を使ってテクスチャをマッピングする事で肌(オブジェクト)の表面化に光を散乱させて瑞々しさを表現する事が可能となります。
スキンシェーダとしての『Glass shader』のパラメータの参考例。
肌などのディティールの細かいオブジェクトを扱う場合は、"Anti-aliasing"や"detail"、"Max paths per sample"、"Ray detail multiplier"などのパラメータにも細心の心配りが必要です。
また、スキンシェーダについて詳しく知りたい場合は、公式フォーラムから"► General ► Image Sharing ► Skin shader "で参照する事が出来ます。

『Glass shader』は、ほぼすべての半透明/表面下の効果を扱う事が出来ます。『Rock』のオブジェクトを使用した別のサンプルを挙げておきます。
"Decay tint"は水色に設定され、"Lighting method in PT"は"Subsurface scatter in all directions"に設定しています。

"Decay distance"を短くし、"Volume density"と"Specular roughness"を大きくする事で、様々なタイプの氷を作る事が出来ます。

澄んだ鮮やかな氷は、光がほとんど乱されずに通過する事を意味します。"Specular roughness"が低いと、濡れたような光沢のある外観とシャープな屈折が得られます。
また、"Decay distance"が長く、"Volume density"が低いと、表面下での散乱はほとんどありません。

古い海水氷には不純物と気泡が多く含まれています。表面も同様に老化し、結果として表面が荒くなります。
"Specular roughness"を高くすると共に、"Decay distance"を短く、"Volume density"が高いと、氷山の特徴である深い碧色が得られます。

船が氷山内の光散乱にどのように影響するかに注目して下さい。

一般的なレンダリングガイドライン:


真のサブサーフェイススキャッタリングをレンダリングするにはコストが掛かります。
このサンプルは"Max paths per sample"を最大の144にした他、"Ray detail multiplier"の数値を増やした結果です。これでもまだ光量が足りていないようです。

クオリティを高めてノイズを減らそうとする場合は、まず"Max paths per sample"を増やす事を考えて下さい。これにより、Terragenは二次光線に費やす処理の割り当てが増えます。
"Anti-aliasing"を増やすだけの場合よりも、マテリアルがよりきれいでレンダリング時間が短縮されます。

大きな"Decay distance"と巨大な"Volume density"に注意して下さい。これは仕事の速度を遅くします。
上記の画像のように、より長い距離が必要になる場合もありますが、これらの値はメートル単位であり、意味がある事を覚えておいて下さい。レンダリングを楽しんで下さい!
最終更新:2020年04月01日 00:14