問題タブ [hdr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - HDRi LatLong マップから浮動小数点キューブマップに直接レンダリングします - HDR ではありません
キューブマップに変換したい LatLong 2D テクスチャ イメージとして HDR 放射輝度環境マップがあります。これを行うには、HDR マップを 2D フロート テクスチャとしてロードし、それをキューブに投影してから、このキューブ内のシーンを 6 つの異なる方向からレンダリングしglFramebufferTexture2D
、関数のテクスチャ ターゲットとしてそれぞれのキューブマップ面でキューブマップを直接塗りつぶします。
生成されたキューブマップは、次のように生成された浮動小数点キューブマップです。
type パラメータはGL_FLOAT
HDR 値を適切に受け入れる必要があるため、注意してください。HDR イメージはstb_image.h
、次のように使用してロードされます。
また、この配列を繰り返し処理し、最大浮動小数点値を取得して、HDR が正しくロードされているかどうかを確認し、現在の HDR マップの最大浮動小数点値 が予想を288
はるかに上回っているかどうかを確認しました。1.0
入力テクスチャ (HDR float マップ) と出力キューブマップ (float として) に基づいて、物事がトリッキーになるところです。キューブマップの面が浮動小数点テクスチャとして適切に処理され、HDR 値が直接コピーされることを期待します。ただし、キューブマップは、トーンマッピング (可変露出) を追加した瞬間に LDR に見えます。非常に多くのバンディングが発生し、次の画像が示すように HDR の精度が明らかに欠けています (露出が ~7.5 の場合)。
不足しているものがあるかどうかはわかりません。また、浮動小数点フレームバッファへの直接レンダリングに関する OpenGL のドキュメントもあまり見つかりませんでした。そうしないと意味がないので、可能だと思います。
完全を期すために、LatLong 画像からキューブマップを生成する関連コードを次に示します (renderCustomCommand
適切なサンプラー セットを使用してキューブをレンダリングします)。
LatLong 2D 画像 -> キューブをサンプリングするコードは次のとおりです。
LatLong から Cubemap への変換はうまくいくことに注意してください。2D 環境はキューブマップ上で適切にレンダリングされますが、プロセスのどこかでフローティングが失われたかのように、スカイボックスとしてレンダリングされた瞬間に [0,1] の範囲にクランプされるだけです。ポイントデータ。
私はしばらくの間この問題に悩まされていましたが、あなたの誰かが何らかの洞察を得ることができることを望んでいました (このようなフロート キューブマップに直接レンダリングすることさえ可能ですか?)。ありがとうございました。
編集:レンダラーで失った多くの詳細が浮かび上がるのを見ることができるので、これは Photoshop から設定された高露出の同じ写真です。
c# - Texture2D を EXR (HDRI) に変換する
Texture2D
バイト配列で EXR 形式に直接変換する方法を探しています。私はほとんど調査を行っていませんが、これは思ったより複雑なようです。
私はコードを持っていないので、実際にはコードを探していません。これを行う方法についての単なる提案。
javascript - フレームバッファを HDR としてダウンロード
HTML5 キャンバス 2D コンテキストでは、このメソッドを使用して、キャンバスtoDataURL
のコンテンツを 0 から 255 の色値を持つ画像としてダウンロードできます。
webgl コンテキストから同じことを行うには、2D キャンバスで結果のバッファー値を使用してコピーし、前の方法を使用して結果をダウンロードするのが簡単な方法だと思いますreadPixels
が、色の値は 0 から 255 のままです。つまり、より広い範囲の値がクランプされます。
では、画像を float 形式の HDR にしたい場合はどうすればよいでしょうか?
この SO の質問では、レンダー ターゲットから float 値を読み取る方法について詳しく説明していますが、結果Float32Array
を HDR に変換してダウンロードするにはどうすればよいでしょうか?