Freigeben über


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: