Rasterizer-geordende weergaven
Rasterizer-geordende weergaven (ROV's) staan pixel-shadercode toe om niet-geordende UAV-bindingen (UAV) te markeren met een declaratie die de normale vereisten voor de volgorde van grafische pijplijnresultaten voor UV's wijzigt. Hierdoor kunnen OIT-algoritmen (Order-Independent Transparency) werken, wat veel betere renderingresultaten geeft wanneer meerdere transparante objecten in overeenstemming zijn met elkaar in een weergave.
Overzicht
Standaardafbeeldingspijplijnen kunnen problemen hebben bij het correct samenvoegen van meerdere patronen die transparantie bevatten. Objecten zoals draadheiningen, rook, brand, vegetatie en gekleurd glas gebruiken transparantie om het gewenste effect te krijgen. Er treden problemen op wanneer meerdere texturen die transparantie bevatten, in overeenstemming zijn met elkaar (rook voor een omheining voor een glazen gebouw met vegetatie, bijvoorbeeld). Rasterizer geordende weergaven (ROV's) stellen de onderliggende OIT-algoritmen in staat om functies van de hardware te gebruiken om de transparantievolgorde correct op te lossen. Transparantie wordt verwerkt door de pixel-shader.
Rasterizer-geordende weergaven (ROV's) staan pixel-shadercode toe om UAV-bindingen te markeren met een declaratie die de normale vereisten voor de volgorde van grafische pijplijnresultaten voor UAV's wijzigt.
ROV's garanderen de volgorde van UAV-toegang voor elk paar overlappende pixel-shader-aanroepen. In dit geval betekent 'overlappend' dat de aanroepen worden gegenereerd door dezelfde tekenoproepen en dezelfde pixelcoördinaat delen in de uitvoeringsmodus voor pixelfrequentie, en dezelfde pixel- en voorbeeldcoördinaat in de samplefrequentiemodus.
De volgorde waarin overlappende ROV-toegang tot pixel-shader-aanroepen worden uitgevoerd, is identiek aan de volgorde waarin de geometrie wordt ingediend. Dit betekent dat ROV-schrijfbewerkingen die worden uitgevoerd door een pixel-shader-aanroep, beschikbaar moeten zijn om te worden gelezen door een volgende aanroep en geen invloed mag hebben op leesbewerkingen door een eerdere aanroep. ROV-leesbewerkingen die door een pixel-shader-aanroep worden uitgevoerd, moeten schrijfbewerkingen weerspiegelen door een eerdere aanroep en mogen geen schrijfbewerkingen weerspiegelen door een volgende aanroep. Dit is belangrijk voor UV's omdat ze expliciet worden weggelaten uit de uitvoervariantiegaranties die normaal gesproken worden ingesteld door de vaste volgorde van grafische pijplijnresultaten.
Implementatiedetails
Rasterizer-geordende weergaven (ROV's) worden gedeclareerd met de volgende nieuwe HLSL-objecten (High Level Shader Language) en zijn alleen beschikbaar voor de pixel-shader:
RasterizerOrderedBuffer
RasterizerOrderedByteAddressBuffer
RasterizerOrderedStructuredBuffer
RasterizerOrderedTexture1D
RasterizerOrderedTexture1DArray
RasterizerOrderedTexture2D
RasterizerOrderedTexture2DArray
RasterizerOrderedTexture3D
Gebruik deze objecten op dezelfde manier als andere UAV-objecten (zoals RWBuffer
enz.).
API-samenvatting
ROV's zijn een alleen-HLSL-constructie die verschillende gedragssemantiek toepast op UAV's. Alle API's die relevant zijn voor UAV's zijn ook relevant voor ROV's. Houd er rekening mee dat de volgende methode, structuren en helperklasse verwijzen naar de rasterizer:
- D3D12_RASTERIZER_DESC: structuur met de rasterizerbeschrijving.
- D3D12_FEATURE_DATA_D3D12_OPTIONS: structuur met een Booleaanse waarde die de ondersteuning aangeeft.
- CheckFeatureSupport: methode voor toegang tot de ondersteunde functies.
- CD3DX12_RASTERIZER_DESC: helperklasse voor het maken van rasterizerbeschrijvingen.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC: structuur met de pijplijnstatus.