Actor COMP

概要

Actor COMPは、物理システムのボディ(複数可)に相当します。Actor COMPは、物理ソルバー(Bullet Solver COMPまたはNvidia Flex Solver COMP)と組み合わせて使用する必要があり、物理ソルバーは、アクター/ボディが動作するワールド/シミュレーションに相当します。Actor COMPは、シミュレーション内の力の影響を受けず、動かない(つまり、質量が無限大)静的なものと、力によって動き、ワールド内の他のボディ(静的または動的)と衝突する動的なものがあります。
以下の各章も参照してください。Flex、Bullet Dynamics、Bullet Solver COMP、Force COMP、Constraint COMP、Bullet Solver CHOP、Nvidia Flex Solver COMP、Nvidia Flex TOP。

使用方法
バレットアクター

静的物体は凹形状でも凸形状でもよいのですが、動的物体は凸形状でなければなりません。しかし、動的なコリジョンシェイプは複合的に構築することができます。つまり、凹型のコリジョンシェイプは、動的なケースでは、凸形状を組み合わせて作成することができます。これは複数のSOPを使って構築ことができます。各SOPは凸形状である必要がありますが、SOPの組み合わせは凸形状である必要はありません。Automaticモードを選択すると、これらのSOPから複合コリジョンシェイプが作成されます。
Actor COMP内のすべてのボディには、対応するコリジョンシェイプがあります。コリジョンシェイプは、オブジェクト同士がどのように衝突するかを決定するもので、ビューア/レンダーで表示されるものが必ずしもコリジョンシェイプと一致するわけではないことに注意する必要があります。
コリジョンシェイプは、SOPを使って作成されます。Collision SOPs パラメータを使用するか、Actor COMP自体の中にSOPを入れることで作成されます。Collision SOPs パラメータにパスが設定されている場合、Actor COMPはそのパスにある全てのSOPから単一のボディを作成します(パスがCOMPの場合は、COMP内の全てのSOPを再帰的に取り込みます)。Collision SOPs パラメータに何も記入されていない場合、Actor COMPは自身の中のdisplayフラグとrenderフラグの両方がオンになっているSOPを自己内部で再帰的に検索します。
Actor COMPでは、これらのSOPから1つのボディとそれに対応するコリジョンシェイプを作成します。
SOPからコリジョンシェイプを作成する際には、いくつかのオプションがあります。これらのオプションは、Collision Shape パラメータから選択できます。例えば、Oriented Bounding Box というオプションは、選択されたSOPの周りに最小体積のバウンディングボックスを作成します。
複数のボディを作成するには、Actor COMPの Instance ページにあるインスタンシングを使用します。これにより、それぞれが同一のコリジョン形状を持つ同一のボディがいくつでも作成されます。現在のところ、1つのActor COMPで複数の非同一ボディを作成する方法はありません。
ボディは Initialize Actor パラメータを使用して初期化されるため、ボディを作成するSOPに変更があった場合は、Actor COMPを再初期化する必要があります。ボディは、Kinematic State、Shape、またはCenter of Massが変更されると、自動的に再初期化されます。
トランスフォームは、Geometry COMPやCamera COMPと同様に、XformおよびPre-Xformページを使用してActor COMPに適用できます。XformおよびPre-Xformページのトランスフォームは、シミュレーションにおけるアクターの初期トランスフォームを作成しますが、シミュレーション中にアクターのトランスフォームを変更するのにも使用できます。どちらのページでもスケールを変更すると、コリジョンの形状自体が変更されるため、アクターの再初期化が必要になります。インスタンス化中にいずれかのトランスフォームを変更すると、自動的にアクターが再初期化されます。
Actor COMP はネストできませんが、Actor COMP を Geometry COMP の中にネストすることは可能で、その逆も可能です。Actor COMP がネストされた Geometry COMP は、スケールトランスフォームを持つことができませんが、Actor COMP の中にネストされた Geometry COMP は、スケールを持つことができます。Geometry COMP の中にネストされた Actor COMP は、初期化されたときにのみそのトランスフォームを使用します。したがって、これらのGeometry COMPのトランスフォームを変更した場合は、Actor COMPの再初期化が必要になります。

