AR/VR/MR コラム

Blender入門|Cycles Renderでリアルな透過ガラスっぽいシェーダーをノードベースで作る

皆さん、こんにちは。山形大学VR部代表の高木です。

今回は「プリレンダリングしたフォトリアル画像を作成する」ことを目指して、初心者向けにBlenderの使い方をわかりやすく説明します。

マテリアルの設定はプリンシプルBSDFでほとんどの質感を表現できるので、「Blender マテリアル」でWeb検索すれば色々な情報が出てきますが、この記事では検索してもあまり情報が出てこない「シェーダーエディター」の使い方を詳しく解説します。

「色収差のあるガラス屈折表現」がテーマです。

シェーダーエディターとは

シェーダーエディターとは、Blenderでマテリアルをノードベースで直感的に編集する機能のことをいいます。

シェーダーエディターを開くには、図のようにそれぞれのブロックの左上にある「エディタータイプの選択」から「シェーダーエディター」を選択します。

シェーダーエディターの作業領域は広いほうがよいので、下側のパネル(デフォルトはタイムライン)を大きく引き上げて図のような配置にしておきましょう。

屈折を設定するにあたり立方体より球のほうがレンダリングに都合がいいので、デフォルトキューブは削除してUV球を作成します。(オブジェクトモードでCubeを選択して「X」キーで削除、「Shift + A」キーで追加 →メッシュ →UV Sphere)

UV球をなめらかな球面にするため、「モディファイアーを追加」→「サブディビジョンサーフェス」→「レンダーのレベル数を6」にします。

PCのスペックによってはレベル数をもっと減らしたほうがよいかもしれません。(サブディビジョンサーフェスは、Blender 2.79までは細分割曲面という名前でした。)

レンダーエンジンはデフォルトでEeveeになっているので、レンダープロパティからRender EngineをCyclesに、デバイスを(GPUを使用できる方は)GPU演算に変更しておきましょう。

このマテリアルはアルベド(物体の本来の色)ではなく反射や屈折が主なので、効果をわかりやすくするためHDRI環境テクスチャを光源にします。

右のワールドプロパティから、サーフェスのカラーを「環境テクスチャ」、画像を「HDRI画像」に設定します。(通常の360度パノラマ画像でも大丈夫です。)

手元に画像がない場合は「HDRI画像 フリー」などでWeb検索し、用途に応じた画像を探すと良いでしょう。

ガラスはできるだけ明るく見せたいので、強さを2.7に変更しておきました。

右のプロパティパネルからマテリアルプロパティを選択、アウトライナーか3Dビューポートパネルから先ほど追加した球のオブジェクトを選択し、新規マテリアルを追加してみましょう。ここではMaterialという名前にしました。

「サーフェス」のプルダウンから「ノードを使用」がONになっていることを確認し、編集するノードの対象が先ほど作成したMaterialであることも確認しておきます。

この例では一つしかマテリアルを作成していないので間違えることはないですが、複数のマテリアルを編集していると混乱してくるので、チェックする習慣をつけましょう。

新規マテリアルを追加した段階で、自動でシェーダーエディターにもノードが追加されるはずです。

まずはシンプルにグラスBSDFだけのノードを作成します。IOR(Index of Refraction=屈折率)はデフォルト値の1.45、粗さは0にします。

ちなみに反射はreflection、屈折はrefractionと、かなり紛らわしい用語になっています。カタカナではリフレクションとリフラクションという表記で区別しているようなので、間違えないように気をつけましょう。

レンダリング結果

ここでF12キーを押してレンダリングしてみます。

初期設定だとノイズが多いので、気になる方はサンプリング数を増やしましょう。私はPCスペックに余裕があるので、サンプリング数は1024にしています。

(ポストエフェクトでレンダー結果にグレアを追加していますが、これについては別の記事で解説します。)

そしてレンダリング結果がこちらです。これはこれで綺麗なのですが、なんだか偽物っぽい感じがします。

これは、現実世界のガラスは色収差(いろしゅうさ)があり色が滲むためです。(色収差:光の波長によって屈折率が変わることを光学で分散といい、この分散が原因で色ズレとして発生する収差のことを色収差という。)

ここでは色収差を再現して、よりリアルなガラス球を作っていきます。

シェーダーエディターで色収差を再現

「Shift + D」キーでグラスBSDFを3つ複製し、それぞれのカラーを赤、緑、青の単色にします。

カラー選択モードがHSVになっている場合はRGBにして、それぞれの色を1、それ以外を0にします。

次に、それぞれの色の成分を出力結果に混ぜ合わせるために、「Shift + A」キー→「シェーダー」→「シェーダー加算」を選択して2つ追加します。

ドラッグアンドドロップで、下記のようにノードをつなぎます。

最小限のノード構築が終了しました。

それぞれのIORを変更してみましょう。ここでは赤のIORを1.40、青のIORを1.50にしてレンダリングします。

再びレンダリング

光の分散がだいぶ分かりやすくなりましたが、ちょっとやりすぎ感があります。

ここからパラメーターをちょうどいい値に調節していきます。ここで数値を調節しやすいよう、新たに数式ノードと値ノードを追加します。

「追加」→「コンバーター」→「数式」で加算ノードと減算ノードを追加しましょう。

ここに「追加」→「出力」→「値」からノードを追加して、IORとDispersionという名前に変更します。(Nキーを押して右のメニューを呼び出し、「アイテム」メニューの「ノード」にある「ラベル」に入力すると変更できます。)

これで図のようにノードをつないでいけば、IOR(屈折率)やDispersion(分散)が簡単に変更できるようになります。

上が減算ノード、下が追加ノードです。入力された屈折率より小さい値が入るのが赤色成分のグラスBSDF、大きい値が入るのが青色成分のグラスBSDFです。

数値をいろいろと変えてみた結果、IORはそのままでDispersion 0.013がイメージ通りのレンダー結果だったので、今回はこれで結果を保存しました。

完成

今後もガラス製のオブジェクトを作るときは、このマテリアルを流用したいと思います。

色付きガラスを作る場合は、ノードを少し改修する必要があります。

具体的には、RGBを入力するノード、RGB分離とRGB合成のコンバーターノードを使用して、各成分だけを次のノードに伝えるノードを作れば色変更できるようになります。

スクリーンショットを貼っておきますので、ぜひ参考にしてみてください。

まとめ

いかがでしたか?

一見複雑なことをしているように見えるノードも、ステップごとに考えていけばできそうだと感じていただけたのではないでしょうか。

私自身Blenderのノードエディターの情報を検索しても、最後の完成形だけが示されて終わりといったサイトが多く学ぶのに苦労したので、この記事では途中の制作過程も詳しくまとめました。

空間情報クラブでは、VR部で培ったBlenderやUnityに関する技術をアウトプットしていきますので、今後ともよろしくお願いします。

業務のDX化でお困りのことがありましたら、お気軽にご相談ください。

最新技術でDX化推進を支援するXRシステムを詳しく見る

-AR/VR/MR, コラム
-

© 2022 株式会社インフォマティクス