三角形をピック!

久々にDX11の話題ですぞ

 

DX11はバッファ系が独立せず

初期化の段階やらで種類を設定する感じになったのですが

そこで、問題発生!

あたしの技術では、頂点バッファにアクセスして

三角形の情報を得る事が出来ない!ってな事

 

DX9世代だと、GetData<T>でアクセスできたんですが

SharpDXでは見つからない・・・

 

ネットでDirectX11のトライアングルピッキングのサンプルを探しても見つからない!

ってな感じで、オクラになりかけてますよ~

 

唯一の解決策とすれば

メッシュを読み込んだ時点で、三角形情報をメモリに保持しちゃうって事

いちいち、バッファをロックしてアクセスするよりも

かなりの高速化が考えられますが

これっていいの?それともみんなこうなの?

ってな感じですよ

 

例えば

1524.jpg

↑の様な三角形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触ったほうが幸せな気もするこの頃ですぞ

コメント

  1. LAG より:

    >>おちゃっこさん
    コメントありがとうございます!
    やはり頂点ロックしてからの処理は重いですよね・・・

    とりあえずは、メッシュを読み込んだ時に保持して
    ちゃんと解放処理を追加したいと思いますよ!

    いつもありがとうございます

    DX11だとGPUの計算結果を受け取れるみたいなので
    ワールド行列をかけた後の三角形を習得するのと
    CPUでの計算がどちらが早いのかもちょいと検証してみようかと思いますよ~

タイトルとURLをコピーしました