フレックスアクター

Flexのアクターは、流体パーティクル、流体パーティクルエミッター、または静的形状のいずれかになります。
Flexの静的形状は、Bulletでの凹型(つまり静的)形状と同じ方法で構築されます。静的形状は、そのコリジョン形状を構築するためにTriangle mesh SOPを必要とします。ただし、ボックス/球のコリジョンシェイプオプションを使用して、コリジョンシェイプSOPのバウンディングボックス/球を作成することもできます。
流体パーティクルは、Bulletアクターのインスタンス化と同じように動作します。流体パーティクルの数は、インスタンスOPから作成されるインスタンスの数と同じです。インスタンスパラメータはパーティクルに初期トランスフォームを与えるために使用されますが、シミュレーションが実行されると、トランスフォームはシミュレーション結果から更新されます。
流体パーティクル Actor COMPの主な違いは、Nvidia Flex Solver COMP上のシミュレーションパラメータによって流体パーティクルのサイズや挙動が定義されるため、流体パーティクルを作成するためのSOPが必要ないことです。Actor COMP内のSOPを使用して、パーティクルの位置をレンダリング/表示することができます。また、Nvidia Flex TOPを使用してパーティクルの位置をフェッチすることもできます。
流体エミッタは、エミッションポイント(Actor COMPのトランスフォーム)でシーンにパーティクルを追加します。パーティクルはエミッショ ンの最大値に達するまで追加されますが、その時点でエミッショ ンパーティクルは既存のパーティクルからリサイクルされます。

Actor COMPの使用方法

Actor COMPを作成する際には、いくつかの重要な確認事項があります。

  • アクターはBullet、Flexのどちらかのシミュレーションに使われるか?
    BulletアクターとFlexアクターには多くの共通点がありますが、機能的には異なるため、すべてのパラメータが重複するわけではありません。Bulletに特化したパラメータはActor COMPのBulletページを、Flexに特化したパラメータはActor COMPのFlexページを参照してください。
  • ボディは動くか?
    動いているボディのKinematic StateはDynamicでなければなりません。Staticボディは、その位置をオーバーライドすることで「動く」ことができますが、クリッピングが起こりやすく、衝突が正しく行われない(ボディに運動量がないため)ので、これはお勧めできません。
  • コリジョンシェイプを作成するためにどのSOPを使用するか?
    すべての Actor COMPには、SOPで作成したコリジョンシェイプを持ちます。SOPはCollision SOPsパラメータで設定できますが、パラメータが設定されていない場合は、Actor COMP内のSOPのdisplay/renderフラグで設定されます。
  • どのような形状のコリジョンシェイプを使用するか?
    集められたSOPを使ってコリジョンシェイプを作成します。コリジョンシェイプにはそれぞれ長所と短所があり、その概要はBullet Dynamicsの章に記載されています。コリジョンシェイプは、ボディが他のボディとどのように相互作用するか(つまり衝突するか)を決定します。コリジョンシェイプは、本来の表示/レンダリングされているものとは必ずしも一致しません。コリジョンシェイプは、Display Collision Shapeトグルを使って表示することができます。
  • 凹形状のコリジョンシェイプは?
    コリジョンシェイプが凹形状で静的な場合は、ドロップダウンメニューからConcaveを設定するだけです。コリジョンシェイプが凹形状で動的な場合は、凸型に分解する追加のステップがあります。コリジョンシェイプは、複合コリジョンシェイプ(凸型のコリジョンシェイプを組み合わせたグループ)でなければなりません。複合するシェイプの各部分は凸型ですが、組み合わせると凹型にもなります。例えば、複合シェイプの各部分が1つのSOPで表現される、「T 」という文字を例に考えてみよう。「T」は凹形状なので、上の線と下の線の2つの別々の凸形の部分に分割する必要があります。2つのSOPを作成し(各ラインに1つずつ)、それらを組み合わせて完全な凹形状の「T」を形成するコリジョンシェイプにします。しかし、「T」が静止している場合は、1つのSOPのままで問題ありません。
ボディが衝突しない?

