ジャンル雑多なゲーム・ゲーム制作関連の色々な情報を取り扱っているブログ。最近はBlenderについてが中心。
[Blender 2.9] 柔らかな物体の表現 [ソフトボディシミュレーション]

[Blender 2.9] 柔らかな物体の表現 [ソフトボディシミュレーション]

[Blender 2.9] 柔らかな物体の表現が出来る『ソフトボディシミュレーション』の、機能と使い方のご紹介

今回の記事は、Blenderでの『物理シミュレーション』の1つ、『ソフトボディシミュレーション』についてです。

※2020年11月12日 加筆修正を行いました。

目次

ソフトボディシミュレーションとは?

『ソフトボディシミュレーション』は、柔らかく変形するオブジェクトのシミュレーションに使用されます。主に、動くキャラクターの身体の部分的な揺れのように、アニメーションに二次的な動きを追加するために設計されました。

ソフトボディシミュレーションを使用したミズクラゲのモデル

動くキャラクターの身体の部分的な揺れや、それ以外にも、曲がったり、変形したり、重力や風などの力に反応したり、他のオブジェクトと衝突したりする、より一般的なソフトオブジェクトのシミュレーションにも使用できます。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
ソフトボディ同士の衝突シミュレーションの例

ですが、もし「柔らかなオブジェクト」というのが、布地やその他もっと固いラバーや皮タイプの変形するオブジェクトである場合、『ソフトボディシミュレーション』でもある程度シミュレート出来ますが、そういった場合は、『クロスシミュレーション』を使用する方が、より効果的なシミュレーションができます。

シミュレーションは、オブジェクトの既存のアニメーションとそれに作用する力を組み合わせることで機能します。『重力』や『フォースフィールド』などの外力と、頂点を纏める内力があります。このようにして、ボリュームがあり、何かで満たされ、実際の力が作用した場合に、オブジェクトが実際に受ける形状をシミュレート出来ます。

『重力』や『フォースフィールド』について、詳しくは下記記事をご覧ください。

ソフトボディは、衝撃によって他のオブジェクトと相互作用できます。それらは[セルフコリジョン]を通じて、自分自身とも衝突の対応が出来ます。

『ソフトボディシミュレーション』の結果は、スタティック(静的)オブジェクトに変換できます。シミュレーションをベイク編集することも出来ます。つまり、中間結果を編集して、そこからシミュレーションを実行する事も出来ます。

ソフトボディの一般的な用途

  • キャラクターの移動に合わせて揺らす
  • ゴムやゼラチン質な素材で作られた弾性変形するオブジェクト
  • 木の枝が風に靡く、ロープが揺れるなど。
  • 旗、幅の広い袖、クッション、または外部の力に反応するその他のシンプルな生地(これは、場合によっては『クロスシミュレーション』で作成する方がオススメ)。

また、Blenderの公式マニュアルで紹介されている動画も参考になるかと思います。

外部ページリンク: Soft Body >> Introduction — Blender Manual

基本的な使い方

『ソフトボディシミュレーション』は、頂点または制御点を持つ全てのオブジェクト(メッシュ、カーブ、サーフェス、及びラティス)に対して機能します。

オブジェクトに『ソフトボディシミュレーション』を追加するには、[プロパティエディタ]>[物理プロパティ]タブの[ソフトボディ]ボタンを押して、有効にします。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[ソフトボディ]の有効化

ちなみに、ソフトボディオブジェクトと衝突させたいオブジェクトがある時には、その衝突させたいオブジェクトに[コリジョン]を付与しておきましょう。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[コリジョン]の有効化

『ソフトボディシミュレーション』は、[スペース]でアニメーションを再生開始し、[Esc]または[スペース]でシミュレーションを停止します。

この時、ある程度元の位置を決めて、その位置でふるわせるようなシミュレーションをしたい場合は、[ゴール]を有効にし、そうではなく、元の位置関係なく重力に従って全体的に落下させるようなシミュレーションをしたい場合は、[ゴール]を無効にします。

Blender 物理シミュレーション ソフトボディ 3DCG
[ソフトボディ]>[ゴール]
Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[ゴール]を無効にした場合
Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[ゴール]を有効にした場合

リアルタイムの相互作用

