Chapter 41無料公開

🍇 3Dモデルの変形 (頂点シェーダー)

かもそば
かもそば
2021.04.05に更新

このチャプターでは、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) を使うという手もあります。

https://learning.unity3d.jp/4429/

VATを利用することで、流体シミュレーションなどの複雑な表現をUnity上で扱うことができます。

※Houdiniなどの外部ツールが必要になります。