2つの物体が衝突しない理由を解明するには、Bulletシミュレーションが離散的であることを理解することが重要です。速度、位置、拘束、衝突などは、連続的にではなく、フレームごとに計算されます。Bulletの場合、衝突は1フレームの最初と最後に計算されます。これはどういうことかというと、ボディが毎フレーム大きな距離を移動している場合、衝突が計算されるフレームの最初と最後で衝突が判定されず、他のボディを切り抜ける可能性があるということです。これと同じように、オブジェクトが非常に薄い場合、他のボディは奥行きのあるものよりも簡単に切り抜ける可能性があります。
Continuous collision detection(パラメータ参照)は、動きのベクトルに沿って(フレームの開始/終了の間)衝突検出を行なって、フレームの開始/終了の間に発生する衝突を捕捉することで、この問題を解決します。これは直線速度の速いボディには非常に有効ですが、角速度の速いボディにはあまり有効ではありません。
ボディのすり抜けを修正するために、他にもいくつか変更すべき点があります。

1. 手動でボディの速度を制限したり、加える力の強さを下げたりする。
2. 非常に薄いコリジョンサーフェスに厚みを追加します。衝突面として Grid SOP を使用している場合は、代わりに Box SOP を使用することを検討してください。また、Box SOPをコリジョンシェイプとして使用し、その中にボディを入れるような場合は、6つの個別のBox SOP(箱の各面に1つずつ)を組み合わせてコリジョンシェイプを作ることを検討してください。

パラメータ – General ページ
Initialize Actor / init

Actor COMP内のすべてのボディのコリジョンシェイプを再作成します。また、すべてのベロシティとポジションをデフォルトの状態にリセットします。Initialize Actorは、コリジョンシェイプを作成するために使用するSOPに変更があった場合や、インスタンス化するためのOPに変更があった場合にイニシャライズ パルスを送信する必要があります。

Update Collision Shape / updatecs

有効にすると、Actor COMPはコリジョンシェイプを自動的に更新します。これは Collision SOP や Collision Shape のパラメータが変更された場合や、コリジョンシェイプを作成するために使用するSOPが変更された場合(クック数が増加した場合など)に発生します。

Update Collision Shape / updatecspulse

これをクリックすると、瞬時にコリジョンシェイプが更新されます。

Active / active

アクターのオン/オフを切り替えます。アクターがアクティブであれば、シミュレーションの進行に合わせて更新されます。しかし、非アクティブの場合は、シミュレーションから削除され、他のアクター/ボディと衝突しなくなります。その結果、トランスフォームも更新されなくなります。

Kinematic State / kinstate

kinematic Stateは、Actor COMP が外力で動くかどうかを設定します。オブジェクトがDynamicであれば、シミュレーションの中で動かすことができますが、Staticであれば動かすことはできません。

  • Static (Infinite Mass) / static
    COMPのボディは、シミュレーションでは動かすことができません。
  • Dynamic (Finite Mass) / dynamic
    COMPのボディは動くことができます。
Collision SOPs / sops

コリジョンシェイプに使用するSOPまたはCOMPを指定します。SOP を参照した場合は、その SOP だけがコリジョンシェイプに使用されます。COMP を参照した場合は、その中にあるすべての SOP(再帰的)がコリジョンシェイプに使用されます。このパラメータを空白にした場合、選択されるSOPはActor COMP内のdisplay/render フラグがオンになっているすべてのSOPになります。

Collision Shape / shape