『ソフトボディシミュレーション』を操作するには、[タイムラインエディタ]を使用すると便利です。フレーム間で変更でき、シミュレーションは常にその時点の状態で表示され、シミュレーションとリアルタイムで相互作用できます。衝突オブジェクトを移動したり、ソフトボディオブジェクトをふるわせたりします。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
タイムラインエディタを使用してリアルタイムにシミュレーション

次に、シミュレーションの実行中にソフトボディオブジェクトを選択し、[プロパティエディタ]>[モディファイアープロパティ]タブでモディファイアーを適用できます。これにより、変形が永続的になります。

Blender 物理シミュレーション ソフトボディ 3DCG
[プロパティエディタ]>[モディファイアープロパティ]で[ソフトボディ]を[適用]

上手くシミュレーションするには?

  • ソフトボディは、オブジェクトに頂点が多く分布している場合に特に効果的になります。良い衝撃表現には十分な頂点が必要です。特定の領域に更に頂点を追加すると、変形(剛性)が変更されます。
  • コリジョンの計算には、時間がかかる場合があります。
  • コリジョンの計算を高速化するために、追加のより単純で、見えない、やや大きいオブジェクトと衝突すると便利な事がよくあります。
  • ソフトボディは、意味のある場所でのみ使用してください。ボディメッシュをタイトな布で覆い、柔らかいボディだけでアニメートしようとすると、成功しません。やわらかい体毛の『セルフコリジョン』が活性化する事もありますが、それ以上についてはそれぞれで探求してください。
  • オブジェクト自体ではなく、ラティスまたはカーブガイドのソフトボディを試した方が、高速になるかもしれません。

[ソフトボディ]の詳細設定項目一覧

[コレクションの衝突設定(Collision Collection)]

設定されている場合、このコレクションのオブジェクトとのみに衝突を制限します。

例えば、↓のように、コレクションを分けてソフトボディオブジェクトと、コリジョンオブジェクトを設置したとします。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG コレクション
ソフトボディオブジェクトとコリジョンオブジェクトをそれぞれ別のコレクションへ分けて管理

その場合、通常、何も指定しない場合は、ソフトボディオブジェクトがコリジョンオブジェクトへ衝突しますが、

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[コレクションの衝突設定]に何も設定していない場合

例えば、[コレクションの衝突設定]に”Collection”を設定した場合、コリジョンオブジェクトは”Collection2″のコレクションなので、ソフトボディオブジェクトは衝突せずにすり抜けます。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[コレクションの衝突設定]に”Collection”を設定した場合

[オブジェクト(Object)]

[摩擦(Friction)]

周囲の媒体の摩擦。一般的に摩擦は動きを弱めます。摩擦が大きい程、媒体の粘性が高くなります。頂点がその周囲の媒体に対して移動すると、摩擦が常に発生します。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[摩擦]の”0″、”25″、”50″で比較

[重さ(Mass)]

頂点の質量値。質量が大きいと、質量に関係なく運動が一定である重量を除いて、加速が遅くなります。質量が大きい程、慣性が大きくなるため、ソフトボディの制動も難しくなります。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[重さ]の”0kg”、”0.1kg”、”1kg”で比較

[制御点(Control Point)]

ウェイトをペイントし、指定した頂点グループを質量値に使用できます。

『頂点グループ』について、詳しくは下記記事をご覧ください。

例えば、↓のようなウェイトを割り当てた頂点グループを用意し、[制御点]に設定します。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG ウェイトペイント 頂点グループ
[制御点]に、上部だけウェイト”1″を割り当てた頂点グループを設定

シミュレーションしてみると、ウェイトに”1″を割り当てた部分(赤い部分)から下に落ちているのがお分かりになるかと思います。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG ウェイトペイント 頂点グループ
[制御点]に設定した上でのシミュレーション結果

ちなみに、下にコリジョンオブジェクトを設置していない場合↓。

Blender ソフトボディ 物理シミュレーション 3DCG ウェイトペイント 頂点グループ
[制御点]に設定した上でのシミュレーション結果、コリジョンオブジェクトなしver

[シミュレーション(Simulation)]

[速度(Speed)]

この値でソフトボディシステムの内部的なタイミングを制御します。フレームレートとシミュレーションのテンポの相関関係を設定します。

