ジャンル雑多なゲーム・ゲーム制作関連の色々な情報を取り扱っているブログ。最近はBlenderについてが中心。
[Blender 2.8] 布の表現 [クロスシミュレーション]

[Blender 2.8] 布の表現 [クロスシミュレーション]

[Blender 2.8] 布の表現が出来る『クロスシミュレーション』の、機能と使い方のご紹介

今回の記事は、Blenderでの『物理シミュレーション』で、布などの柔らかい材質のように変形したり、動作をシミュレーションして簡単にアニメーションを作成するのに便利な、『クロスシミュレーション』についてです。

※2020年8月24日 画像の追加挿入を行いました。
※2020年8月27日 加筆修正を行いました。
※2020年11月10日 加筆修正を行いました。

目次

クロスシミュレーションとは

クロスシミュレーションは、コンピュータグラフィックスの最も難しい側面の1つであり、現実の布から考えると一見単純そうに見えるアイテムですが、実際には非常に複雑な内部および環境の相互作用があります。クロスは通常、2Dメッシュとしてモデル化され、布地、旗、バナーなどの実世界のオブジェクトをシミュレートします。 また、3Dオブジェクトのモデリングとして、テディベア、枕、風船、ボールなどにも使用できます。

Blender クロス シミュレーション 3DCG モデリング マネキン 衣服 スカート
クロスシミュレーションを使用して作成した衣服
Blender クロス シミュレーション パーティクル ヘアー 3DCG モデリング テディベア
クロスシミュレーションを使用して作成したテディベア

クロスは、他の移動オブジェクト、風や他の力、および一般的な空気力学力モデルと相互作用して影響を受けます。

Blender クロス シミュレーション 風 フォースフィールド 3DCG モデリング 旗 日本国旗
クロスシミュレーションと[力]のフォースフィールドを使用して作成した旗

ちなみに、[力]のフォースフィールドについて詳しくは、下記記事の[力(Force)]の項をご覧ください。

クロスモディファイアー

クロスの物理演算がメッシュに追加されると、『クロスモディファイアー』がオブジェクトのモディファイアースタックに追加され、1つのモディファイアーとして扱う事が出来ます。もちろん、その後は、[アーマチュア]や[スムーズ]などの他のモディファイアーと組み合わせて使用することも出来ます。この場合、メッシュの最終的な形状はモディファイアースタックの順序に従って計算されます。例えば、モディファイアーの順序が[クロス]の下に[スムージング]といった並びである場合、クロスの形状を計算した後でスムージングされます。

Blender クロス シミュレーション 3DCG モデリング マネキン 衣服  モディファイアー スムーズ
[クロス]モディファイアーと[スムーズ]モディファイアーの併用

また、簡単に、素早く、メッシュの全体的な変形を行うのにも役立ちます。『クロスモディファイアー』を[適用]すると、その時点のフレームでメッシュの形状を固定し、モディファイアーを削除できます。

メッシュの形状の計算

シミュレーションの結果はキャッシュに保存されるので、メッシュの形状は、一度アニメーションのフレームに対して計算されると、再計算する必要がありません。また、シミュレーションに変更を加えた場合は、キャッシュをクリアしてシミュレーションを再実行することで再計算してくれます。

全てのフレームでのクロスの形状の計算は自動で、バックグラウンドで行われます。したがって、シミュレーションが計算している間に行っている他の作業を阻害されることなく続ける事が出来ます。ただし、PCの能力とシミュレーションの複雑さによっては、非常にCPUに負荷が掛かり、動作を阻害する場合もあります。メッシュの計算に必要なCPUの量が場合によって異なる、という点はご留意ください。

フレームの計算は最初のフレームから順に行ってください。フレームをジャンプして、それ以前のフレームでまだ計算が済んでいない途中のフレームから行うと、シミュレータが正確な計算結果を表示できない場合があります。

『パーティクルシステム』の『キャッシュ』についてですが、共通する内容が多いので、下記記事も参考までに併せてご覧ください。

クロスの基本的な使い方

  1. クロスオブジェクトを、通常の開始形状としてモデリングして、用意しておきます。(ここで使用するオブジェクトは、ある程度細分化されたメッシュオブジェクトを使用して下さい。)
Blender クロス シミュレーション 3DCG モデリング メッシュ
  1. [プロパティエディター]>[物理演算プロパティ]で[クロス]をクリックし、オブジェクトにクロスシミュレーションを付与します。
Blender クロス シミュレーション 3DCG モデリング メッシュ
  1. クロスと相互に作用する他のコリジョンオブジェクトをモデリングし、用意しておきます。他のメッシュ変形系のモディファイアーの後に、コリジョンモディファイアーがモディファイアースタックの最後にある事を確認します。
