ガラスは光を透過し、内部で屈折し、また反射を生じるため、リアルなガラスを表現するにはいくつかのシェーダー技法を駆使する必要があります。この記事では、Blenderでリアルなガラスの表現を作るために役立つシェーダーノードの使い方を解説します。
リアルなガラス表現について詳しく知りたい初心者~中級者向けの記事です。
難易度
ガラスを表現する設定のみ見たいという方は、ガラスの基本的な特徴などのセクションを飛ばして「EEVEEでガラス表現」「Cyclesでガラス表現」にお進みください。
ガラスの基本的な特徴
ガラスには以下の特徴があります:
- 反射:ガラスの表面は反射を生じ、周囲の環境を映し出します。
- 屈折:ガラスは透過する光を屈折させ、物体の後ろにあるものを歪ませて見せます。
- 透明性:ガラスは透明で、光が通過することができます。
- 光の散乱:特に厚みのあるガラスの場合、光がわずかに拡散して見えることがあります。
Cyclesレンダリングの場合はGlass BSDFを使えば、比較的リアルなガラス表現が簡単にできますが、簡略化された方法で表現しているEEVEEレンダリングでは透明性が表現できず、屈折も正常にレンダリングできません。これらの要素を表現するため、ライトプローブを使ったり、自分で適切なシェーダーを組み合わせる必要があります。
反射や屈折など光の進み方について簡単に解説した記事↓
EEVEEとCyclesのレンダリングの違いについて解説した記事↓
これらの知識があると、よりリアルなガラス質感の作り方について理解が深まるかと思います。
EEVEEでガラス表現
ガラスには反射・屈折・透明性などの特徴がありますが、EEVEEのデフォルト状態では反射や透明をうまく表現することができません。(屈折させることはかなり難しいです)
- 中が詰まっているガラス
- Glass BSDFノードを使います
- コップなど、厚みのあるガラス
- 複数のノードを使って反射・透明性を表現
ガラスの厚さ、種類によって表現の仕方が異なります。

❶中が詰まっているガラス
右図はデフォルトでGlass BSDFノードをつけただけの状態です。床や壁があるのに無視されてHDRI背景画像のみを屈折させています。
四角いライトを置いているのですが、ライトの反射はしているようです。

周囲を反射・屈折させる
周囲の景色を反射・屈折させるために
- レンダープロパティでRaytracingにチェックを入れます。(反射した画像の解像度を上げたいときはResolutionを1:1に上げます)
- マテリアルプロパティでRender Method が Ditheredになっていることを確認し、Reytraced Transmissionにチェックを入れます。
これで少し周囲の景色が反射・屈折されるようになりましたが、床や、隣のオブジェクトをうまく屈折できていません。床のチェック模様が全く映っていません。

ライトプローブ設置(反射・屈折を改善する)
うまく表現できていないのはEEVEEの屈折が疑似的な計算をしているためらしいのですが、これを改善するためにLight Probe(ライトプローブ)をおくことで、周囲の画像データをより正しく補完できます。
- Shift + AでLight Probe >Sphereを追加します。
映り込みを綺麗に見せたいオブジェクトの中心に持っていきます。 - 全体のシーンが入るように、または、映ってほしい周囲のオブジェクトが入るようにLight Probe Sphereを拡大縮小します。
この段階でうまく周囲が映っていればいいですが、大体は白い円のようなものが見えておかしくなっていると思います。
どこまでをキャプチャするか設定することで多少改善します。

ライトプローブのプロパティで、まずViewport DisplayのClippingにチェックを入れると、どこまでキャプチャするかの線が見えるようになります。
あとはClipping Startをオブジェクトに触れないギリギリくらいに設定、Endをライトプローブより広めに設定しておきます。

※立方体や四角いオブジェクトの場合はTypeでBoxも選択できます。

これで、ある程度自然な屈折が表現できたと思います。向こうにある緑の立方体もちゃんと屈折してます(完璧ではないですが…)
❷コップなど、厚みのあるガラス
※❶のときと同様に以下の設定をしておきます。
- レンダープロパティでRaytracingにチェックを入れます。(反射した画像の解像度を上げたいときはResolutionを1:1に上げます)
- マテリアルプロパティでReytraced Transmissionにチェックを入れます。


Glass BSDFを使うと、全く透過せず、コップに見えないので今回はGlass BSDFは使いません。
ガラスの反射・透過した部分を作るために、透過にTransparent BSDFノード、反射にGlossy BSDFノードを使用して疑似的にガラスの質感を再現します。Mix Shaderで合成し、その割合はFresnel(フレネル)ノードを使います。
ポイント:Fresnelの値を下げ、中央部分の反射が弱いのでAddノードなどで少し数値を足す
Glossy BSDFの色は真っ白にした方がクリアな色になります。

ここで、若干ガラスが粉っぽく(白っぽく)なってしまうので、マテリアルプロパティのRender MethodをBlendedに変更します。
Blended/Ditheredは最終的に右下のように差が出てくるんですが、好みなのでDitheredのままでいいという人はそのままでもいいです。
自分はBlendedの方がクリアでいいなと思いましたが、シーンによっては変わってくるかもしれません。


