eeveeでリアルなガラスを作ってみたい
ガラスの表現を覚えてみたいと思い、試してみた。結論から言うとあまり成功!という結果にはならなかった。本物っぽさがまだ表現できなてない。
撮影環境を準備
まずは、撮影の土台とカメラ・ライトを用意。土台はよくあるL字型の板、ライトは Sun
で強さを 10
にした。カメラは真正面から撮ることにする。
WorldのBackground
は、Environment Texture
にして適当なHDR画像を設定。HDR画像をのしくみはまだよくわかってないけど、何気にこのHDRの質が最終のできを左右することにもなるので、良い画像を選んだほうがよい。
オブジェクトは当然グラス。点を適当にうっていって、Screw
とSubdivision
のモディファイアを適用したものを用意。あわせて、玉とスザンヌにも適用してみることにした。
オブジェクトを透過させる設定
Eeeveeで反射や屈折、つまり水とかガラスみたいな表現をするには、Screen Space Reflection
というのを使う必要があり、デフォルトでオフになっているので、これを有効にする。
有効にするのは2ヶ所。1つはレンダータブの Screen Space Reflection
のチェックボックスと、それを開いたところにある Refraction
をオンにする。
もう1ヶ所はマテリアルごとにつける必要がある。マテリアルタブのSettings
にあるScreen Space Reflection
をオンにする。あと、ついでにBlend Mode
を Alpha Hashed
にした。実はこのブレンドモード、よくわかってない。そのうちちゃんと調べてみたい。
いくつかマテリアルを作って試してみる
principled BSDF
まずは、デフォルトの principled。ぼくの認識では、正確な物理計算でいい感じのマテリアルをパラメタの組み合わせで作れるもの。なのだけど、やっぱりこれだけで何でもできるわけではなさそう。
さておき、ガラス表現なので、透過するためにTransmission
を1.000
にして透過し、Roughness
を0.000
にしてつるつるにする。IORは、ガラスがだいたいデフォルトの1.45
らしいのでそのまま。
ただガラスを写すとわかりづらいので、後ろにカラフルスザンヌを置いてみた。するとこんな感じ。
カクカクした透明スザンヌなんかは割と良さげに見えるし、屈折感も出てるけど、本物感には程遠い。
glass BSDF
そもそも、Blenderにはglass BSDF
っていう、そのものが用意されているじゃないか。これを使ってみよう。
principledの代わりにglassにしてみた。IOR(屈折率)は、屈折しすぎると不自然に見えたので、0.95
としてある。で、こんな感じ。
透過性がよくなったのはIORをいじったせいか。エッジ部分も少し濃くなってフレネル効果(というの?)も出ているように見える。最初のよりよくなった。principled の時と比べると、こちらがガラスだとすれば、さっきのはクリスタルという感じ。
principled + transparent
メタリック設定したシェーダーと透過シェーダを組み合わせて表現する方法があるらしい。transparent BSDF
とprincipled BSDF
をmix shader
でつなげる。principledには、Metallic
を1.000
(完全メタル化)する。Transmission
の値は0.000
のままでOK、関係しない。
さらにmix shader
のfac
(係数)にはInput
にあるFresnel
のノードをつなげるとよいみたい。Fresnel
の加減は、間にRGB Curves
をはさむことで調整する。できたノードはこんな感じ。
で、レンダリングするとこうなる。
お。それっぽい感じになった。・・・なった?全体的に暗めになってしまったけども、グラスはまぁまぁいい感じにも見える。球はまわりの暗い部分が極端すぎる感じがする。パラメタの調整でなんとかなるレベルなんだろうか。
glass + glossy
ここからが本命。eevee でガラスを作ろうと調べるとこのページにたどりつく。
英語はよくわからないけども、途中にノードの画像があり、これがガラスのシェーダーとしていい感じだよ!という内容ぽい。ページに貼られている画像を見ても、どれもすごい。とりあえず全く同じパラメタで試してみる。
この glass とか glossy の代わりに、principled BSDF
を使っても良い気がするのだけど、こちらの方がシンプルでわかりやすいといえばわかりやすい。考え方は一つ前の、メタリック+透過の組み合わせと一緒なのかなと思う。レンダリングするとこうなった。
おぉ、反射もいい感じに入って、それっぽさが増した。一番いい感じに見える。でも、正直、オリジナルページにあるガラス感は全然出しきれてないのは、ライティングや環境マップの設定などがうまくいってないせいなのかな。
もう少しパラメタをいじってみる。全体的に暗い部分が多い気がするので、フレネル効果の影響を減らすために、fresnel
のIORを少し1.000
に近づけて、glass BSDF
はもう少し歪みをもたせてもよさそうなので、1.000
から離す。あと、glossy BSDF
のRoughness
は、数値をあげると、くすみはじめるけどそこがテカってきたので、少しだけ数値を設定してみた。
で、結果。
うん、濃すぎる状態は解消できた。けどリアルっぽさは少し薄れてしまった・・・?角度にもよるのかもしれないけど、まだ完璧には程遠い。
というわけで、いつしかリベンジを
今はこれが限度かなということで、ここまで。全部を並べてみるとこんな感じに。
こうしてみると、やっぱりblenderartistsのサイトにあった右から2つめの改良前 glass + glossy パターンが一番いいのかな。改良バージョンもモノによっては使えるかもしれない。
ライティング、勉強不足のパラメタや、ブレンドモードの影響など、まだよく理解できてないいろいろなパラメタの組み合わせもちゃんと設定したうえで奇跡の一枚ができるんだろうな。 いつかもう少し理解したらもっとリアルなガラスにトライしたい。
最後におまけで、Indirect Lighting
をBakeした状態の画像。これも理解してはいないけど、反射などをちゃんと計算してくれるもの、らしい。球体のエッジ付近などに、カラフルなスザンヌがしっかり映り込むようになっていて、よりリアル。