はじめに
今回はシェーダーグラフを使用して霧を表現する方法を紹介します。
環境
Unity2018.3.11f1
Lightweight RP - Version 4.1.0(Preview)
シェーダーグラフ作成
カメラの目の前に置いた板ポリに、上記のシェーダーグラフから作成したマテリアルを適用することで霧がかかったような画面になります。
シェーダーグラフ解説
1. 深度情報(Depthバッファ)の取得
Texture2Dパラメータを定義し、Reference = _CameraDepthTexture
と指定するとカメラの深度情報をテクスチャとして取得できるようになります。
補足 : _CameraDepthTexturesを使用するための準備
_CameraDepthTexture
を使用するためにはLWRPのパイプラインアセットにてDepth TextureのチェックをONにする必要があります。
深度情報のサンプリング
深度情報のテクスチャはScreenPositionを使ってサンプリングして色を取得します。
2. 深度情報を画面に出してみる
ここで、Sample Texture 2Dの出力をUnlit MasterノードのColorと接続し、深度情報を画面に表示してみます。
カメラから近いオブジェクトほど白く、遠いオブジェクトほど黒くなっていることが確認できます。
3. 深度情報をアルファ値として使ってみる
ここで、深度情報をUnlit Masterのアルファ値として使用してみます。
若干分かりづらいですが、手前にあるオブジェクトが白っぽくなりました。
深度情報をアルファ値として利用しながら白色が半透明描画されているため、このような見た目になっています。
4. Smoothstepを使って深度情報を加工してみる
補足 : smoothstepの出力値について
smoothstepは以下のようなグラフを描きます。
・入力値xが0~0.1で値0~1を出力
・入力値xが0.1より大きい部分では常に1を出力
5. 深度情報を0~1反転させてみる
OneMinusノードを使って深度情報の0-1を反転させてみます。
6. Smoothstepのパラメータを変えてみる(完成)
これまではSmoothstepのパラメータとして、Edge1 = 0, Edge2 = 0.1を入力していましたが、
Edge1 = 0.02, Edge2 = 0.05 としてみます。
7. 色を変えてみる
Unlit MasterノードのColorに黒をすると夜っぽい雰囲気になります。
8. 色を薄くする
アルファ値に入力している深度情報に1より小さい数値を乗算すると、霧が薄くなります。
9. 色をパラメータ化する
実際に利用する場合、霧の色はプロパティとして定義しておいたほうが良いでしょう。
使用アセット
Mega Fantasy Props Pack
https://assetstore.unity.com/packages/3d/environments/fantasy/mega-fantasy-props-pack-87811