BlenderDev-ClothSimulation - BlenderWiki



クロスシミュレーション



下のページは、クロスシミュレータの議論と実装についてのページです。
Blender クロスのメインの開発ページ




クロスサンプル

 

彫刻の人の上の布(motorsep氏作)






クロスサンプル

 

クロスサンプル




Blender 2.46 Cloth from Daniel Genrich on Vimeo.


クロス(布)シミュレーションは、CG の難問の一つで、一見簡単な現実世界のアイテムに思えますが、実際にはまだ非常に複雑な、内部と外部との交差判定があります。数年の開発の後、Blender に衣類や旗、横断幕などに使用できるような、非常に強力なクロスシミュレータを持つようになりました。
クロスの交差判定は、他の移動するオブジェクトや、風、その他の力によって、一般的な空気力学モデル同様に影響を受けます。その全てをユーザはコントロール可能です。

モード:ObjectMode
パネル: Editing コンテクスト→Modifiers パネル
ホットキー[F7](Object コンテクスト)

衣類としてデザインされたものや、開いている、もしくは閉じているどんな Mesh でもクロスになります。Cloth パネルは Physics サブコンテクストにあり、三つのオプションパネルで成り立っています。
クロスは開いた、もしくは閉じた Mesh で、重さがないため、いずれのクロスも1平方単位ごとに同じ密度や質量を持っていると仮定しています。

一般的にクロスは、Mesh の Grid プリミティブとして、もしくは Cube としてモデリングされることが多いですが、テディベアなどにすることもできます。ただし、閉じた Mesh のシミュレーションは、Blender の SoftBody システムの方が適しています。Cloth は布のシミュレーションに特化しています。

Cloth はオブジェクトのモディファイアスタック内のモディファイアの一つです。そのため、他のモディファイア、Armature や Smooth などと相互作用させることができます。この場合、Mesh の最終的な形状はモディファイアスタックの順序にしたがって計算されます。
例えばクロスのスムージングは、このモディファイアがクロスの形状を計算した後で行うべきでしょう。

Cloth モディファイアを[Apply]し、Mesh をそのフレームでの形状でフリーズや固定することができます。モディファイアは削除されます。例えば、平面の布をテーブル上に掛けるには、シミュレーションを実行後、モディファイアを Apply すればいいのです。つまり、シミュレーションを皆さんのモデリング時間を短縮するのに使用するということです。

シミュレーションの結果はキャッシュに保存されるため、一度アニメーションの1フレーム毎の Mesh 形状が計算されると、その後再計算を行う必要はありません。シミュレーションに変更が起こった場合、ユーザはキャッシュをクリアし、シミュレーションを再実行することができます。
最初のシミュレーションは完全に自動で行われ、ワークフローを中断する焼き付けや分割のようなステップはありません。

クロスの形状の計算はフレーム毎に自動的にバックグラウンドで行われます。そのため、シミュレーションが計算されている途中も作業を続けることができます。ただし、CPU インテンシブであり、PC のパワーやシミュレーションの複雑さに左右されます。Mesh の計算に必要な CPU の負荷の変化は、ラグとして皆さんは気づくでしょう。

フレームはジャンプしないで下さい:もしクロスシミュレーションは設定したが、Blender がまだシミュレーション中に形状を計算していない状態で、更にアニメーションのフレームを大きく前進した場合、クロスシミュレーションはその期間内の Mesh 形状の計算や表示を、もしその前のフレームの形状の計算が全然されていなければ、正しく行うことができないでしょう。



ワークフロー


クロスの一般的な作業プロセスは以下のとおりです。
[wiki]+基本形状となるクロスオブジェクトのモデリング
+クロスと衝突する、他の Deflection オブジェクトのモデリング
+オブジェクトのライティングとMaterial、Texture の適用
+必要なら、表面から湧き出る蒸気などの Particle をオブジェクトに追加
+望むような結果が得られるまで、シミュレーション実行およびオプションの調整。この段階では TimeLine ウィンドウの再生コントロールが非常に役に立ちます。
+状況に応じ、ある時点までシミュレーションを継続して行って Mesh を変化させ、新しいデフォルトの基本形状を得る
+細かな裂け目などを修正するため、1フレーム毎に Mesh を細かく編集
[/wiki]


