シェーダーグラフを使って電線を揺らしました。今回は横方向に振り子のように揺らしてみます。
頂点カラーを設定
電柱と電線のモデルを作りました。電線はカーブをメッシュに変換しました。
揺れを制御するために頂点カラーを設定します。中央が最も揺れて端は全く揺れないようにしてみます。
電線だけを選択して、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座標をかけると、揺れが不自然です。
サイン波と頂点カラーの赤チャンネルをかけて、端では揺れないようにしています。
頂点カラーをかけた値を振幅とかけて、電線の横方向であるy座標の位置と足します。
この値がマスタースタックのPositionに接続されます。
振り子の動きを作る
頂点がもともと原点にあるとして、半径(r)だけ原点から上に移動した円上を移動させてみました。
この円の方程式は
円の下半分だけに限定すると
これで電線の頂点のz座標を計算してみました。
サイン波の出力と頂点カラーをかけた値を2乗して、半径の2乗から引いています。Square Rootノードで平方根を計算し、それを半径から引いています。
その値を振幅とかけます。
そして、位置のz座標に足して、最終的なz座標にしています。x座標はそのまま入力します。
これで電線を揺らせました。さらに波を足していくとリアルになると思います。
振幅や位相が大きいと断面が不自然に歪みます。
簡単な式を使う
振り子の動きの計算をもっとシンプルにして、同じような動きを作ってみます。
サイン波と頂点カラーをかけた値を2乗して、小さい値をかけています。