Unityシェーダーチュートリアル  ガラスの表現手法いろいろ

シェーダー

Unity シェーダー ガラス

こんなステージで作っていきたいと思います。

完全なBaked Lightmap、リアルタイムライトは無し。

 

 反射

ガラスに反射は必須なので Reflection Probe で反射を入れることになりますが、

よりガラスっぽく見せるためのコツがあります。

それは、反射素材に強烈な光源を入れる事です。

Unity シェーダー ガラス

 

 背面とのブレンド方法を乗算にする

赤いガラスを作ってみたいと思います。まず単純に Surface Shader の色を赤に変更すると。。。

全く変化がありません。

Unity シェーダー ガラス

 

これは、部屋のライティングが理由です。

冒頭で述べましたが、この部屋は完全にライトマップ化されており、

リアルタイムライトが1つもありません。

 

Surface Shader はライトに影響するシェーダーなので、

ライトが無い = 真っ暗 となり、いくら色を変更したところで画に影響が出ないのです。

 

そこでポイントライトを1つ置いてみます。

Unity シェーダー ガラス

ポイントライトで照らされている部分は赤くなりました。。。

ですが、これは求めている画ではありません。

 

学生の頃を思い出してみてください。洗脳の時代です。

英単語を暗記するために赤い透明シートを誰もが使っていたでしょう。

シート越しに景色を見ると、どんな色であっても全て赤くなっていたはずです。

 

色付きガラスは、背景に対してその色が乗算されていなければならないのです。

Unity シェーダー ガラス

まさにあの赤い暗記シートです。

これを実現するためにはシェーダーを Vertex / Fragment で記述する必要があります。

 

 

 両面を描画する

 

両面を描画する事によって、厚みがより分かりやすくなります。

内側の反射には色が乗り、強度を調整できるようにします。

Unity シェーダー ガラス

 

 

 カット面と角の透明度を下げる

カット面と角の透明度を下げることによって、

さらに厚み感や、ガラスとしての存在感が増します。

 

テクスチャでの描き分けはUV展開の必要があり面倒なので

頂点カラーをマスクとして利用します。以下の記事が参考になります。

 

Unity シェーダー ガラス

Unity シェーダー ガラス

 

 

 側面の透明度を下げる

光が目に届くまでにガラス内を通る距離や、屈折による影響等で、

面がカメラに正対していない箇所が暗くなることがります。

 

物理的に正しい計算をさせるのは無理ですが、

擬似的に表現してあげることで、よりガラスらしくなります。

Unity シェーダー ガラス

 

 

 カメラ空間法線による屈折

塊状のガラスは屈折を入れることでよりガラスらしさが出ます。

 

上記記事ではノーマルマップを使って擬似屈折させていますが、

今回はカメラ空間法線を使って擬似屈折させてみます。次はこんなシーンでやっていきます。

Unity シェーダー ガラス

 

カメラ空間法線とは・・・これです。

Unity シェーダー ガラス

面がカメラに正対していれば(R:0.5, G:0.5, B:1.0)となり、

横にズレていれば、R が 0 ~ 1

縦にズレていれば、G が 0 ~ 1

の値をとります。

 

このズレている箇所、つまりカメラに正対していない部分に

擬似屈折を入れることで、平面的な塊ガラスの厚み感を表現します。

角部分はさらに屈折を大きくします。

Unity シェーダー ガラス

Unity シェーダー ガラス

 

 

物理的には屈折や全反射によって景色が反転して見えたりもするので、

GrabPassで取得した背景を左右反転させてみるのも良いかもしれない。

 

あくまでも擬似的な方法なので実際の塊ガラスの見た目とはかなり違いますね。

ただ、雰囲気としては良いのではないでしょうか。

Show Comments0

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)