自由落下する物体は、1秒後に約10メートルの距離をカバーする必要があります。この相関関係を使用して、シーンとシミュレーションのスケールを調整できます。例えば、毎秒25フレームでレンダリングする場合は、[速度]を1.3に設定する必要があります。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[速度]の”0.5″、”1.0″、”5.0″で比較

[キャッシュ(Cache)]

ソフトボディ物理シミュレーションでは、キャッシュとベイク処理に統合システムを使用します。

この項目については、『パーティクルシステム』のキャッシュとほとんど同じなので、該当の機能についてご紹介しました過去の記事をご参照ください。

[ゴール(Goal)]

『ゴール』とは、ソフトボディオブジェクトが準じようとする形状で、頂点の望ましい終了位置です。これは、選択した頂点のセットのピン留めのように機能し、ソフトボディが頂点に与える影響の量を制御します。

ソフトボディの[ゴール]を有効にすると、シミュレーションで頂点の位置(またはアニメーション化された位置)を使用するようにBlenderに指示します。頂点のアニメーション化は、ソフトボディシミュレーションを適用する前に、通常の全ての方法(Fカーブ、アーマチュア、親、ラティスなど)で実行できます。ソフトボディが、このゴールを達成しようとする方法は、「剛性力」と「減衰」を使用して定義できます。

Blender ソフトボディ 物理シミュレーション 3DCG クラゲ
アーマチュアと、ソフトボディシミュレーションを使用した例

memo: 技術的な小話

ソフトボディの世界では、メッシュの頂点は質量を持つ粒子として扱われます。それらの動きは、それらに影響を与える力によって決定されます。他の力に加えて、個々の粒子は、自動車で使用されるショックアブソーバーに非常に近い物理モデルを使用して、辺に沿って別の粒子と相互作用する事ができます。動作部品は次の通りです。

  • 粒子を特定の距離に保とうとするスプリング。スプリングがそれをどの程度難しくしようとするかは、ソフトボディパラメータの[剛性]によって制御されます。
  • 動きを落ち着かせるダンピング要素。要素がモーションに対して構築する抵抗は、ソフトボディパラメータの[減衰]によって制御されます。

[頂点グループ(Vertex Group)]

頂点グループを使用して、頂点毎のゴールのウェイト([デフォルト]で設定するデフォルトゴールの値に掛けたもの)を認めます。

『頂点グループ』について、詳しくは下記記事をご覧ください。

例えば↓のようにウェイトを割り当てた頂点グループを用意します。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG ウェイトペイント 頂点グループ
[頂点グループ]に、上部だけウェイト”1″を割り当てた頂点グループを設定

頂点グループを設定した場合と、設定していない場合で比較すると、以下のようになります。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[頂点グループ]を設定していない場合
Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[頂点グループ]を設定した場合

[設定(Settings)]

[剛性(Stiffness)]

ゴールのばね剛性。低い値は非常に弱いスプリング(ゴールへのより柔軟な「アタッチメント」)を作成し、高い値は強いスプリング(ゴールへのより硬い「アタッチメント」)を作成します。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[剛性]の”0.000″、”0.500″、”0.999″で比較
[減衰(Damping)]

ゴールの摩擦係数。値を大きくすると、スプリング効果が減衰し(揺れが少なくなり)、動きはすぐに終了します。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[減衰]の”0″、”10″、”50″で比較

[強さ(Strengths)]

「ゴールの強さ」は、「アニメーションシステムからのモーションがどれだけ適用されるか」を定義します。

ゴール値”1.0″は、ソフトボディシミュレーションが無い事を意味し、オブジェクトは通常のアニメーションオブジェクトの様に動作します(つまり、頂点は元の位置に保持されます)。ゴールを”0.0″(またはゴールなし)に設定すると、頂点はソフトボディシミュレーションによる物理法則の影響のみを受けます。

ゴール値を”0.0″~”1.0″の間に設定することで、オブジェクトが受ける、アニメーションシステムからの影響と、ソフトボディ効果の影響の度合いをブレンド出来ます。

ゴールはメモリとしても機能し、ソフトオブジェクトが変形しすぎて、ソフトでない形のアニメーションになってしまう事が無いようにします。『頂点グループ』のウェイトシステムを使用して、頂点毎のゴールのウェイトを定義できます。これをより自然に見せるために、ばね力を定義して、頂点が元の位置からどれだけ移動できるかを制御できます。

