Unity Shader Graphで平面を地形に変形させてみた。

はじめに

Unity version 2018から使えるShader Graph機能ですが、
Unity version 2018.2からマスターノードにPositionが追加され、
頂点シェーダーの機能が使用できるようになりました。
頂点シェーダーは、オブジェクトの各頂点に対して参照・変換ができ、オブジェクトの変形や回転などが可能になります。

そこで今回、Unity Shader Graphの勉強として平面から地形を作ってみました。

環境

・macOS Sierra 10.12.6
・Unity version 2018.2.1f1

プロジェクト作成からShader適用まで

・Lightweight RP(Preview)でプロジェクトを作成します。
・Shaderを適用するオブジェクトの作成
・Create -> Shader -> PBR Graph作成
・Shader GraphファイルからCreate -> Material作成
・Materialをオブジェクトにアタッチする。

今回使ったノード

・Simple Noise:単純なノイズ
・Remap:入力の値を再設定する。
・Multiply:乗算
・Split:入力を4つの出力R、G、BおよびAに分割する。
・Position:メッシュ頂点またはフラグメントの位置へのアクセス

↓各Nodeの役割については、こちらのサイトに詳しく書かれています。↓
https://github.com/Unity-Technologies/ShaderGraph/wiki/Node-Library

実装について

頂点座標の操作:
 ・Positionで各頂点座標を取得後、Splitでx, y, z座標に分割
  →x, z座標はそのままVector3に繋ぐ。
  →y座標はSimple Noiseに基づいた値を繋ぐ。

色の操作:
 ・Simple Noiseでノイズ生成後、Vector3のxに繋ぐ。
 ・Simple Noiseでノイズ生成後、Remapで0~1を1~0に反転させて、Vector3のyに繋ぐ。
  →ノイズ0~1が緑~赤といった感じになります。

これにより、頂点座標の操作と色の操作で同じSimple Noiseを使っているため、
y座標が高いと赤く、低いと緑色になります。

最終的なShader Graph

ShaderGraph_map_Node 

実行結果

ShaderGraph_map_Run

●この記事を書いた人