※Blendedにするとレイトレーシングの反射が効かなくなりますが、ライトプローブを設置すれば反射するようになります。
反射・屈折の改善のためにライトプローブを設置する
❶中が詰まったガラスを作成したときと同様に、ライトプローブを設置してください。
詳細については❶で書いているので参照してください。

これで大体綺麗な屈折にできたと思います。若干反射で映ったガラス部分がざらついていますが、気になる方は下記の改善策などやってみてください。

EEVEEのガラス表現を改善する
ガラスの反射で映った画像ですが、デフォルトではLight Probeの解像度が低いので近くで見るととても荒いです。シーンプロパティ > Light Probes > Spheres Resolutionで解像度を上げることができます。ズームで映す必要がないときは低くても問題はありません。

レイトレーシングの解像度
レイトレーシングの機能を使って表現する反射、屈折、間接光はレイトレーシングの解像度を上げることで画質を上げることができます。
レンダープロパティのRaytracingのタブを開いてResolutionを調節します。1:1にするほど画像がクリアになります。


マテリアル設定
- Transparent Shadows
- 透過している部分は影がうすくなってくれます
- Render Method
- Dithered…ざらざらしたノイズのある質感
- Blended…画質が綺麗になるが反射ができない
- Raytraced Transmissionにチェック
- 反射をよりクリアにする
- Thicknessを選択
- Glass BSDFのときにオブジェクトが塊か板状のものかを選択

コップの表現
角度を変えると段々ガラスが透過しなくなっていったりしますが、サブディビジョンサーフェスで一回か二回割ると改善しました。
あとCyclesの方でも言ってますがベベルでおかしくなるときはループカットを入れるといいです。

Cyclesでガラス表現
Cyclesはパストレーシングという手法を使用しているため、反射、屈折、透過などが自動的に処理されます。そのため、ガラスのような素材を表現する際には、Glass BSDFノードを使うだけで簡単に表現できます。
デフォルトの状態のノードをつなぐだけでもかなり綺麗なガラスを表現できます。
更に細かい調節をしていきたい方は下記のノード設定やレンダー設定などをご覧ください。

Glass BSDF ノード設定
Distribution(分布)
ガラス表面にある微細な凹凸(マイクロファセット)の分布モデル
- Beckmann(Cyclesのみ)…コントラストがつきがち?
- GGX…標準な分布
- Multiscatter GGX…複数の散乱を考慮するのでGGXより暗くなりにくい

比べてみましたが、ラフネスを上げて暗くしないとほぼ違いがわからないのと、レンダリング時間もそんなにかわりませんでした。BeckmanがGGXより若干早かったですが、あんまり変わらないので、リアルにしたければMultiscatter GGXを選べばいいと思います。

Color(色)
RGBで設定でき、ガラスに色をつけることができます。
クリアにしたいときは真っ白に設定すればOK

Roughness(ラフネス)
Roughnessを変化させると、表面の粗さが荒くなるので摺りガラスみたいになります。

IOR(屈折率)
透過する屈折率も変化しますが、表面の反射率も変化しています。
IORの数値が大きいほど(物質によって決まっており1.0~3.0くらいまで)反射が強くなります。
普通のガラスはIOR:1.5~1.52です。

IORが1のとき反射も屈折もせず光は透過します。光学迷彩のように透明になります。
厚み
右側の球にSolidifyで厚みを入れています。
厚みなしの球は屈折してあちらが見えている像が反転していますが、厚みありの球では中身が空洞になったように中心部分はそのまま屈折しています。

メッシュの状態を変えることで、水晶玉や、中身が空洞のガラスなのかも表現できます。
その他のノードの組み合わせ
反射と屈折ノードのミックス
Cyclesの場合、反射(Glossy BSDF)と屈折(Refraction BSDF)を分けることもできます。Fresnelノードで、どこで反射・屈折する割合が高いかをMix ShaderのFacに入力すれば、Glass BSDFノードと同様な結果が得られます。

Fresnelノードの値を調整することで、反射や屈折する場所、強さを自由に調整でき、反射と屈折のノードを分けているのでそれぞれ別々に調整することもできます。
Principled BSDF
Principled BSDFノード単体でも同様の結果を得ることができます。
Transmissionは、マテリアルの透過性を表す値で、1に近づけると透明になります。ただし、これ単体では屈折角を制御することはできず、屈折の強さは別にあるIORによって決まります。つまり、Transmissionは「どれだけ透かすか」、IORは「どれだけ曲げるか」をコントロールします。
クリアな色にしたい場合は真っ白にします。

Cyclesで表現しづらいもの
コースティクス
コースティクスとは、光が反射・屈折して集まり、明るい模様を作る現象です。
水の入ったコップの影や水面の下にできる綺麗な模様などでよく見られます。

Cyclesでも右図くらい綺麗なコースティクスを出すことに成功しました。
設定方法やコースティクスについての解説記事を書きましたので、コースティクス作ってみたい!という方は読んでみてください。