選択されたSOPから作成するコリジョンシェイプのタイプを設定します。コリジョンシェイプはActor COMPのビューアーでガイドを使って見ることができます

  • Concave (Static only) / concave
    すべてのSOPから凹形状のコリジョンシェイプを作成します。静的な Actor COMPにのみ使用できます。凹形状のコリジョンシェイプの作成に使用するSOPは、3または4頂点のポリゴンのみでなければなりません。動的なActor COMPでこのモードを選択すると、代わりに複合形状が作成されます。
  • Convex Hull / convex
    すべてのSOPから凸包を作成します。凸包とは、他のすべての点(ここではSOPのポイント)を囲む点の集合であり、これらの点から作られる形状は凸形状です。凸包のポイントは、元の点の集合(つまりSOPのポイント)の点となります。
  • Oriented Bounding Box / obb
    SOPの周囲に体積が最小になるような向きのバウンディングボックスを作成します。
  • Axis-Aligned Bounding Box / aabb
    XYZに軸を合わせたSOPの周囲にバウンディングボックスを作成します。(回転しないようにします。)
  • Bounding Ellipsoid / bellipsoid
    SOP の周りに最小体積の境界楕円体を作成します。
  • Bounding Sphere / bsphere
    SOPの周りに最小体積の境界球を作成します。Bounding Ellipsoid との違いは、すべての半径が同じ(XYZ)であることです。
  • Compound / compound
    複合コリジョンシェイプとは、他の複数のコリジョンシェイプで構成されたコリジョンシェイプのことです。Actor COMPが静的な場合は、凹形状と同じ結果になります。Actor COMPが動的な場合は、各SOPがそれぞれの凸包に作成され、その後これらがすべて1つの複合コリジョン・シェイプに統合されます。このモードでは、複数の凸状のSOPを使って動体の凹状のコリジョンシェイプを作成することができます。
Ellipsoid Tolerance / elltol

最小体積の外接楕円体の許容範囲。言い換えれば、どれだけ最適解に近いかということです。

Infinite Mass / infinitemass

アクターに無限の質量を与えます。オブジェクトが動的な場合、これは動かせない静的なものになります。Infinite Massをオンまたはオフにしても、Kinematic Stateパラメータの変更とは異なり、コリジョンシェイプの再現は必要ありません。

Mass / mass

アクターの質量(キログラム)を設定します。

Cue Velocity / cuevel

直線速度と角速度を保持し、linvelとangvelで与えられる値を保持します。このオブジェクトは、シミュレーション内の他のボディと衝突します。

Cue Pulse / cuevelpulse

直線速度と角速度を Linear Velocity と Angular Verocity で指定された値をパルス送信します。これにより、次のフレームの開始時に、速度が指定された値に設定されます。

Linear Velocity / linvel

アクターの初期直線速度(単位:m/s)。このパラメータは、シミュレーション中にアクターの線形速度を変更するためにも使用できます。また、Cue Velocity および Cue Velocity Pulse パラメータと組み合わせて使用します。

  • Linear Velocity / linvelx
  • Linear Velocity / linvely
  • Linear Velocity / linvelz
Angular Velocity / angvel

アクターの初期角速度(単位:度/秒、単位:m/s)。このパラメータは、シミュレーション中にアクター の角速度を変更するのにも使用できます。さらに、Cue Velocity および Cue Velocity Pulse パラメータと組み合わせて使用することもできます。

  • Angular Velocity / angvelx
  • Angular Velocity / angvely
  • Angular Velocity / angvelz
パラメータ – Bullet ページ
Forces / forces

ローカルフォースのリストで、このアクターにのみ適用されるフォース(Force COMPなど)を意味します。

Use Global Gravity / globalgrav

Bullet Solver COMPの重力(グローバル)を使用するか、独自のローカル重力を使用するかの設定します。

Gravitational Acceleration / gravity

アクターのローカル重力を設定します。(単位:m/s^2)アクターがBullet Solver COMPのグローバル重力を使用していない場合(上記の Use Global Gravity パラメータがオフになっている場合)にのみ適用されます。

  • Gravitational Acceleration / gravityx
  • Gravitational Acceleration / gravityy
  • Gravitational Acceleration / gravityz
Friction / friction

アクターの動摩擦を設定します。2つのボディが擦れる/滑る間の抵抗です。全体の摩擦は、2つのボディが触れているときの積です。例えば、一方のボディの摩擦が0で、もう一方のボディの摩擦が1の場合、2つのボディの間の全体的な摩擦は0となります。

Rolling Friction / rollfric

アクターの転がり摩擦を設定します。ある物体(球体や円錐体など)が別の物体の上を転がるときの抵抗/引きずりです。

Restitution / rest

アクターの反発係数を設定します。返還係数とは、2つのボディ/アクターが衝突したときの、最終的な相対と初期の相対の比率です。言い換えれば、反発とは、衝突後に保存される運動エネルギーの割合です。2つの物体が100%(つまり1)の返還率で衝突した場合、両方の体は衝突した時と同じ速度で互いに跳ね返ることになります。

