トップページ > 過去ログ > 記事閲覧
3Dモデルの描画について
名前:顔芸 日時: 2012/10/29 22:44

こんばんは。 今、立方体を大量(数万〜数十万オーダー)に描画しようと試みているのですが少し数を増やすとすぐに重くなってしまい困っています。 とりあえず初めに、何も考えずにMV1DuplicateModelでモデルハンドルを量産して個々の立方体を個別の3Dモデルとして管理し、 MV1DrawModelで表示したところ、1000個前後で処理落ちしてしまいました。 一方、立方体とは別に、頂点数が十数万ある地形モデルを一つ読みこんで表示してみたところ、何の問題もなく、処理落ちせずに表示されました。 そこで、処理落ちの主因はポリゴン数の多さではなくモデル数の多さにあるのか・・と思い、DrawPolygonIndexed3Dを用いてポリゴン単位で立方体を描画してみたのですが、 結局こちらも1000個前後で処理落ちしてしまいました。 3Dモデルのレンダリングについてはまだまだ知識が浅く、そもそも数万〜数十万個も表示しようとしていること自体が無謀なのかも判断出来かねます;; 立方体1000個で処理落ちするという事実について、これが限界なのか、もっと高速に処理する方法があるのか、あるならばその方法をご教示頂けると幸いです。 よろしくお願いいたしますm(_ _)m

Page: 1 |

Re: 3Dモデルの描画について ( No.1 )
名前:管理人 日時:2012/10/31 00:22

(時間が無いため簡易レスです、すみません) ポリゴンの数が多いことも処理が重くなる原因になりますが、描画処理を何回も呼ぶことも 処理が重くなる原因になります 例えば10万ポリゴンを1回で描画する場合と、100ポリゴンずつ1000回に分けて 描画した場合では後者のほうが処理負荷は大きくなります なので、DrawPolygonIndexed3D を使用して一度に1個の立方体を描画するのではなく、 200個分くらいの頂点配列を用意して200個を一度の DrawPolygonIndexed3D で 描画するようにしてみてください、恐らく1000個以上描画しても処理落ちは 発生しなくなると思います
Re: 3Dモデルの描画について ( No.2 )
名前:顔芸 日時:2012/10/31 01:01

ご回答ありがとうございますm(_ _)m なるほど、呼び出し回数ですか! 立方体という形にとらわれすぎていました;;当然一度に描画できますね^^; 早速ためしてみたいと思います!
Re: 3Dモデルの描画について ( No.3 )
名前:顔芸(解決!) 日時:2012/11/01 01:50

その後試してみましたが一定の成果が得られました。 具体的には2500個程の立方体をほとんど処理落ちなく描画できました。 しかし、頂点インデックスの上限の関係で、一度に描画できる数はこれくらいが限界で、結局相当な数分割して呼び出さないと 目標数には到底及ばないといったところです; 見えない面を描画しないなどの工夫でもうちょっとなんとかなるかな〜と粘ってみます。 この度はありがとうございましたm(_ _)m
Re: 3Dモデルの描画について ( No.4 )
名前:管理人 日時:2012/11/04 00:45

もし描画する立方体が動かないのでしたら、頂点バッファとインデックスバッファを使用することで 格段に描画速度を向上させることができますので、もし立方体が動かないのでしたら頂点バッファと インデックスバッファを使用して描画するようにしてみてください ( DXライブラリの頂点バッファとインデックスバッファ関係の関数についてはこちらのスレッドの No.6 で解説しています ) http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2638 何故「立方体が動かないのでしたら」の条件があるのかといいますと、 頂点バッファは描画を行うのが高速である代わりに 「頂点バッファの内容を書き換えるのが通常の頂点配列を書き換えるより遅い」 からです( 仮に高速になるように頑張っても同程度の速度 ) なので、もし立方体が常に動き回るような場合は、頂点バッファを使用すると 逆に遅くなってしまうかもしれませんのでご注意ください

Page: 1 |