多くの場合、ウェイトペイントはウェイトを楽に調整するために使用されます。メッシュ以外のオブジェクトの場合、代わりに頂点/コントロールポイントの[ウェイト]パラメータが使用されます。[編集モード]のコンテキストメニュー、または、サイドバーの[トランスフォーム]パネルを使用します。ヘアーパーティクルのウェイトの場合は、[パーティクル編集モード]でもペイントできます。

[デフォルト(Default)]

頂点グループが割り当てられていない場合の全ての頂点のゴールのウェイト/強度。頂点グループを使用する場合、頂点のウェイトがそのゴールを定義します。

例えば、適当なベジェ円を用意し、[パスに追従]コンストレイントで、ベジェ円に沿って移動するアニメーションを作成します。

Blender パスに追従 コンストレイント 3DCG ベジェ円 立方体 Cube
ソフトボディオブジェクトに、[パスに追従]コンストレイントを付与
Blender パスに追従 コンストレイント 3DCG ベジェ円 立方体 Cube
[パスに追従]コンストレイントで、ベジェ円に沿って移動するアニメーション作成

その状態で、『ソフトボディシミュレーション』の[デフォルト]からゴールの強さを変更した時の比較をしてみます。

Blender ソフトボディ 物理シミュレーション パスに追従 コンストレイント 3DCG ベジェ円 立方体 Cube
[デフォルト: 0.0]
Blender ソフトボディ 物理シミュレーション パスに追従 コンストレイント 3DCG ベジェ円 立方体 Cube
[デフォルト: 0.5]
Blender ソフトボディ 物理シミュレーション パスに追従 コンストレイント 3DCG ベジェ円 立方体 Cube
[デフォルト: 1.0]

ちなみに、[頂点グループ]を設定した場合は↓の様に動作します。

Blender ソフトボディ 物理シミュレーション パスに追従 コンストレイント 3DCG ベジェ円 立方体 Cube 頂点グループ ウェイトペイント
[デフォルト: 1.0]、[頂点グループ]に上部だけ”1″のウェイトを割り当てた頂点グループを設定
[最小(Min)]

[頂点グループ]を使用する場合、この値を使用して、ウェイト値を微調整(クランプ)できます。最小の頂点のウェイトがこの値になります。

[最大(Max)]

[頂点グループ]を使用する場合、この値を使用して、ウェイト値を微調整(クランプ)できます。最大の頂点のウェイトがこの値になります。

例えば、[デフォルト]を”1.0″に設定したうえで、[最小]を”0.5″、[最大]を”0.75″に設定した場合は↓のように動作します。

[最小]を”0.0″、[最大]を”1.0″の場合と比べてみると、ウェイト”1″を割り当てた上部の赤い部分は少しソフトボディシミュレーションの影響を受けて変形し、また、ウェイト”0″の青い部分はソフトボディシミュレーションの影響が少なくなって、変形の度合いが弱くなっているのがお分かりになるでしょうか。

Blender ソフトボディ 物理シミュレーション パスに追従 コンストレイント 3DCG ベジェ円 立方体 Cube 頂点グループ ウェイトペイント
[最小: 0.5]、[最大: 0.75]の場合
Blender ソフトボディ 物理シミュレーション パスに追従 コンストレイント 3DCG ベジェ円 立方体 Cube 頂点グループ ウェイトペイント
[最小: 0.0]、[最大:1.0]の場合

[辺(Edges)]

メッシュオブジェクトの辺がスプリングのように機能するようにします。

memo: 『辺スプリング』について

メッシュの隣接する各頂点の間には、通常、それらを接続する辺を作成します。この各辺をスプリングとして想像してください。機械的なスプリングは、張力がかかった状態で伸びたり、圧力がかかった状態で絞ったりすることができます。全てのスプリングには理想的な「長さ」と、スプリングを伸ばしたり絞ったりできる距離を制限する「剛性」があります。

Blenderの場合、理想的な「長さ」は、ソフトボディシステムを有効にする前であっても、メッシュの一部として設計した元の辺の長さです。ソフトボディ物理演算を追加するまで、すべてのスプリングは完全に硬い状態とみなされます。ストレッチやスクイーズ(圧搾)はありません。

これらすべての辺スプリングの「剛性」を調整して、メッシュがたるんだり、曲がったり、そよ風に舞ったり、地面に水たまりが出来たりするように動作させることができます。

