下の動画がBlender 5.2での新機能を利用して作成したアニメーションとなります。
この記事作成に「サコッシュ伊藤3D」さんの解説動画を参考にしています、いつも分かりやすい解説を有難うございます。
Blender 5.2では、ジオメトリノード上で動作する新しい物理演算システム「クロスダイナミクス(Cloth Dynamics)」が追加されました。従来の物理演算プロパティによるクロスシミュレーションとは異なり、ノード構成によって布の挙動を自由にカスタマイズしたり、標準機能として布が引き裂かれる「ティアリング(Tearing)」を表現したりすることが可能です。
本記事では、クロスダイナミクスの基本的な導入手順から、オブジェクト(モンキー)が布を突き破って飛び出すアニメーションの作成方法までを解説します。
1. モディファイヤーとジオメトリノードでの追加方法
クロスダイナミクスは、モディファイヤープロパティまたはジオメトリノードエディターのいずれかから適用できます。
モディファイヤーから追加する場合
- オブジェクトを選択し、画面右側の「モディファイヤープロパティ」を開きます。
- 「モディファイヤーを追加」から「シミュレーション(Simulation)」➔「クロス力学(Cloth Dynamics)」を選択します。
下の解説動画を参考にしてください。
ジオメトリノードから追加する場合
今回の実演手順では、カスタマイズ性の高いジオメトリノードを使用します。
- 画面を分割し、一方を「ジオメトリノードエディター」に変更します。
- オブジェクトを選択した状態で「新規」ボタンを押し、ノードを構築できる状態にします。
2. 布のベースとなるメッシュの準備
シミュレーションの対象となる精度の高いメッシュをノード上で構築します。
- デフォルトの「グループ入力」ノードを選択し、削除します。
Shift + Aから「立方体(Cube)」ノードを追加し、「グループ出力」に接続します。- 立方体ノードのサイズ(X、Y、Z)をすべて「3m」に設定します。
- 立方体ノードの後に「メッシュ細分化(Subdivide Mesh)」ノードを挟み、レベルを「5」に設定します。布の繊細な動きを表現するためには十分な頂点数が必要となります。パソコンの負荷を抑えたい場合は「4」に調整してください。
- メッシュ細分化の前に「ジオメトリートランスフォーム(Transform Geometry)」ノードを配置し、移動のZ数値を「2」にして初期位置を上に引き上げておきます。
下の解説動画を参考にしてください。
3. クロス力学ノードの配置とコライダーのシミュレーション
- メッシュ細分化ノードの後ろに、
Shift + Aの検索から「クロス力学(Cloth Dynamics)」ノードを追加して接続します。 - この状態でスペースキーを押してアニメーションを再生すると、重力項目が有効になっているため立方体が落下します。
- 落下を受け止める床を作ります。3Dビューポート上で
Shift + Aから「平面(Plane)」を追加し、Sキーで適度に大きくします。 - 追加した平面をアウトライナーからジオメトリノードエディター内へドラッグ&ドロップし、「オブジェクト情報(Object Info)」ノードを作成します。設定を「オリジナル」から「相対」に変更します。
Shift + Aから「コライダー(Collider)」ノードを追加します。- オブジェクト情報の「ジオメトリ」ソケットをコライダーの「ジオメトリ」に繋ぎ、コライダーの「コライダー」ソケットを、クロス力学ノードの「エフェクター(Effectors)」ソケットに接続します。
再生すると、落下した立方体が平面に衝突し、布のように変形して着地します。クロス力学ノード内の「便利(Bending)」数値を上げると柔軟性が増し、「伸縮性(Stretching)」の数値を上げるとゴムやビニールのような挙動へと変化します。
下の解説動画を参考にしてください。
下の解説動画を参考にしてください。
4. カスタムフォースと固定グループによる影響範囲の制御
オブジェクトを内側から膨らませる力と、エンプティの距離に応じた固定範囲を設定します。
- 床との衝突判定を一度解除するため、クロス力学ノードの「重力」チェックボックスをオフにします。
Shift + Aから「カスタムフォース(Custom Force)」ノードを追加し、コライダーの代わりにクロス力学の「エフェクター」ソケットに接続します。- オブジェクトの表面に向かって働く力を定義するため、「ノーマル(Normal)」ノードを追加します。
- 「ベクトル演算(Vector Math)」ノードを追加し、モードを「スケール(Scale)」に変更します。
- ノーマルノードの出力をベクトル演算の「ベクトル」に繋ぎ、そのアウトプットをカスタムフォースの「力(Force)」ソケットに接続します。ベクトル演算のスケール数値を「10」程度に設定すると、立方体が外側へ膨らむようになります。
- 一部の頂点を元の位置に固定するため、3Dビューポートに「エンプティ(十字)」を追加し、少し上に配置します。
- エンプティをジオメトリノードエディターにドラッグ&ドロップし、「相対」に設定します。
- 「位置(Position)」ノードを追加し、もう一つ「ベクトル演算」ノードを追加してモードを「距離(Distance)」に変更します。
- 距離ノードの入力に「位置」ノードとオブジェクト情報の「位置」ソケットをそれぞれ接続します。
- 「数式(Math)」ノードを追加し、モードを「大きい(Greater Than)」に変更します。しきい値は「3」に設定します。
- 距離の出力を数式ノードに繋ぎ、その出力をクロス力学ノードの「固定グループ(Pin Group)」ソケットに接続します。
これにより、エンプティからの距離が3mを超える頂点(数値が1となる場所)が元の位置に固定され、エンプティに近い領域だけが膨らむようになります。
下の解説動画を参考にしてください。
下の解説動画を参考にしてください。
境界線の歪みを追加する場合
境界線の直線的な質感を消すには、「位置」ノードと「距離」ノードの間に「ベクトル演算(乗算)」を挟み、「ノイズテクスチャ(Noise Texture)」のカラー出力をブレンドすることで、境界の形状をランダムに歪めることができます。
下の解説動画を参考にしてください。
5. ティアリング(布の破れる表現)とオブジェクトの突き抜け
- クロス力学ノード内の「ティアリング(Tearing)」メニューを開き、チェックボックスを有効にします。
- カスタムフォースに接続しているベクトル演算(スケール)の数値を「300」などの高い値に引き上げると、加わった力によってメッシュが引き裂かれます。
- 3Dビューポート上で
Shift + Aから「モンキー(Suzanne)」を追加し、立方体の内部に配置します。 - 先ほど平面を指定していた「オブジェクト情報」ノードの対象オブジェクトを「モンキー」に変更します。
- コライダーからの出力と、カスタムフォースからの出力の2つを同時にクロス力学ノードへ接続するため、
Shift + Aから「バンドル合成(Geometry 2 Audio などのデータ結合用ノード)」を追加します。 - バンドル合成ノードにコライダーとカスタムフォースをそれぞれ接続し、まとまった出力をクロス力学の「エフェクター」に接続します。
下の解説動画を参考にしてください。
下の解説動画を参考にしてください。
6. アニメーションのキーフレーム設定と仕上げ
モンキーが下から上に突き抜ける動きを設定します。
- 立方体に接続された「ジオメトリートランスフォーム」の移動Zを「0」に戻し、回転XとYを「45度」傾けておきます(不要になった平面オブジェクトは削除します)。
- モンキーを選択し、1フレーム目で位置のZ数値を「0」にしてキーフレームを挿入します。
- 48フレーム目に移動し、モンキーのZ数値を「5m」に引き上げて再度キーフレームを挿入します。
- 動きの加速・減速を滑らかにするため、タイムラインを「グラフエディター」に切り替え、2つのキーフレームを選択して右クリックから補間モードを「ベジェ(Bezier)」に変更します。
アニメーションを再生すると、モンキーが内側から立方体の布を突き破って飛び出すエフェクトが完成します。
下の解説動画を参考にしてください。
下の解説動画を参考にしてください。
メッシュの平滑化と最適化
- コライダーの余白(Margin): コライダーノード内にある「余白」の数値を「0.2m」などに設定すると、モンキーの表面から少し離れた位置で衝突判定が計算されるため、破れる穴の大きさを広げることができます。
- ジオメトリスムージング(Smooth Geometry): クロス力学ノードの後ろに「ジオメトリスムージング」ノードを配置し、回数を「5」、ウェイトを「0.1」程度に設定することで、引き裂かれた断面のジャギー(粗さ)を滑らかに補正できます(サブディビジョンサーフェスよりもPCへの負荷を軽減できます)。
下の解説動画を参考にしてください。
Blender5.2のバージョンからの性能UPは、凄いです。
特にジオメトリーへの力の入れ方が早いし今後は物理演算も軽く制御していく流れです。
アニメーション制作には必然的に欠かせないスキルになっています。
今のうちから積極的に学ぶことが大事だと感じました。
最後に制作したアニメーションを紹介して終わりとなります。
スザンヌの頭に粘り有る布を落としています。
スザンヌの頭に破れる布を落としています。
