ざっと概要を眺めてみよう
さて、とりあえずPhysXを使える状態になりましたが、いきなり細かい説明をしてもどこの何の説明をしているのか分からなくなってしまいますね。と言うことでまずは全体の概要をざっと眺めてみましょう。
Actor(剛体)
物理学の勉強をしたことがある人には馴染み深い言葉だと思いますが、「剛体(ごうたい)」とは、「変形しない硬い物体」のことです。PhysXではこの剛体のことを「Actor[アクター]」と呼び、利用するほとんどの物体がActorとなります。Actorは一つ以上の基本形を組み合わせて作成されます。
Shape(基本形)
PhysXでは基本形のことを「Shape[シェイプ]」と呼び、次の形が利用できます。
- Plane [プレーン] (無限面)
- Sphere [スフィア] (球)
- Box [ボックス] (直方体)
- Capsule [カプセル] (カプセル)
- Wheel [ホイール] (タイヤ)
- ConvexMesh [コンベックスメッシュ] (凸面体)
- TriangleMesh [トライアングルメッシュ] (凹面体)
ConvexMesh(凸面体)とは、くぼみの無い形のことです。車にたとえると、ワゴンみたいなのが凸面体、セダンみたいなのが凹面体でしょうか。(例えが微妙ですね…)
ちなみにTriangleMesh(凹面体)の当たり判定は複雑なため、TriangleMeshとTriangleMeshの当たり判定は出来ません。同じくPlane同士、Wheel同士も出来ません。それ以外は何とでも当たり判定可能です。 言ってしまえばTriangleMesh、Planeはフィールド系専用ですね。 Wheelは特殊なので後ほど詳しく説明したいと思います。

挙動
Actorには、キャラクターのように動き回る物もあればフィールドのように位置が固定されている物もあり、次の種類に分別することが出来ます。
- Dynamic [ダイナミック] (動的)
- Kinematic [キネマティック] (運動)
- Static [スタティック] (静的)
Dynamicな物体はその名の通り動き回ることができます。そこら辺の物体は全てDynamicですね。 KinematicとStaticはどちらも勝手には動けませんが、Kinematicは手動で動かすことが出来ます。 Staticも動かすことは不可能ではありませんが、PhysXで適切な最適化が出来なくなるので動かすべきではありません。 動かない地面や壁等はStatic、強制的に移動するリフト等はKinematic、その他自動で物理的に動く物はDynamicといったところでしょうか。
Material(材質)
衝突時の物理的な計算を行うために必要な情報の一つに、「Material[マテリアル](材質)」があります。
MaterialはTriangleMeshであれば各三角形ごと、それ以外であればShapeごとに設定でき、次のような設定があります。
- 跳ね返り倍率
- 動摩擦係数
- 静止摩擦係数
跳ね返り倍率は…そのままですね。この値が高いと床に落としたActorはどんどん高く飛び上がるようになります。 動摩擦係数と静止摩擦係数はいわゆる摩擦力ですが、それぞれの意味と係数については専門の文献などを参照してください。
Collision(判定)
自分の打ったミサイルと自分自身のように、当たり判定を行いたくない組み合わせと言うものはしばしばあります。 そのような当たり判定の組み合わせを表現したい場合は、CollisionGroup[コリジョングループ]やCollisionFilter[コリジョンフィルタ]を使用します。
Joint(接続)
Jointは、2つのActorをくっつける際に利用します。
接続方法は様々で、完全固定、回転固定、移動固定など様々な種類が用意されています。便利ですね~。
Actor単体では変形は不可能ですが、Jointを組み合わせて利用することによって複雑に動くものを作成することが出来るというわけです。
Jointには次のようなものがあります。
- Fixed
- Revolute
- Spherical
- Prismatic
- Cylindrical
- Distance
- Pulley
- PointInPlane
- PointOnLine
- 6DOF
どれも簡単には説明できないため、ここでは省略しますが、とにかく色々あるようです。
Limit(制限)
Jointには制限と言うものがあります。 例えば腕はどこまでも曲がるわけではありませんし、首はどこまでもねじれるわけではありません。 各JointはそのようなLimitを詳細に設定することが出来ます。
Brake(破壊)
Jointは破壊することが出来ます。 ロボットの腕、部屋の扉などに破壊可能なJointを利用することにより、一定の衝撃で壊すことが出来ます。
Report(報告)
PhysXのReport機能を利用すれば、Actor同士の接触等を通知してくれるため、様々な処理が可能となります。 使い方によっては情報の書き換えも可能です。 例えばキャラクターのダメージ計算に利用できますね。
その他の物体
Cloth(布)
PhysXでは、リアルタイムな布シミュレーションを行うことも可能です。 布はどんな形状でもよく、ステータスを調整すれば風船のような物の表現も可能です。 また、布なのでやぶる事も可能です。 ただし処理が重いので、ソフトウェア処理時はあまり大量に使用することはお勧めできません^^;
Fluid(流体)
PhysXではリアルタイムな流体の物理も用意されています。 ただしこちらも処理が非常に重く、ソフトウェア処理では恐らく実用レベルではないため、まともに何かをやろうと思えばPhysXボード(PPU)が必要となるでしょう。
Soft Body(軟体)
Clothの発展系?ある程度の硬さを持たせ、形を形成することが出来ます。Clothと同じかそれ以上に処理は重いでしょう。
とりあえず全体的にはこんな感じです。 え?どうしていちいち英単語で説明するのかって、そりゃあ後々そのほうが楽だからですよ。 どうせプログラムを組む時は全部英語なんですし^^;