トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

ハードウェア(PPU)の使用_PhysX

ハードウェア(PPU)の使用(2006/09/20 更新)

物理演算が可能なボード(PPU)がささっているマシンではそのハードウェアリソースが使用できるのかチェックして、使える場合はハードウェアで物理演算ができるとよさげです。

ハードウェアが使用可能かチェック

「NxPhysicsSDK::getHWVersion」にて、ハードウェアが使用可能かどうか判定することができます。

bool IsPhysXHardwarePresent()
{
  if(!g_pPhysicsSDK) return false;
  return (g_pPhysicsSDK->getHWVersion() != NX_HW_VERSION_NONE);
}

「NxPhysicsSDK::getHWVersion」の戻り値は、NX_HW_VERSION_NONEとNX_HW_VERSION_ATHENA_1_0が現段階では存在し、後者はバージョンっぽい数値が入っているため、たぶん今後は2_0とかなるのでしょう。

ですので、「g_pPhysicsSDK->getHWVersion() != NX_HW_VERSION_NONE」の条件に当てはまる場合はハードウェアが利用できる、と判断します。

ハードウェアが使えるかどうかの判断は上記でOKです。ただ、そのままではハードウェアの恩恵を受けることはできません。フラグを立ててあげる必要があります。

PhysXのハードウェアを使用する

NxSceneを作成する際に、NxSceneDescの「simType」「hwSceneType」にて以下のように指定します。

// シーン情報を作成する
NxSceneDesc sceneDesc;
sceneDesc.gravity = NxVec3(0.0f, -9.8f, 0.0f);   // 重力は鉛直下向き

// ハードウェアが使えるかどうか判定
if(IsPhysXHardwarePresent()) {
  sceneDesc.simType     = NX_SIMULATION_HW;    // PhysXハードウェアを有効化
  sceneDesc.hwSceneType = NX_HW_SCENE_TYPE_RB; // 剛体部分でハードウェアを使用
}

// シーンを作成
g_pScene = g_pPhysicsSDK->createScene(sceneDesc);
if(g_pScene == NULL) return false;

「IsPhysXHardwarePresent」は前に書いたハードウェアが使用できるかどうか判断するための関数です。もしもハードウェアが使える場合は、「sceneDesc.simType」にNX_SIMULATION_HWを、「sceneDesc.hwSceneType」にNX_HW_SCENE_TYPE_RBを指定します。「sceneDesc.hwSceneType」では、剛体の場合と流体の場合の2つを選択できるようです。デフォルトの場合は、すべてがソフトウェアで物理計算されます。その後createSceneを呼び出してシーンを作成します。

ハードウェア対応はこれだけです。ただし、ハードウェアによってはアクターの数に制限があったり使用できない機能が存在したりします(現段階ではまだ未調査です)。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.