UDN
Search public documentation:

PhysXClothReferenceJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > PhysX > クロスのリファレンス

クロスのリファレンス


概要


「Unreal Engine 3」におけるクロス (布地) シミュレーションは、PhysX のクロスシミュレーション エンジンによって処理されます。 この技術を利用すると、カーテンや旗といったインタラクティブな装飾物を作成することができます。クロスは、コリジョン イベントを受け取るため、プレイヤーや武器、その他動きに基づくイベントによって影響を与えることができます。

つぎのスクリーンでは、風に揺れる旗が表示されています。

UDKFlagExample.jpg

PhysX クロスの作成方法


PhysX は骨格メッシュを作成することによってクロスをシミュレートしますが、この場合の骨格メッシュは、事前に細分化され、クロスの頂点がボーンに重み付けされたものです。クロスをメッシュの一部にアタッチさせる場合は、エッジにあるクロスの頂点をいくつか他のボーンにセットします。

骨格メッシュ内のボーンをセットアップする

つぎのスクリーンショットでは、旗が水平のスチール製ポールにアタッチされており、最上部の列にある頂点が他のボーンに重み付けられています。旗の残りの頂点は、旗のボーンに重み付けられています。

UDKFlagSetup.jpg

複数クロスのシミュレーションのためのボーンをセットアップする

つぎのスクリーンショットでは、3 つの旗が水平のスチール製ポールにアタッチされているため、6 つのボーンがクロス シミュレーションを制御しています。各旗では、1 つのボーンが旗メッシュの最上部に重み付けられていて、第 2 のボーンが残りの旗メッシュに重み付けられています。これによって、水平のスチール製ポールに旗が確実にアタッチします。

UDKTriFlagSetup.jpg

ゲームでは、好きなだけクロスをシミュレートすることができます。ただし、クロスのためにボーンを定義する必要があります。

UDKTriFlagExample.jpg

クロスをシミュレートする骨格メッシュをセットアップする

デフォルトでは、クロスは無効になっています。たいていの骨格メッシュではクロスシミュレーションが必要とされないためです。したがって、クロスを有効にする必要があります。PhysX クロスは、CPU 上でシミュレートされるため、CPU スキニングをまず有効にする必要があります。そのためには、AnimSet エディタにある [Skeletal Mesh] (静的メッシュ) タブ内でプロパティを変更します。

EnableCPUSkinning.jpg

CPU スキニングを有効にしたら、つぎは、クロスの頂点が重み付けられるボーンを定義する必要があります。 [Skeletal Mesh] (静的メッシュ) タブを下にスクロールして、[Cloth] (クロス) のセクションを展開します。Cloth Bones 配列にアイテムを追加し、ボーンの名前を打ち込みます。Skeleton Tree (骨格ツリー) パネルで表示される名前とまったく同じ名前にします。

AddClothBones.jpg

以上がクロスシミュレーションをセットアップするために最小限必要となることです。これで、 Toggle Cloth button をクリックしてクロスのシミュレーションを開始することができます。 [Cloth] (クロス) セクションまたは [AdvancedCloth] (高度なクロス) セクション内で変数を変更すると、それが即座に反映されます。

PreviewClothSimulation.jpg

W キーを押下するとプレビューアで使用されている Wind (風) を調整することができます。 W キーを押下したまま左マウスボタンを押すと、風の向きを調整することができます。 W キーを押下したまま右マウスボタンをクリックすると、風力を調整することができます。(マウスを上下に動かすだけで調整することが可能です)。

コリジョンと PhysX クロス


クロスがコリジョンするのは、物理アセットをともなった骨格メッシュや剛体をともなった静的メッシュなどの剛体のみです。通常はデフォルトで有効になっていませんが、簡単に有効にすることができます。旗メッシュについては、旗のポールと旗がコリジョンできなければなりません。したがって、骨格メッシュのために物理アセットが作成されました。クロスの正確なシミュレーションが必要であったため、剛体を作成する際に適切な注意が払われました。必ず、剛体がコリジョンに寄与するようにします。(これは物理アセットをシミュレートすることによってテストすることができます)。

FlagPhysicsAsset.jpg

そこから、クロスが有効になった骨格メッシュをワールドに配置することができます。クロスのコリジョンを機能させるには、プロパティをいくつか設定しなければなりません。まず、骨格メッシュの Physics Asset (物理アセット) を設定し、 Has Physics Asset Instance (物理アセット インスタンスをもつ) にチェックを入れます。

FlagSkeletalMeshComponentProperties.jpg

つぎに、Cloth (クロス) パラメータを調整する必要があります。 [Cloth] (クロス) セクションを展開します。 Enable Cloth Simulation (クロスのシミュレーションを有効にする) と Cloth Awake On Startup (クロス 起動時にアウェイク状態) にチェックを入れるとともに、環境の力によってウェーブが起きるように Cloth Wind (クロス 風) をセットします。

FlagClothProperties.jpg