[ばね(Springs)]

ばねの強度の値には、指定された頂点グループを使用します。

片方は右側にウェイト”1″を、左側にウェイト”0″を割り当てた頂点グループを[ばね]に設定し、片方は[ばね]に設定をしていない、2つの立方体を用意しました。ちなみに、どちらも[曲げ]を”10″に設定しています。

Blender ソフトボディ 物理シミュレーション 3DCG ウェイトペイント 頂点グループ
左側にウェイト”0″、右側にウェイト”1″を割り当てた頂点グループ

シミュレーションしてみると、[ばね]を設定した方の立方体のウェイト”0″になっている左側だけ形を保たず崩れているのがお分かりになるかと思います。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG

[引く(Pull)]

辺のばね剛性(辺を伸ばすことが出来る量)。低い値は非常に弱いばね(非常に弾力性のある材料)を意味し、高い値は引き離されにくい強いばね(より硬い材料)を意味します。

“0.5”の値はラテックス、”0.9″はセーターのようなもの、”0.999″はデンプンが高配合されたナプキンまたは革です。”0.999″の値を使用すると、ソフトボディシミュレーションが不安定になる傾向があるため、その場合はこの値を少し下げる必要があります。

数値を変えて比較してみたのですが[押す]を”0.500″に固定したので、”0.000″の場合に[押す]の強さが出てしまいました↓

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[引く]を”0.000″、”0.500″、”0.999″で比較

[押す(Push)]

圧縮ばねのように、ソフトボディが一緒に押しつぶされるのにどれだけ抵抗するか。織物の値は低く、膨らんだオブジェクトや硬い素材の値は高くなります。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[押す]を”0.000″、”0.500″、”0.999″で比較

ちなみに、[引く]と[押す]の値の組み合わせを変えて試してみました。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[引く]と[押す]の数値の組み合わせを変えた実験

[減速(Damp)]

辺スプリングの摩擦。高い値(最大50)は、[押す]や[引く]の効果を弱め、布の動作を落ち着かせます。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[減速]の”0″、”10″、”50″で比較

[プラスチック(Plastic)]

衝突後のオブジェクトの永続的な変形。頂点は、モディファイアーを適用せずに新しい位置を取ります。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[プラスチック]の”0″、”50″、”100″で比較

[曲げ(Bending)]

曲げ剛性。

このオプションは、頂点とその隣接頂点に接続されている頂点の間に「仮想接続」を作成します。これには対角辺が含まれます。ダンピングはこれらの接続にも適用されます。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[曲げ]の”0″、”5″、”10″で比較
memo: 『仮想接続』について

ソフトボディオブジェクトの頂点間に「接続」を作成するには、頂点を纏める力が必要です。これらの力は、メッシュの辺、つまり頂点間の「接続」に沿っているのが効果的です。この力はスプリングのように機能します。

例えば、次の図のような構造のメッシュがあるとします。

Blender 頂点 辺 メッシュ 構造 3DCG
メッシュ構造の例(頂点を〇、辺を―で表示)

接続されていない対角線に位置する2つの頂点がありますが、この2つの頂点間を辺で接続しない場合、2つの頂点は自由に回転出来てしまいます。ボディが崩壊しないようにする論理的な方法は、頂点間に追加の辺を作成する事です。これはかなり上手く機能しますが、メッシュトポロジが大幅に変更されます。

幸い、Blenderでは追加の「仮想接続」を定義できます。一方は、4つの頂点を持つ面の対角線の「仮想接続」を定義できます([剛性]を有効にした場合に追加される力)。もう一方は、頂点とその隣接する頂点に接続された頂点との間の「仮想接続」を、「曲げ剛性」で定義できます。「曲げ剛性」とはつまり、頂点と2つの辺接続によって分離されている他の頂点との間で許可される曲げの量です。

Blender 頂点 辺 メッシュ 構造 3DCG 仮想接続 対角線
仮想接続その1
Blender 頂点 辺 メッシュ 構造 3DCG 仮想接続
仮想接続その2

ここで使用した図は、下記リンクの動画の0:48あたりの図を参考にさせていただきました。

外部ページリンク:Blender Soft Body Settings Explained – YouTube

[長さ(Length)]

