元記事:
GameEngineDev-BulletSoftBody - BlenderWiki
Bullet SoftBody
はじめに
Blender 2.48以降のゲームエンジンに Bullet Soft Body シミュレーションが付きました。ここではこの機能についての情報と、使用方法を解説します。
SoftBody の主な機能
[wiki]-平面のクロスもしくは立体のソフトボディ
-Mass(質量)、Friction(摩擦)、Stiffness(硬さ)、Shape Match(形状との適合)、衝突判定設定でコントロール
-SoftBody 間だけでなく、RigidBody、すべてのタイプの Static Collision Bound との衝突判定
-SoftBody を RigidBody に付着させたり、ピン止め可能
-動的な SoftBody の構造を Show Physics Visualization で表示可
-AddObject Actuator による、新しい SoftBody の動的生成[/wiki]
サンプルファイルとフィードバック
[wiki]-[[SoftBody のいくつかのサンプル .blend ファイル(1.5MB):
http://www.bulletphysics.com/ftp/pub/test/index.php?dir=blender/&file=blender-2.48-gamesoftbody-sample-blends-10.zip
]]
-[[bathroom .blend ファイル(14MB):
http://bulletphysics.com/ftp/pub/test/index.php?dir=blender/&file=bathroom_final_1.2.zip
]]
-[[BlenderArtists の議論、フィードバックスレッド:
http://blenderartists.org/forum/showthread.php?t=135471
]]
-[[Bullet SoftBody シミュレーションの詳細:
http://bulletphysics.com
]][/wiki]
Bullet SoftBody の作成
[wiki]-GameButtons で Object type を Static、Dynamic、Rigid body、Soft body から Soft body を選択(右図)
-SoftBody 用の衝突判定形状(Bounds)を選択
-SoftBody の場合、この Bounds タイプは自動的に convex hull(凸包)もしくは triangle mesh(三角形ポリゴンメッシュ)のいずれかに自動的に制限されます。[/wiki]
基本的な SoftBody 設定
[wiki]-''Linear Stiffness(LinStiff)'': 小さい値で SoftBody が非常にやわらかく、 大きい値(1.0)で硬くなります。Shape Matching 機能と Bending Constraints 機能は極度に柔軟なボディも元の状態に維持し続けることに注意して下さい。
-''Shape matching(Shape Match)'': このオプションを ON にすると、Bullet はそれぞれの SoftBody の元の形状を思い出し、どれだけ大きく変形していても、SoftBody の形状をそれにあわせようとします。
-''kMT Shape mathing coefficient(kMT)'': どれだけ SoftBody を元の形状に戻すか。これは Shape Matching オプションが ON になった時のみ表示されます。
-''Bending Constraints'': 隣り合う Face が曲がるのを抑制します。
-''Friction'': SoftBody の動摩擦をコントロールします。範囲は0.0〜1.0で、0で摩擦なしで、SoftBody がすべります。[/wiki]
Advanced Settings
[wiki]-''Cluster Collision'': Cluster Collision は衝突判定の精度を上げ、SoftBody が三角形 Mesh を通り抜けるのを防ぎます。各 Vertex/ノードと Face 間の衝突判定の代わりに、変形可能な凸包クラスタを使用します。SoftBody 同士でのクラスタ使用(SS)と、SoftBody と RigidBody間でのクラスタ使用(RS)を使用できます。
-''Cluster Iterations'': 大きな値でもっと細かなクラスタを作成します。1を選択した場合、すべての Vertex に対し、一つのクラスタを使用します。この設定は Clusters RB / SS を ON にした時のみ使用されます。
-''Position Iter'': 位置の修正処理を繰り返す回数。大きな値で SoftBody の位置修正の品質が向上します。[/wiki]
SoftBody の固定(Pinning)と付着
[wiki]-Rigid Body Joint Constraint を使用し、RigidBody と SoftBody を引っ付けることができます。また、RigidBody 同様、Vertex を移動しないようにし、SoftBody を固定することもできます。この場合は単に付着するオブジェクトを使用しない、もしくは動かないオブジェクトに付着させればいいのです。
-現時点では、VertexGroup はサポートされていません。そのため、Rigid Body Joint Constraint を使用しなければなりません。
-単一の SoftBody を選択、もしくは一つの SoftBody と一つの RigidBody の両方を選択し、RigidBody Joint のボタンを使用します。
-SoftBody を固定する場所(Pivot X、Y、Z)を見るため、Show Pivot を ON にします。Bullet はこの Pivot ポイントの一番近くの Vertex/ノードを自動的に採用します。
-複数の Constraint を使用し、SoftBody の複数の部分を固定できます。
-No Col ボタンで、Constraint によってつながっている物の間の衝突判定を無効にできます。これによりつながっている物の間で不安定になり、振動するのを防ぐことができます。[/wiki]
[wiki]-Python Constraint を、ゲーム実行中の SoftBody の Constraint を作成するのに使用できます。ただし、現時点ではこれらの Constraint を直接削除することはできません。[/wiki]
SoftBody の Tip といくつかの問題点
[wiki]-Add Object Actuator で動的に新しい SoftBody を作成できます。
-Motion Actuator では applyForce のみ使用できます。setPosition、Constraint Actuator、その他の LogicBrick は SoftBody では動作しません。
-SoftBody オプションにより、オブジェクトは 'Smooth' 設定時のように描画されます。常に Vertex と Vertex Normal が更新されるためです。[/wiki]
[wiki]-SoftBody を Subdivide して三角形ポリゴン Mesh にしておき、デフォームできるようにして下さい。EditMode に入り、すべての Vertex を選択([A]キー×2回)し、EditButtons の Subdive ボタンを押します。[/wiki]
[wiki]-UV Sphere Mesh は SoftBody と相性がよくありません。IcoSphere を使用して下さい。
-Mesh が細かすぎる場合、Decimate モディファイアで Mesh を簡略化して下さい。[/wiki]
[wiki]-Blender 2.48では、Clusters を ON にした SoftBody と、OFF にした SoftBody との間の衝突判定がありません。これは将来的に修正される予定です。
-Show Physics Visualization で、SoftBody や衝突判定の形状などの問題をデバッグできます。Game メニューから使用できます。
-Show Physics Visualization を ON にしてゲームを実行すると、SoftBody の複雑な動的構造に気づくでしょう。
-セルフコリジョン(自分自身との衝突判定)はサポートしていません。
-SoftBody の Python バインディングはありません。また、LogicBrick も、Motion Actuator の applyForce と、Add Object Actuator 以外はサポートしていません。
-SoftBody オブジェクトは、Collision/Near/Radar Sensor をサポートしていません。
-現在、大きなクロスと衝突するオブジェクトとの間に大きなギャップ・マージンがあります。現時点ではこのギャップをコントロールする方法はなく、将来の Blender バージョンで改善されるかもしれません。
-Scale を変更した Mesh を使用しないで下さい。代わりに Apply Scale to ObData を使用して下さい。SoftBody オブジェクトを選択し、[Ctrl]+[A]キーを押します。[/wiki]
元記事:
GameEngineDev-BulletSoftBody - BlenderWiki
15:29, 14 October 2008版を元にしています。