フォト

Google AdSense


  • AdSense
無料ブログはココログ

« 2日目 | トップページ | こういうときに »

2006.09.01

今のところの話

ちょっとPhysXの話をしようと思います。たまたまCEDECで聞かれることが多かったので。

最近は、PhysXボードの物理以外への利用を考えてる人がいたりするようですが、これが有用に活用できるのであれば、色々とやれることがあると思いのでいいことだと思います。ちなみに下記の私の理解が間違ってたら遠慮無くご指摘ください(比較的ネガティブな話なので、間違いがちゃんと指摘されるのは歓迎ですし、あまり自信もないです)。

ボードで何が出来るか?
僕の理解では、SDKのドキュメントの

Guide→Advanced Topic→AGEIA PhysX Hardware Support

にボードで出来ることのすべてが書かれていると理解しています。で、大きく、

"Pure Hardware Rigid Body Scenes"と"Pure Hardware Fluid Scenes"

に分れていて、細かいことは置いておきまして、CEDECのセッションで聞いた話も大体この範囲でした。つまり剛体と流体(パーティクルや各種の単純な形状の集合で表現)を扱えることが分かりました。

ボードで処理できるオブジェクト数
引用すると2.4.4では剛体は、

TheAGEIA PhysX hardware currently supports a maximum of 3 concurrent scenes. Each scene can hold up to 2048 (D6) joints and 2000 actors.

3シーンで2000前後のアクター(ようするにオブジェクトです)が使えるようです。

一方流体は、

Fluid scenes support a maximum of 32k particles.
The maximum number of capsules in a scene is limited to 1024.
The maximum number of boxes in a scene is limited to 1024
Spheres are emulated as capsule of zero height, so they share the same limitation as capsules.

扱えるようです。

ぶっちゃけレイトレできるの?
僕の見解では、

現状のPhysXハードウェアでは無理じゃないのかなぁ・・・」

と思っております。ちなみに、「現状」なので、将来的(早くても2~3年後)にどうなるかは分かりません。ドライバのカスタマイズで機能が簡単に増やせるのであれば、もっと短期的に変更はあるかもしれませんが、処理が固定化されすぎているのであればSDKの更新はあってもボードの更新は難しいと思います。

NxSceneクラス(シーンの管理をするクラス)では、RayCastingに関して以下のメソッドを持っています。

virtual bool raycastAnyBounds (const NxRay &worldRay, NxShapesType shapesType, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, const NxGroupsMask *groupsMask=NULL)

virtual bool raycastAnyShape (const NxRay &worldRay, NxShapesType shapesType, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, const NxGroupsMask *groupsMask=NULL)

virtual NxU32 raycastAllBounds (const NxRay &worldRay, NxUserRaycastReport &report, NxShapesType shapesType, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, NxU32 hintFlags=0xffffffff, const NxGroupsMask *groupsMask=NULL)

virtual NxU32 raycastAllShapes (const NxRay &worldRay, NxUserRaycastReport &report, NxShapesType shapesType, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, NxU32 hintFlags=0xffffffff, const NxGroupsMask *groupsMask=NULL)

virtual NxShape * raycastClosestBounds (const NxRay &worldRay, NxShapesType shapeType, NxRaycastHit &hit, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, NxU32 hintFlags=0xffffffff, const NxGroupsMask *groupsMask=NULL)

virtual NxShape * raycastClosestShape (const NxRay &worldRay, NxShapesType shapeType, NxRaycastHit &hit, NxU32 groups=0xffffffff, NxReal maxDist=NX_MAX_F32, NxU32 hintFlags=0xffffffff, const NxGroupsMask *groupsMask=NULL)

ただ、これらはすべて

サポートするプラットホーム
PC SW: Yes
PPU : No
PS3 : Yes
XB360: Yes

となっております。ただ、他にレイキャスト系の命令があってそれがPPUサポートだと問題ないと思います(無さそうですが)。他に知らない方法で実現できる方法もあるかもしれません。

どこを目指しているか?
CEDECで、「精度のいる産業用向けのソリューションとかは考えているのか?」という方がいました。これは、興味深い質問でした。答えは、「No」で「ゲーム向け」とのことでした。たぶん、冷静に仕様を見ると「ゲーム向け」を強調するのは分かるような気がします。

産業用は、たぶんまずはゲームで成功しないことには難しそうですね。大学など研究機関向けにライセンシー(一応、SDKは無料ですが、早期アクセス権)はあるのか、という質問をしましたがあまり今の段階では積極的にアカデミックな方に使ってもらって世に出て行くと言うことは無いみたいですね。

セッションでかすかに触れられてたのですが、最近はPCベースのアーケード基盤があるので、そうしたものへの組み込みなんかは採用するところがあれば一番販路としてよさそうですね。

あと、もうひとつアイデアがあるのですが、今のパチンコの玉とか釘とかをシミュレートして液晶に表示する玉 & 釘レス台の処理にPhysXボードを使えば大ヒットだと思います(完全なソフトウェア処理の台は認可が通らないだろうけど)。

« 2日目 | トップページ | こういうときに »

Programming」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« 2日目 | トップページ | こういうときに »