Conversión de datos para el espacio de colores

Para componer en la pantalla o realizar operaciones de número de punto flotante, debe trabajar en el espacio de colores correcto. Se recomienda realizar operaciones de número de punto flotante en un espacio de colores lineal. Después, para presentar las imágenes a la pantalla, convierta los datos en el espacio de colores de datos RGB estándar (sRGB, gamma 2.2 corregido). La presentación en la pantalla en el espacio de colores sRGB es importante para la precisión de los colores. Si las imágenes no son gamma 2.2 corregido, asignan demasiados bits o demasiado ancho de banda a la información destacada que las personas no pueden diferenciar, y demasiados bits o ancho de banda para los valores de sombra a los que las personas son sensibles y, por tanto, requerirían más bits o ancho de banda para mantener la misma calidad visual. Por lo tanto, para garantizar la mejor precisión de colores, presente imágenes a la pantalla que sean gamma 2.2 corregido.

Estrictamente hablando, la función de transferencia sRGB real es una fórmula por fragmentos (segmento lineal + potencia 2.4), que es ligeramente diferente de una gamma de potencia 2.2 sin procesar. Pero para simplificar, los usaremos de forma intercambiable.

Precisión de los colores

En la presentación, los formatos de presentación con valores enteros (como DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM, etc.) siempre contienen datos con corrección gamma sRGB. Los formatos de presentación con valores float (actualmente solo DXGI_FORMAT_R16G16B16A16_FLOAT) contienen datos con valores lineales.

El modificador de formato _SRGB indica al sistema operativo que ayude a la aplicación a colocar datos sRGB en la pantalla. La aplicación siempre debe colocar datos sRGB en búferes de reserva con formatos con valores enteros para presentar los datos sRGB a la pantalla, incluso si los datos no tienen este modificador de formato en su nombre de formato. Para obtener una lista completa de los formatos de examen de la visualización:

Al escribir valores de salida de número de punto flotante desde el sombreador de píxeles en vistas de destino de representación (RenderTargetViews) con el modificador de formato _SRGB enlazado a la canalización, los convierte en espacio de colores gamma 2.2 corregido. Del mismo modo, cuando las vistas de recursos del sombreador (ShaderResourceViews) con el modificador de formato _SRGB están enlazadas a la canalización, los valores se convierten del espacio de colores gamma 2.2 corregido al espacio de colores lineal cuando se leen desde ShaderResourceViews. Después, el sombreador puede realizar operaciones en ellos.

Por ejemplo, use código similar a este para escribir valores de salida de número de punto flotante de un sombreador en 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;
}

Cuando se devuelve la rutina "S", los valores de número de punto flotante (1, 0, 0, 1) se convierten al formato RenderTargetView. Después, si asigna el modificador de formato _SRGB a RenderTargetView, se produce la conversión de gamma.

Estos son los pasos que se deben seguir para asegurarse de que el contenido que se muestra en la pantalla tiene la mejor precisión de colores.

Garantía de la precisión de colores en la canalización

  1. Si una textura tiene contenido sRGB, asegúrese de que ShaderResourceView tiene el modificador de formato _SRGB para que, al leer desde ShaderResourceView en el sombreador, convierta el contenido de la textura del espacio de colores gamma 2.2 corregido al espacio de colores lineal.
  2. Asegúrese de que RenderTargetView también tiene el modificador de formato _SRGB para que los valores de salida del sombreador pasen a ser gamma.

Si sigue los pasos anteriores, al llamar al método IDXGISwapChain1::P resent1, el contenido que se muestra en la pantalla tiene la mejor precisión de colores.

Puede usar el método ID3D11Device::CreateRenderTargetView para crear vistas DXGI_FORMAT_*_SRGB en búferes de reserva desde una cadena de intercambio que cree solo con un formato DXGI_FORMAT_*_UNORM. Se trata de una excepción especial a la regla para crear vistas de destino de representación, que indica que puede usar un formato diferente con ID3D11Device::CreateRenderTargetView solo si ha creado el recurso que quiere ver con DXGI_FORMAT_*_TYPELESS.

Para obtener más información sobre las reglas de conversión de datos, vea Reglas de conversión de datos.

Para obtener información sobre cómo leer y escribir simultáneamente en una textura, vea Desempaquetado y empaquetado de DXGI_FORMAT para la edición de imágenes en su lugar.

Mejora de la presentación con el modelo de giro, rectángulos con modificaciones y áreas desplazadas