レンズフレアの有効化、無効化(directx)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
うしお

レンズフレアの有効化、無効化(directx)

#1

投稿記事 by うしお » 15年前

3Dアプリケーションにて、レンズフレアを描いてみようと考えています

レンズフレアを描画するいくつかのステップの中で、

カメラの位置およびポリゴンの位置により、
レンズフレアを描画するかどうか?を判断するステップがあると思います

レンズフレアを画面に描画しなければならない条件は
1、太陽が画面内に存在する
2、太陽がどのポリゴンにも隠されていない
ということだと思います
1については、
太陽の位置*ビュー行列*プロジェクション行列*ビューポート行列
=画面上での太陽の座標
なので簡単に調べられるはずです。

問題は2で、
私が考えられる方法は、
 カメラ位置→太陽の位置のレイと、
 画面内のポリゴンおよびオブジェクトおよび、境界図形、との衝突判定を行う
というものがまず浮かぶのですが、
見た目にしか影響しないレンズフレアに、このような処理は割に合わないように感じます
(実行時計算量+コーディング作業量)

処理(実行時計算量+コーディング作業量)
が割りに合う範囲内で上記のものを実装する考え方をお伺いしたいです
よろしくおねがいします

環境は
Microsoft DirectX SDK (June 2010)
VisualStudio2010Express
言語はC++です

ISLe

Re:レンズフレアの有効化、無効化(directx)

#2

投稿記事 by ISLe » 14年前

#自分で実践したことはないのですが。

ゲームではどの方向を向いたときに見えるかをマップデータの一部として埋め込むのが一般的だと思います。

正確を期するなら影ではないところには光が当たっているわけですから、一回レンダリングしてステンシルバッファを作っておくと良いと思います。
ステンシルバッファをサンプリングすれば日向か日陰か分かるのであとは光源がある方向を元にフレアを配置すれば良いかと思います。

うしお

Re:レンズフレアの有効化、無効化(directx)

#3

投稿記事 by うしお » 14年前

ご回答ありがとうございます

ステンシルバッファ、これを期に挑戦してみるのも考えてみます

うしお

Re:レンズフレアの有効化、無効化(directx)

#4

投稿記事 by うしお » 14年前

ステンシルバッファでマスク処理の方法は見つかったのですが、
ステンシルの値自体の参照は見つけられませんでした
仮に見つかったとしても、ロックしなければならないようです
そもそも参照するよりもステンシルテストのためのもので、
参照するためのものではないのかもしれません

今後アプリケーションごとに実装を考えていきたいと思います
とりあえず一応簡易的な形にはこれで閉めます

ISLe

Re:レンズフレアの有効化、無効化(directx)

#5

投稿記事 by ISLe » 14年前

ステンシルバッファというとマスクとして使うものでしたね。
使い方を間違えました。

専用のテクスチャにレンダリングしてそこからサンプリングするということです。
http://game.watch.impress.co.jp/docs/se ... 70531.html
↑のページの影生成のところのシャドウマップみたいな感じ。
というかそのまま日向判定に使えそうです。

うしお

Re:レンズフレアの有効化、無効化(directx)

#6

投稿記事 by うしお » 14年前

ご回答ありがとうございます

シャドウマップ(もしくはカスケードシャドウマップあたり
などの影生成法を採用する場合は使ってみようかと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る