Blender ウォッチング

「Blender」のジオメトリノードで毛と布の物理演算がリアルに!

他にも多数の更新や変更が

 本連載では、無料の高機能3Dモデリングツール「Blender」の使い方や関連情報を幅広くお伝えします。

ヘアーダイナミクスと風もどきエフェクター(後述)の使用例

 7月14日(中央ヨーロッパ夏時間)、「Blender 5.2」が公式リリースされました。

 今回はv5.2LTSで実験的に追加されたヘアーとクロスの物理演算シミュレーションについてご紹介したいと思います。

 これは物理演算シミュレーションをノードシステムに組み込むプロジェクトの最初のリリースであり、他のシミュレーションもジオメトリノードとして実装される予定です。実験的機能ですので、将来的には仕様が変更されたり、機能自体がなくなる可能性もあります。

 この2つには「XPBD」(eXtend Position-Based Dynamics)メソッドという、ベルレ積分法と似た、位置ベースの物理演算アルゴリズムが使用されています。「Cosserat rod」でヘアーや布をモデル化し、その方向と位置に基づきシミュレーションを行います。

 実装ではソルバー処理や衝突判定が並列化により高速化されているため、多コアのCPUではパフォーマンスが向上します。

ヘアーダイナミクス

 リアルタイムにヘアーの物理演算処理を行います。ノードアセットとモディファイアーの2つの形式で提供されます。

 v5.2では[ヘアーカーブ]オブジェクトの追加時、デフォルトで[ヘアーダイナミクス]モディファイアーが追加されます。従来の[ヘアーカーブ]オブジェクトを使用したファイルにも使用可能です(後述)。

簡単に試す方法

 とりあえず試してみたい方は下記が一番早い方法です。

  1. 毛を生やしたい[メッシュ]オブジェクトを選択します。
  2. そのまま[追加]メニューから[カーブ]-[ファー]を実行します。
    メッシュオブジェクトを選択(①)し、[追加]メニュー(②)の[カーブ]-[ファー](③)を実行
  3. [ヘアーカーブ]オブジェクトが選択されていますので、そのまま、プロパティエディターを[モディファイアー]プロパティに変更し、[ヘアーダイナミクス]モディファイアーの[モード]を[物理演算(実験的)]に変更します。
    そのまま[モディファイアープロパティ](①)に変更し、[ヘアーダイナミクス]モディファイアーの[モード]を[物理演算(実験的)](②)に変更

 ヘアーカーブの追加・編集方法をご存じの方は[ファー]の代わりに[空のファー]の方が軽くていいかもしれません。

 [スペース]キーを押し、アニメーション再生すると、ヘアーが重力で下に曲がります。動きがメモリ内に記録され、下にあるタイムライン内に記録されたフレームが紫になります。

 [Esc]キーで停止し、[Shift]+[←]キーで最初に戻ってから再び[スペース]キーでアニメーションさせると、紫のフレームは高速に再生されます。

[スペース]キーでのアニメーション再生。ヘアーの動きが記録され、下の[タイムライン]内に紫で表示される

 さらにメッシュオブジェクトを選択し、再び[スペース]キーで再生中に[G]キーを押してマウスで移動すると、ヘアーがリアルタイムで変形します。

メッシュオブジェクトを選択し、再び[スペース]キーで再生中に[G]キーを押してマウスで移動すると、ヘアーがリアルタイムで変形する。結構重いので注意

従来のファイルの対応

 実験的機能であるためか、以前のバージョンでヘアーカーブを使用したファイルの自動変換機能はまだありません。自力で新しいモディファイアーまたはノードに変更する必要があります。

 具体的には[ヘアーカーブ]オブジェクトの[モディファイアー]スタックの最後の[サーフェイス変形]モディファイアーを [ヘアーダイナミクス]モディファイアー に変更します。

 また、ヘアーが付加された[メッシュ]オブジェクトでも、スタックの最初に形状を取得する [レストジオメトリキャプチャ]モディファイアー を挿入しないといけません。

v5.1とv5.2の[クイックファー]で追加されるモディファイアーの違い

 現時点では設定したオブジェクトの『表示中のすべてのヘアーに対して処理を行う』仕様であるため、物理演算したい部分だけ別に分けるのが現実的だと思われます。

