Share via


Konvertieren von Daten für den Farbraum

Um auf dem Bildschirm zu verfassen oder Gleitkommavorgänge auszuführen, müssen Sie im richtigen Farbraum arbeiten. Es wird empfohlen, Gleitkommavorgänge in einem linearen Farbraum auszuführen. Konvertieren Sie dann die Daten in den Standard-RGB-Daten (sRGB, gamma 2.2-korrigiert), um Ihre Bilder auf dem Bildschirm zu präsentieren. Die Darstellung auf dem Bildschirm im sRGB-Farbraum ist wichtig für die Farbgenauigkeit. Wenn Bilder nicht mit Gamma 2.2 korrigiert werden, weisen sie zu viele Bits oder zu viel Bandbreite zu, um Hervorhebungen hervorzuheben, die personen nicht unterscheiden können, und zu wenig Bits oder Bandbreite für Schattenwerte, für die Personen sensibel sind, und daher wären mehr Bits oder Bandbreite erforderlich, um die gleiche visuelle Qualität zu erhalten. Um die beste Farbgenauigkeit zu gewährleisten, zeigen Sie daher Bilder auf dem Bildschirm an, die gamma 2,2-korrigiert sind.

Farbgenauigkeit

Bei der Präsentation enthalten ganzzahlige Anzeigeformate (z. B. DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM usw.) immer gammakorrierte sRGB-Daten. Anzeigeformate mit Gleitkommawert (derzeit nur DXGI_FORMAT_R16G16B16A16_FLOAT) enthalten lineare Daten.

Der _SRGB-Formatmodifizierer gibt dem Betriebssystem an, damit die App sRGB-Daten auf dem Bildschirm platzieren kann. Die App muss sRGB-Daten immer in Backpuffern mit ganzzahligen Formaten platzieren, um die sRGB-Daten auf dem Bildschirm darzustellen, auch wenn die Daten diesen Formatmodifizierer nicht im Formatnamen enthalten. Eine vollständige Liste der Anzeige-Scan-Out-Formate:

Wenn Sie Gleitkommaausgabewerte aus dem Pixelshader in Renderzielansichten (RenderTargetViews) mit dem an die Pipeline gebundenen _SRGB Formatmodifizierer schreiben, konvertieren Sie sie in gamma 2.2-korrigierten Farbraum. Wenn Shaderressourcensichten (ShaderResourceViews) mit dem _SRGB Formatmodifizierer an die Pipeline gebunden sind, konvertieren Sie die Werte aus gamma 2.2-korrigiertem Farbraum in einen linearen Farbraum, wenn Sie sie aus den ShaderResourceViews lesen. Der Shader kann dann Vorgänge für sie ausführen.

Verwenden Sie beispielsweise Code ähnlich diesem, um Gleitkommaausgabewerte aus einem Shader in ein RenderTargetView-Format zu schreiben:

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;
}

Wenn die Routine "S" zurückgibt, werden die Gleitkommawerte (1, 0, 0, 1) in das RenderTargetView-Format konvertiert. Wenn Sie dem RenderTargetView dann den _SRGB Formatmodifizierer zuweisen, erfolgt die Gammakonvertierung.

Die folgenden Schritte müssen ausgeführt werden, um sicherzustellen, dass der auf dem Bildschirm angezeigte Inhalt die beste Farbgenauigkeit aufweist.

So stellen Sie die Farbgenauigkeit in der Pipeline sicher

  1. Wenn eine Textur sRGB-Inhalt aufweist, stellen Sie sicher, dass shaderResourceView über den _SRGB Formatmodifizierer verfügt. Wenn Sie also aus ShaderResourceView in den Shader lesen, konvertieren Sie den Texturinhalt aus dem Gamma 2.2-korrigierten Farbraum in einen linearen Farbraum.
  2. Stellen Sie sicher , dass RenderTargetView auch über den _SRGB Formatmodifizierer verfügt, damit die Shaderausgabewerte gamma konvertiert werden.

Wenn Sie die vorherigen Schritte ausführen und die IDXGISwapChain1::P resent1-Methode aufrufen, weist der auf dem Bildschirm angezeigte Inhalt die beste Farbgenauigkeit auf.

Sie können die ID3D11Device::CreateRenderTargetView-Methode verwenden, um DXGI_FORMAT_*_SRGB Ansichten auf Backpuffern aus einer Swapchain zu erstellen, die Sie nur mit einem DXGI_FORMAT_*_UNORM Format erstellen. Dies ist eine besondere Ausnahme von der Regel zum Erstellen von Renderzielansichten, die besagt, dass Sie mit ID3D11Device::CreateRenderTargetView nur dann ein anderes Format verwenden können, wenn Sie die Ressource erstellt haben, die Sie mit DXGI_FORMAT_*_TYPELESS anzeigen möchten.

Weitere Informationen zu Regeln zum Konvertieren von Daten finden Sie unter Datenkonvertierungsregeln.

Informationen zum gleichzeitigen Lesen und Schreiben in eine Textur finden Sie unter Entpacken und Packen von DXGI_FORMAT für In-Place Bildbearbeitung.

Verbessern der Präsentation mit dem Flip-Modell, modifiziert Rechtecke und scrollten Bereichen