DXGI_FORMAT の公式ドキュメントでは、_SRGB 列挙接尾辞を持つ形式のみが sRGB 色空間にあることがわかります。この接尾辞のない他の形式はすべて線形空間にあると思いました。しかし、DirectXTex ライブラリのフォーマット変換関数の非常に奇妙な動作を見つけました。( http://directxtex.codeplex.com/からダウンロードできます)
まず、NVIDIA Photoshop DDS Plugin を使用して、テクスチャ ファイルを DXGI_FORMAT_R32G32B32A32_FLOAT としてエクスポートしました。次に、このファイルを LoadFromDDSFile() 関数で読み込み、Convert() 関数でその形式を DXGI_FORMAT_R16G16B16A16_UNORM に変換します。(これら 2 つの関数はどちらも DirectXTex ライブラリによって提供されます。)
何だと思いますか?画像を DXGI_FORMAT_R16G16B16A16_UNORM に変換した後、すべてのピクセルの明るさも変更され、画像全体が以前よりも明るくなりました。
画像を DXGI_FORMAT_R16G16B16A16_UNORM 形式に変換した後で、ピクセル値を sRGB 空間から線形空間に手動で変換すると、結果のピクセル値は入力と同じになります。したがって、DirectXTex ライブラリは DXGI_FORMAT_R32G32B32A32_FLOAT をリニア色空間のフォーマットとして扱い、DXGI_FORMAT_R16G16B16A16_UNORM を sRGB 色空間のフォーマットとして扱い、リニア空間から sRGB 空間への色空間変換を行ったのだと思います。( Convert() 関数も色空間を変換する理由を調べようとしましたが、WIC によって実装されており、そのソース コードはありません。)
では、DirectXTex ライブラリにバグはありますか? それとも、DXGI_FORMAT の本当の標準ですか? いくつかの特別な DXGI_FORMAT に異なるカラー スペースがあった場合は、その仕様をどこで確認できるか教えてください。
どんな助けでも感謝します。ありがとう!