(拡散/アルベド)テクスチャとしての16ビットハーフフロートリニアHDR画像?


10

だから私はしばらくこれについて考えていて、グーグルで答えを探しましたが、成功しませんでした。

すべてのテクスチャがJPEGなどの8ビットLDR画像である場合、レンダリング時に露出制御/トーンマッピングと競合する可能性はありません。これは、低ダイナミックレンジによってクランプされているため、実際には存在しないテクスチャの詳細を公開する必要がある画像のレンダリング露出を調整する場合です。したがって、テクスチャをHDRイメージとして保存し、.exrとして保存して、16ビットハーフフロートの線形カラースペースで適切なカラー表現を取得することは意味がありません(32ビット「フル」フロートはやりすぎかもしれません)。より詳細で正しい色の値を取得するには、GIとカラーブリードの計算方法にも影響があると思います。

それとも、必要なレンダリングの最終結果はおそらく何らかの方法で写真を撮ったときのテクスチャの露出レベルと同じになるので、それは単に必要ではないのですか?また、カメラは主に12〜14ビットで撮影するので、テクスチャを複数回露光し、それらすべてを1つのHDRIにつなぎ合わせるために余分な作業をすべて行う必要があります。

編集: 明確にするために、私は主にこれに興味を持っていますリアルタイムゲームエンジン。

回答:


8

フィルム制作では、バンディングなどのため、カラー/アルベドに8ビットテクスチャを使用することはほとんどありません(JPEGは、仕様上、線形値ではなくsRGBであるため、特に問題があります)。 )またはカラー/アルベドテクスチャの16ビット符号なし整数値。


1
うわー、@ LarryGritzに感謝!あなたがソニー・ピクチャーズ・イメージワークスで働いていることを考慮して、私はあなたを非常に信頼できる情報源とみなします!:)しかし、これらのテクスチャをどのようにキャプチャしますか?ほとんどのカメラは14ビットRAWファイルでのみ撮影しますが、16ビットリニアセンサーを備えた特別なカメラはありますか?または、HDRI画像ベースのライティングと同じように、テクスチャに複数の露出を適用しますか?または、単に14ビットカメラのRAWでキャプチャして「16ビット」として保存しますか?さて、どのファイル形式、.tiff(.tx、.tex)または.exrを使用していますか?入力ありがとうございます!:)
Kristoffer Helander 16年

1
@KristofferHelander:14ビットのキャプチャから0〜1の範囲の16ビット表現への変換は、乗算によって簡単に実現できます。ただし、ほとんどのテクスチャは写真ではなくペイントされます。16ビット形式で直接ペイントされることもあれば、sRGBでペイントされ、「線形化」されてテクスチャとして使用されるときに16ビットに変換されることもあります。アルベドテクスチャのHDRは必要ありません。
Larry Gritz、2016年

1
@KristofferHelander:アルベドテクスチャの場合、16ビット整数データでTIFFを使用する傾向があります(.txは単にTIFF形式ですが、タイリングされ、TIFFファイル内に複数のサブイメージとして保存されたMIPマップ多重解像度を使用します)。環境キャプチャのような真のHDRデータの場合、OpenEXRを使用します。レンダラー出力もOpenEXRになる傾向があります。
Larry Gritz、2016年

8

はい、極端な場合には、HDRライティングとトーンマッピングでカラーテクスチャのバンディングの問題が発生する可能性があります。このような場合、テクスチャのビット深度を高くすると便利です。ただし、私の経験では、ほとんどのマテリアルと通常の照明の状況ではこの問題は発生せず、通常のゲームのほとんどのテクスチャは8ビット(またはそれ以下)で問題ありません。ゲームは多くの場合、BC1圧縮を使用し、5に削減します。 6-5ビット)。

単一のシーンには非常に異なる明るさの大きさが含まれる場合があるため、人々はHDRレンダーターゲットを使用します。たとえば、暗い部屋では、窓から部屋の10〜100倍明るい太陽に照らされた外部を見ることができます。ただし、カラーテクスチャには、それほど広い範囲の大きさはありません。それらは、本質的に[0、1]の範囲内にある反射率を表し、実際には、反射率が約2〜5%未満の日常的な材料はほとんどありません。したがって、8ビット画像(ガンマエンコーディングを使用)は、通常、拡散反射光と鏡面反射光の色を十分な精度で表現できます。

非常に暗いテクスチャと非常に明るい照明または極端に露出オーバーのカメラ設定の組み合わせが最終フレームにバンディングを表示する可能性があることは事実ですが、これはよりまれなケースです。

あなたがおそらくそうするであろケース HDRテクスチャをしたいが、特にネオンサインと同様の光源のために、発光材料です。テクスチャは、ゲームで明るい光源として表示されるように増幅された値で表示されます。その場合、8ビットの画像は簡単にバンディングを表示できます。

最後に、テクスチャをキャプチャして作成するときは、可能であれば高精度(16ビット精度など)で作業すると便利です。これは、精度の問題を引き起こさずに画像を処理するためのヘッドルームが増えるためです。たとえば、レベルやカラーバランスを調整する必要がある場合、精度が少し失われます。これにより、8ビットのソースイメージから開始するときに、バンディングが発生する可能性があります(特に複数回行う場合)。16ビットソースは、このような問題に対してより耐性があります。ただし、ゲームで使用される最終的なテクスチャは、おそらく8ビットに圧縮されます。


combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final frame非常に良い洞察力。ただし、この点を緩和するために、ガンマエンコーディングがここにあることに注意してください。彼が問題を抱えているなら、優れたガンマ指数を試してみませんか?ただし、ハードウェアsRGBサンプラーの使用は禁止されます。
v.oddou 2016年

ご意見ありがとうございます。しかし、明確にするために、私はこれを写真のリアルなレンダリングの観点から主に興味を持っています-timeゲームエンジン。
Kristoffer Helander 16年

@KristofferHelander知っておくと良いですが、私が書いたものはおそらくオフラインレンダリングにも当てはまると思います。しかし、私はその分野での多くの直接的な経験がないことを認めます。
ネイサンリード、

@NathanReedはい、あなたは間違いなくそこにいくつかの本当に良い点を作りました:)
クリストファー・ヘランダー

5

時間があれば、詳細説明されているQuake 2エンジンラスタライゼーションテクノロジーに関するこの記事を読む読者を招待したいと思います。

TLDRの場合は、次の画像に注意してください。 ここに画像の説明を入力してください

私たちが目にするのはアルベドチャネルです。質問を正しく理解できたら、それを16ビットでエンコードしたいと思います。
過去のゲームで256色にエンコードできたのに、なぜ新しいゲームで281474976710656(つまり281兆)が必要なのでしょうか?」とは言いませんが、それでもpixarの不機嫌そうな男のように聞こえますアップ。より建設的に、この画像でメモした場合、すべてが同じ照明レベルにあります。より具体的には、望ましい彩度を維持する可能な最大強度。(HSV空間では、Vは最大になります)

重要なのは重要です。アルベドにはとにかくエンコードする深度がないため、ビットはほとんど必要ありません。ダイナミックはシェーディングに由来し、f32シェーダー内のコンポーネントごとに機能し、f16レンダーターゲットに出力することは理にかなっています。しかし、f16その中にアルベドテクスチャを保存することは、やり過ぎであるだけでなく、私たちの貴重な帯域幅にとって深刻で正当化されていないパフォーマンスの独占です。


ご意見ありがとうございます。しかし、明確にするために、私はこれを写真のリアルなレンダリングの観点から主に興味を持っています-timeゲームエンジン。元の投稿を更新しました。
Kristoffer Helander 16年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.