辺が縮んだり、膨らんだりする長さを変更します。単位は%で示され、”0″で無効になります。100%は変化がないことを意味し、ボディはそのサイズの100%を維持します。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[長さ]の”0″、”75″、”200″で比較

[Collision Edge]

ソフトボディメッシュの辺が衝突していないかチェックします。

『コリジョン』を有効にしても、頂点数が少なすぎる単純なメッシュオブジェクト同士だと、コリジョンが上手く働かず絡んでしまうことがあります。ですが、この項目を有効にした場合、辺にもコリジョンを設定することが出来るので、頂点数が少なすぎてメッシュオブジェクト同士が絡んでしまうのをある程度防ぐ事ができます。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[Collision Edge]チェック有り
Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[Collision Edge]チェック無し

[面(Face)]

ソフトボディメッシュの面のどの部分も衝突していないかチェックします(計算量が多くなり、動作が重くなる可能性があります)。[面]は優れており、多くのコリジョンエラーを解決しますが、ダンピング設定はないようです。そのため、コリジョンメッシュの近くのソフトボディオブジェクトの一部は、跳ね返って後退する時に「ジッター」する傾向があります。メッシュの動きが無い場合、エッジの衝突には減衰があるため、制御できますが、衝突オブジェクトのたわみ減衰値は、面の衝突に影響を与えないようです。

ちなみに、[Collision Edge]との動作を比較してみました。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[面]チェック有り
Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[Collision Edge]チェック有り

memo: ソフトボディシミュレーションでの『コリジョン』について

使用できる『コリジョン』のタイプには、「異なるオブジェクト間のコリジョン」と、「内部コリジョン」があります。最初から1つ設定する必要があり、衝突計算の主なターゲットは、ソフトボディの頂点です。したがって、頂点が少なすぎると、コリジョンが少なすぎます。また、辺と面を使用して、衝突計算を改善することも可能です。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
頂点数が少なすぎて衝突計算が上手く行かない例

ソフトボディが、別のオブジェクトと衝突するためには、いくつかの前提条件があります。

  • [コレクションの衝突設定]が設定されている場合、オブジェクトはコレクションに属している必要があります。
  • コリジョンオブジェクトは、メッシュオブジェクトである必要があります。
  • コリジョンオブジェクトの[物理演算]タブで[コリジョン]を有効にする必要があります。コリジョンオブジェクトは、ソフトボディの場合もあります。

ソフトボディシミュレーションは、デフォルトで頂点毎に実行されます。ソフトボディの頂点がコリジョンオブジェクトと衝突しない場合、2つのオブジェクト間の相互作用はありません。

頂点が外側と内側の間のゾーンを貫通すると、面の法線方向の力によって反発されます。頂点が最終的に到達する位置は、頂点に作用する力に一存します。頂点がコリジョンゾーンから引き出される速度は、ソフトボディの[ソルバー]設定の[チョーク]パラメータの影響を受けます。

[辺]パネルの衝突計算にて、辺や面が含まれるようにコリジョンを設定出来ます。その後、コリジョンは別の方法で計算され、辺または面がコリジョンオブジェクトと交差するかどうかがチェックされ、コリジョンゾーンは使用されません。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[辺]>[Collision Edge]を使用した例
Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[辺]>[面]を使用した例

[空気力学(Aerodynamics)]

周囲の媒体からの力。

辺は、移動する時に風の影響を受けたり、風に靡いたりする可能性があります。これは、風に靡く旗のシンプルな空気力学モデルです。

この特別な外部の力は、頂点ではなく、接続辺に適用されます。技術的には、辺に垂直な力が適用されます。力は、辺での相対速度の投影に比例します(内積)。風が吹いている場合、または同じ速度で辺を空中に引っ張る場合、力は同じであることに注意してください。つまり、自分の方向に移動する辺には力が感じられず、自分の方向に垂直に移動する辺には最大の力が感じられます。

媒体と辺の間の角度と相対速度は、辺にかかる力を計算するために使用されます。この力により、接続辺が少ない頂点は、接続辺が多い頂点よりも速く落下します。全ての頂点が同じ方向に同じ量の辺を持っている場合、それらは同じ速度で落下します。

[タイプ(Type)]
  • [シンプル(Simple)] …辺は、周囲の媒体から抗力を受けます。
  • [揚力(Lift Force)] …辺は、周囲の媒体を通過するときに揚力を受けます。
[係数(Factor)]

