vrPhysicsService

クラス vrPhysicsService

(vrBaseService を継承)

vrPhysicsService クラス。

このクラスは、VRED の物理シミュレーションへのアクセスを提供します。これにより、シミュレーション中に物理オブジェクトの追加、削除、操作を行うことができます。

これは実験的な機能であり、将来のリリースで変更される可能性があります。現時点では、衝突検出でのみ使用でき、実際の物理シミュレーションでは使用できません。

シミュレーションに追加できる物理オブジェクトには、キネマティック、動的、静的の 3 つのタイプがあります。キネマティック オブジェクトは、フォースの影響を受けないが、ユーザが手動でコントロールできる物理オブジェクトです。キネマティック オブジェクトは凸型シェイプのみをサポートします。つまり、三角メッシュは使用できません。動的オブジェクトは、フォースの影響を受け、シミュレーション内の他のオブジェクトと相互作用することがある物理オブジェクトです。手動で移動することはできません。現在、動的オブジェクトは VRED で使用されません。静的オブジェクトは、フォースの影響を受けず、手動での移動や、他のオブジェクトやユーザによる移動を行うことができない物理オブジェクトです。静的オブジェクトに対して唯一有効な設定は、三角形メッシュの設定です。

このサービスの使用に関する注意事項は、次のとおりです。

現時点で実際にサポートされているのは、凸型シェイプのみです。したがって、凸型ハルを使用することをお勧めします。三角形メッシュは一部しかサポートされません。三角形メッシュを静的オブジェクトに使用することはできますが、移動オブジェクトに使用することはできません。つまり、三角形メッシュを物理シミュレーションに追加した後に、VRED 内で移動することはできません。移動すると、衝突シェイプと実際のオブジェクトの同期が外れます。PhysX は、三角形メッシュのテッセレーションについても非常に厳密です。テッセレーションが十分でない場合は、問題が発生したり、エラーが発生する可能性があります。

