このチャプターでは、ShaderGraphで3Dモデルを変形させる方法について解説します。
頂点シェーダー
VertexコンテキストのPositionを利用することで、3Dモデルの頂点座標を変更できます。
これを利用することで、3Dモデルを変形させる表現を作ることができます。
活用例
頂点シェーダーを利用することで、3Dモデルを波打たせる・膨らませるといった表現を作ることができます。
3Dモデルをうねらせる
板を波打たせる
3Dモデルを膨らませる
例1. モデルを半分につぶしてみる
モデル頂点のX座標を0.5倍してみましょう。
結果
3Dモデルが半分につぶれます。
モデル頂点のX座標が0.5倍されたため、このような結果になります。
例2. モデルを膨らませる
3Dモデルの頂点に法線ベクトル(Normal Vectorノード)を足します。
結果
3Dモデルの頂点が法線方向へ移動し、3Dモデルが膨らんだような形になります。
頂点の法線がバラバラな3Dモデルに対してシェーダーを適用した場合、メッシュが散らばってしまうので注意してください。
膨らみ具合をコントロールする
膨らみの大きさをコントロールしたい場合、Floatプロパティを作成してNormalに乗算します。
Floatプロパティの値を増やすと膨らみ、小さい値を設定すると縮みます。
例3. モデルをうねらせる
ノイズを乗算した法線ベクトルを使って3Dモデルを膨らませる、ノイズを時間でスクロール移動させると、モデルをうねらせることができます。
結果
例4. 板モデルを波打たせる
モデル頂点にSineウェーブを加えることで、板メッシュを波打たせることができます。
結果
好きな方向へ波打たせる
内積を利用すると、好きな方向へ向かうグラデーションを作ることができます。
(1, 0, 1)方向へ向かうグラデーションで波を作る
座標とベクトル(1, 0, 1)の内積を取った場合、 (1, 0, 1)の方向へ向かうベクトルになります。
結果
(1, 0, 1)の方向へ向かう波になります。
内積でグラデーションを作るテクニックは 🍎 Dot Productノード でも紹介しています。
例5. 3Dモデルを球に変形
3Dモデルの頂点座標にNormalizeを適用すると、頂点座標の長さが1になるので球になります。
MorphというFloat型のプロパティを定義しています。
Morphプロパティを1に近づけると、3Dモデルの形状が球体に近づきます。
変形の中心座標を指定する
変形の中心座標を設定したい場合は、Vector3型のプロパティを定義して、以下のようなShaderGraphを組みます。
例6. 3Dモデルを立方体に変形
頂点座標にNormalizeとClampを適用することで立方体にすることができます。
その他 : VAT (頂点アニメーションテクスチャ)
VAT (Vertex Animation Texture) を使うという手もあります。
VATを利用することで、流体シミュレーションなどの複雑な表現をUnity上で扱うことができます。
※Houdiniなどの外部ツールが必要になります。