この記事ではAmplify Shader Editorを用いて、モデルのメッシュを雪で覆うようなシェーダーを作る方法を紹介していきます。
このように、メッシュの全体ではなく上面だけが雪で覆われているような表現です。
Amplify Shader Editorの使い方
まだAmplify Shader Editorの使い方をご存知ない方はこちらの記事をご覧ください。
事前準備
シェーダー制作前の事前準備をします。
新規にシーンを作成し、床である一枚のPlaneを配置しました。また、床の上には今回制作するシェーダーを適用する二つのモデルを配置しました。
この記事ではデフォルトのCubeとSphereを利用していますが、自分で3Dモデルやテクスチャを用意出来る場合はそちらを利用することも可能です。
シェーダーを新規作成する
では、シェーダー本体を作っていきます。
Unityのプロジェクトウィンドウ上で右クリック、Create>Amplify Shader>Surfaceを選択することでAmplify Shader Editorの新規ファイルを作成できます。今回は”SnowCover”という名前で作成しました。
モデルを雪で覆うシェーダーを作る
マスクの制作
初めに、モデルのテクスチャと雪をどれぐらいの割合でブレンドするか決めるためのマスクを制作します。
マスク制作部分の全体像はこのようになっています。
メッシュの上面だけが雪で覆われているような見た目にしたいので、メッシュの法線情報を利用します。このような表現を行う場合はノーマルマップとWorld Normalノードを組み合わせて使います。
ノーマルマップを利用する場合、Texture Sampleノードの設定をノーマルマップ用に変更する必要があります。 Default TextureをBumpに変更し、Unpack Normal MapとAttributes欄のNormalにそれぞれチェックを入れます。また、ノーマルマップの強度の調整用に-1〜1の範囲のスライダーを接続します。
その後はノーマルマップをWorld Normalノードに接続しました。 また、このノーマルマップは後でOutput NodeのNormalに接続して利用するため、Register Local Varノードに接続し、変数として保存しておきます。
ノーマルマップをWorld Normalノードに接続したら、Y方向のみを出力してAddノードに接続します。また、覆う雪の量を調整出来るようにするため、AddノードにはFloatノードも接続しておきます。
その後マスクの見た目をシャープにする処理を加えてマスク部分は完成です。Register Local Varノードを用いて変数として保存しておきます。
制作したマスクを使って、テクスチャと雪をブレンドする
二種類のノードのブレンドにはLerpノードを利用します。
LerpノードのAポートにTexture Sampleノードを、BポートにColorノードを接続します。 ブレンドの割合を決定するAlphaポートには先ほど作成したマスクを接続します。Register Local Varノードを用いて保存した変数はGet Local Varノードで呼び出せます。
最後にLerpノードをOutput NodeのAlbedoに、変数として保存したノーマルマップをNormalに接続してシェーダーは完成です。
モデルを雪で覆うシェーダーが完成
マテリアルを新規作成し、SnowCoverシェーダーを適用しました。 テクスチャはSubstance Painterを利用して作成しました。
モデルの上面だけが白くなっている様子が確認できます。
また、SnowPositionパラメーターで雪の量を、NormalScaleでノーマルマップの強度をそれぞれ調整できます。
この記事ではAmplify Shader Editorを用いてモデルを雪で覆うようなシェーダーを作る方法を紹介しました。
Lerpノードを用いたテクスチャやカラーのブレンドは利用する機会が多く、使いこなせるとさまざまな表現ができます。
Amplify Shader Editorはノードベースのシェーダー制作ソフトなので、ブレンドの結果やパラメーターの調節具合をエディタ内でリアルタイムに確認出来るのも魅力的ですね。
STYLYにアップロードする
シェーダー付きの3DモデルをSTYLYにアップロードする手順は以下です。
- UNITY PLUGIN FORSTYLYをインポートする
- シェーダー付きの3Dモデルをプレハブにする
- プレハブをSTYLYにアップロードする
UnityからSTYLYにアセットをアップロードする方法の詳細は下記をご確認ください。