Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!

log

2010.04.05 C++:オクルージョンカリングてすと

視錐台カリングを実装するくらいならオクルージョンカリングを
実装したほうがいいのではないかと思い、試しに実装してみたのですが。。

うーん。早くなるどころかなぜか不思議なことになりました苦笑。

一応説明すると、オクルージョンカリングというのはバウンディング
ボックスもしくはバウンディングスフィアのような単純モデルを利用して、
あらかじめモデルが画面に何ピクセル描画されるかを計算して
描画ピクセル数が0なら描画のスキップを行うという技術です。
で、バウンディングボックスを用いてオクルージョンカリングを
試してみたんですが、なぜか画面に描画されるモデル数が
多いときのほうがフレームレートが上がるんですよ、これが。
・画面内にモデル0~3体:33FPS
・画面内にモデル4~10体:40FPS

自分でも訳が分からないのですが。。おそらくオクルージョンカリングで
ピクセル数をCPUに取得するためにはオクルージョン用プリミティブの
描画終了を待たなければならないので、この描画待ち時間が
描画しているときより描画していないときの方が長くなるのかなと
いうのが今のところの僕の仮説。けど、実際は何ともいえません笑。

それにオクルージョンカリングをするためにオクルージョン
プリミティブを余分に描画しているので、結局Drawコストが
モデル数倍になってしまい、僕の環境ではオクルージョン
カリングしないほうが処理が早くなってしまいました(なんだそりゃ)。

ただ、これはオクルージョンカリング前に視錐台カリングを
行い、視錐台に入っている場合はオクルージョンカリングの
チェックを行うことで対処できるのかな、と思ったのですが
なんだか2度手間のような感じです。。

まあオクルージョンカリング自体はZカリングのアプローチ以外にも
例えば敵キャラの視野用のオクルージョンカリングを用いて
敵の視線にプレイヤーがいるかどうかの正確な処理が行えたり
するので、結構有用なんじゃないかと思う訳です。

結局、まとめとしては色々試してみるのはいいことです、ということでした。