Cloth パネルのオプション


Cloth は表示される3つのパネルでコントロールされます。これら3つのそれぞれのオプション(ボタンとコントロール)は、リファレンスマニュアルに記述されています。このセクションでは、エフェクトを得るためにこれらのオプションをどうやって使用すればいいかを書きます。

(訳注:面倒なのでこっちに一緒に書きます。また、少し構成を変えています)

Cloth パネル


[wiki]-''Preset(右上)'':このプリセットは名前でそれぞれを説明しています。単に使用したいタイプを選択すればOKです。後で各設定を更に調整することもできます。
--''Silk'': 絹です。多くのしわを表現するため、何度かサブディバイドしておくといいでしょう
--''Cotton'': 綿です。
--''Rubber'': ゴムです。
--''Denim'': デニムです。Rubber と Denim はあまり分割しないで、ローポリ気味の方がいいでしょう。
--''Leather'': 皮革です。
-''StructStiff'': 構造的な Stiffness(剛性)。斜め剛性も含んでいます。両方とも、クロスの構造の固さを定義しています。低い値でクロスは伸縮するゴムのようになります。
-''BendStiff'': 曲げの固さ。どれぐらいクロスにしわができるかを表現します。高い値で大きくはなりますが、必ずしもしわが増えるとは限りません。
-''Spring Damp'': 移動が減衰する量を指定します。いらない振動を防ぐことができ、アニメーションがスムーズになります。
-''Air Damp'': どれだけ空気の粘性が高いか、どれだけ粘性により移動が止まるかです。実際には、高い Air Damp 値で、クロスの移動が遅くなります。Air Damp を0にすると、月の表面の状態になります。
-''Quality'': 大きくすると、クロスが安定(高い Bend Stiff 値でも振動が少ない)し、更に衝突判定が改善されます。
-''Mass'': 大きくすると、より重いクロスになり、通常の布のように端がもう少し重くなります。
-''Gravity'': クロスに与えたい X、Y、Z方向の重力を指定します。
-''Pinning of cloth'': 指定した VertexGroup に属する Vertex を固定します。ウェイトが小さいと固定がゆるくなります。(訳注:原文なし)
-''Pin Stiff'': 元の位置とのスプリングの固さ。小さいとゆるくなります。(訳注:原文なし)
[/wiki]

Cloth collisions パネル