使用する空気の力の量。辺を「帆」にします。

最初は”30″の値を試してください。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[係数]の”0″、”5000″、”10000″で比較

[剛性(Stiffness)]

四角形の面の場合、対角線の辺がばねとして使用されます。これにより、衝突時に四角形の面が完全に崩壊するのを防ぎます。

“対角線の辺”というのは、「memo: 『仮想接続』について」でご説明した「4つの頂点を持つ面の対角線の「仮想接続」」の事だと思われます。

[せん断(Shear)]

四角形の面用に作成された仮想スプリングの剛性。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[せん断]の”0.0″、”0.1″、”1.0″で比較

[セルフコリジョン(Self Collision)]

[セルフコリジョン]は、[辺]を有効にした場合のみ機能します。

有効にすると、Blenderがソフトボディがそれ自体と交差するのを防ぐ方法を制御できます。全ての頂点は、弾性のある仮想ボールで囲まれています。頂点は他の頂点のボールを貫通出来ない場合があります。良い結果が必要な場合は、これらのボールのサイズを調整する必要があります。通常、デフォルトのオプションでかなり上手く機能します。

[Calculation Type]

  • [マニュアル(Manual)] …ボールサイズは、[ボールサイズ]を直接設定します。
  • [平均(Average)] …頂点に接続されている全ての辺の平均の長さが計算され、[ボールサイズ]の設定が乗算されます。均等に分散された頂点で上手く機能します。
  • [最小(Minimal)] …ボールサイズは、頂点の最小スプリング長に[ボールサイズ]を掛けたものと同じ大きさです。
  • [最大(Maximal)] …ボールサイズは、頂点の最大スプリング長に[ボールサイズ]を掛けたものと同じ大きさです。
  • [最小最大平均(Average Min Max)] …”Size = ((Min + Max) / 2) × [ボールサイズ]”

[ボールサイズ(Ball Size)]

取り付けられた辺の長さの割合。辺の長さは、選択したアルゴリズムに基づいて計算されます。この設定は、ばねの長さを掛けた係数です。これは球体の距離(半径)であり、同じメッシュの別の頂点が入ると、セルフコリジョンを回避するために頂点が偏向し始めます。この値を、頂点に独自の「スペース」を持たせたい頂点間の分数距離に設定します。値が高すぎると、常に頂点が多すぎて計算が遅くなります。レベルが低すぎると、他の頂点が近づきすぎて交差する可能性があります。これは、頂点を遅くするのに十分な時間が無い為です。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[ボールサイズ]の”-10.00″、”0.49″、”1.00″、”10.00″で比較

[剛性(Stiffness)]

ボールの膨張圧。

パーソナルスペースのそのボールはどれほど弾力性があるか。

剛性が高いという事は、頂点が、別の頂点がその空間に入るとすぐに反応することを意味します。

↓の例では、[ボールサイズ]を”2″に設定して試しています。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[剛性]の”0.001″、”1.000″、”100.000″で比較

[Dampening]

非弾性衝突の混合。頂点がそのように反応するか。

値が小さいと、頂点が近づきすぎるため、頂点の速度が低下します。高い値はそれを拒絶します。

↓の例では、[ボールサイズ]を”2″に設定して試しています。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[Dampening]の”0.001″、”0.500″、”1.000″で比較

他のオブジェクトとの衝突は、(他の)[コリジョン]パネルで設定されます。別のオブジェクトと衝突するには、少なくとも1つの共通レイヤーを共有する必要があります。

[ソルバー(Solver)]

この[ソルバー]パネルの設定により、シミュレーションの精度が決まります。

[Step Size Min]

フレームあたりの最小シミュレーションステップ。ソフトボディが動きの速い衝突オブジェクトを見逃す場合は、この値を増やします。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[Step Size Min]の”10″、”1000″、”2000″で比較

[最大(Max)]

フレームあたりの最大シミュレーションステップ。通常、シミュレーションのステップ数は動的に(エラー制限付きで)設定されますが、おそらくそれを変更する正当な理由があります。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[最大]の”0″、”500″、”1000″で比較

[Auto Step]

[Auto Step]サイズには、速度を使用します。ソルバーは物の動きの速さに基づいて、実行する必要のある作業量を把握するのに役立ちます。

[エラー上限(Error Limit)]

