Efeito de ajuste no nível de branco
Esse efeito permite que o nível branco de uma imagem seja dimensionado linearmente. Isso é especialmente útil quando você converte entre o espaço de luminância referenciado pela exibição e o espaço de luminância referenciado pela cena ou vice-versa.
As propriedades desse efeito são identificadas pela enumeração D2D1_WHITELEVELADJUSTMENT_PROP e o CLSID é CLSID_D2D1WhiteLevelAdjustment.
Propriedades de efeito
Nome de exibição e enumeração de índice | Tipo e valor padrão | Descrição |
---|---|---|
InputWhiteLevel, D2D1_WHITELEVELADJUSTMENT_PROP_INPUT_WHITE_LEVEL | FLOAT | O nível de branco da imagem de entrada, em nits. |
OutputWhiteLevel, D2D1_WHITELEVELADJUSTMENT_PROP_OUTPUT_WHITE_LEVEL | FLOAT | O nível branco da imagem de saída, em nits. |
Comentários
Esse efeito destina-se a ser combinado com o efeito de mapa de tom HDR para permitir que você renderize imagens HDR em Direct2D com o gerenciamento de cores e o mapeamento de tom adequados. Confira os Comentários desse tópico para obter mais detalhes. Os efeitos são destinados a qualquer estrutura que queira fornecer uma melhor experiência de exibição de imagem HDR na classe que manipula todos os formatos de imagem HDR do Windows e se adapta aos recursos da exibição (seja HDR ou WCG/SDR).
No Windows, supõe-se que todo o conteúdo SDR/WCG esteja em um espaço de luminância referenciado pela exibição, o que significa que o nível em branco do conteúdo deve ser escalado verticalmente para o nível branco do vídeo antes de ser apresentado. No entanto, nem sempre é responsabilidade do aplicativo fazer isso. Por outro lado, supõe-se que o conteúdo HDR esteja em um espaço de luminância referenciado pela cena, o que significa que ele não deve ser dimensionado para corresponder ao nível branco da exibição. Dito isso, seu aplicativo pode precisar executar o dimensionamento em algumas circunstâncias ao renderizar conteúdo HDR para garantir que esse seja o resultado líquido.
Quando a área de trabalho do Windows está no modo SDR ou WCG, a área de trabalho é composta em um espaço de luminância referenciado por exibição. Mas se a área de trabalho do Windows estiver no modo HDR, a composição da área de trabalho ocorrerá no espaço de luminância referenciado pela cena. Dito isto, o próprio DWM (Gerenciador de Janelas da Área de Trabalho) executa ajustes de luminância (geralmente chamados de SDRBoost) para superfícies de composição de 8 bits e isso simplifica seu aplicativo para esse caso. Mesmo assim, o aumento automático significa que a função do aplicativo na conversão de um espaço de luminância para outro depende do formato de composição que seu aplicativo está usando para apresentar seu conteúdo.
A tabela a seguir descreve os casos em que seu aplicativo deve e não deve executar um ajuste de nível branco, bem como qual deve ser esse ajuste. Em geral, o ajuste depende de três fatores.
- Colorspace de conteúdo de entrada. Se o conteúdo de entrada contém valores de luminância de alto intervalo dinâmico (HDR) ou não. O conteúdo do WCG se comporta da mesma forma que a SDR para o comportamento de luminância.
- Formato de composição. O formato de pixel da superfície de destino apresentada ao DWM, por exemplo, uma cadeia de troca ou uma superfície de composição. Ao renderizar usando Direct2D, isso é UINT8 ou FP16.
- Modo de cor avançado da área de trabalho. Se o DWM está em execução no modo SDR, WCG ou HDR para a exibição atual. Obtenha essas informações por meio de DXGI_OUTPUT_DESC1::ColorSpace ou AdvancedColorInfo.CurrentAdvancedColorKind.
Com base nesses três fatores, você deve definir os valores apropriados para as InputWhiteLevel
propriedades e OutputWhiteLevel
.
Conteúdo de entrada | Formato de composição | Modo de cor avançado | InputWhiteLevel | OutputWhiteLevel |
---|---|---|---|---|
SDR/WCG | UINT8 | Qualquer | N/D | N/D |
SDR/WCG | FP16 | SDR/WCG | N/D | N/D |
SDR/WCG | FP16 | HDR | SDRWhite | 80 |
HDR | Qualquer | SDR/WCG | 80 | DXGI_OUTPUT_DESC1::MaxLuminance |
HDR | UINT8 | HDR | 80 | SDRWhite |
HDR | FP16 | HDR | N/D | N/D |
Na tabela, o valor 80 é o nível de branco de referência, em nits, para conteúdo sRGB ou scRGB. Para isso, você pode usar a constante D2D1_SCENE_REFERRED_SDR_WHITE_LEVEL, que é definida em d2d1effects_2.h
. O valor SDRWhite
é o número de nits que a exibição deve usar para exibir conteúdo sRGB branco. Você pode recuperar esse valor acessando a propriedade AdvancedColorInfo.SdrWhiteLevelInNits . O valor N/A significa que o ajuste no nível branco não é usado neste cenário; você pode remover o efeito do grafo ou definir valores para uma operação não operada.
Observe que, nos casos em que um ajuste de nível branco não é necessário para o aplicativo, o DWM ou o display podem estar tratando a conversão do espaço de luminância referenciado por exibição para o espaço de luminância referenciado pela cena.
- No modo SDR/WCG, a conversão ocorre após a composição dwm e se aplica a todo o conteúdo apresentado a essa exibição. A exibição executa implicitamente essa conversão.
- No modo HDR, a conversão é executada automaticamente pelo DWM antes da composição, desde que a superfície de composição do aplicativo seja SDR.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 10, versão 1809 (10.0; Build 17763) [aplicativos da área de trabalho | Aplicativos UWP] |
Cabeçalho | d2d1effects_2.h |
Biblioteca | d2d1.lib, dxguid.lib |