[wiki]-''Enable Collisions'': 衝突判定が有効になります。
-''Min Distance'': 衝突判定が動作する厚みです。クロスと衝突する Mesh 間の最低距離を保持するのに役立ちます。衝突時に貫通してしまう場合は、単純にこれを増やして下さい(このオプションは、この問題を解決できる二つのオプションのうちの一つです。最初の Cloth パネル内の Quality も増やしてみて下さい)。
-''Collision Quality'': 判定を繰り返す回数。多いと精度が高くなりますが遅くなります。(訳注:元記事なし)
-''Friction'': Friction(摩擦)で、クロスが衝突したオブジェクト上をどれだけ滑るかを設定できます。[[こちらの動画:http://www.youtube.com/watch?v=yuF0SCdtiL8]]で、クロス衝突時の Friction の効果を観ることができます。


-''Enable Selfcollisions'': 自分自身との衝突(セルフコリジョン)判定が有効になります。(訳注:元記事なし)
-''Min Distance'': セルフコリジョン判定が動作する厚みです。クロス内の他の部分との最低距離を保持するのに役立ちます。
-''Selfcoll Quality'': この値は、セルフコリジョンの多数の層の処理に役立ちます。(注意:Collision Quality は少なくとも Selfcoll Quality と同じ大きさにしないと動作しません!)
[/wiki]

Advanced cloth パネル



Stiffness のスケーリング
Vertex Group により、Mesh の Stiffness(固さ)・bending(曲げにくさ)を好きな量に設定できます。つまり、Meshの一部をしわしわに、その他の部分にはしわができないようにすることができるということです。値は start bending/stiffness (最初のパネル、Vertex Group が0でペイントされている部分)から、Max Stiffness(3つめのパネル、Vertex Group が1で塗られているところ)までになります。

この機能の評価用ファイル:Cloth scaling stiffness regression file

[wiki]-''StructStiff VGroup'': Structural Stiffness のスケーリングで使用される Vertex Group です。
-''BendStiff VGroup'': Bending Stiffness のスケーリングで使用される Vertex Group です。
-''StructStiff Max'': Structural Stiffness の最大値を指定します。
Structural Stiffness は、この最大値(Vertex Group で赤に塗られているところ)から、最初の Cloth パネルの minimum Structural Stiffness(Vertex Group で青に塗られているところ)までの間でスケーリングされます。仲介には線形補間関数が使用されます。
-''BendStiff Max'': Bending Stiffness の最大値を指定します。Bending Stiffness は、この最大値(Vertex Group で赤に塗られているところ)から、最初の Cloth パネルの minimum BendStiff(Vertex Group で青に塗られているところ)までの間でスケーリングされます。仲介には線形補間関数が使用されます。[/wiki]

last modified 13:23, 22 May 2008版を元にしています。




クロスの設定


最初に Cloth を有効化し、シミュレーションする素材を設定します。プリセットから一つを選択し、そこから始めるといいでしょう。
見てのとおり、重い素材ほど固く、軽い物はよく伸び、空気による影響を受けます。

次に、好きな場所に Cloth の移動とピン止めを行います。ピン止め(Pinning)は後で説明します。
もし、シミュレーション実行後に Cloth オブジェクトを移動した場合、キャッシュの保護の解除とクリアを行う必要があります。そうしないと、Blender は Cloth の描画を行おうとする時、キャッシュされた Mesh の Vertex の位置を使用しようとします。

シミュレーション後に行う Mesh 形状の編集も後述します。Cloth を OFF にすれば、通常の Mesh 編集プロセスで Mesh を編集できます。

最後に、TimeLine ウィンドウの Play ボタン、もしくは3Dウィンドウで[Alt]+[A]を押すことにより、シミュレーションを実行します。Cloth は現実世界のように落下し、Deflection オブジェクトと相互作用します。


Mesh の形状作成、Sculpt へのシミュレーションの使用


Cloth モディファイアを[Apply]することで、そのフレームの形状に Mesh を固定できます。その後も Cloth パネルの Cloth を ON にし、Start と End フレームを以降のシミュレーションを実行する範囲に設定することができます。

別のエイジングのサンプルとして旗をあげます。旗をシンプルなグリッドとして設定し、その端を旗のポールにピン止めします。50フレームほどシミュレート後、その旗をその「基本」位置とします。
Cloth モディファイアを Apply します。もしこの旗をシーン内ではためかせるなどの動きをさせたい場合は、再度カメラビューに入る時のフレーム範囲でもう一度 Cloth を ON にして下さい(前述)。


衝突判定


ほとんどの場合、布が3D空間内で釣り下がっているだけということはなく、その環境で他のオブジェクトと接触しています。適切なシミュレーションを確実に行うには、様々なアイテムを設定し、一緒に動作させなければなりません。
[wiki]+クロスのオブジェクトに衝突に参加するよう設定する必要があります。
+オプションで(とはいえ推奨ですが)、クロスに自身との衝突を設定します(Enable Selfcollisions)。
+他のオブジェクトはクロスオブジェクトと同じレイヤにし、クロスから見えるようにしなければなりません。
+他のオブジェクトは Mesh でなければなりません。
+他のオブジェクトは 移動もしくは別のオブジェクトでデフォームすることができます(Armature や ShapeKey など)。
+他の Mesh オブジェクトにクロスオブジェクトのデフレクタの設定をする必要があります。
+blend ファイルはシミュレーション結果を保存できるよう、ディレクトリに保存する必要があります。
+そしてシミュレーションを Bake します。シミュレータは設定されたフレームの範囲のクロスの形状を計算します。
+その後、特定のフレームのシミュレーション結果の編集や、クロス Mesh の調整を行うことができます。
+環境の調整や、オブジェクトのデフォームを行ったり、その後クロスシミュレーションを再度現在のフレームから実行することができます。[/wiki]


●Cloth Collision設定
それではクロスオブジェクトに衝突に参加するよう設定しましょう。クロスオブジェクトに、左のような Cloth Collision パネルがあります。

[Enable Collisions]
左クリックすることで、そのクロスオブジェクトに衝突しないよう移動する必要があることを告げます。

Min Distance
他のオブジェクトがこの近くにくると(Blender単位)、シミュレーションが回避するようにクロスを移動し始めます。

Collision Quality
シミュレーションをどれぐらい精度を高く、良くするかについての全体的な設定です。高い値で時間がかかりますが、裂け目やクロスのつきぬけがが確実に少なくなります。

Friction
クロスが Mesh オブジェクトと接触したとき、どれぐらいクロスが滑りやすくなるかの係数です。例えば、絹は綿に比べ、低い Friction 係数を持っています。

●セルフコリジョン(自分自身との衝突判定)
現実のクロスは自分自身を通過することはできません。そのため、通常は皆さんもクロスに自分自身への衝突判定が欲しいと思うでしょう。

[Enable Selfcollisions]
このボタンをクリックすることで、クロスオブジェクトに、自分自身を突き抜けないように命じます。これによりシミュレーションの計算時間が増えますが、もっとリアルな結果になります。遠くのほうにある旗などでは必要ないですが、近くにあるキャラクタのケープやブラウスにはこれを ON にした方がいいでしょう。

Min distance
もし問題が起こった場合、セルフコリジョンの Min distance 値を変更してみるといいでしょう。一番いい値は0.75で、速く動く物については1.0の方がいいでしょう。0.5は非常にリスキー(ほとんど突き抜けてるような状態)ですが、スピードアップします。

Selfcoll Quality
セルフコリジョンのクオリティを高くするには、単純に Selfcoll Quality 値を大きくすればより多くのセルフコリジョン層を処理できます。ただ、少なくとも Collision Quality 値と Selfcoll Quality 値を同じ値にする必要があることを覚えておいて下さい。

サンプル blend ファイル:Cloth selfcollisions

●共有レイヤ
例えば、二つのオブジェクトがあるとします。ズボンがレイヤ2と3に、キャラクタ Mesh がレイヤ1と2にあります。そしてこのズボンを前述の説明どおり、クロスにします。
このクロスがキャラクタの足で曲がるようにするには、このクロスオブジェクトからキャラクタが「見える」ようにしなければなりません。この原理は他のすべてのシミュレーションについても同様です。シミュレーションは共有するレイヤにあるオブジェクトとしか相互作用しません。この例では、両オブジェクトはレイヤ2を共有しています。

オブジェクトのレイヤの確認・変更を行うには、ObjectMode かつ3Dウィンドウ上でオブジェクトを右クリックで選択し、[M]キーでレイヤボタンのポップアップダイアログが出現します。このポップアップには、そのオブジェクトが属するすべてのレイヤが表示されています。
オブジェクトを一つのレイヤにのみ置くには、レイヤボタンを左クリックします。複数のレイヤにおく場合は、[Shift]を押しながらレイヤボタンを左クリックします。選択されたレイヤからそのオブジェクトを解除するには、単にそのレイヤボタンを[Shift]+左クリックすることでトグルで切り替わります。


●Mesh オブジェクトとの衝突判定
もし衝突するオブジェクトが NURBS Surface や Text オブジェクトのように Mesh オブジェクトではない場合、それらを Mesh オブジェクトに変換しなければなりません。
変換するには、そのオブジェクトを ObjectMode で選択後、3Dウィンドウのヘッダにある Objectメニュー→Convert Object Typeを選択、もしくは[Alt]+[C]キーを押した後、Mesh を選択します。

●クロスとオブジェクトの衝突判定
クロスオブジェクトには、他のオブジェクトによる反射が必要です。クロスの反射には、そのオブジェクトを、クロスオブジェクトと衝突するオブジェクトとして有効化する必要があります。クロスとオブジェクトとの衝突判定を有効化するには、衝突判定するオブジェクト(クロスオブジェクトではありません)に衝突を有効にしないといけません。
ボタンウィンドウの PhysicsButtons(Objectコンテクスト内) の左側の Collision パネルにある[Collision]ボタンを ON にして下さい。また、この Collision パネルは、このオブジェクトが同じレイヤを共有する他のオブジェクトとの衝突判定に参加するということを、すべてのシミュレーション(Fluid、SoftBody、Cloth)に宣言するのにも使用されることにも注意して下さい。


●Mesh オブジェクトのモディファイアスタック
オブジェクトの形状がクロスと衝突・変形するため、クロスシミュレーションはそのフレームでの Mesh オブジェクトの「真の」形状を知る必要があります。この真の形状とは、ShapeKey や Armature により変形された基本形状です。つまり、Collision モディファイア はこれらすべての後におかなければいけない、ということです。右の画像は、キャラクタ Mesh オブジェクトのモディファイアパネルです(Cloth オブジェクトの物ではありません)。

●衝突判定のベイク
シミュレーションを実行する(Armature による Mesh のアニメーション含む)フレームの範囲に、衝突判定する Mesh を設定した後、クロスシミュレーションに衝突の計算(と回避)を命令できるようになります。クロスオブジェクトを選択し、Object Physics Buttons の Cloth Collision パネル内の Start:End: フィールドに、シミュレーションを計算させたいフレームを設定し、[Bake]ボタンをクリックして下さい。

Start
アニメーションを開始するフレームです。

End
シミュレーションが終わるフレームです。End の後、クロスは「凍結」されたままになります。

Bake
シミュレーション処理を開始します。

シミュレーションのベイクをクリアしない限り、Start と End は変更できません。シミュレーションが完了した時、下記のようなオプションに気づくでしょう。

[Free Bake]
シミュレーション結果を削除し、変更と再計算を行えるようにします。

[Bake Editing]
キャッシュを保護し、Mesh の形状の再計算からシミュレーション結果を守ります。その後、Mesh 形状を手動で編集できます。

[Rebake From Current Frame]
クロスシミュレーションを現在のフレームから End: まで再計算します。




標準的な設定による、クロスと球の接触

皆さんがすぐに気づかれると思うことを少し書きます。
まず、ベイクが以前に比べはっきりと遅くなること、次に、右の画像と同様に行うと、おそらく箱をすごいスピードですり抜けるという最悪なことになるということです。
(訳注: 原文は "it will probably clip through the box pretty bad as in the picture on the right." )



キャッシュされたシミュレーションの編集


キャッシュにはフレーム毎の Mesh の形状が記憶されています。シミュレーションを Bake し、[Bake Editing]ボタンを押すことで、キャッシュされたシミュレーションを編集できます。修正したいフレームに移動し、[Tab]キーで EditMode に入るだけです。
Vertex の移動には、Blender のすべての編集ツールを使用できます。EditMode を抜けると、その Mesh の形状が、そのフレームの物として記録されます。
もし、新しい形状を使用してシミュレーションを再開したい場合は、[Rebake from next Frame]ボタンを左クリックし、アニメーションを再生して下さい。Blender はその形状を取得し、シミュレーションを再開します。

Mesh を編集し、小さな裂け目や、衝突したオブジェクトがクロスに穴をあけている場所を修正します。

Mesh 内の Vertex を追加、削除、Extrude した場合、Blender はこの新しい Mesh を、開始時から Mesh を編集した時のフレームまでのオリジナルの形状と入れ替え、アニメーションの最初のフレームの初期形状とします。

そのため、Mesh の内容を変更し、[Tab]キーで EditMode を抜けた場合、Blender が一貫性のあるシミュレーションを行えるよう、次のフレームからのキャッシュの保護の解除とクリアを行うべきでしょう。


トラブルシューティング


もし衝突判定で問題に遭遇した場合、解決するのに二つの方法があります。

[wiki]-もっとも早い解決方法は、Cloth Collisions パネルにある、'Min Distance' 設定を上げることです。これはクリッピングを修正する一番早い方法ですが、精度が落ち、見た目もあまりよくありません。この方法を使用すると、クロスが空気中に残っているように見え、非常に見た目が丸っこくなる傾向があります。

-二つめの方法は、"Quality"(最初のパネル)を上げることです。これにより、シミュレータの実行のステップが細かくなり、高速移動時の衝突を捕らえることができる確率が高くなります。また、"Collision quality" を上げることでも衝突判定処理の回数を増やすことができます。

-いずれも方法もダメだった場合は、キャッシュ・ベイク後の結果を EditMode で簡単に編集できます。
[/wiki]
私のクロスはデフォーム Mesh により破かれました―巨大化したのです。
Structural Stiffness を1000のように非常に大きくしましょう。


チュートリアル


クロスを始めるのに、まず最初に必要な物は、もちろん布です。そのため、デフォルトの Cube を削除し、Plane を追加します。私は Y軸方向に大きくしましたが、皆さんは別にそのとおりにする必要はありません。
やわらかく曲げやすい布にするには、何度か分割することが必要です。私の場合は8回分割しました。[Tab]キーで EditMode に入り、[W]キー→Subdivide Multi を選択、そして8を設定します。
そして、これを Cloth にします。Object Buttons([F7]) のサブコンテクストの Physics Buttons に行きます。Cloth パネルを探し、[Cloth]ボタンを押します。すると多くの設定が表示されますが、とりあえず今はそのほとんどを無視します。

以上がクロスをアニメーションするのに必要な手順ですが、[Alt]+[A]キーを押しても、あなたの素晴らしい布はただ地味に下に落っこちるだけでしょう。次の二つのセクションではピン止めと衝突についてお話しましょう。



作業中のクロス

●クロスのピン止め
クロスをピン止めするのに最初に必要なことは、VertexGroup です。Weight Paint ツールでピン止めしたいエリアをペイントするなど、いくつかの方法があります(マニュアルの Weight Paint セクションを見て下さい)。

VertexGroup の設定が終わったら、あとは非常に簡単です。Cloth パネル内の[Pinning of Cloth]ボタンを押し、使用する VertexGroup名を選択、そして固さ(Pin Stiff)を設定します。もちろん Pin Stiff はそのままにしておくこともでき、デフォルト値が最適です。

●クロスのスムージング
さて、あなたが前のセクションから来たのであれば、あなたのクロスはおそらく少しカクカクなのではないかと思います。画像のように見栄えよくスムーズにするため、Editing コンテクスト([F9])にある Modifier パネルのモディファイアスタックに、Smooth もしくは SubSurf モディファイアを追加する必要があります。その後、Editing コンテクストのLinks and Materials パネル(VertexGroup で使用したのと同じパネル)にある[Set Smooth]ボタンを押して下さい。

それでは[Alt]+[A]キーを押してアニメーションを開始してみて下さい。非常によくなったと思いませんか?


Armature 上での Cloth


Cloth を Armature でデフォームし、更に追加の衝突判定用オブジェクトとします。サンプルファイル




ソフトボディとして Cloth を使用

ソフトボディとして Cloth を使用


Cloth をソフトボディ(軟体)のシミュレートに使用することもできます。これは用途とは全く違うのですが、それにもかかわらず動作します。サンプル画像では標準的な "Rubber" を使用し、特に何の設定もなしにそのまま[Alt]+[A]しているだけです。

このサンプル画像の Blend ファイル:Using Cloth for softbodies





Wind を適用した旗

Force Field や Wind との使用


Cloth に Wind とセルフコリジョンを使用した Blend ファイル(右の画像):Cloth flag with wind and selfcollisions



Cloth とモディファイアスタック


Cloth は Mesh 用モディファイアの一つであり、Mesh の形状を変えることができます。他のモディファイアとともに使用することで、非常に説得力のある結果が得られます。


モディファイアの順序について
[wiki]-SubSurf や Smooth モディファイアは Cloth モディファイアの''下に''置いて下さい。
-Armature や Hook、その他デフォームするモディファイアは Cloth モディファイアの''上に''置いて下さい。
-Cloth モディファイアはピン止め・ウェイトペイントされた Vertex のデフォーム情報のみ考慮します! つまり、もし Hook モディファイアなどで Vertex を移動したい場合、Cloth パネルで[Pinning of cloth]をONにし、Hook をつけた Vertex に、Hook モディファイアの影響を完全に受けるよう、ウェイト1.0でペイントして下さい。[/wiki]

もし Cloth モディファイアを[Apply]した場合、シミュレーションは削除されますが、Mesh はそのシミュレーションのフレームにあったデフォームが行われたまま残ります。

もしモディファイアを削除した場合、Mesh はオリジナル(開始時の)形状に戻り、クロスシミュレーションはもう行われません。


BlenderDev-ClothSimulation - BlenderWiki
07:10, 20 May 2008版を元に再構成しています。