衝突判定などの設定

 [ヘアーダイナミクス]モディファイアーの[サーフェスコリジョン]を有効化すると、ヘアーを植え付けている[メッシュ]オブジェクトとの衝突判定ができるようになります。

  1. [辺を考慮]を有効化すると精度が上がりますが、非常に重くなります。
  2. 現時点では判定部分のマージンやオフセットの類はありません。
  3. [ヘアーカーブ補間]モディファイアーを使用している場合、[表示]を減らすと軽くなりますが、その分計算をスキップするので、最終的にはすべて表示して次の[ベイク]で計算しなおす必要があります。
[サーフェスコリジョン]オプションの無効・有効時

物理演算シミュレーションのベイク

 シミュレーションの結果はアニメーション再生時にメモリ上に記録されるものの、blendファイルを再読み込みすると消えてしまいます。

 これを防ぐには[ベイク]機能で保存します。

  1. [ヘアーカーブ]オブジェクトを選択し、[物理演算プロパティ]に変更します。
  2. [シミュレーションノード]パネルを開き、[ベイク]ボタンをクリックします。
    [物理演算プロパティ]の[シミュレーションノード]-[ベイク]ボタンでベイク

 デフォルトでは『パック』としてblendファイルに同梱されます。非常に大きく(数百MB程度に)なるため、別ファイルに保存したい場合は、[モディファイアープロパティ]から[ヘアーダイナミクス]モディファイアーの[管理]-[ベイク]-[ベイクターゲット]を[ディスク]に変更してください。

[モディファイアープロパティ]から[ヘアーダイナミクス]モディファイアーの[管理]-[ベイク]-[ベイクターゲット]を[ディスク]にする。図のように『//』で始めるとblendファイルとの相対パスに

エフェクターの利用

 現時点では今回追加された[ヘアー]と[クロス]のモディファイアーには、[コリジョン]以外のエフェクトモディファイアーがありません。

 よって風などはジオメトリノードで自作することになります。

 下記のようなジオメトリノードをオブジェクトに作成し、専用の「コレクション」を作成してその中に入れ、[ヘアーダイナミクス]モディファイアーの[エフェクター]-[コレクション]に入れる必要があります。

[カスタムフォース]ノードと[エフェクター設定]ノードによる、風っぽい効果を出すジオメトリノード。v5.2からエンプティに付けられるようになって便利に

クロスダイナミクス

 一方、クロスシミュレーションはすでに同じ機能が存在しており、こちらも実験的意味合いが強いため、本記事では軽く触れる程度に留めます。

 既存のクロスシミュレーション機能との違いは以下の通りです。

  • ジオメトリノードとして利用したカスタマイズが可能
  • 『引き裂き』で破れる機能がある
  • 処理が高速
  • 衝突判定を行う場合、対象のオブジェクトに[コライダー]モディファイアーを付加して専用の「コレクション」に入れ、クロス用オブジェクトの[クロス力学(実験的)]-[エフェクター]-[コレクション]に設定しないといけない
  • コライダー以外のエフェクター(フォースなど)は未実装
  • 「セルフコリジョン」(自分自身との衝突判定)がない
クロスの『引き裂き』機能を使用した例(クリックで設定を表示)

その他のジオメトリノードへの改善

 スペースがなくなってしまいましたが、物理シミュレーション以外にも、ジオメトリノードには様々な機能が追加されています。

 例えば、[リスト]タイプの追加や、エンプティオブジェクトへのジオメトリノード付加、[メッシュベベル]、[バンドル]のジオメトリ対応、音声系ノードの追加、カーブの「階数」へのアクセス、[文字列]タイプの属性の追加と処理ノードの強化、クロージャの再帰対応など多数の追加があります。リリースノートでチェックしてみてください。

[メッシュベベル]ノードで積み本の背中をベベルした例

終わりに

 新しい2つのシミュレーションは、ジオメトリノードによる物理シミュレーション実装プロジェクトの始まりであり、ユーザーによるフィードバックによる改善に期待したいところです。

 次回は「Blender 5.2」のインターフェイスなどについてご紹介する予定です。

 ではまた。