2023-02-28

人魚をジオメトリノードで泳がせる【Blender/Geometry Nodes】

人魚を泳がせる作例を作ったのでノードや参考にした情報などを記載。

Article Image

作ったもの

今回の作例。

CGモデル、背景シーンなど殆どを自作した。

音楽も過去に自作した曲のインスト版((53) 【初音ミク】 アクアノート1/f - YouTube)

今回はこの「モーション」の部分が先人の知恵を参考にさせていただいているので紹介する。

簡易解説まで

非常に難しいノードの組み方であり、上級者向け作例。

細かいところをやろうと思うと文章では説明しきれないので簡易解説に留める。

アルゴリズムのベースは参考動画にあるためそちらを見て守らたらと思う。

参考にした動画

次の2つの映像がとても参考になった。

この場を借りて素晴らしい動画をありがとうございました。

この手法の基本概念とデメリット

この手法はパーリンノイズがなめらかなカーブを描いたノイズであることを利用している。

キャラクターの各頂点の位置をこのノイズをつかってずらすことにより、波を描くのでまるで泳いでいるかのようなモーションを作ることが出来る。

デメリット

例えば頭側に大きな動きがあった場合、尻尾側にその動きが伝わるのはアルゴリズム上で少し後になる。

これはボーンを使ったアニメーションではないので頭が大きく動いた分、一時的に尻尾との距離も大きく離れることを意味する。

つまりメッシュが伸びてしまう。

コレに関しては金魚を選んだのがナイスアイデアで、尻尾がひらひらしており伸縮してもあまり目立たなくなる。

私の人魚の作例ではこの伸びがかなり目立つため、補正するアルゴリズムを追加した。

使ったノード

作ったノードを貼り付けておく(クリックで拡大)

ノード1

ノード2

調整がやりやすくなるようにDivideが分けられていたり、整理していないので見にくいが参考になれば。

前半の画像が人魚用にタテに体を動かす改造。

後半がメッシュの伸縮を補正するために独自に追加した箇所。

頭の位置を0に補正?

単純に伸縮と言っても原点がどこかによって伸縮する割合が代わる。

色々試した結果、腰より上が伸縮するのが最も気持ち悪く感じるようで、原点を尻尾に置いて頭から一気に潰すのが最適に思えた。

ただ、そうすると原点が尻尾にあるので、その分伸縮した時に頭がの位置が移動してしまう。

このノードでは、頭を起点にモーションを生成しているので頭の位置が変わってしまうとアニメーションがおかしいことになる。

そこで一度伸縮した後、頭の位置を元に戻す補正を行っている。

やり方によっては他の方法があるかもしれないが、参考まで。

2枚目のCurve Lineを使っている理由は?

体の中央にボーンのようなカーブを入れて、それを一旦人魚と同じアルゴリズムで変形している。

その後Lengthを取ることでどれだけ伸縮したかの数値を計算している。

Bounding Boxノードは何をしている

Bounding Boxは人魚がぴったり入る箱を生成している。

これのX軸の長さをとることにより正確に人魚の身長が分かる。

ZではなくXにしているのは、泳ぎモーションを作るため、先に人魚を寝かせているため。

以上

この作例に関しては文字での解説は限界があるためここまでとさせて頂くことにした。

このようにパーリンノイズから抽出できる「波」は様々な応用ができそうだ。

またなにか思いついたら作例にしたい。



この記事をシェア


謎の技術研究部 (謎技研)