Blender クロス シミュレーション 3DCG モデリング メッシュ コリジョン
  1. 再生([スペースキー])して、シミュレーションを実行します。(普通に布同士で貫通していたりしますが、設定によっては貫通を防ぐことが出来ます。詳しくは[セルフコリジョン]の項をご覧ください)
Blender クロス シミュレーション 3DCG モデリング メッシュ

クロスシミュレーションで重要な4つの「スプリング」について

内部的には、クロスの物理学はメッシュの頂点を接続する「仮想スプリング」でシミュレートされます。

この、クロスの曲がり方を制御するスプリングには4つのタイプがあります。これらの4つのタイプは以下のように定義されます。

  • 引張スプリング(Tension Springs) …布の硬さを制御します。
  • 圧縮スプリング(Compression Springs) …布を折りたたむ、または圧縮するのに必要な力の量を制御します。
  • せん断スプリング(Shear Springs) …「圧縮スプリング」と似ていますが、角変形を制御します。
  • 角度曲げスプリング(Angular Bending Springs) …布が折りたたみや皺になりにくいかを制御します。
Blender クロス シミュレーション 3DCG モデリング メッシュ
スプリングそれぞれの強さを極端に出した4種類のクロスシミュレーション

これらの4つのスプリングタイプは、[物理演算プロパティ]パネルで個別に制御できます。(場合によっては[プロパティの重み]パネルでも制御可能です)これらの設定は、サーフェススプリングを制御しますが、オプションで、内部スプリングを3Dメッシュに使用して、『ソフトボディ』と同様に動作させることが出来ます。

Blender クロス シミュレーション 3DCG テディベア
[内部スプリング]を有効にして『ソフトボディ』のように動作させたテディベアモデル

ちなみに、『ソフトボディ』について、詳しくは下記記事をご覧ください。

[クロス]の詳細設定項目一覧

[Cloth Presets]

クロスのプリセットのサンプル。

デフォルトで用意されているのは以下の5種類になります。

  • [Cotton]
  • [Denim]
  • [Leather]
  • [Rubber]
  • [Silk]
Blender  クロス シミュレーション 3DCG
[Cloth Presets]

デフォルトで用意されているプリセットのサンプルの中から選択すると、クロスの設定が選択したサンプルのものに変化します。

Blender クロス シミュレーション 3DCG

既にリストにある物以外にも、[プリセット名(デフォルトでは”New Preset”)]を自分で決めて、[+]ボタンから新しいプリセットを追加できます。逆に既にあるプリセット名の右にある[-]ボタンを押すと、プリセットが削除されてしまうのでご注意さい。

ちなみに、デフォルトで用意されているプリセットサンプルを使用してみると、↓のようなシミュレーションになります。

Blender クロス シミュレーション 3DCG
プリセット各サンプルのシミュレーション比較

[品質のステップ数(Quality Steps)]

フレーム毎のシミュレーションステップ数を設定します。値が大きい程品質が良くなりますが、遅くなります。

Blender クロス シミュレーション 3DCG
[品質のステップ数]の”1″と”10″で比較

[速度の乗算(Speed Multiplier)]

クロスシミュレーションの進行速度を調整します。

Blender クロス シミュレーション 3DCG
[速度の乗算]の”1.0″と”5.0″で比較

[物理プロパティ(Physical Properties)]

[頂点の質量(Vertex Mass)]

クロスの材質の各頂点の質量。

Blender クロス シミュレーション 3DCG
[頂点の質量]の”0.1kg”と”1.0kg”で比較

[空気の粘性(Air Viscosity)]

空気には通常、落下する物体を遅くする一定の密度があります。

Blender クロス シミュレーション 3DCG
[空気の粘性]の”1.0″と”5.0″で比較

[曲げモデル(Bending Model)]

  • [角度(Angular)] …角度曲げばねによるクロスモデル。
  • [リニア(Linear)] …リニア曲げばねによるクロスモデル(旧方式)。
Blender クロス シミュレーション 3DCG
[曲げモデル]の[角度]と[リニア]で比較

[剛性(Stiffness)]

[引張(Tension)]

材質が引っ張られるのにどれくらい抵抗するか。

ちなみに、[曲げモデル]で[リニア]を選択していた場合、この項目が非表示になります。

Blender クロス シミュレーション 3DCG
[剛性]>[引張]の”0.0″と”15.0″で比較
[圧縮(Compression)]

材質が圧縮されるのにどれくらい抵抗するか。

Blender クロス シミュレーション 3DCG
[剛性]>[圧縮]の”0.0″と”15.0″で比較
[せん断(Shear)]

せん断されるのにどれくらい抵抗するか。

