Blenderであそんでみた

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

EEVEEで屈折の設定方法

f:id:hainarashi:20200801211829j:plain

※記事製作時のバージョン:Blender3.2

 

前回の記事で、プリンシプルBSDFでのガラスの作り方を紹介しました。

hainarashi.hatenablog.com

 

ガラスや水など透過・屈折するマテリアルを作る場合、CyclesとEEVEEでは次のような違いがあります。

  • Cycles:自然な屈折が描画される
  • EEVEE:初期状態のままではおかしな屈折になる

EEVEEで透過・屈折を描画するには、以下の設定が必要です。

  • スクリーンスペース屈折(必須)
  • ブレンドモード(状況に応じて)
  • 屈折の深度(状況に応じて)

※これらはEEVEE専用の設定項目なので、レンダーエンジンがEEVEEになっている時だけ表示されます。

 

今回の記事は、これらの設定方法について解説します。

 

スクリーンスペース屈折(必須)

初期状態のEEVEEは、「カメラから見て一番手前の面」だけをレンダリングして、それに隠れる部分はレンダリングを省略します。
そのため、ガラスや水などを透過して見えるはずのオブジェクトも省略されてしまいます(環境テクスチャは映り込みます)。

スクリーンスペース屈折は、その「省略される部分」もレンダリングし、屈折率に応じて歪ませ、手前のオブジェクトの画像と重ね合わせて描画する機能です。

スクリーンスペース屈折を有効にするには、次の3つの項目をすべてONにします。

  1. 「レンダープロパティ」>「スクリーンスペース反射」
  2. 「レンダープロパティ」>「スクリーンスペース反射」>「屈折」
  3. 「マテリアルプロパティ」>「設定」>「スクリーンスペース屈折」

※「マテリアルプロパティ」は、マテリアルごとに設定する必要があります。

 

ブレンドモード(状況に応じて)

コップなど「内部に空洞があるオブジェクト」の場合は、スクリーンスペース屈折に加えて「ブレンドモード」の設定をします。

  • 「マテリアルプロパティ」>「設定」>「ブレンドモード」を「アルファブレンド」に変更
  • 「マテリアルプロパティ」>「設定」>「裏面の非表示」をON 

これで、内部の空洞があるっぽい屈折が描画できます。

ブレンドモードをアルファブレンドにする場合は、必ず「裏面の非表示」をONにします。
「裏面の非表示」がOFFのままだと、アルファブレンドの計算処理の過程で、屈折の描画が変なことになります。

注意点 1

アルファブレンドによる内部の空洞の表現は擬似的なものなので、角度によっては不自然な見た目になります。
これはEEVEEの限界なので、もっとリアルな表現をしたい場合はCyclesを使う必要があります。

注意点 2

ブレンドモードは、マテリアルごとに設定する必要があります。
「液体の入ったコップ」などを作る場合は、液体とコップの両方ともアルファブレンドにします。
そうしないと、コップに隠れる部分の液体が描画されません。

注意点 3

「中まで詰まったガラス」などは、ブレンドモードを初期状態の「不透明」のままにしておきます。
アルファブレンドにすると、見えるはずの部分が見えなくなり、見えなくてよい面まで描画され、不自然な見た目になることがあります。

 

ブレンドモードについて

ブレンドモード」はEEVEEの透過・屈折を処理するためのモードで、次の4種類があります。

  • 不透明(初期状態)
  • アルファクリップ
  • アルファハッシュ
  • アルファブレンド

ガラスや水などの「屈折を伴う透過」では、「不透明」「アルファクリップ」「アルファハッシュ」はすべて同じ結果になります。
そのためこの3つを使い分ける意味はなく、「アルファブレンドか不透明のどちらかを使う」とするのが簡単です。

なお「屈折を伴わない透過」の場合は、4つのブレンドモードそれぞれが異なる働きをします。
「屈折を伴わない透過」はプリンシプルBSDFの「アルファ」(または「透過シェーダー」)を使って作ります。
アルファとブレンドモードの詳細は、こちらの記事を参照してください。

hainarashi.hatenablog.com

 

屈折の深度(状況に応じて)

窓ガラスや車のウィンドウなど「薄い平面(に近い)ガラス」を作る場合は、「屈折の深度」でガラスの厚みを設定すると自然な屈折になります。

「屈折の深度」は次のように設定します。

  • 「マテリアルプロパティ」>「設定」>「屈折の深度」に、ガラスの厚みを入力する

※オブジェクトの厚みに関係なく、「屈折の深度」で設定した厚みで屈折が表現されます。
※入力値が「0m(初期値)」の場合、「屈折の深度」はOFFになります。

注意点

立体的なオブジェクトで「屈折の深度」を設定すると、立体形状に合わない不自然な屈折になります。
(これはこれで、何かの表現に使えそうな気もしますが。)

 

補足

屈折の重なり合いについて

EEVEEは、屈折が重なり合う状態は描画できません。

下の画像のような「液体の入ったコップ」の場合も、疑似表現として「液体の部分は液体だけ」「コップの部分はコップだけ」が描画されています。
そのためコップの色と液体の色の重なり合いは表現されません。
そういったリアルな表現をしたい場合はCyclesを使う必要があります。

 

マテリアルプレビューの屈折設定について

マテリアルプレビューは、レンダーエンジンの設定に関わらずEEVEEでレンダリングされます。
そのため、屈折はEEVEEの設定に基づいて描画されます。
(「マテリアルプレビュー用の屈折設定」というものはありません。)

「最終的なレンダリングはCyclesを使うけど、マテリアルプレビューでもいい感じの屈折を描画させて、雰囲気をつかんでおきたい」という場合は、一度EEVEEに切り替えて屈折の設定をしてから、Cyclesに戻します。

 

なぜEEVEEの屈折はこんな設定が必要なの?

EEVEEのレンダリングは「ラスタライズ法」という方式です。
ラスタライズ法は、3Dゲームなどで操作に即応した画面表示をするための高速(リアルタイム)レンダリングを主目的としています。

レンダリングの高速化、つまり処理の簡略化のため「最低限のレンダリングをして、屈折や反射はそれらしく見えるように後付けで画像処理をする」という手法をとっています。

EEVEEのたくさんある設定は、主にその「後付け画像処理」の項目です。
ユーザーがそれぞれの処理を「必要な時、必要な分だけ」ONにすることで、必要以上にレンダリング時間が長くなるのを防いでいます。

 

 

以上、EEVEEで屈折の設定方法でした。

 

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

 

twitter

灰ならし (@hainarashi) | Twitter

 

参考サイト

Eevee の使い方

【アルファ抜き】画像を透過し、影にも透過が反映されるようにする方法【Blender2.8】 – 忘却まとめ

Blenderのマテリアルのブレンドモードと影モードについてご紹介 - TomoGのごちゃまぜ倉庫

 

改訂履歴

2022年6月21日

  • ブレンドモードに関する説明を修正
  • 説明文と画像を全面的に差し替え