Estágio Output-Merger
O estágio de fusão de saída (OM) gera a cor final do pixel renderizado usando uma combinação de estado de pipeline, os dados de pixel gerados pelos sombreadores de pixel, o conteúdo dos destinos de renderização e o conteúdo dos buffers de profundidade/estêncil. O estágio de OM é a etapa final para determinar quais pixels são visíveis (com teste de estêncil de profundidade) e mesclar as cores finais do pixel.
Diferenças entre o Direct3D 9 e o Direct3D 10:
- O Direct3D 9 implementa o teste alfa (usando estado de teste alfa) para controlar se um pixel é gravado em um destino de renderização de saída.
- O Direct3D 10 e superior não implementa um teste alfa (ou estado de teste alfa). Isso pode ser controlado usando um sombreador de pixel ou com funcionalidade de profundidade/estêncil.
Visão geral do teste de Depth-Stencil
Um buffer de estêncil de profundidade, que é criado como um recurso de textura, pode conter dados de profundidade e dados de estêncil. Os dados de profundidade são usados para determinar quais pixels estão mais próximos da câmera e os dados de estêncil são usados para mascarar quais pixels podem ser atualizados. Por fim, os dados de valores de profundidade e estêncil são usados pelo estágio de fusão de saída para determinar se um pixel deve ser desenhado ou não. O diagrama a seguir mostra conceitualmente como o teste de estêncil de profundidade é feito.
Para configurar o teste de estêncil de profundidade, consulte Configuring Depth-Stencil Functionality. Um objeto de estêncil de profundidade encapsula o estado de estêncil de profundidade. Um aplicativo pode especificar o estado de estêncil de profundidade ou o estágio OM usará valores padrão. As operações de mesclagem serão executadas por pixel se a multisampling estiver desabilitada. Se a multisampling estiver habilitada, a mesclagem ocorrerá por várias amostras.
O processo de usar o buffer de profundidade para determinar qual pixel deve ser desenhado é chamado de buffer de profundidade, também às vezes chamado de buffer z.
Quando os valores de profundidade atingem o estágio de fusão de saída (seja proveniente da interpolação ou de um sombreador de pixel), eles são sempre fixados: z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) de acordo com o formato/precisão do buffer de profundidade, usando regras de ponto flutuante. Após a fixação, o valor de profundidade é comparado (usando DepthFunc) com o valor de buffer de profundidade existente. Se nenhum buffer de profundidade estiver associado, o teste de profundidade sempre será aprovado.
Se não houver nenhum componente de estêncil no formato de buffer de profundidade ou nenhum limite de buffer de profundidade, o teste de estêncil sempre será aprovado. Caso contrário, a funcionalidade não será alterada em relação ao Direct3D 9.
Somente um buffer de profundidade/estêncil pode estar ativo por vez; qualquer exibição de recurso associada deve corresponder (mesmo tamanho e dimensões) à exibição de profundidade/estêncil. Isso não significa que o tamanho do recurso deve corresponder, apenas que o tamanho da exibição deve corresponder.
Para obter mais informações sobre o teste de estêncil de profundidade, consulte tutorial 14.
Visão geral da combinação
A combinação combina um ou mais valores de pixel para criar uma cor de pixel final. O diagrama a seguir mostra o processo envolvido na combinação de dados de pixel.
Conceitualmente, você pode visualizar esse fluxograma implementado duas vezes no estágio de fusão de saída: o primeiro combina dados RGB e, em paralelo, um segundo mescla dados alfa. Para ver como usar a API para criar e definir o estado de combinação, consulte Configurando ode Funcionalidade de Mesclagem.
A combinação de funções fixas pode ser habilitada independentemente para cada destino de renderização. No entanto, há apenas um conjunto de controles de mesclagem, para que a mesma mistura seja aplicada a todos os RenderTargets com a combinação habilitada. Os valores de mesclagem (incluindo BlendFactor) são sempre fixados ao intervalo do formato de destino de renderização antes da combinação. A fixação é feita por destino de renderização, respeitando o tipo de destino de renderização. A única exceção é para os formatos float16, float11 ou float10 que não são fixados para que as operações de mistura nesses formatos possam ser feitas com pelo menos precisão/intervalo iguais como o formato de saída. NaN e zeros assinados são propagados para todos os casos (incluindo pesos de mistura de 0,0).
Quando você usa destinos de renderização sRGB, o runtime converte a cor de destino de renderização em espaço linear antes de executar a mesclagem. O runtime converte o valor combinado final de volta em espaço sRGB antes de salvar o valor de volta para o destino de renderização.
Diferenças entre o Direct3D 9 e o Direct3D 10:
- No Direct3D 9, a mesclagem de função fixa pode ser habilitada independentemente para cada destino de renderização.
- No Direct3D 10 e superior, há uma descrição de estado de combinação; portanto, um valor de mesclagem pode ser definido para todos os destinos de renderização.
Mesclagem de cores Dual-Source
Esse recurso permite que o estágio de fusão de saída use simultaneamente as saídas do sombreador de pixel (o0 e o1) como entradas para uma operação de mesclagem com o destino de renderização única no slot 0. As operações de mesclagem válidas incluem: adicionar, subtrair e revsubtract. As opções de mistura válidas para SrcBlend, DestBlend, SrcBlendAlpha ou DestBlendAlpha incluem: D3D11_BLEND_SRC1_COLOR, D3D11_BLEND_INV_SRC1_COLOR, D3D11_BLEND_SRC1_ALPHA, D3D11_BLEND_INV_SRC1_ALPHA. A equação de combinação e a máscara de gravação de saída especificam quais componentes o sombreador de pixel está gerando. Componentes extras são ignorados.
A gravação em outras saídas de sombreador de pixel (o2, o3 etc.) é indefinida; você poderá não gravar em um destino de renderização se ele não estiver associado ao slot 0. A gravação de oDepth é válida durante a combinação de cores de origem dupla.
Para obter exemplos, consulte saídas de sombreador de pixel de mesclagem.
Visão geral de vários RenderTargets
Um sombreador de pixel pode ser usado para renderizar para pelo menos 8 destinos de renderização separados, todos eles devem ser do mesmo tipo (buffer, Texture1D, Texture1DArray e assim por diante). Além disso, todos os destinos de renderização devem ter o mesmo tamanho em todas as dimensões (largura, altura, profundidade, tamanho da matriz, contagens de exemplo). Cada destino de renderização pode ter um formato de dados diferente.
Você pode usar qualquer combinação de slots de destinos de renderização (até 8). No entanto, uma exibição de recurso não pode ser associada a vários slots de destino de renderização simultaneamente. Uma exibição pode ser reutilizada desde que os recursos não sejam usados simultaneamente.
Visão geral da máscara de Output-Write
Use uma máscara de gravação de saída para controlar (por componente) quais dados podem ser gravados em um destino de renderização.
Visão geral da máscara de exemplo
Uma máscara de exemplo é uma máscara de cobertura multisampla de 32 bits que determina quais exemplos são atualizados em destinos de renderização ativos. Somente uma máscara de exemplo é permitida. O mapeamento de bits em uma máscara de exemplo para os exemplos em um recurso é definido por um usuário. Para a renderização de n exemplo, os primeiros n bits (do LSB) da máscara de exemplo são usados (32 bits, o número máximo de bits).
Nesta seção
Tópico | Descrição |
---|---|
configurando de funcionalidade de Depth-Stencil |
Esta seção aborda as etapas para configurar o buffer de estêncil de profundidade e o estado de estêncil de profundidade para o estágio de fusão de saída. |
configurando de funcionalidade de mesclagem |
As operações de mesclagem são executadas em cada saída de sombreador de pixel (valor RGBA) antes que o valor de saída seja gravado em um destino de renderização. Se o multisampling estiver habilitado, a mesclagem será feita em cada multisampla; caso contrário, a mesclagem é executada em cada pixel. |
de viés de profundidade |
Polígonos que são coplanares no espaço 3D podem ser feitos para aparecer como se não fossem coplanares adicionando um viés z (ou viés de profundidade) a cada um deles. |
Tópicos relacionados
-
de estágios de pipeline (Direct3D 10)