複雑なオブジェクトの場合は、凸型分解を使用して、オブジェクトを複数の小さな凸型シェイプに分割できます。この目的に使用されるライブラリは v-hacd (https://github.com/kmammou/v-hacd)です。ライブラリのほぼすべてのパラメータを vrdPhysicsConfig オブジェクトで設定して、分解プロセスを微調整できます。

現在、VRED ではオブジェクトの衝突シェイプは視覚化されていません。これらは NVidia PhysX ビジュアル デバッガで視覚化できます。このデバッガは、connectDebugger(host, port) 関数を使用して物理シミュレーションに接続できます。このデバッガは、接続を確立する前に VRED と同じマシンで起動する必要があります。このデバッガは NVidia の Web サイト(https://developer.nvidia.com/nvidia-physx-visual-debugger)からダウンロードできます。

登録されているノードの子ノードが移動または削除されているかどうかは、現在、検出されないことにも注意してください。登録されたノードのシーングラフに構造的な変更が加えられた場合は、ノードを削除してから物理シミュレーションに再度追加する必要があります。親ノードが既に登録されている物理シミュレーションにノードを追加することはできません。このようなノードを追加しようとすると、親ノードがが検出されてエラーになります。

概要

関数:
信号:

関数

vrPhysicsService.addKinematicObject(node, config)

物理シミュレーションにキネマティック オブジェクトを追加します。

キネマティック オブジェクトは、フォースの影響を受けないが、シミュレーション内の他のオブジェクトと相互作用し、手動で移動することができる物理オブジェクトです(マニピュレータ、スクリプトなど)。有効な設定は、vrdPhysicsHullConfig および vrdPhysicsConvexConfig です。

パラメータ:
戻り値:

オブジェクトが正常に追加された場合は true、それ以外の場合は false。

戻り値の型:

bool

vrPhysicsService.clearCollisionData(node)

ノードの衝突データをクリアします。

この関数は、ノードの持続的な衝突データをクリアします。保存されたノードとそのすべての子の衝突シェイプが削除され、VPB ファイルに保存されなくなります。これは、vrPhysicsService.storeCollisionData(node) で保存されたデータにのみ影響します。衝突シェイプ自体は物理シミュレーションから削除されないため、vrPhysicsService.removeObject(node) を使用する必要があります。

パラメータ:

node (vrdNode): 衝突データのクリア元となるノード。

戻り値:

衝突データを正常にクリアできた場合は true、それ以外の場合は false。

戻り値の型:

bool

vrPhysicsService.addStaticObject(node, config)

物理シミュレーションに静的オブジェクトを追加します。

静的オブジェクトは、フォースの影響を受けず、手動での移動や、他のオブジェクトによる移動を行うことができない物理オブジェクトです。静的オブジェクトに対して唯一有効な設定は、三角形メッシュの設定です。「vrdPhysicsTrianglesConfig」を参照してください。

パラメータ:
戻り値:

オブジェクトが正常に追加された場合は true、それ以外の場合は false。

戻り値の型:

bool

vrPhysicsService.clearFilters()

物理シミュレーションからすべてのノード フィルタをクリアします。

この関数は、物理シミュレーションからすべてのノード フィルタをクリアします。この関数を呼び出すと、すべてのノードが互いに衝突できるようになります。

vrPhysicsService.connectDebugger(host='127.0.0.1', port=5425)

物理デバッガを接続します。

この関数は、NVidia PhysX ビジュアル デバッガを物理シミュレーションに接続します。この関数を呼び出す前に、デバッガを起動しておく必要があります。

パラメータ:
  • host (string): デバッガのホスト アドレス(既定: 127.0.0.1)
  • port (integer): デバッガのポート(既定: 5425)

vrPhysicsService.deregisterNodeFilter(node)

物理シミュレーションからすべてのノード フィルタを登録解除します。

この関数は、物理シミュレーションからノード フィルタを登録解除します。この関数を呼び出すと、ノードは他のノードと衝突できるようになります。

パラメータ:node (vrdNode): 登録解除するノード。

vrPhysicsService.deregisterNodePairFilter(node1, node2)

物理シミュレーションからノード ペア フィルタを登録解除します。

この関数は、物理シミュレーションからノード ペア フィルタを登録解除します。この関数を呼び出すと、ノードは互いに衝突できるようになります。

パラメータ:
  • node1 (vrdNode): ペアの最初のノード。
  • node2 (vrdNode): ペアの 2 番目のノード。

vrPhysicsService.disconnectDebugger()

物理デバッガを接続解除します。

この関数は、物理シミュレーションから NVidia PhysX ビジュアル デバッガを接続解除します。

vrPhysicsService.getKinematicObjects()

物理シミュレーション内のすべてのキネマティック オブジェクトを取得します。

戻り値:シミュレーション内のすべてのキネマティック オブジェクトのリスト。
戻り値の型:List[vrdNode]

vrPhysicsService.getStaticObjects()

物理シミュレーション内のすべての静的オブジェクトを取得します。

戻り値:シミュレーション内のすべての静的オブジェクトのリスト。
戻り値の型:List[vrdNode]

vrPhysicsService.hasCollisionData(node)

ノードで衝突データが使用可能かどうかを確認します。

この関数は、ノードで衝突データが使用可能かどうかを確認します。ノードの衝突シェイプが vrPhysicsService.storeCollisionData(node) を使用してアタッチメントに保存されている場合は、衝突データを利用できます。

パラメータ:node (vrdNode): 確認するノード。
戻り値:衝突データが使用可能な場合は true、それ以外の場合は false。
戻り値の型:bool

vrPhysicsService.hasPhysicsObject(node)

ノードが物理シミュレーションに登録されているかどうかを確認します。

パラメータ:node (vrdNode): 確認するノード。
戻り値:ノードが登録されている場合は true、登録されていない場合は false。
戻り値の型:bool

vrPhysicsService.isActive()

シミュレーションが現在アクティブかどうかを返します。

戻り値:アクティブ状態。
戻り値の型:bool

vrPhysicsService.registerNodeFilter(node)

物理シミュレーションのノード フィルタを登録します。

この関数は、物理シミュレーションのノード フィルタを登録します。ノード フィルタは、他のノードと衝突してはならないノードを指定する場合に使用されます。シミュレーションからノードを削除せずに、ノードの衝突を一時的に無効にする場合に使用できます。

パラメータ:node (vrdNode): フィルタするノード。

vrPhysicsService.registerNodePairFilter(node1, node2)

物理シミュレーションのノード ペア フィルタを登録します。

この関数は、物理シミュレーションのノード ペア フィルタを登録します。ノード ペア フィルタは、互いに衝突してはならないノードのペアを指定する場合に使用されます。

パラメータ:
  • node1 (vrdNode): ペアの最初のノード。
  • node2 (vrdNode): ペアの 2 番目のノード。

vrPhysicsService.removeAllObjects()

物理シミュレーションからすべてのオブジェクトを削除します。

vrPhysicsService.removeObject(node)

物理シミュレーションから 1 つのオブジェクトを削除します。

パラメータ:node (vrdNode): 削除するノード。
戻り値:オブジェクトが正常に削除された場合は true、それ以外の場合は false。
戻り値の型:bool

vrPhysicsService.restoreCollisionData(node)

ノードの衝突データを復元します。

この関数は、ノードの衝突データを復元します。衝突データには、ノードとそのすべての子の衝突シェイプが含まれます。衝突データはノードのアタッチメントに保存されており、事前に保存しておく必要があります。衝突データはバージョン管理され、プラットフォームに対して固有です。基盤となる物理エンジンが変更されると、衝突データの互換性は失われ、無効になる可能性があります。衝突データが別のプラットフォーム(Windows と Linux など)に保存されている場合も同様です。その場合、衝突データはロード時に破棄され、データの保存時に使用されたパラメータを使用してノードの実際のジオメトリから再作成されます。その後、VPB を現在のプラットフォームに再度保存することができます。

パラメータ:node (vrdNode): 衝突データを復元するノード。
戻り値:衝突データが正常に復元された場合は true、それ以外の場合は false。
戻り値の型:bool

vrPhysicsService.setActive(state)

シミュレーションのアクティブ状態を設定します。

シミュレーションがアクティブな場合、物理オブジェクトを移動すると、シミュレーション内でその物理オブジェクトが更新されます。

パラメータ:state (bool): シミュレーションを非アクティブにする場合は false、アクティブにする場合は true。

vrPhysicsService.storeCollisionData(node)

ノードの衝突データを保存します。

この関数は、ノードの衝突データをアタッチメントに保存し、VPB ファイルに保存できるようにします。衝突データには、ノードとそのすべての子の衝突シェイプが含まれます。

パラメータ:node (vrdNode): 衝突データを保存するノード。
戻り値:衝突データが正常に保存された場合は true、それ以外の場合は false。
戻り値の型:bool

信号

vrPhysicsService.collisionContinues(info)

衝突が継続していることを示す信号。

このシ信号は、2 つのオブジェクト間の衝突が進行中である場合に送信されます。

パラメータ:info (vrdPhysicsInfo): 衝突に関連する物理情報。衝突ノードとそのルート ノードが含まれます。

vrPhysicsService.collisionStarted(info)

衝突が開始されたことを示す信号。

この信号は、2 つのオブジェクト間の衝突が検出された場合に送信されます。

パラメータ:info (vrdPhysicsInfo): 衝突に関連する物理情報。衝突ノードとそのルート ノードが含まれます。

vrPhysicsService.collisionStopped(info)

衝突が停止したことを示す信号。

この信号は、2 つのオブジェクト間の衝突が停止された場合に送信されます。

パラメータ:info (vrdPhysicsInfo): 衝突に関連する物理情報。以前に衝突していたノードとそのルート ノードが含まれます。