Share via


Conversione dei dati per lo spazio dei colori

Per comporre lo schermo o eseguire operazioni a virgola mobile, è necessario lavorare nello spazio colore corretto. È consigliabile eseguire operazioni a virgola mobile in uno spazio colore lineare. Quindi, per presentare le immagini allo schermo, convertire i dati in dati RGB standard (sRGB, gamma 2.2 corretti). La presentazione allo schermo nello spazio dei colori sRGB è importante per l'accuratezza del colore. Se le immagini non sono corrette in gamma 2.2, allocano troppi bit o larghezza di banda troppo elevata per evidenziare che le persone non possono distinguere e larghezza di banda troppo pochi bit o larghezza di banda per i valori ombreggiati a cui le persone sono sensibili e quindi richiederebbero più bit o larghezza di banda per mantenere la stessa qualità visiva. Pertanto, per garantire la migliore accuratezza dei colori, presentare immagini allo schermo che sono gamma 2.2 corrette.

Accuratezza dei colori

Per la presentazione, i formati di visualizzazione con valori interi ,ad esempio DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM e così via, contengono sempre dati corretti con gamma sRGB. I formati di visualizzazione con valori float (attualmente solo DXGI_FORMAT_R16G16B16A16_FLOAT) contengono dati con valori lineari.

Il modificatore di formato _SRGB indica al sistema operativo per consentire all'app di posizionare i dati sRGB sullo schermo. L'app deve sempre inserire i dati sRGB nei buffer indietro con formati con valori integer per presentare i dati sRGB sullo schermo, anche se i dati non dispongono di questo modificatore di formato nel nome del formato. Per un elenco completo dei formati di analisi di visualizzazione:

Quando si scrivono valori di output a virgola mobile dal pixel shader nelle visualizzazioni di destinazione di rendering (RenderTargetViews) con il modificatore di formato _SRGB associato alla pipeline, si converte in gamma 2.2-2-corretto color space. Analogamente, quando le visualizzazioni shader-resource (ShaderResourceViews) con il modificatore di formato _SRGB sono associate alla pipeline, i valori vengono convertiti da spazi di colore gamma 2.2 corretti allo spazio colore lineare quando vengono letti da ShaderResourceViews. Lo shader può quindi eseguire operazioni su di essi.

Ad esempio, usare codice simile a questo per scrivere valori di output a virgola mobile da uno shader in un formato 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;
}

Quando la routine 'S' restituisce, i valori a virgola mobile (1, 0, 0, 1) vengono convertiti nel formato RenderTargetView . Se quindi si assegna il modificatore di formato _SRGB al RenderingTargetView, si verifica la conversione gamma.

Questi sono i passaggi da seguire per assicurarsi che il contenuto visualizzato sullo schermo abbia la migliore accuratezza del colore.

Per garantire l'accuratezza del colore nella pipeline

  1. Se una trama ha contenuto sRGB, assicurarsi che shaderResourceView abbia il modificatore di formato _SRGB in modo che quando si legge da ShaderResourceView nello shader, si converte il contenuto della trama da gamma 2.2-corretto spazio colore in spazio colore lineare.
  2. Assicurarsi che renderTargetView disponga anche del modificatore di formato _SRGB in modo che i valori di output dello shader vengano convertiti in gamma.

Se si seguono i passaggi precedenti, quando si chiama il metodo IDXGISwapChain1::P resent1 , il contenuto visualizzato sullo schermo ha la migliore accuratezza del colore.

È possibile usare il metodo ID3D11Device::CreateRenderTargetView per creare visualizzazioni DXGI_FORMAT_*_SRGB nei buffer indietro da una catena di scambio creata solo con un formato DXGI_FORMAT_*_UNORM . Si tratta di un'eccezione speciale alla regola per la creazione di viste di destinazione di rendering, che indica che è possibile usare un formato diverso con ID3D11Device::CreateRenderTargetView solo se è stata creata la risorsa da visualizzare con DXGI_FORMAT_*_TYPELESS.

Per altre informazioni sulle regole per la conversione dei dati, vedere Regole di conversione dei dati.

Per informazioni su come leggere simultaneamente e scrivere in una trama, vedere Decomprimere e comprimere DXGI_FORMAT per In-Place Modifica immagine.

Miglioramento della presentazione con il modello di capovolgimento, i rettangoli sporchi e le aree scorrevoli