【Unity】シェーダーグラフで電線を揺らす

投稿者: | 2023-12-18

シェーダーグラフを使って電線を揺らしました。今回は横方向に振り子のように揺らしてみます。

頂点カラーを設定

電柱と電線のモデルを作りました。電線はカーブをメッシュに変換しました。

揺れを制御するために頂点カラーを設定します。中央が最も揺れて端は全く揺れないようにしてみます。

電線だけを選択して、Vertex Paintモードにし、色を赤色にします。

Paint > Set Vertex Colors を選択すると、全体の頂点カラーが赤色になります。

編集モードで、X-Rayに切り替えて、先端の頂点だけを矩形選択します。

Vertex Paintモードにして、Vertex Selectionを有効にし、Set Vertex Colorsをクリックします。

先端が黒くなり、揺れなくなります。

もう片方の端も黒くして、端の近くの頂点は少し暗い赤にしました。これをUnityにインポートします。

電線はどれかの軸と平行にします。回転が中途半端な値のときは、Ctrl + Aから回転を適用します。

ウェイトペイント

Weight Paintを使って頂点カラーを設定することもできます。Weight Paintモードで「Gradient」ツールを選択し、「Weight」と「Strength」を1にして、「Radial」を選択します。

「Falloff」は「Sphere」にしました。

これで、電線の中央から外側にドラッグすると、端に向かって徐々に小さくなるようにウェイトを設定できます。

両端の頂点だけを選択し、「Weight」を0に変更し、「Vertex Selection」を有効にして、Weights > Set Weight で端にウェイトを設定します。

すべての頂点を選択し、Vertex PaintモードでPaint > Vertex Color from Weight をクリックすると、グラデーションのある頂点カラーが設定されます。

マテリアルを作成

電柱と電線をUnityにインポートして、Projectウィンドウで右クリックからシェーダーグラフを作成します。

シェーダーグラフを右クリックして、このシェーダーの設定されたマテアリルを作成できます。

マテリアルは電線にアタッチします。

シェーダーグラフを作成

今回は電線の横方向の揺れを作ります。真横の移動に真上の移動を合わせて、振り子のような動きにしてみます。

まず真横の動きを作りました。Timeノードと周波数をかけて、Sineノードに接続し、サイン波を作ります。

Sineノードに入力する前に位相を足しています。位相にはオブジェクト空間の位置をかけています。これで電線が蛇のようにくねくねと動くようになります。

電線に平行な軸はxで真上はz、横はyです。

位相とx座標をかけると、揺れが不自然です。

X
Y
Z

サイン波と頂点カラーの赤チャンネルをかけて、端では揺れないようにしています。

頂点カラーをかけた値を振幅とかけて、電線の横方向であるy座標の位置と足します。

この値がマスタースタックのPositionに接続されます。

振り子の動きを作る

頂点がもともと原点にあるとして、半径(r)だけ原点から上に移動した円上を移動させてみました。

この円の方程式は

円の下半分だけに限定すると

これで電線の頂点のz座標を計算してみました。

サイン波の出力と頂点カラーをかけた値を2乗して、半径の2乗から引いています。Square Rootノードで平方根を計算し、それを半径から引いています。

その値を振幅とかけます。

そして、位置のz座標に足して、最終的なz座標にしています。x座標はそのまま入力します。

これで電線を揺らせました。さらに波を足していくとリアルになると思います。

振幅や位相が大きいと断面が不自然に歪みます。

簡単な式を使う

振り子の動きの計算をもっとシンプルにして、同じような動きを作ってみます。

サイン波と頂点カラーをかけた値を2乗して、小さい値をかけています。

コメントを残す

メールアドレスが公開されることはありません。