見出し画像

Blender 3.6 Geometry Nodes Simulationでプリンを揺らす

概要

  • Blenderのサイトにあるプリンの揺れるサンプルの中身を自分なりに解析して、まとめた

処理の大まかな流れ

  • サンプルは、Geometry NodesのSimulation機能を使って、プリンを揺らすアニメーションを作成している

  • 最初にサンプルを見たとき、難しそうに見えたが、Simulationしている部分を抜き出すと、

  • Simulation Zoneで毎フレーム、「Velocityに加算する値」を計算して、Velocityに加算して、

  • Velocity分だけポイントの位置を変更しているだけである

    • 以下、その流れである(サンプルをかなり編集した)

    • サンプルでは引き算で実現していたが、足し算に変更した、など

図1 Geometry Nodesでシミュレーション処理をする部分

ノードの流れ

  • 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でのアニメーションを楽しんでいく

この記事が気に入ったらサポートをしてみませんか?