Blender クロス シミュレーション 3DCG
[剛性]>[せん断]の”0.0″と”15.0″で比較
[曲げ(Bending)]

材質が曲がるのにどれくらい抵抗するか。

Blender クロス シミュレーション 3DCG
[剛性]>[曲げ]の”0.0″と”15.0″で比較

[減衰(Damping)]

[引張(Tension)]

引っ張られる時の減衰量。

ちなみに、[曲げモデル]で[リニア]を選択していた場合、この項目が非表示になります。

↓の例では、前提として両方[剛性]>[引張]の値を”0.0″に設定しています。

Blender クロス シミュレーション 3DCG
[減衰]>[引張]の”0.0″と”50.0″で比較
[圧縮(Compression)]

圧縮時の減衰量。

↓の例では、前提として両方[剛性]>[圧縮]の値を”0.0″に設定しています。

Blender クロス シミュレーション 3DCG
[減衰]>[圧縮]の”0.0″と”50.0″で比較
[せん断(Shear)]

せん断時の減衰量。

↓の例では、前提として両方[剛性]>[せん断]の値を”0.0″に設定しています。

Blender クロス シミュレーション 3DCG
[減衰]>[せん断]の”0.0″と”50.0″で比較
[曲げ(Bending)]

曲げ挙動時の減衰量。

↓の例では、前提として両方[剛性]>[曲げ]の値を”0.0″に設定しています。

Blender クロス シミュレーション 3DCG
[減衰]>[曲げ]の”0.0″と”50.0″で比較

[内部スプリング(Internal Springs)]

内部に体積のある構造を、メッシュの反対側とつながるスプリングを生成してシミュレートします。

クロスシミュレーションは、メッシュの表面上の頂点を接続する「スプリング」を通じてシミュレーションされます。ただし、通常、「スプリング」はサーフェス上でのみ相互作用し、2Dサーフェスにのみ適用されます。

そこで、この項目のチェックボックスにチェックを入れて、有効化することによって、「内部スプリング」を使用し、メッシュを『ソフトボディ』と同様に動作させることができます

Blender クロス シミュレーション 3DCG テディベア
[内部スプリング]チェック無し
Blender クロス シミュレーション 3DCG テディベア
[内部スプリング]チェック有り

ちなみに、『ソフトボディ』について、詳しくは下記記事をご覧ください。

[最大生成スプリング長(Max Spring Creation Length)]

生成中の内部スプリングが持つことが出来る最大の長さ。内部ポイントとの間の距離がこれより大きい場合、これらのポイントとの間に内部スプリングは作成されません。

この項目が”0″の場合は、長さ制限無しになります。

今回使った↓のテディベアのモデルの場合は、”0.15″にすると皺が出来たり、少し動きがスプリングの働きが鈍くなってクタッとした印象になりました。ここの数値は使用するモデルの大きさを基に丁度良い値に調整してください。

Blender クロス シミュレーション 3DCG テディベア
[最大生成スプリング長: 0.00]
Blender クロス シミュレーション 3DCG テディベア
[最大生成スプリング長: 0.15]
[最大生成角度(Max Creation Diversion)]

内部スプリング最大角度。頂点の法線から分岐して内部ポイントを繋ぐのに使用可能な最大角度。

円錐オブジェクトを『サブディビジョンサーフェスモディファイアー』でレベル2程度細分化させ、[最大生成スプリング長]を”0.75″に設定したものを使用して比較しました。

Blender クロス シミュレーション 3DCG 円錐
[最大生成角度]の”0°”と”45°”で比較
[サーフェス法線をチェック(Check Surface Normals)]

内部スプリングと接続するポイントは、法線と反対方向である必要があります。

円錐オブジェクトの右側半分だけ、敢えて法線方向を反転させたものを使用して比較しました。

Blender クロス シミュレーション 3DCG 円錐 法線
[サーフェス法線をチェック]のチェックの有無で比較
[引張(Tension)]

材質が引っ張られるのにどれくらい抵抗するか。

Blender クロス シミュレーション 3DCG テディベア
[引張: 0.0]
Blender クロス シミュレーション 3DCG テディベア
[引張: 15.0]
[圧縮(Compression)]

材質が圧縮されるのにどれくらい抵抗するか。

Blender クロス シミュレーション 3DCG テディベア
[圧縮: 0.0]
Blender クロス シミュレーション 3DCG テディベア
[圧縮: 15.0]
[頂点グループ(Vertex Group)]

内部スプリングの剛性([引張]と[圧縮])を細かく制御するための頂点グループ。

メッシュの部分毎に内部スプリングをどのくらいの強さで割り当てたいのかを指定出来ます。

