屈折のあるガラス表現を現実に近づける
「屈折」を使用したガラスのようなマテリアル表現で、現実に近づけます。
その際は以下を確認するようにします。
- 厚みを考慮
- マテリアルの指定
- 映り込む背景を指定
- 視線追跡レベル
例として、簡単なガラスのコップをモデリングしました。
厚みを考慮
このコップは厚みを設けています。
視点からレイを飛ばしてレンダリングする「レイトレーシング」で表現するとき、
屈折面は必ず「入る(In)」「出る(Out)」の1組で表現されます。
ここでの「屈折率」は説明上、空気中やガラス部に割り当ててます。
正確には、レイがある物体から別の物体に入る際の、それぞれの空間での光の進行速度を割った値を「屈折率」と呼びます。
これは現実世界でも同じです。
厚みのない形状の屈折表現はできない、ということになります。
厚みのあるコップのレンダリングは以下のようになります。
もし厚みがない場合は正しく表現できません。
複数の異なる屈折率を持つ形状を通過する場合
コップのガラス内に水(屈折率 1.33)が入っていた場合、以下のようになります。
3DCG(レイトレーシング)ではレイの進行のIn-Outが対になるように、コップのガラスと水の間にわずかにすき間を設けるようにします。
マテリアルの指定
Shade3Dマテリアル
Shade3Dマテリアル(従来のShade3Dのマテリアル)の場合は、屈折のある表面材質では「屈折」のほかにいくつかのパラメータを指定します。
以下はガラスの例です。
「拡散反射」を0にします。
「反射」を0.1と少しだけ指定します。
「透明」を1.0にします。色を付ける場合は「透明」の色を指定します。
「屈折」を1.5にします。
「フレネル」を0.5としました。
フレネルは厳密な値ではないですが、視線の向きによって映り込みを調整する効果になります。
PBRマテリアル
ver.20.0
PBRマテリアルの場合はシンプルです。
以下はガラスの例です。
「ベースカラー」はRGB(255, 255, 255)を指定します。
初期状態ではRGB(230, 230, 230)となっており、そのままでは少し灰色になってしまいます。
「屈折率」に1.5を指定します。初期状態で1.5になっています。
「透明度」に1.0を指定します。
「PBRマテリアル」のほうが、「Shade3Dマテリアル」よりもより現実に近い結果になります。
映り込む背景を指定
ガラスや水などの屈折率を持つ形状の場合は、映り込む背景がないときはリアルにはなりません。
背景は必ず指定するようにします。
もし、映り込む背景がない場合(地面含む)は以下のようにいかにもCGというレンダリング結果になります。
以下は、背景に灰色のみを指定しました。地面も消しています。
モデリングする地面も映り込みとして重要な要素です。
地面のテクスチャの作り込みができていない場合は、背景を指定していたとしても単調になります。
以下は、地面のテクスチャを指定せずにベースカラーだけ指定しました。
背景のHDRIを指定し被写体の形状だけを設けて地面は指定しない、としたほうが
(背景は写真素材のため)よりリアルになる場合もあります。
視線追跡レベル
コップの中に水があるようなシーンの場合、これだけでレイの通過は最大6回分(コップのIn-Out x 2 + 水のIn-Out x 1)必要になります。
複数のコップが存在する場合など、
レンダリング設定の「その他」タブの「視線追跡レベル」の初期値5では足りない場合も多いです。
以下は「視線追跡レベル」を変えたレンダリングの比較です。
左が「視線追跡レベル」5、右が「視線追跡レベル」16を指定しています。
「視線追跡レベル」5の場合は、全体的に映り込みが明るくなっています。
これは、視線追跡レベルが足りずにレイの透過/屈折の途中で背景を採用してしまうために起きる現象です(レイの打ち切りが起きた状態)。
特に透過/屈折のあるシーンの場合は、「視線追跡レベル」の調整が重要になります。
なお、「視線追跡レベル」の値を大きくすればレンダリング時間がかかることになります。