物理ベースレンダリング(4) ボリューム・屈折

前回は[透過]を紹介しました。今回は[透過]と組み合わせて使用する[ボリューム]を紹介します。

ボリューム (Volume)

先に[透過]をオンにした状態で、さらに[ボリューム]をオンにしてください。

ボリュームの特徴として、媒質の外部から内部へ、また内部から外部へと光が出入りする際に直進する方向が曲がって透過する”屈折”の効果が得られます。透過が薄い膜状のオブジェクトに用いるのに対して、ボリュームは透明でかつ厚みもあるガラスや宝石などの媒質を表現します。

ボリュームのパストレーシングレンダリング例

[ボリューム]には以下の3つのパラメータがあります。

  • 厚さ
  • 減衰距離
  • 減衰色

このうち、パストレーシングレンダリングでは[厚さ]は設定する必要はありません。[厚さ]と[厚さ]マッピングはリアルタイム表示でのみ用いられます

上の例のように太くなっている箇所に色を付けたい場合は[減衰距離]と[減衰色]の両方を設定します。こちらはパストレーシング・リアルタイム表示どちらにも適用されます。

厚みのリアルタイム表示について

媒質内部を通過する光線がどこから入ってどの角度で出ていくのか、パストレーシングレンダリングではその処理内で計算され、屈折が正確に描写されます。

しかし、リアルタイムでは計算量的に正確な算出が困難なため、glTFのリアルタイム表示では直接入出点の位置を計算するのではなく、あらかじめ媒質の表面に厚みの値をマッピングしておき、この位置から入射する場合はマッピングされた厚み分を透過して出ていく前提で、疑似的に屈折を表現する手法が取られます。

厚さが均一な板状のオブジェクトなら[厚さ]の値を設定するだけで大丈夫ですが、曲面の場合は場所ごとに厚みが異なるため、マッピング画像として[厚さ]マップも設定する必要があります。

厚さマップの作成方法

[厚さ]マップを設定するには事前に厚さマップ用の画像を用意する必要があります。Metasequoia 4では現時点は厚さマップを直接作成する機能はありませんが、厚みの頂点カラー化、頂点カラーのテクスチャ化の2つの機能を組み合わせることで厚さマップを作製できます。

なお、厚み計測・頂点カラーのテクスチャどちらもEX版のみの機能です。Standard版ではご利用いただけませんので、この機能が必要な方はEX版へのアップグレードをご検討ください。

厚みの頂点カラー化

[計測]コマンドで[厚み]、測定方向に[放射状]を選択し、[厚みを頂点カラー化]を実行します。

厚みの頂点カラーマッピング例

[グレースケール]をオン、[色を反転]をオフにしてください。薄い箇所が暗く、太い箇所が明るく表示されているのがわかります。この状態で厚みの頂点カラー化は完了です。

ここでスライダーで設定可能な厚みの上限値(上の画像でのバーの横の数値)を覚えておいてください。この値を後で使用します。

UV展開

頂点カラーをテクスチャへ変換する前に、その準備としてUV展開が必要です。

編集モードを「マッピング」に切り替え、「自動展開」を選択します。


「切れ目を選択」の「自動選択」を呼びだし、「アルゴリズム」に「スマート」を指定します。「高速」でも構わないのですが、展開結果に重なりが生じることがあるため、スマートのほうが楽なケースが多いです。

 

切れ目が選択できたら「展開実行」を呼び出します。パラメータはそのままで構いません。処理後は、展開結果に重なりがないことを確認してください。

重なりがあると見た目に多少おかしい箇所が出てくる可能性があります。(多少なら気にしないという手もありますが…)

重なりを解消するには、「分離」コマンドで重なりのある箇所の根本付近を切り離し、「切れ目の選択」>「現在の切れ目」を呼び出して切れ目を追加してから、再度「展開実行」を呼び出します。

テクスチャ変換

UV展開ができたら、頂点カラーをテクスチャ画像化します。編集モードを「モデリング」に戻し、「頂点カラー」コマンドで「テクスチャへ変換」を呼び出します。

ポリゴン数が多いモデルの場合は横幅・縦幅を十分に高い値にしてください。ポリゴン数に対してテクスチャ画像の解像度が低いと、画像がつぶれて粗い結果になってしまうことがあります。

ファイル名を指定してpngファイルなどで保存します。出力されたファイルを適当な画像ビューアで開くと、厚さが濃淡で表現された画像になっていることが確認できます。

厚さマッピング

材質の設定

最後に材質の設定です。glTFシェーダの拡張設定内の[透過]と[ボリューム]をオンにし、[厚さ]に計測時の上限として表示されていた値を指定します。

[マッピング]内の[厚さ]に出力したファイルを指定します。

また、頂点カラー化されたままの厚さはもう不要なので、「頂点カラー」をオフにすることを忘れないでください。

[金属感]と[粗さ]は[透過]の時と同様に低めの値にしておきます。[粗さ]を若干上げるとすりガラスのようになります。

これで、プレビュー内でボリュームの材質が設定されたオブジェクトが、ガラスのようにその背景が屈折して透き通っている表示になっているはずです。後ろにオブジェクトを配置したり、環境マップを設定してください。

また、[減衰距離]と[減衰色]を設定すると、厚みのある箇所が濁って、グミや宝石のような表現も可能です。[減衰距離]は表面からその距離に達した時点で光をどこまで減衰させるかを指定します。[厚さ]と同じ値でもいいですし、より浅い厚さの箇所でも暗い色にしたいなら厚さよりも低い値を指定します。

リアルタイム表示での減衰表示

[減衰色]の値が1なら内部で減衰は起こりませんので、[減衰距離]も設定する必要はありません。

なお、[厚さ]と[減衰距離]は絶対的な寸法として指定されます。スケールの異なるオブジェクトで同じような見た目にしたい場合、そのスケールに合わせてそれぞれ異なる値を指定する必要があります。

屈折 (IOR)

[ボリューム]使用時のデフォルトの屈折率はガラスとほぼ同等の1.5ですが、水や鉱物などは異なる屈折率を持ちます。[屈折]をオンにすると任意の屈折率を設定することができます。

ボリュームが設定された状態で屈折率の値を変えると、屈折を通して見える後ろ側の見え方が変わっていくことがわかると思います。実際に試してみてください。

現実の物質における屈折率の値についてはWikipediaや色々な文献・Webなどで紹介されていますので、そちらをご参照ください。

 

今回はボリュームと屈折について紹介しました。次回では残りの他のパラメータについて紹介します。