ルンゲクッタODEソルバーの計算の精度。低い値で正確に、高い値で高速になります。

提供されるソリューションの全体的な品質を決定します。ソルバーが衝突をチェックする精度を定義する最も重要な設定。平均辺長の半分の値から始めます。目に見えるエラー、ジッター、または過度に誇張された応答がある場合は、値を減らします。ソルバーは、それがどの程度「悪い」かを追跡し、エラー制限により、ソルバーは「適応ステップサイジング」を実行します。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG

[診断(Diagnostics)]

[コンソールに出力(Print Performance to Console)]

ソルバーの動作をコンソールに出力します。

この項目にチェックを入れると、ソルバーの進行具合をフレーム毎にコンソールに表示するようになります。

Blender システムコンソール 3DCG コリジョン ソフトボディ 物理シミュレーション
[コンソールに出力]を有効にした結果の、コンソール上の表示

この「コンソール」というのは、[ウィンドウ]>[システムコンソール切替え]から表示させることが出来るコンソールの事のようです。

Blender システムコンソール 3DCG
[ウィンドウ]>[システムコンソール切替え]

ちなみに、表示させたシステムコンソールは、↓のような別ウィンドウで表示されます。再度、このコンソールを非表示にしたい場合は、[ウィンドウ]>[システムコンソール切替え]を操作します。

Blender システムコンソール 3DCG
システムコンソール
[概算行列(Estimate Matrix)]

行列を推定し、COM(中心)、ROT、SCALEに分解します。

[ヘルパー(Helpers)]

これらの設定により、Blenderが同じレイヤー上の別の衝突オブジェクトに近づくか、実際に交差(カット)したときに、ソフトボディがどのように反応(変形)するかを制御できます。

[チョーク(Choke)]

コリジョンターゲット内の「粘度」。

頂点または辺が衝突メッシュを貫通すると、頂点または辺を落ち着かせます(流出速度を下げます)。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[チョーク]の”0″、”5″、”10″で比較
[ファジー(Fuzzy)]

コリジョンの不確実性。

値が高いと、衝突処理は速くなりますが、安定性が低下します。シミュレーションは高速ですが、制度は低くなります。

Blender コリジョン ソフトボディ 物理シミュレーション 3DCG
[ファジー]の”0″、”5″、”10″で比較

memo: 『コリジョン』が上手く動作しない時の修正方法

設定したコリジョンが適切に動作しない場合は、次のことを試すことが出来ます。

  • ソフトボディオブジェクトには、コリジョンオブジェクトよりも多くの細分化が必要です。ソフトボディオブジェクトに、衝突に関与する可能性が最も高いと分かっている戦略上重要な領域にループカットを追加します。
  • 面の法線の方向を確認してください。
  • コリジョンオブジェクトに鋭いスパイクがある場合、それらはソフトボディを貫通する可能性があります。
  • ソルバーの解像度は、ソフトボディの頂点が移動する速度と一致する必要があります。パラメータ[エラー上限]を下げ、[Step Size Min]を慎重に増やします。
  • 外側と内側は十分に大きくする必要がありますが、反対側の面のゾーンが重ならないようにする必要があります。そうしないと、反対方向に力が掛かります。
  • 強い力を使用する場合は、大きなゾーンを使用する必要があります。
  • 頂点をはじくのが難しい場合は、チョークを十分に高い値に設定します(必要に応じて完全に上げます)。
  • 衝突する面は制御が難しく、長い計算時間が必要です。それらを使用しないようにしてください。

多くの場合、コリジョンオブジェクトとして使用する単純化されたメッシュを作成する方が良いですが、アニメーションメッシュを使用している場合、これは難しい場合があります。

[フィールドの重み(Field Weights)]

ソフトボディの頂点は、風、フォースフィールド、及び共通のレイヤーにある物理フィールドの効果など、レイヤーに適用される全てのフォースフィールド(通常はパーティクルに)と相互作用します。

『フォースフィールド』について詳しくは、下記記事をご覧ください。

参考にさせて頂いたサイト・ページ一覧

モディファイアー関連の記事のご紹介

この記事の他にも、Blenderの様々なモディファイアーについて、機能や使い方を私自身も試しながらではありますが、ご紹介させていただいております。よろしければ、こちらも併せてご覧ください。

生成

Blenderに関する記事や作品をまとめたページ作りました!

Pocket