Blender:同じ形状を探してリンク

インスタンスを保持(Preserve Instances)せずに書き出されたFBXファイルをBlenderで読み込んでインスタンス(Meshデータブロックのリンク)を復元してみるテストです。

Meshの同一性の比較として、頂点数、エッジ数、フェース数とバウンディングボックスが一致しているかどうかを比べています。無理やりhashを取得して比較のほうが良いかもしれませんが。

以下、スクリプトのサンプルです。

続きを読む “Blender:同じ形状を探してリンク”

Blender: 放物運動と寿命と

Geometry NodesのSimulation Zoneの使い方ようやく使い慣れてきました。今日は前回よりも簡単にパーティクルが重力を受けて放物運動をするだけのサンプル。寿命で消滅もします。

速度や寿命などはSimularion Zone(SimZone)に入れる前にStore Named Attributeでポイントに書き込んでおくだけ、あとはSimZone内で取り出してアップデートするなり、計算に使うなりします。

SimZone内で大事な事はポイントの位置を変更するなら、

オフセット(m)=速度(m/s)x時間(s)

速度をアップデートするなら、

次フレームの速度(m/s)=現在の速度(m/s)+重力(m/s2)x時間(s)

と単位に気を付けて加工していけば結線に迷わないと思います。単位というより「次元」ですね。

衝突とかはRayCastやSample系のノードで何とかする必要があるようです。Simulation ZoneのDelta Timeはシーンのフレームレートに依存しますが、サブステップが無いのは精度を上げられ辛くて困りますね。


Blender GeoNodes: Plexus

Animation Nodesでできてた事をGeometryNodesでシリーズ、2本目。今回はPlexusのアレ。

「Blender Tutorial: Connect The Dots with Geometry Nodes, The “Plexus” Effect」(Youtube)を理解しつつまんまコピーです。内容的には、

  1. 距離を計算するペアになる頂点インデックスペアを作成して保存、保存先はオリジナルの2乗個のポイントを持つ新しいジオメトリへ
  2. 距離を測って閾値より大きいインデクスペアを削除、ダブってるやつ、自分どうしのペアも削除。
  3. Instance on Pointsでセグメントカーブを複製
  4. セグメント終点をインデクスペアの終点座標へ移動

空間分割をせずに全ての距離の比較をしているのでちょっと重い。

Animation Nodesは「Find Close Point」ノードひとつでサックリ作れましたが、この先同等のノードが追加されてくのでしょうか。開発がノードの粒度についてどういうポリシーを持ってるかによりますね。


Blender: GeometryNodes 軌跡を描く

Simulation Zone内で頂点の押し出しをすれば軌跡を描ける事が分かったのでテスト。

ExtrudeMeshノードで押し出した結果のコンポーネントへ「Top」というアトリビュートが「True」になった状態が与えられるので次フレームでもその「Top==True」なコンポーネントに対して押し出しをするって具合です。

通常のパーティクルシステムで使うForceFieldから力を取得できるといいんですが残念ながら出来ず、ノイズで動かしても面白くないので万有引力の式を使ってシミュレーションしてみました。重力の相互作用はありませんが。

以下Blender3.6用ファイルです。パーティクルの重さをランダムで指定している所で最小値にマイナスを入れれば斥力も働きます。クーロン力(りょく)ですね、式は万有引力と等価です。

時間を1フレーム目に戻して再生してください、たぶん途中のフレームのまま保存しちゃったかも。


Blender3.6LTS

Geometry Nodesにシミュレーションゾーンが追加されて自前でパーティクルシステムを作れるようになりました。パーティクルでは無いですが下のようにするだけでキューブが動きます。

シミュレーションゾーンの外側のソケットは初期状態の入力と計算結果の出力。内側は前フレームの状態の出力と現フレーム状態の保存って感じでしょうか。

まだダウンロードしてませんがデモファイルが5つも公開されています。上のスクリーンショットでも「Velocityにデルタタイムを乗算してオフセットに~」なんてやってるぐらいですから、結構敷居は高そうですね。

衝突とかどーうすんのかな?まさかその為に今回「Index of Nearest」ノードが追加されたとか…、それだけでは無理か。デザイナーからするとシミュレーションと聞くと物理計算やってくれる所と勘違いしそうですが、ここはワガでシミュレーションをつくるトコロですね。『現フレームの計算結果を保存しておくようにしたから次のフレームでその結果使って良いよ、後よろしく』みたいな仕組みが追加されただけです。

やっぱり敷居高いわ。