最後に、[Collision] (コリジョン) のセクションを展開します。 Block Rigid Body (剛体をブロックする) にチェックを入れます。 クロスとインタラクトする必要があるアクタは剛体をブロックしなければなりません。PhysX では、コリジョン チャンネルを使用して、各種物理シミュレーションとインタラクトできるものとできないものを選り分けます。これによって、クロスとインタラクトできる物理アクタとできない物理アクタを作成することができます。旗メッシュはクロスとコリジョンする必要があるため、 Cloth チャンネルが RBCollide With Channels (チャンネルと剛体コリジョンする) 内でセットされなければなりません。

FlagCollisionProperties.jpg

エディタのワールド ビューポート内でクロスはシミュレートされません。これは、Real Time (リアルタイム) が有効になっていても同様です。しかし、PIE モードに入ると、クロスがシミュレートされ、自身とコリジョンするようになります。クロスとコリジョンしなければならないその他のアクタをセットアップするには、上記のように、それらの Collision プロパティをセットします。骨格メッシュについては、物理アセットがコリジョンのために使用されるので、忘れずにそれらを割り当てます。

Unrealscript を使用してクロスを有効にする

骨格メッシュが当初クロスをシミュレートしないようにしなければならない場合があります。クロスが、テーブル上にある場合や、シミュレートが無駄になる場所にある場合などです。つぎのコード スニペット (切り貼り用断片) を使用して、骨格メッシュのコンポーネント上でクロスを有効にすることができます。

// Turn on and off cloth simulation
SkeletalMeshComponent.SetEnableClothSimulation(true);

UnrealScript 内で PhysX クロスを使用する

PhysX クロスの API のかなりの部分が UnrealScript にエクスポーズされているため、これを実行時に調整することによって、興味深い結果を得ることができます。以下の関数はすべて、SkeletalMeshComponent.uc 内にあり、骨格メッシュのコンポーネント上で使用することができます。

シミュレーション関数

  • SetEnableClothSimulation(bool bInEnable) - 当該の骨格メッシュについて、クロスのシミュレーションを有効 / 無効にします。
  • SetClothFrozen(bool bNewFrozen) - アクティブなクロスシミュレーションを切り替えて凍結状態にします。 SetEnableClothSimulation を実行するよりもコストがかかりません。また、凍結状態の時にも形が保たれます。
  • SetEnableClothingSimulation(bool bInEnable) - アクティブなクロスシミュレーションを切り替え、凍結状態の時にも形を保ちます。
  • UpdateClothParams() - SkeletalMesh (骨格メッシュ) プロパティから、当該コンポーネントの内部にあるクロスシミュレーションのパラメータを更新します。
  • SetClothExternalForce(vector InForce) - クロスに適用される外部の力を変更します。変更されるまで適用され続けます。
  • SetAttachClothVertsToBaseBody(bool bAttachVerts) - 当該コンポーネント アクタがアタッチされている剛体から頂点をアタッチ / デタッチします。
  • ResetClothVertsToRefPose() - クロス内の頂点をすべて参照ポーズに移動して、速度をゼロにします。

get 関数

  • GetClothAttachmentResponseCoefficient() - クロスのアタッチメント反応係数を返します。
  • GetClothAttachmentTearFactor() - クロスのアタッチメントの引き裂き (tear) 係数を返します。
  • GetClothBendingStiffness() - クロスの曲げ剛性を返します。
  • GetClothCollisionResponseCoefficient() - クロスのコリジョン反応係数を返します。
  • GetClothDampingCoefficient() - クロスの減衰係数を返します。
  • GetClothFlags() - クロスのフラグを表すビットマスクを返します。
  • GetClothFriction() - クロスの摩擦を返します。
  • GetClothPressure() - クロスの圧力を返します。
  • GetClothSleepLinearVelocity() - クロスのスリープする線速度を返します。
  • GetClothSolverIterations() - クロスのソルバーにおけるイタレーション回数を返します。
  • GetClothStretchingStiffness() - クロスの伸縮剛性を返します。
  • GetClothTearFactor() - クロスの引き裂き (tear) 係数を返します。
  • GetClothThickness() - クロスの厚さを返します。

set 関数

SetClothAttachmentResponseCoefficient(float ClothAttachmentResponseCoefficient) - クロスのアタッチメントの反応係数をセットします。
  • SetClothAttachmentTearFactor(float ClothAttachTearFactor) - クロスのアタッチメントの引き裂き (tear) 係数をセットします。
  • SetClothBendingStiffness(float ClothBendingStiffness) - クロスの曲げ剛性をセットします。
  • SetClothCollisionResponseCoefficient(float ClothCollisionResponseCoefficient) - クロスのコリジョンの反応係数をセットします。
  • SetClothDampingCoefficient(float ClothDampingCoefficient) - クロスの減衰係数をセットします。
  • SetClothFlags(int ClothFlags) - クロスのフラグであるビットマスクをセットします。
  • SetClothFriction(float ClothFriction) - クロスの摩擦をセットします。
  • SetClothPressure(float ClothPressure) - クロスの圧力をセットします。
  • SetClothSleepLinearVelocity(float ClothSleepLinearVelocity) - クロスのスリープする線速度を返します。
  • SetClothSolverIterations(int ClothSolverIterations) - クロスのソルバーが使用するイタレーション回数をセットします。
  • SetClothStretchingStiffness(float ClothStretchingStiffness) - クロスの伸縮剛性をセットします。
  • SetClothTearFactor(float ClothTearFactor) - クロスの引き裂き (tear) 係数をセットします。
  • SetClothThickness(float ClothThickness) - クロスの厚さをセットします。
  • SetClothSleep(bool IfClothSleep) - クロスのスリープ状態をセットします。
  • SetClothPosition(vector ClothOffSet) - クロスの位置をセットします。
  • SetClothVelocity(vector VelocityOffSet) - クロスの速度をセットします。