Continuous Collision Detection / ccd

このアクターの連続的なコリジョン検出をオン/オフします。通常、衝突検出は離散的に行われます。つまり、フレームの最初と最後に衝突が確認されます。しかし、ボディの速度が速すぎると、1フレーム内での移動距離が大きくなり、サーフェイスをすり抜けてしまいます (つまり、コリジョンが検出されない)。連続的な衝突検出では、この問題を改善するために、フレーム内のボディの初期位置と最終位置の間の間隔で衝突検出を行います。連続的な衝突検出はパフォーマンスに影響を与えるため、このパラメータをオンにしても常に使用されるわけではありません。ある速度閾値以上で動いているボディに対してのみ使用されます。

Display Guide / dispguide

COMPビューアーでのコリジョンシェイプの表示をトグルします。

Center of Mass / com

コリジョンシェイプの重心を指定します。質量中心とは、ボディが回転するポイントのことです。質量中心は、Actor COMPのビューアのガイドを使って見ることができます。赤色の軸で表示されます。

  • Center of Mass / comx
  • Center of Mass / comy
  • Center of Mass / comz
Feedback CHOP / feedback

フィードバック元となるCHOPを設定します。Actor COMP は CHOP からトランスフォームとベロシティのデータ(詳しくはBullet Solver CHOP の章を参照)を読み込んで、次のフレームの最初に現在の値を上書きします。このパラメータとBullet Solver CHOPでフィードバックループを作ることができます。Bullet Solver CHOP の章を参照してください。注意: スケールをフィードバックすることはできません。 force[xyz]および torque[xyz]を使用して、特定のボディにフォースを加えることができます。

パラメータ – Flex ページ
Flex Type / flextype

Flexアクターのダイナミックのタイプを設定します。

  • Fluid / fluid
    流体アクターです。パーティクルの数は、インスタンスの入力数によって決まります。
  • Fluid Emitter / fluidemit
    流体エミッターのアクターです。パーティクルの数は、エミッターのサイズとスピードに比例して増えていきます。最大値に達すると、パーティクルは既存のパーティクルからリサイクルされます。
Enable Emission / emit

有効にすると、Actor COMPはパーティクルを放出します。

Emission Size / emitsize

2Dエミッショングリッドのサイズです。サイズはエミッショングリッドの各辺のパーティクル数を表します。例えば、2×5のエミッションサイズでは、幅2パーティクル、高さ5パーティクルのグリッドを発光します。

  • Emission Size / emitsizex
  • Emission Size / emitsizey
Emission Speed / emitspeed

パーティクルがエミッターから出る速度を設定します。

Max Emission Particles / emitmax

Actor COMP内のパーティクルの最大数を設定します。この数に達すると、パーティクルの排出はActor COMP内の既存のパーティクルをリサイクルして行われます。

Position Feedback TOP / flexposfb

位置をフィードバックするためのTOPを設定します。TOPには、シミュレーションでポジションを上書きして使用される、ポジションデータをエンコードする必要があります。テクスチャデータは、Flex TOPのポジションテクスチャに対応するように読み込まれます。

Velocity Feedback TOP / flexvelfb

速度をフィードバックするためのTOPを設定します。TOPには、シミュレーションでベロシティを上書きして使用される、ベロシティデータをエンコードする必要がある。テクスチャデータは、Flex TOPのベロシティテクスチャに対応するように読み込まれます。

パラメータ – Xform ページ

COMP共通- Xform ページの章を参照して下さい。

パラメータ – Pre-Xform ページ

COMP共通- Pre-Xform ページの章を参照して下さい。

パラメータ – Instance ページ

COMP共通- Instance ページの章を参照して下さい。

パラメータ – Instance 2 ページ

COMP共通- Instance 2 ページの章を参照して下さい。

パラメータ – Instance 3 ページ

COMP共通- Instance 3 ページの章を参照して下さい。

パラメータ- Render ページ

COMP共通- Render ページの章を参照して下さい。

パラメータ – Extensions ページ

COMP共通- Extensions ページの章を参照して下さい。

パラメータ – Common ページ

COMP共通- Common ページの章を参照して下さい。