色空間のデータの変換

画面を構成したり、浮動小数点演算を実行したりするには、正しい色空間で作業する必要があります。 線形色空間で浮動小数点演算を実行することをお勧めします。 次に、画像を画面に表示するには、データを標準の RGB データ (sRGB、ガンマ 2.2 補正) 色空間に変換します。 sRGB 色空間で画面に表示することは、色の精度にとって重要です。 画像がガンマ 2.2 で修正されていない場合は、多くのビットまたは帯域幅を割り当てて、ユーザーが区別できないことを強調し、認識される値をシャドウするビットまたは帯域幅が少なすぎるため、同じビジュアル品質を維持するためにより多くのビットまたは帯域幅が必要になります。 そのため、最適な色精度を確保するために、ガンマ 2.2 補正された画像を画面に表示します。

色の精度

プレゼンテーションの場合、整数値の表示形式 ( DXGI_FORMAT_B8G8R8A8_UNORM_SRGBDXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORMなど) には、常に sRGB ガンマ補正データが含まれます。 浮動小数点数表示形式 (現在 はDXGI_FORMAT_R16G16B16A16_FLOATのみ) には、線形値データが含まれます。

_SRGB 形式修飾子 は、アプリが画面に sRGB データを配置するのに役立つオペレーティング システムを示します。 データの形式名にこの書式修飾子がない場合でも、アプリは常に sRGB データを整数値形式のバック バッファーに配置して、sRGB データを画面に表示する必要があります。 表示スキャンアウト形式の完全な一覧については、次の手順を実行します。

パイプラインにバインドされている_SRGB形式修飾子を使用してピクセル シェーダーからレンダー ターゲット ビュー (RenderTargetView) に浮動小数点出力値を書き込む場合は、ガンマ 2.2 修正色空間に変換します。 同様に、_SRGB形式修飾子を持つシェーダー リソース ビュー (ShaderResourceView) がパイプラインにバインドされている場合は、 ShaderResourceViewから値を読み取るときに、ガンマ 2.2 修正色空間から線形色空間に値を変換します。 その後、シェーダーはそれらに対して操作を実行できます。

たとえば、次のようなコードを使用して、シェーダーから RenderTargetView 形式に浮動小数点出力値を書き込みます。

struct PSOut
{
    float4 color : SV_Target;
};

PSOut S( PSIn input )
{
    PSOut output;
    output.color = float4( 1.0, 0.0, 0.0, 1.0 );
    return output;
}

'S' ルーチンが返されると、浮動小数点 (1、0、0、1) の値が RenderTargetView 形式に変換されます。 次に、_SRGB 形式修飾子RenderTargetView に割り当てると、ガンマ変換が行われます。

画面に表示されるコンテンツの色精度が最も高いかどうかを確認するには、次の手順を実行します。

パイプラインの色の精度を確保するには

  1. テクスチャに sRGB コンテンツがある場合は、 ShaderResourceView に_SRGB 形式修飾子 があることを確認します。 シェーダーResourceView からシェーダーに読み取るときに、テクスチャ コンテンツをガンマ 2.2 修正色空間から線形色空間に変換します。
  2. RenderTargetView に_SRGB形式修飾子も含まれているので、シェーダーの出力値はガンマ変換されます。

上記の手順に従うと、 IDXGISwapChain1::P resent1 メソッドを呼び出すと、画面に表示されるコンテンツの色精度が最も高まります。

ID3D11Device::CreateRenderTargetView メソッドを使用すると、DXGI_FORMAT_*_UNORM形式でのみ作成するスワップ チェーンからバック バッファーにDXGI_FORMAT_*_SRGB ビューを作成できます。 これは、レンダー ターゲット ビューを作成するためのルールに対する特別な例外であり、 id3D11Device::CreateRenderTargetView で別の形式を使用できるのは、 DXGI_FORMAT_*_TYPELESSで表示するリソースを作成した場合にのみ可能であることを示しています。

データ変換ルールの詳細については、「データ変換 ルール」を参照してください。

テクスチャの読み取りとテクスチャへの書き込みの両方を同時に行う方法については、「 In-Placeイメージ編集用のアンパックとパッキング DXGI_FORMAT」を参照してください。

反転モデル、ダーティ四角形、スクロール領域を使用したプレゼンテーションの強化