Blender 3.6 Geometry Nodes Simulationでプリンを揺らす
概要
Blenderのサイトにあるプリンの揺れるサンプルの中身を自分なりに解析して、まとめた
処理の大まかな流れ
サンプルは、Geometry NodesのSimulation機能を使って、プリンを揺らすアニメーションを作成している
最初にサンプルを見たとき、難しそうに見えたが、Simulationしている部分を抜き出すと、
Simulation Zoneで毎フレーム、「Velocityに加算する値」を計算して、Velocityに加算して、
Velocity分だけポイントの位置を変更しているだけである
以下、その流れである(サンプルをかなり編集した)
サンプルでは引き算で実現していたが、足し算に変更した、など
ノードの流れ
Curve LineでZ方向に5mのカーブを作る
Resample Curveで、カーブのポイントを5つにする
紫色の部分がSimulation Zoneで、毎フレーム実行される
Velocityという変数を作る
Scaleノードで、毎フレーム、Velocityを減衰させる
減衰させないと、永遠に揺れ続けてしまうため
「カーブのポイントの位置に応じた値」を計算して、毎フレーム、Velocityに加える
後ほど、詳しく解説するが、この処理が肝で、プリンの位置によって、異なる値にすることで揺れを表現できる
Set Positionで、毎フレーム、カーブの位置を変更する
Simulation Zoneを抜けた後、カーブをプリン型のメッシュに変更する
カーブからプリンのメッシュにする方法は、以下で解説した
プリンの揺れの仕組みの仮説
当たり前だが、単純にVelocityを使って、プリン全体の位置を変更するだけでは、揺れたように見えない
プリンが揺れるとき、以下に近い現象が起こっていると思われる
(正しい解説ではない)
以下の図で、お皿を右に移動させたときに、プリンの上部に比べて下部の方が強い力が加わる、上部は下部に比べて遅れて右に移動する
Geometry Nodeでプリンの揺れを実現する
現実世界では、プリンのあらゆる箇所で、異なる力が働いているはずだ
それをシミュレーションするには膨大な演算コストがかかる、サンプルでは上下方向の5ヶ所のみを計算している
これは、図1のResample Curveに設定した値である
以下の図のように、カーブの5つのポイントに対して、5ヶ所のVelocityを計算するようにする
(もちろん、これだと、上下方向を含む複雑な揺れを再現できない)
Velocityに加算する値を計算するノード
プリンは、Targetというオブジェクトの方へ移動する
「Targetの位置」から「プリンの位置」を引けば、「Targetに向かうベクトル」が計算できる
Normalizeして「Targetを指す方向ベクトル」にする(下図のDirectionと書かれた箇所)
Spline Parameterというノードでカーブのポイントが0から1で取得できるので、これを使って、カーブの終点に行くほど、小さくなるような値を作る(Intencityと書かれた箇所)
サンプルにあるIntencityの計算が、特定の物理法則に基づいているかは不明だが(プリン用の係数を使っている、など)
精度が求められるシミュレーションではないため、自分が好みになるように試行錯誤で値を変更すればよいと考える
カーブをアニメーションさせた様子
下部の方が早く動いて、上部が遅いので、上部が遅れてついてくるようになる
これで揺れを表現できる
メッシュに適用
カーブをもとにメッシュを生成すれば、
プリンが揺れているようなアニメーションを作ることができる
さいごに
少し駆け足になってしまい、不完全な部分も多いが、
少しでも何かの参考になれば、幸いである
Gemetry NodesのSimulationの基本を理解できたので、積極的に使ってBlenderでのアニメーションを楽しんでいく
この記事が気に入ったらサポートをしてみませんか?