Unityシェーダーチュートリアル ガラスの表現手法いろいろ
シェーダー
こんなステージで作っていきたいと思います。
完全なBaked Lightmap、リアルタイムライトは無し。
反射
ガラスに反射は必須なので Reflection Probe で反射を入れることになりますが、
よりガラスっぽく見せるためのコツがあります。
それは、反射素材に強烈な光源を入れる事です。
背面とのブレンド方法を乗算にする
赤いガラスを作ってみたいと思います。まず単純に Surface Shader の色を赤に変更すると。。。
全く変化がありません。
これは、部屋のライティングが理由です。
冒頭で述べましたが、この部屋は完全にライトマップ化されており、
リアルタイムライトが1つもありません。
Surface Shader はライトに影響するシェーダーなので、
ライトが無い = 真っ暗 となり、いくら色を変更したところで画に影響が出ないのです。
そこでポイントライトを1つ置いてみます。
ポイントライトで照らされている部分は赤くなりました。。。
ですが、これは求めている画ではありません。
学生の頃を思い出してみてください。
英単語を暗記するために赤い透明シートを誰もが使っていたでしょう。
シート越しに景色を見ると、どんな色であっても全て赤くなっていたはずです。
色付きガラスは、背景に対してその色が乗算されていなければならないのです。
まさにあの赤い暗記シートです。
これを実現するためにはシェーダーを Vertex / Fragment で記述する必要があります。
両面を描画する
両面を描画する事によって、厚みがより分かりやすくなります。
内側の反射には色が乗り、強度を調整できるようにします。
カット面と角の透明度を下げる
カット面と角の透明度を下げることによって、
さらに厚み感や、ガラスとしての存在感が増します。
テクスチャでの描き分けはUV展開の必要があり面倒なので
頂点カラーをマスクとして利用します。以下の記事が参考になります。
側面の透明度を下げる
光が目に届くまでにガラス内を通る距離や、屈折による影響等で、
面がカメラに正対していない箇所が暗くなることがります。
物理的に正しい計算をさせるのは無理ですが、
擬似的に表現してあげることで、よりガラスらしくなります。
カメラ空間法線による屈折
塊状のガラスは屈折を入れることでよりガラスらしさが出ます。
上記記事ではノーマルマップを使って擬似屈折させていますが、
今回はカメラ空間法線を使って擬似屈折させてみます。次はこんなシーンでやっていきます。
カメラ空間法線とは・・・これです。
面がカメラに正対していれば(R:0.5, G:0.5, B:1.0)となり、
横にズレていれば、R が 0 ~ 1
縦にズレていれば、G が 0 ~ 1
の値をとります。
このズレている箇所、つまりカメラに正対していない部分に
擬似屈折を入れることで、平面的な塊ガラスの厚み感を表現します。
角部分はさらに屈折を大きくします。
物理的には屈折や全反射によって景色が反転して見えたりもするので、
GrabPassで取得した背景を左右反転させてみるのも良いかもしれない。
あくまでも擬似的な方法なので実際の塊ガラスの見た目とはかなり違いますね。
ただ、雰囲気としては良いのではないでしょうか。
[…] Unityシェーダーチュートリアル ガラスの表現手法いろいろ | Tsumiki Tech Times […]
[…] ビー玉のデザインはガラス調を出すため、「Tsumiki Tech Timesさんのシェーダー」を使うこと […]
[…] Unityシェーダーチュートリアル ガラスの表現手法いろいろ | Tsumiki Tech Times […]