2012-04-15 2 views
1

私は現在、WebGLの直接描画(マルチパスや後処理なし)のレンダリングを行っています。私は、すべてのフレームを実行するのに十分効率的なやり方で、レンダリングされた画像全体の平均輝度/輝度(すなわち単一の数値)を決定したいと考えています。WebGLの平均的なシーンの明るさはどのようにして決められますか?

私が達成しようとしているのは、現実的な照明とトランジションなしの屋内と屋外の両方のシーンを見るために、シーン内に「露出」調整(ビデオカメラまたは人間の目として)を実装することです。現在のフレームの輝度は、次のフレームの輝度に対する負のフィードバックとなる。

現在のところ、CPUの側では、シーンデータから数個の光線を送信して、その点の輝度を求めることで、非常におおよその近似値を計算しています。これはうまくいくが、安定している試料が少なすぎる(光線が光源を横切るため、明るさは視野角によって著しく変化する)。私のアプリケーションが通常はCPUに拘束されているので、可能な限りGPUに仕事を委ねることを好みます。

+0

偶然、WebGLに渡される情報を使用することは可能ですか、イメージベースのソリューションが必要ですか?解決策は正確である必要がありますか、または近似で十分ですか? –

+0

@StefanHanke編集を参照してください。簡単には:近似は大丈夫です。光は世界のデータから簡単に抽出されますが、私はより多くのCPUタスクを追加したくありません。 –

+1

私の考えは:MRTを使って解像度の異なる2つのカラーアタッチメントにレンダリングする。 WebGLが[1色の添付ファイルのみ](http://stackoverflow.com/q/9820496/1262542)をサポートしているため、複数の解像度を使用するレンダリングが新しいOpenGLバージョンでもサポートされているかどうかはわかりません。 –

答えて

3

私はちょうど恐ろしいkludgeを考えました。つまり、テクスチャにレンダリングし、その上にMipmapsを生成し、次に最小のレベルを読み取ります。もっと良い方法があることを願っています。

どうしたのですか?この方法はGPU上でほぼ完全に行われ、既存のレンダリングパイプラインにうまくいき、合理的な結果をもたらすはずです。私はそれに対して推薦する何らかの理由を知らない。

+0

どうしたの?まあ、例えば、それはまったく関係のないリサンプリングのことです。しかし、私はCPUに縛られていると主張しました。私はそれを試さなければならないと思う。 –

+0

私はこれを実装しようとしました。基本的なコンセプトはうまくいくように見えますが、 'generateMipmap'の後は、(フィルタがミップマップに設定されていなくても)テクスチャは直ちに黒くなります。 'generateMipmap'を実行するときにフレームバッファが現在バインドされていないことを確認しました。また、' readPixels'のために後のフレームを別のフレームバッファに描画しました。 'generateMipmap'を削除すると、期待される結果が得られます。助言がありますか? –

関連する問題