ちなみに、『頂点グループ』そのものについてや、基本的な扱い方などは、下記記事をご覧ください。

この[頂点グループ]を設定した場合、[引張]と[圧縮]で設定した値は無視され、[最大引張]と[最大圧縮]で設定した値と頂点グループのウェイト値で、剛性が決定するようです。

ウェイト値”1.0″を割り当てた部分が、[最大引張]と[最大圧縮]で設定した剛性になり、ウェイト値”0.0″を割り当てた部分が、引張も圧縮も”0.0″の剛性になるようです。

今回は、一部分だけウェイト”1.0″を割り当て、他全てに”0.0″を割り当てた頂点グループを使用してみました。

Blender クロス シミュレーション 3DCG テディベア 頂点グループ
一部だけウェイト”1.0″を割り当てたテディベアモデル

この頂点グループを設定してシミュレーションさせてみました。全体的に(特に末端が)詰め物が足りない感じで皺が強く出る仕上がりになりました。

Blender クロス シミュレーション 3DCG テディベア
[頂点グループ]を設定したテディベアモデル
[最大引張(Max Tension)]

引っ張られにくさの最大値。

[頂点グループ]に頂点グループを設定した場合に、使用される値。

[最大圧縮(Max Compression)]

圧縮の剛性の最大値。

[頂点グループ]に頂点グループを設定した場合に、使用される値。

[圧力(Pressure)]

閉じたクロスメッシュ内で圧力をシミュレートします。

このクロスの[圧力]のチェックボックスにチェックを入れて有効化することにより、「ある種の流体」で満たされた風船やボールなどのソフトシェルオブジェクトのシミュレーションが可能になります。この「ある種の流体」は、気体または液体として見る事ができますが、どちらも「流体」として一般化されています。

Blender クロス シミュレーション 3DCG モデリング ボール
[圧力]で作成した膨らんでいくボール
Blender クロス シミュレーション 3DCG モデリング 風船
[圧力]と『爆発モディファイアー』で作成した破裂する風船

ちなみに、掲載しましたgifの風船が割れるアニメーション作成時に使用した、『爆発モディファイアー』について、詳しくは下記記事をご覧ください。

非多様体メッシュは、クロスの圧力で動作しますが、圧力はメッシュの穴から逃げ、ドリフト力または推進力が生じます。これを回避する1つの方法は、頂点グループを使用して、メッシュの非多様体部分を除外することです。

Blender クロス シミュレーション 非多様体 3DCG モデリング
非多様体メッシュで[圧力]を設定した例

非多様体

Non-Manifold(ノンマニホールド)ともいい、点接触や線接触により厚さがゼロになる状態、BREPモデルで厚さがゼロになってしまう部分のことです、数学的にはさらに厳密な定義が存在します。

引用元: CAE用語集 – 非多様体 | MBD・CAEソリューションカンパニー | 株式会社 IDAJ
[圧力(Pressure)]

メッシュに常に加えられる均一な圧力。この値は負の値になると、内破や、オブジェクトが外向きの内側に押す圧力がある場合をシミュレートします。

Blender クロス シミュレーション 3DCG モデリング ボール
[圧力]の値の変化による、ボールの膨張と収縮
[Custom Volume]

[ターゲット体積]をクロスの初期ボリュームとして使用します。これにより、最初にオブジェクトを膨張させるために圧力を使用する必要がなくなります。

[ターゲット体積(Target Volume)]

内外の圧力が同じになるメッシュの体積。”0″に設定すると、体積は全ての圧力に対し影響がなくなります。

↓のgifでは全て[圧力]の値を”0″に設定したもので比較しています。

Blender クロス シミュレーション 3DCG モデリング ボール
[ターゲット体積]の”10.0″と”50.0″と”100.0″で比較
[係数(Factor)]

空気圧のスケーリング係数。全体的な圧力に対するスカラー制御。

Blender クロス シミュレーション 3DCG モデリング ボール
[係数]の値の変化による、ボールの膨張と収縮
[頂点グループ(Vertex Group)]

頂点グループのウェイト値で、メッシュのどの部分に圧力をかけるかを制御します。ウェイト値が”0″の場合は圧力が無い事を意味し、ウェイト値が”1″の場合は最大圧力をそのまま受けることを意味します。

ウェイト値が”0″の頂点を持つ面は、[ターゲット体積]の計算から除外されます。

ちなみに、『頂点グループ』そのものについてや、基本的な扱い方などは、下記記事をご覧ください。

例えば、風船の上部に圧力がかかるようにウェイトペイントを施した頂点グループを設定するとします。

Blender 頂点グループ 3DCG モデリング 風船 ウェイトペイント
ウェイトの値を上部になるほど強く設定した風船の頂点グループ

