Vistas ordenadas pelo Rasterizer
As visualizações ordenadas pelo Rasterizer (ROVs) permitem que o código do sombreador de pixel marque ligações de exibição de acesso não ordenado (UAV) com uma declaração que altera os requisitos normais para a ordem dos resultados do pipeline gráfico para UAVs. Isso permite que algoritmos de transparência independente de ordem (OIT) funcionem, o que fornece resultados de renderização muito melhores quando vários objetos transparentes estão alinhados uns com os outros em uma exibição.
- Visão geral
- Detalhes da implementação
- de resumo da API
- Tópicos relacionados
Visão geral
Os pipelines gráficos padrão podem ter problemas para compor corretamente várias texturas que contêm transparência. Objetos como cercas de arame, fumaça, fogo, vegetação e vidro colorido usam a transparência para obter o efeito desejado. Os problemas surgem quando várias texturas que contêm transparência estão alinhadas entre si (fumaça na frente de uma cerca em frente a um edifício de vidro contendo vegetação, por exemplo). As visualizações ordenadas pelo Rasterizer (ROVs) permitem que os algoritmos OIT subjacentes usem recursos do hardware para tentar resolver a ordem de transparência corretamente. A transparência é manipulada pelo sombreador de pixel.
As visualizações ordenadas pelo Rasterizer (ROVs) permitem que o código do sombreador de pixel marque as ligações de UAV com uma declaração que altera os requisitos normais para a ordem dos resultados do pipeline gráfico para UAVs.
Os ROVs garantem a ordem dos acessos de UAV para qualquer par de invocações de sombreador de pixel sobrepostas. Neste caso, "sobreposição" significa que as invocações são geradas pelas mesmas chamadas de desenho e compartilham a mesma coordenada de pixel quando no modo de execução de frequência de pixel, e a mesma coordenada de pixel e amostra no modo de frequência de amostra.
A ordem na qual os acessos ROV sobrepostos de invocações de sombreador de pixel são executados é idêntica à ordem em que a geometria é enviada. Isso significa que, para invocações de sombreador de pixel sobrepostas, as gravações ROV executadas por uma invocação de sombreador de pixel devem estar disponíveis para serem lidas por uma invocação subsequente e não devem afetar as leituras de uma chamada anterior. As leituras de ROV realizadas por uma invocação de sombreador de pixel devem refletir gravações por uma invocação anterior e não devem refletir gravações por uma chamada subsequente. Isso é importante para UAVs porque eles são explicitamente omitidos das garantias de invariância de saída normalmente definidas pela ordem fixa dos resultados do pipeline gráfico.
Detalhes da implementação
As exibições ordenadas pelo Rasterizer (ROVs) são declaradas com os seguintes novos objetos HLSL (High Level Shader Language) e só estão disponíveis para o sombreador de pixel:
RasterizerOrderedBuffer
RasterizerOrderedByteAddressBuffer
RasterizerOrderedStructuredBuffer
RasterizerOrderedTexture1D
RasterizerOrderedTexture1DArray
RasterizerOrderedTexture2D
RasterizerOrderedTexture2DArray
RasterizerOrderedTexture3D
Use esses objetos da mesma maneira que outros objetos UAV (como RWBuffer
etc.).
Resumo da API
Os ROVs são uma construção somente HLSL que aplica semânticas de comportamento diferentes aos UAVs. Todas as APIs relevantes para UAVs também são relevantes para ROVs. Observe que o método, as estruturas e a classe auxiliar a seguir fazem referência ao rasterizador:
- D3D12_RASTERIZER_DESC : estrutura que contém a descrição do rasterizador.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : estrutura segurando um booleano, indicando o suporte.
- CheckFeatureSupport : método para acessar os recursos suportados.
- CD3DX12_RASTERIZER_DESC : classe auxiliar para criar descrições do rasterizador.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : estrutura que sustenta o estado do gasoduto.