久々にDX11の話題ですぞ
DX11はバッファ系が独立せず
初期化の段階やらで種類を設定する感じになったのですが
そこで、問題発生!
あたしの技術では、頂点バッファにアクセスして
三角形の情報を得る事が出来ない!ってな事
DX9世代だと、GetData<T>でアクセスできたんですが
SharpDXでは見つからない・・・
ネットでDirectX11のトライアングルピッキングのサンプルを探しても見つからない!
ってな感じで、オクラになりかけてますよ~
唯一の解決策とすれば
メッシュを読み込んだ時点で、三角形情報をメモリに保持しちゃうって事
いちいち、バッファをロックしてアクセスするよりも
かなりの高速化が考えられますが
これっていいの?それともみんなこうなの?
ってな感じですよ
例えば
↑の様な三角形1542個のモデルで
保持するメモリの量を計算してみると
頂点の最適化を行わない場合
4626個の頂点が存在することになり
1頂点は3っつのfloatの集合体で
float1つが4Byteな事から
4626 * 3 * 4 = 55512byte = 0.052MB
三角形を示すため、インデックスバッファも必要
intの場合は4byteなので
↑の式と同じ使用量
と言うことは、上記モデルで
約0.1MBの使用量って事になりますね
同じような算出方法で
1万5千くらいの三角形数だと
15000 * 3 * 3 * 4 * 2 = 1080000 = 1.02MB
あれ?
8GBだ16GBだ!って言っている昨今としては
意外と少ない?
と言うことは、読み込んだ時点で保持しちゃっていいのかなぁ・・・
ポスビだけでなく、ゲームにも関わってくる問題なので知りたい所
う~ん、ここら辺プログラマの繋がりが無いとわからないなぁ
だれか教えて~
でも、プロ級のモデルが揃うMMD(骨が多すぎてゲーム向きのは少ないですがね)
アセットストアでコードも得られるUnity3D
この2つが接近している今
何も考えずに、Unity触ったほうが幸せな気もするこの頃ですぞ
コメント
>>おちゃっこさん
コメントありがとうございます!
やはり頂点ロックしてからの処理は重いですよね・・・
とりあえずは、メッシュを読み込んだ時に保持して
ちゃんと解放処理を追加したいと思いますよ!
いつもありがとうございます
DX11だとGPUの計算結果を受け取れるみたいなので
ワールド行列をかけた後の三角形を習得するのと
CPUでの計算がどちらが早いのかもちょいと検証してみようかと思いますよ~