[頂点グループ]を設定していない方(下記gifの左側)は、圧力が全体にかかるのに対し、[頂点グループ]を設定した方(下記gifの右側)は、圧力が上部に集中してかかっているのが分かるかと思われます。

Blender クロス シミュレーション 3DCG モデリング 風船
[頂点グループ]を設定していない風船(←)、[頂点グループ]を設定した風船(→)

[キャッシュ(Cache)]

クロスのキャッシュ設定は、他のダイナミック(動的)システムと同じです。詳細については、『パーティクル』のキャッシュを参照してください。

既にシミュレーションを実行した後でクロスオブジェクトを移動または編集する場合は、キャッシュをクリアする必要があります。そうでない場合、Blenderは、現在のキャッシュされたメッシュの頂点の位置を使用しようとする時に、キャッシュから読み出されます。

memo:『サブディビジョンサーフェスモディファイアー』を併用する時の注意点

ベイク/キャッシュは、細分化レベル毎に行われる為、『サブディビジョンサーフェスモディファイアー』の[レンダリング]と[プレビュー]には、同じ細分化レベルを指定してご使用ください。

『サブディビジョンサーフェスモディファイアー』について、詳しくは下記記事をご覧ください。

[シェイプ(Shape)]

[固定グループ(Pin Group)]

ピン留めとして使用する『頂点グループ』。

クロスの[シェイプ]では、クロスを『頂点グループ』で固定することで制御できます。固定される強さは、『頂点グループ』で設定した各頂点の『ウェイト』値で制御します。

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

例えば、下の画像のようなマネキン(モドキ)のオブジェクトと、『物理演算』の[クロス]を設定した赤いスカートのオブジェクトを用意します。

Blender 物理演算 クロス 3DCG モデリング マネキン スカート

かなり余裕を持たせてスカートを履かせているのもあり、『頂点グループ』を設定していない場合、ご覧の通り、スカートがそのまま下まで落ちてしまいます。

Blender 物理演算 クロス コリジョン 3DCG モデリング マネキン スカート
[固定グループ]を設定しなかった場合

一部分だけ固定するための『頂点グループ』を新規作成し(名前を[cloth_fixed]に設定)、↓の画像のようにウェイト値を設定しました。

Blender 物理演算 クロス ウェイトペイント 頂点グループ 3DCG モデリング マネキン スカート
[固定グループ]用に頂点グループを作成

作成した『頂点グループ』を[プロパティエディター]>[物理演算]>[クロス]>[シェイプ]>[固定グループ]に入力します。

Blender 物理演算 クロス 頂点グループ 3DCG モデリング スカート
[固定グループ]に作成した頂点グループを設定

この状態で再生すると、今度は下まで落ちずにマネキンにちゃんと着せられました。

Blender 物理演算 クロス コリジョン 頂点グループ 3DCG モデリング マネキン スカート
[固定グループ]を設定した場合

[剛性(Stiffness)]

[固定グループ]で設定したピン(頂点の目標位置)のスプリングの堅さ。

[縫合(Sewing)]

ピン留めと同様に布を固定する別の方法に、「スプリング縫合」という方法があります。「スプリング縫合」は、クロスメッシュの一部の頂点をクロスメッシュの別の部分の頂点に向かって引っ張る仮想スプリングです。これは、クロスメッシュの頂点を所定の場所にバインドさせたり、別のオブジェクトにバインドするピン留めとは異なります。

例えば、マントの留め金は、縫合スプリングで作成出来ます。スプリングでキャラクターの首の周りにマント2つの隅を引っ張り、マントをキャラクターの首と肩の周りを自由にスライド出来るため、マントをキャラクターの首に固定するよりもリアルなシミュレーションが可能になります。

「スプリング縫合」は、クロスメッシュに「どの面にも含まれていない辺」を追加し、その「どの面にも含まれていない辺」で、一緒に引っ張られるメッシュ内の頂点を接続して、実行します。

Blender クロス シミュレーション 縫合 トップス 洋服 3DCG モデリング
[縫合]を使って服を作成

この方法を使った洋服の作り方の詳しい手順については、わかりやすく説明してくださっている動画のリンクを貼っておきますので、↓の動画をご覧になりながら試してみてください。

[最大縫合力(Max Sewing Force)]

「スプリング縫合」することによって加えることができる最大の力。

“0”で無制限を意味しますが、「スプリング縫合」の両端が離れている初期フレームに極端な力が加わって不安定になる可能性があるため、ほとんどの場合、”0″にすることはオススメしません。

また、あまり低い場合も、力が弱すぎて縫合が間に合わず、重力に負けて上手く縫合できない可能性がありますのでオススメできません。

Blender クロス シミュレーション 縫合 トップス 洋服 3DCG モデリング
[最大縫合力: 5]
Blender クロス シミュレーション 縫合 トップス 洋服 3DCG モデリング
[最大縫合力: 50]

[収縮係数(Shrinking Factor)]

クロスを縮める係数。

負の値を指定すると、布の膨張量を制御できます。

Blender クロス シミュレーション 縫合 トップス 洋服 3DCG モデリング
[収縮係数: 0.0]
Blender クロス シミュレーション 縫合 トップス 洋服 3DCG モデリング
[収縮係数: 0.5]
Blender クロス シミュレーション 縫合 トップス 洋服 3DCG モデリング
[収縮係数: -0.5]

[動的メッシュ(Dynamic Mesh)]

クロスモディファイアーの上に配置された『シェイプキー』または『モディファイアー(アーマチュア等の変形モディファイアー)』を使用して、クロスの残りのシェイプをアニメートできます。

『シェイプキー』について、詳しくは下記記事をご覧ください。

有効にすると、残りの形状がフレーム毎に再計算され、ピン留めされていないクロスが『シェイプキー』または『モディファイアー』の補助を受けてキャラクターに従って潰れたり伸びたりしますが、それ以外は物理シミュレーションの制御下で自由に移動できます。

通常は、クロスは最初のフレームのオブジェクトの状態を使用してクロスの自然な残りの形状を計算し、シミュレーション全体で一定に保ちます。完全にリアリスティック(写実的)なシーンにはその通常のシミュレーションが妥当ですが、「スカッシュ・アンド・ストレッチ」を多く使用するカートゥーンスタイルのキャラクターの衣服には適していません。なので、そういったシーンのキャラクターの衣服には、この[動的メッシュ]が役立つかと思います。

「スカッシュ・アンド・ストレッチ」とは、アニメーション12の基本原則の”by far the most important”を説明するために使用される語句であり、Frank ThomasとOllie Johnastonの『The Illusion of Life』で説明されています。

引用、翻訳元: Squash and stretch – Wikipedia (英文)

例えば、↓のようなスカートと、アーマチュアを用意し、[ペアレント対象([Ctrl]+[P])]>[アーマチュア変形]で、『ペアレント』と「アーマチュアによる変形」の設定をしておきます。

Blender クロス シミュレーション アーマチュア ボーン ペアレント 3DCG モデリング スカート

「ピン留め」兼「アーマチュア」用の頂点グループを作成し、ウェイトを割り当てます。※この時、作成した頂点グループ名とボーン名が同じになっていないとボーンの移動等にスカートが着いて行かないのでご注意ください。

スカートにクロスシミュレーションを付与して、更に[固定グループ]に頂点グループを設定します。

Blender クロス シミュレーション アーマチュア ボーン ペアレント 3DCG モデリング スカート 頂点グループ ウェイトペイント
Blender クロス シミュレーション 3DCG モデリング

[キーフレーム挿入メニュー([I])]でキーフレームを打って、ボーンを動かす適当なアニメーションを作成します。

Blender ボーン アーマチュア キーフレーム アニメーション 3DCG モデリング

アニメーション再生して、スカートの動作を見てみますと、[動的メッシュ]にチェックを入れて有効にした場合は、ボーンの動きに沿ってメッシュが変形しているのに対し、チェックを入れず無効にした場合は、変形せずにボーンに追従した動作になっています。

Blender クロス シミュレーション アーマチュア ボーン 3DCG モデリング スカート
[動的メッシュ]チェック有り
Blender クロス シミュレーション アーマチュア ボーン 3DCG モデリング スカート
[動的メッシュ]チェック無し

[レストシェイプキー(Rest Shape Key)]

レストスプリングの長さに使用するシェイプキー。『シェイプキー』が1つでも作成されている場合に表示されるようです。

『シェイプキー』について、詳しくは下記記事をご覧ください。

例えば、↓の画像のような2つのシェイプキー、”straight”と”zigzag”を作成するとします。

Blender シェイプキー 3DCG モデリング スカート

[レストシェイプキー]に”straight”を設定し、シェイプキーのリストビューの中の”zigzag”の値を”1.0″にした場合、↓のように、[固定グループ]でピン留めされているスカート上部は”zigzag”の形状、それ以外の残りの部分は”straight”の形状になります。

Blender クロス シミュレーション アーマチュア ボーン 3DCG モデリング スカート シェイプキー

ちなみにその逆の、[レストシェイプキー]に”zigzag”を設定し、シェイプキーのリストビューの中の”straight”の値を”1.0″にした場合は、↓のように、[固定グループ]でピン留めされているスカート上部は”straight”の形状、それ以外の残りの部分は”zigzag”の形状になります。

Blender クロス シミュレーション アーマチュア ボーン 3DCG モデリング スカート シェイプキー

[コリジョン(Collisions)]

布が3D空間内で他のオブジェクトと衝突する、適切なシミュレーションを確実に行うには、いくつかの項目を設定して連携させる必要があります。

ちなみに、衝突の判定を行う他のオブジェクトは、共有レイヤーを介してクロスオブジェクトに示される必要があり、そのオブジェクトは、メッシュオブジェクトでなければならない、という制限があります。

そして、コリジョンに参加させることをクロスオブジェクトに通知する必要があります。クロスオブジェクトの場合は、この[コリジョン]パネルからその設定を行います。

memo: コリジョン検出で問題が発生した場合の修正方法

  • 最速の解決策は、「オブジェクト/セルフコリジョンの[距離]」を増やす事です。これは、クリッピングを修正する最も速い方法です。ただし、精度は低くなり、見た目も悪くなります。この方法を使用すると、クロスが宙に浮いているように見え、非常に丸みのある見た目になります。
  • 2番目の方法は、([クロス]パネルの)[品質]を上げることです。これにより、シミュレーターのステップが小さくなり、高速で移動する衝突が捕捉される可能性が高くなります。[コリジョン]の[品質]を上げて、より多くの反復を実行して衝突を解決する事も出来ます。
  • どの方法でも解決しない場合は、後で[編集モード]で編集するという事もできます。
  • 変形するメッシュによって布が破れた場合、[剛性]設定値を増やします。

[品質(Quality)]

シミュレーションの詳細さと品質の良さの一般的な設定。数値が大きい程時間が掛かりますが、布の裂け目や貫通が少なくなります。

Blender クロス コリジョン シミュレーション3DCG モデリング モンキー
[品質]の”1″と”20″で貫通度合いの比較

[オブジェクトのコリジョン(Object Collisions)]

他のオブジェクトとのコリジョンを有効にします。

クロスと衝突するオブジェクトがある場合、そのオブジェクトには『コリジョン』の物理演算を有効にしておかなければなりません。

Blender クロス コリジョン シミュレーション3DCG モデリング モンキー
[オブジェクトのコリジョン]チェック有り
Blender クロス コリジョン シミュレーション3DCG モデリング モンキー
[オブジェクトのコリジョン]チェック無し

もし、衝突させたいオブジェクトが、『メッシュ』や『テキスト』以外のオブジェクト(『カーブ』など)である場合、[メッシュに変換]を使用してオブジェクトをメッシュオブジェクトに変換する必要があります。

Blender カーブ メッシュ変換 3DCG
『オブジェクトコンテクストメニュー([右クリック])』→[メッシュに変換]

[距離(Distance)]

コリジョンオブジェクト同士で衝突判定が行われる最小距離。

値が小さいとエラーが発生する可能性がありますが、速度が多少上がります。ですが、値が大きいと、大きすぎて遅くなる可能性があるため、非現実的な結果になります。その中間の、適当な値を見つけ設定する事が最善です。

Blender クロス コリジョン シミュレーション3DCG モデリング モンキー
[距離]の”0.001m”と”1m”で比較

ちなみに、”0.001m”に設定しても目に見えて空いている隙間は、『コリジョン』を付与している床オブジェクト側で設定されている、[外側の厚さ]の”0.02″分の厚さです。

Blender クロス コリジョン シミュレーション3DCG モデリング モンキー
モンキーと床の間の、[コリジョン]>[ソフトボディとクロス]>[外側の厚さ]の”0.020″分の厚さ
[撃力を制限(Impulse Clamping)]

衝突の撃力を制限し、不安定になるのを防ぎます(0.0で無効)。

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

ここで設定したコレクションのみに、衝突判定を制限します。

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

この項目を有効化して、自身との衝突判定を有効にし、自身で自身と貫通しないようにします。

これにより、シミュレーションの計算時間が長くなりますが、よりリアルな結果が得られます。

[セルフコリジョン]を無効のままにした場合だと、激しく動かした時などに、布が自身と貫通しあったり、ぐちゃっと絡んでしまったりしやすいです。

Blender クロス シミュレーション アーマチュア アニメーション 3DCG モデリング スカート 人間
[セルフコリジョン]にチェック無しでアニメーション

対して、[セルフコリジョン]を有効にした場合は、調整次第で布自身との貫通や、絡んでしまう事を防ぐ事が出来ます。

Blender クロス シミュレーション アーマチュア アニメーション 3DCG モデリング スカート 人間
[セルフコリジョン]にチェック有りでアニメーション
[摩擦(Friction)]