アタッチメント関数

  • AttachClothToCollidingShapes(bool AttatchTwoWay, bool AttachTearable) - クロスを現在コリジョンしている図形にアタッチします。

Valid Bounds (有効境界) 関数

  • EnableClothValidBounds(bool IfEnableClothValidBounds) - クロスのための有効境界の計算を有効化します。
  • SetClothValidBounds(vector ClothValidBoundsMin, vector ClothValidBoundsMax) - クロスのために使用する有効境界をセットします。

PhysX クロスを引き裂く


「Unreal Engine 3」ではクロスをシミュレートしたメッシュを引き裂くことができます。そのために必要となることは、 Enable Cloth Tearing (クロスの引き裂きを可能にする) をチェックして、 Cloth Tear Factor (クロスの引き裂き係数) を設定することだけです。Cloth Tear Factor によって、クロスが引き裂かれるのに要する力の強さを調整することができます。 1 以上にするのが適当です。そうでなければ、どのような大きさの力が加わってもクロスが引き裂かれてしまいます。複雑なメッシュについては、 Cloth Tear Reserve (クロス引き裂き制限) の値を上げて適切な結果を得るようにします。

ClothTearingProperties.jpg

力を加えるには NxForceField クラスを使用します。

ClothTearingExample.jpg

PhysX クロスのデバッグ


デバッグ レンダリング情報を切り替えるには、AnimSet エディタの [ PhysX Debug ] (PhysX デバッグ) メニューから行います。オプションがチェックされた状態にしておくことによって、インゲームでもデバッグが表示されることになります。

PhysXClothDebug.jpg

その他のPhysX クロス プロパティ


  • Use Cloth COM Damping (クロス COM 減衰を使用する) - これによって減衰されたクロスを下方にストレッチさせておくことができます。通常は、減衰によって物体がワールドのフレームに対して減速します。しかし、クロスがアタッチされており (ポールにアタッチされている旗のことを考えてみます)、そのアタッチメントが速く動いている場合は、自由な頂点を減衰させるとポールから離れてストレッチする可能性があります。COM Damping を有効にすると、クロスが「ローカルのフレーム」内で減速するため、このような効果を抑制することができます。
  • Cloth Relative Grid Spacing (クロス相対グリッド スペーシング) - 最適化のパラメータです。初回パスにおけるコリジョン判定のために、内部的にクロスをどのように表現するかを定義します。(ブロードフェーズ カリング)。この値が非常に小さい場合は、ブロードフェーズのオーバーヘットが大きくなりますが、詳細に渡るコリジョン計算の数は減ります。値が大きくなりすぎると、ロードが粗い計算から精密な計算へとスイッチします。通常このパラメータには最適な範囲があります。デフォルトでは 0.25 にセットしてあります。
  • Enable Cloth Two Way Collision (クロス 両方向のコリジョンを有効にする) - 通常、剛体はクロスに影響を及ぼしますが、その逆はありません。つまり、オブジェクトにクロスを落とすと、クロスはオブジェクトの上にとどまります。しかし、そのクロスを引いても、オブジェクトには何ら力が加わりません。 bEnableClothTwoWayCollision を有効にすると、オブジェクトに力が加わります。
  • Cloth Special Bones (クロス特別ボーン) - クロスアタッチメントのための骨格メッシュボーンを定義します。特別な形態のアタッチメントであり、ボーンのいずれかの BoneType が CLOTHBONE_BreakableAttachment (クロスボーン_破壊可能アタッチメント) に設定されている場合は破壊することができます。これにより、クロスを強く引っ張ると、ボーンから引き裂くことができるようになります。
  • Enable Cloth Line Checks (クロス ラインチェックを有効にする) - クロスを撃つ必要がある場合は、これを有効にします。
  • Cloth Metal Penetration Depth (クロス 金属貫通深さ) - 金属製クロスに使用されます。正の場合は、剛体がクロスにヒットすると、クロスにより大きな変形が加わります。
  • Cloth Tear Reserve (クロス 引き裂き制限) - クロスが引き裂かれるときに使用されます。クロスが引き裂かれるとき、追加の頂点が作成されます。このプロパティは、追加の頂点をいくつ作成できるかを保持します。引き裂かれたときに頂点がこの数の分だけ作成されると、それ以上クロスを引き裂くことはできません。

ダウンロード


  • コンテンツは、 ここ からダウンロードできます。(PhysXClothExample.zip)