Geordnete Rasterizer-Ansichten
Rasterizergeordnete Ansichten (Rasterizer-Ordered Views, ROVs) ermöglichen es Pixelshadercode, ungeordnete Zugriffsansichtsbindungen (UAV) mit einer Deklaration zu markieren, die die normalen Anforderungen für die Reihenfolge der Grafikpipelineergebnisse für UAVs ändert. Dadurch können OIT-Algorithmen (Order-Independent Transparency) funktionieren, die viel bessere Renderingergebnisse liefern, wenn mehrere transparente Objekte in einer Ansicht nebeneinander stehen.
Übersicht
Standardgrafikpipelines haben möglicherweise Probleme, mehrere Texturen, die Transparenz enthalten, ordnungsgemäß zusammenzuführen. Objekte wie Drahtzäune, Rauch, Feuer, Vegetation und farbiges Glas nutzen Transparenz, um den gewünschten Effekt zu erzielen. Probleme treten auf, wenn mehrere Texturen, die Transparenz enthalten, nebeneinander stehen (z. B. Rauch vor einem Zaun vor einem Glasgebäude mit Vegetation). Rasterizergeordnete Ansichten (Rasterizer-Ordered Views, ROVs) ermöglichen es den zugrunde liegenden OIT-Algorithmen, Features der Hardware zu verwenden, um zu versuchen, die Transparenzreihenfolge ordnungsgemäß aufzulösen. Transparenz wird vom Pixelshader behandelt.
Rasterizergeordnete Ansichten (RoVs) ermöglichen es Pixelshadercode, UAV-Bindungen mit einer Deklaration zu markieren, die die normalen Anforderungen für die Reihenfolge der Grafikpipelineergebnisse für UAVs ändert.
ROVs garantieren die Reihenfolge der UAV-Zugriffe für jedes Paar überlappender Pixelshaderaufrufe. In diesem Fall bedeutet "überlappend", dass die Aufrufe von denselben Zeichnungsaufrufen generiert werden und die gleiche Pixelkoordinate im Ausführungsmodus der Pixelfrequenz sowie dasselbe Pixel und die gleiche Beispielkoordinate im Sample-Frequency-Modus gemeinsam haben.
Die Reihenfolge, in der sich überlappende ROV-Zugriffe von Pixelshaderaufrufen ausgeführt werden, ist identisch mit der Reihenfolge, in der die Geometrie übermittelt wird. Dies bedeutet, dass für überlappende Pixelshaderaufrufe ROV-Schreibvorgänge, die von einem Pixelshaderaufruf ausgeführt werden, verfügbar sein müssen, um von einem nachfolgenden Aufruf gelesen zu werden, und die Lesevorgänge durch einen vorherigen Aufruf nicht beeinflussen dürfen. ROV-Lesevorgänge, die von einem Pixelshaderaufruf ausgeführt werden, müssen Schreibvorgänge eines vorherigen Aufrufs widerspiegeln und dürfen keine Schreibvorgänge durch einen nachfolgenden Aufruf widerspiegeln. Dies ist für UAVs wichtig, da sie explizit in den Ausgabeinvarianzgarantien ausgelassen werden, die normalerweise durch die feste Reihenfolge der Grafikpipelineergebnisse festgelegt werden.
Details zur Implementierung
Rasterizergeordnete Ansichten (Rasterizer-Ordered Views, ROVs) werden mit den folgenden neuen HLSL-Objekten (High Level Shader Language) deklariert und sind nur für den Pixelshader verfügbar:
RasterizerOrderedBuffer
RasterizerOrderedByteAddressBuffer
RasterizerOrderedStructuredBuffer
RasterizerOrderedTexture1D
RasterizerOrderedTexture1DArray
RasterizerOrderedTexture2D
RasterizerOrderedTexture2DArray
RasterizerOrderedTexture3D
Verwenden Sie diese Objekte auf die gleiche Weise wie andere UAV-Objekte (z RWBuffer
. B. usw.).
API-Zusammenfassung
ROVs sind ein reines HLSL-Konstrukt, das eine andere Verhaltenssemantik auf UAVs anwendet. Alle APIs, die für UAVs relevant sind, sind auch für ROVs relevant. Beachten Sie, dass die folgenden Methoden, Strukturen und Hilfsklassen auf den Rasterizer verweisen:
- D3D12_RASTERIZER_DESC : Struktur mit der Beschreibung des Rasterisierers.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : Struktur, die einen booleschen Wert enthält, der die Unterstützung angibt.
- CheckFeatureSupport : Methode für den Zugriff auf die unterstützten Features.
- CD3DX12_RASTERIZER_DESC : Hilfsklasse zum Erstellen von Rasterizerbeschreibungen.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : Struktur, die den Pipelinestatus enthält.