blender の箱を消したら

blender を覚えたい蜂砂の発見や操作メモです。オブジェクトの動かし方は覚えたので中級者を目指したい。

eeveeでリアルなガラスを作ってみたい

ガラスの表現を覚えてみたいと思い、試してみた。結論から言うとあまり成功!という結果にはならなかった。本物っぽさがまだ表現できなてない。

撮影環境を準備

まずは、撮影の土台とカメラ・ライトを用意。土台はよくあるL字型の板、ライトは Sun で強さを 10 にした。カメラは真正面から撮ることにする。

カメラとライト土台

WorldのBackgroundは、Environment Texture にして適当なHDR画像を設定。HDR画像をのしくみはまだよくわかってないけど、何気にこのHDRの質が最終のできを左右することにもなるので、良い画像を選んだほうがよい。

オブジェクトは当然グラス。点を適当にうっていって、ScrewSubdivisionのモディファイアを適用したものを用意。あわせて、玉とスザンヌにも適用してみることにした。

回転させてグラスを作る

オブジェクトを透過させる設定

Eeeveeで反射や屈折、つまり水とかガラスみたいな表現をするには、Screen Space Reflection というのを使う必要があり、デフォルトでオフになっているので、これを有効にする。

有効にするのは2ヶ所。1つはレンダータブScreen Space Reflectionチェックボックスと、それを開いたところにある Refraction をオンにする。

レンダータブの設定

もう1ヶ所はマテリアルごとにつける必要がある。マテリアルタブSettingsにあるScreen Space Reflectionをオンにする。あと、ついでにBlend ModeAlpha Hashed にした。実はこのブレンドモード、よくわかってない。そのうちちゃんと調べてみたい。

マテリアルタブの設定

いくつかマテリアルを作って試してみる

principled BSDF

まずは、デフォルトの principled。ぼくの認識では、正確な物理計算でいい感じのマテリアルをパラメタの組み合わせで作れるもの。なのだけど、やっぱりこれだけで何でもできるわけではなさそう。

さておき、ガラス表現なので、透過するためにTransmission1.000にして透過し、Roughness0.000にしてつるつるにする。IORは、ガラスがだいたいデフォルトの1.45らしいのでそのまま。

principled のノード

ただガラスを写すとわかりづらいので、後ろにカラフルスザンヌを置いてみた。するとこんな感じ。

principled のレンダリング結果

カクカクした透明スザンヌなんかは割と良さげに見えるし、屈折感も出てるけど、本物感には程遠い。

glass BSDF

そもそも、Blenderにはglass BSDFっていう、そのものが用意されているじゃないか。これを使ってみよう。

glass のノード

principledの代わりにglassにしてみた。IOR(屈折率)は、屈折しすぎると不自然に見えたので、0.95としてある。で、こんな感じ。

glass のレンダリング結果

透過性がよくなったのはIORをいじったせいか。エッジ部分も少し濃くなってフレネル効果(というの?)も出ているように見える。最初のよりよくなった。principled の時と比べると、こちらがガラスだとすれば、さっきのはクリスタルという感じ。

principled + transparent

メタリック設定したシェーダーと透過シェーダを組み合わせて表現する方法があるらしい。transparent BSDFprincipled BSDFmix shaderでつなげる。principledには、Metallic1.000(完全メタル化)する。Transmissionの値は0.000のままでOK、関係しない。

さらにmix shaderfac(係数)にはInputにあるFresnelのノードをつなげるとよいみたい。Fresnelの加減は、間にRGB Curvesをはさむことで調整する。できたノードはこんな感じ。

principled + transparent のノード

で、レンダリングするとこうなる。

principled + transparent のレンダリング結果

お。それっぽい感じになった。・・・なった?全体的に暗めになってしまったけども、グラスはまぁまぁいい感じにも見える。球はまわりの暗い部分が極端すぎる感じがする。パラメタの調整でなんとかなるレベルなんだろうか。

glass + glossy

ここからが本命。eevee でガラスを作ろうと調べるとこのページにたどりつく。

blenderartists.org

英語はよくわからないけども、途中にノードの画像があり、これがガラスのシェーダーとしていい感じだよ!という内容ぽい。ページに貼られている画像を見ても、どれもすごい。とりあえず全く同じパラメタで試してみる。

glass + glossy のノード

この glass とか glossy の代わりに、principled BSDFを使っても良い気がするのだけど、こちらの方がシンプルでわかりやすいといえばわかりやすい。考え方は一つ前の、メタリック+透過の組み合わせと一緒なのかなと思う。レンダリングするとこうなった。

glass + glossy のレンダリング結果

おぉ、反射もいい感じに入って、それっぽさが増した。一番いい感じに見える。でも、正直、オリジナルページにあるガラス感は全然出しきれてないのは、ライティングや環境マップの設定などがうまくいってないせいなのかな。

もう少しパラメタをいじってみる。全体的に暗い部分が多い気がするので、フレネル効果の影響を減らすために、fresnelのIORを少し1.000に近づけて、glass BSDFはもう少し歪みをもたせてもよさそうなので、1.000から離す。あと、glossy BSDFRoughnessは、数値をあげると、くすみはじめるけどそこがテカってきたので、少しだけ数値を設定してみた。

glass + glossy 改良したノード

で、結果。

glass + glossy 改良したレンダリング結果

うん、濃すぎる状態は解消できた。けどリアルっぽさは少し薄れてしまった・・・?角度にもよるのかもしれないけど、まだ完璧には程遠い。

というわけで、いつしかリベンジを

今はこれが限度かなということで、ここまで。全部を並べてみるとこんな感じに。

全部並べてみた

こうしてみると、やっぱりblenderartistsのサイトにあった右から2つめの改良前 glass + glossy パターンが一番いいのかな。改良バージョンもモノによっては使えるかもしれない。

ライティング、勉強不足のパラメタや、ブレンドモードの影響など、まだよく理解できてないいろいろなパラメタの組み合わせもちゃんと設定したうえで奇跡の一枚ができるんだろうな。 いつかもう少し理解したらもっとリアルなガラスにトライしたい。

最後におまけで、Indirect LightingをBakeした状態の画像。これも理解してはいないけど、反射などをちゃんと計算してくれるもの、らしい。球体のエッジ付近などに、カラフルなスザンヌがしっかり映り込むようになっていて、よりリアル。