クロスが衝突した時の滑りやすさの係数。例えば絹は綿よりも摩擦係数が低いです。

“5.0”で試した時の方が、自身と接触後にスルリと簡単に解けているのに対し、”50.0″で試した時の方は、自身と接触後に、ギリギリ絡んではいないのですが、少し解けにくくゴワついたような印象を受けました。

Blender クロス シミュレーション アーマチュア アニメーション 3DCG モデリング スカート 人間
[摩擦: 5.0]
Blender クロス シミュレーション アーマチュア アニメーション 3DCG モデリング スカート 人間
[摩擦: 50.0]
[距離(Distance)]

クロスの面同士で衝突判定が行われる最小距離。

値が小さいとエラーが発生する可能性がありますが、速度が多少上がります。ですが、値が大きいと、大きすぎて遅くなる可能性があるため、非現実的な結果になります。その中間の、適当な値を見つけ設定する事が最善です。

モデルによって違うでしょうし、個人によっても違ってくると思われますが、私の理想に近かったのは、”0.01″で実行した時の動作でした。

Blender クロス シミュレーション アーマチュア アニメーション 3DCG モデリング スカート 人間
[距離: 0.001]
Blender クロス シミュレーション アーマチュア アニメーション 3DCG モデリング スカート 人間
[距離: 0.01]
Blender クロス シミュレーション アーマチュア アニメーション 3DCG モデリング スカート 人間
[距離: 0.1]
[撃力を制限(Impulse Clamping)]

衝突の撃力を制限し、不安定になるのを防ぎます(0.0で無効)。

[縫合]使って「スプリング縫合」をする時に[セルフコリジョン]を有効にすると、どうしてもモコモコしてしまった時に、この[撃力を制限]を少し使うとモコモコするのが収まりましたので、そういった用途で活用できるかと思います。

Blender クロス シミュレーション 縫合 トップス 洋服 3DCG モデリング
[撃力を制限: 0.00]
Blender クロス シミュレーション 縫合 トップス 洋服 3DCG モデリング
[撃力を制限: 0.01]
[頂点グループ(Vertex Group)]

セルフコリジョン中に使用されない頂点を決める頂点グループ。

この頂点グループによって互いに衝突出来る頂点が決定できます。

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

例えば、↓のような右半分だけにウェイト値を割り当て、所属させた頂点グループを作ったとします。この項目にその頂点グループを設定して実行した場合、左半分だけセルフコリジョンが使用されたモコモコ状態になります。

Blender クロス シミュレーション 縫合 トップス 洋服 3DCG モデリング 頂点グループ ウェイトペイント
[頂点グループ]で右半分だけセルフコリジョンが使用されないように設定した場合

[プロパティの重み(Property Weights)]

このパネルでは、特定のクロスプロパティを特定の頂点グループで制限するために使用されます。

それらが制御するプロパティは、[物理プロパティ]パネルと[シェイプ]パネルの組み合わせにあります。

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

[構造グループ(Structural Group)]

構造的な剛性を制御するための頂点グループ。

[最大引張(Max Tension)]

引っ張られにくさの最大値。

[最大圧縮(Max Compression)]

圧縮の剛性の最大値。

[せん断グループ(Shear Group)]

せん断剛性を制御するための頂点グループ。

[最大せん断(Max Shearing)]

せん断スケーリングの最大値。

[曲げグループ(Bending Group)]

曲げ剛性を制御するための頂点グループ。

[最大曲げ(Max Bending)]

曲げにくさの最大値。

[収縮グループ(Shrinking Group)]

クロスを収縮する頂点グループ。

[最大収縮(Max Shrinking)]

クロスを収縮する最大量。

負の値を指定すると、クロスが伸びる最大量を制御します。

例えば↓のような頂点グループその1とその2を用意するとします。

Blender 円 ウェイトペイント 3DCG モデリング
作成した頂点グループ”グループ.001″(←)と”頂点グループ.002″(→)

[Silk]のプリセットサンプルで設定し、[プロパティの重み]を↓のように設定しますと、

Blender クロス シミュレーション 3DCG モデリング プリセット silk
プリセット[Silk]
Blender クロス シミュレーション 3DCG モデリング
[クロス]>[プロパティの重み]の設定

↓のような奇妙な形に歪んだスカートが出来ました。

Blender クロス シミュレーション アーマチュア アニメーション 3DCG モデリング スカート 人間
スカートのクロスシミュレーション実行結果

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

他の物理力学システムと同様に、クロスシミュレーションも外部のフォースエフェクターの影響を受けます。

ここでは、それぞれの『重力』や『フォースフィールド』の影響を、コントロールすることができます。

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

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

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

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

生成

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

Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください