Visualizzazioni ordinate per rasterizzatori
Le visualizzazioni ordinate da Rasterizer consentono al codice pixel shader di contrassegnare le associazioni UAV (Unrdered Access View) con una dichiarazione che modifica i requisiti normali per l'ordine dei risultati della pipeline grafica per le UAV. Ciò consente il funzionamento degli algoritmi OIT (Order-Independent Transparency), che offrono risultati di rendering molto migliori quando più oggetti trasparenti sono in linea tra loro in una visualizzazione.
Panoramica
Le pipeline grafiche standard potrebbero avere problemi durante la composizione corretta di più trame contenenti trasparenza. Oggetti come recinzioni di filo, fumo, fuoco, vegetazione e vetro colorato utilizzano la trasparenza per ottenere l'effetto desiderato. I problemi si verificano quando più trame che contengono trasparenza sono in linea tra loro (fumo davanti a una recinzione davanti a un edificio in vetro contenente vegetazione, ad esempio). Le visualizzazioni ordinate da Rasterizer consentono agli algoritmi OIT sottostanti di usare le funzionalità dell'hardware per tentare di risolvere correttamente l'ordine di trasparenza. La trasparenza viene gestita dal pixel shader.
Le visualizzazioni ordinate da Rasterizer consentono al codice pixel shader di contrassegnare le associazioni UAV con una dichiarazione che modifica i requisiti normali per l'ordine dei risultati della pipeline grafica per le UAV.
Le ROV garantiscono l'ordine degli accessi UAV per qualsiasi coppia di chiamate di pixel shader sovrapposte. In questo caso la "sovrapposizione" indica che le chiamate vengono generate dalle stesse chiamate di disegno e condividono la stessa coordinata pixel in modalità di esecuzione in frequenza di pixel e lo stesso pixel e la stessa coordinata campione in modalità frequenza di campionamento.
L'ordine in cui vengono eseguiti gli accessi ROV sovrapposti delle chiamate al pixel shader è identico all'ordine in cui viene inviata la geometria. Ciò significa che, per le chiamate di pixel shader sovrapposte, le scritture ROV eseguite da una chiamata di pixel shader devono essere disponibili per essere lette da una chiamata successiva e non devono influire sulle letture da una chiamata precedente. Le letture ROV eseguite da una chiamata di pixel shader devono riflettere le scritture da una chiamata precedente e non devono riflettere le scritture da una chiamata successiva. Questo aspetto è importante per le UAV perché vengono omessi in modo esplicito dalle garanzie di invarianza di output normalmente impostate dall'ordine fisso dei risultati della pipeline grafica.
Dettagli di implementazione
Le visualizzazioni con ordinamento rasterizzatore (ROV) vengono dichiarate con i nuovi oggetti HLSL (High Level Shader Language) seguenti e sono disponibili solo per il pixel shader:
RasterizerOrderedBuffer
RasterizerOrderedByteAddressBuffer
RasterizerOrderedStructuredBuffer
RasterizerOrderedTexture1D
RasterizerOrderedTexture1DArray
RasterizerOrderedTexture2D
RasterizerOrderedTexture2DArray
RasterizerOrderedTexture3D
Usare questi oggetti nello stesso modo di altri oggetti UAV, ad esempio RWBuffer
e così via.
Riepilogo API
Le unità ROV sono un costrutto solo HLSL che applica semantica di comportamento diversi alle UAV. Tutte le API rilevanti per le UAV sono rilevanti anche per le ROV. Si noti che il metodo, le strutture e la classe helper seguenti fanno riferimento al rasterizzatore:
- D3D12_RASTERIZER_DESC : struttura che contiene la descrizione del rasterizzatore.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : struttura che contiene un valore booleano, che indica il supporto.
- CheckFeatureSupport : metodo per accedere alle funzionalità supportate.
- CD3DX12_RASTERIZER_DESC : classe helper per la creazione di descrizioni del rasterizzatore.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : struttura che contiene lo stato della pipeline.
Argomenti correlati
- di rasterizzazione conservativa
- Rendering
- associazione di risorse in HLSL
- modello shader 5.1