Visualizzazioni ordinate da Rasterizer
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 gli UAV. Ciò consente il funzionamento degli algoritmi OIT (Order-Independent Transparency), che offrono risultati di rendering molto migliori quando più oggetti trasparenti sono allineati tra loro in una visualizzazione.
Panoramica
Le pipeline grafiche standard potrebbero avere problemi durante la composizione corretta di più trame che contengono trasparenza. Oggetti come recinzioni di filo, fumo, fuoco, vegetazione e vetro colorato utilizzano trasparenza per ottenere l'effetto desiderato. Si verificano problemi 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 provare a 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 gli UAV.
Le rov garantiscono l'ordine degli accessi UAV per qualsiasi coppia di chiamate 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 pixel e la stessa coordinata pixel e campione in modalità frequenza di campionamento.
L'ordine in cui vengono eseguiti gli accessi ROV sovrapposti delle chiamate del pixel shader è identico all'ordine in cui viene inviata la geometria. Ciò significa che, per le chiamate 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 è importante per gli UAV perché vengono omessi in modo esplicito dalle garanzie di invarianza di output normalmente impostate in base all'ordine fisso dei risultati della pipeline grafica.
Dettagli dell'implementazione
Le visualizzazioni ordinate da Rasterizer (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 degli altri oggetti UAV ,ad esempio RWBuffer
e così via.
Riepilogo dell'API
Le unità di modifica dinamica (ROV) sono un costrutto solo HLSL che applica una semantica di comportamento diversa agli 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 contenente 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 di rasterizzatori.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : struttura che contiene lo stato della pipeline.