Direct3D 12 Konservative Rasterung

Die konservative Rasterisierung verleiht dem Pixelrendering sicherheit, was insbesondere für Kollisionserkennungsalgorithmen hilfreich ist.

Übersicht

Konservative Rasterisierung bedeutet, dass alle Pixel, die mindestens teilweise von einem gerenderten Grundtyp abgedeckt werden, gerastert werden, was bedeutet, dass der Pixelshader aufgerufen wird. Normales Verhalten ist das Sampling, das nicht verwendet wird, wenn die konservative Rasterung aktiviert ist.

Die konservative Rasterung ist in einer Reihe von Situationen nützlich, einschließlich der Sicherheit bei der Kollisionserkennung, der Okklusionskulierung und dem Rendern von Kacheln.

Die folgende Abbildung zeigt beispielsweise ein grünes Dreieck, das mit konservativer Rasterisierung gerendert wird, wie es im Rasterizer (d. h. mit 16,8 Fixpunktvertexkoordinaten) dargestellt wird. Der braune Bereich wird als "Unsicherheitsbereich" bezeichnet– ein konzeptioneller Bereich, der die erweiterten Grenzen des Dreiecks darstellt, die erforderlich ist, um sicherzustellen, dass der Grundtyp im Rasterizer im Vergleich zu den ursprünglichen Gleitkommavertexkoordinaten konservativer ist. Die roten Quadrate an jedem Scheitelpunkt zeigen, wie der Unsicherheitsbereich berechnet wird: als gefegtes Quadrat.

Die großen grauen Quadrate zeigen die Pixel an, die gerendert werden. Die rosa Quadrate zeigen Pixel an, die mit der "Oben-Links-Regel" gerendert werden, die ins Spiel kommt, wenn der Rand des Dreiecks den Rand der Pixel kreuzt. Es können falsch positive Werte (Festgelegte Pixel, die nicht vorhanden sein sollten) vorhanden sein, die das System normalerweise, aber nicht immer cull.

die Regel oben links

Interaktionen mit der Pipeline

Interaktion mit Rasterungsregeln

Im konservativen Rasterisierungsmodus werden Rasterungsregeln auf die gleiche Weise angewendet, wie wenn der konservative Rasterisierungsmodus nicht mit Ausnahmen für die oben beschriebene Top-Left-Regel und Die Pixelabdeckung aktiviert ist. 16.8 Fixed-Point Rasterizergenauigkeit muss verwendet werden.

Pixel, die nicht abgedeckt würden, wenn die Hardware vollständige Gleitkommavertexkoordinaten verwendet, können nur eingeschlossen werden, wenn sie sich innerhalb eines Unsicherheitsbereichs befinden, der nicht größer als ein halbes Pixel in der Fixpunktdomäne ist. Von zukünftiger Hardware wird erwartet, dass sie die in Ebene 2 angegebene region mit verschärfter Unsicherheit erreicht. Beachten Sie, dass diese Anforderung verhindert, dass sich schräge Dreiecke weiter als erforderlich erweitern.

Eine ähnliche gültige Unsicherheitsregion gilt auch für InnerCoverage , aber sie ist enger, da keine Implementierungen eine größere Unsicherheitsregion für diesen Fall erfordern. Weitere Informationen finden Sie unter InnerCoverage-Interaktion .

Innere und äußere Unsicherheitsbereiche müssen größer oder gleich der Größe des halben Subpixelrasters oder 1/512 eines Pixels in der Fixpunktdomäne sein. Dies ist die minimale gültige Unsicherheitsregion. 1/512 stammt aus der 16,8-Rasterizerkoordinatendarstellung und der Round-to-Nearest-Regel, die beim Konvertieren von Gleitkommavertexkoordinaten in 16,8 Fixpunktkoordinaten gilt. 1/512 kann sich ändern, wenn sich die Genauigkeit des Rasterisierers ändert. Wenn eine Implementierung diesen Bereich mit minimaler Unsicherheit implementiert, muss sie die Top-Left-Regel befolgen, wenn ein Rand oder eine Ecke des Unsicherheitsbereichs entlang der Kante oder Ecke eines Pixels fällt. Die beschnittenen Kanten des Unsicherheitsbereichs sollten als der nächstgelegene Scheitelpunkt behandelt werden, d. h. sie zählt als zwei Kanten: die beiden, die am zugeordneten Scheitelpunkt miteinander verbunden sind. Top-Left Regel ist erforderlich, wenn der Bereich mit minimaler Unsicherheit verwendet wird, da eine Konservative Rasterisierungsimplementierung Pixel nicht rastert, die abgedeckt werden könnten, wenn der konservative Rasterisierungsmodus deaktiviert ist.

Das folgende Diagramm veranschaulicht einen gültigen äußeren Unsicherheitsbereich, der durch das Fegen eines Quadrats um die Ränder des Grundtyps in der Fixpunktdomäne erzeugt wird (d. h. die Scheitelpunkte wurden durch die 16,8-Fixpunktdarstellung quantisiert). Die Abmessungen dieses Quadrats basieren auf der gültigen Größe des Bereichs äußerer Unsicherheit: Für das 1/2 eines Pixels ist das Quadrat 1 Pixel in Breite und Höhe, für 1/512 eines Pixels ist das Quadrat 1/256 eines Pixels in Breite und Höhe. Das grüne Dreieck stellt einen bestimmten Grundtyp dar, die rote gepunktete Linie stellt die Grenze bei der überschätzten konservativen Rasterisierung dar, die durchgehenden schwarzen Quadrate stellen das Quadrat dar, das entlang der primitiven Kanten gekehrt wird, und der blaue karierte Bereich ist der äußere Unsicherheitsbereich:

Äußerer Unsicherheitsbereich.

Multisampling-Interaktion

Unabhängig von der Anzahl der Stichproben inRenderTarget-Tiefenschablonenoberflächen/ (oder ob ForcedSampleCount verwendet wird oder nicht), werden alle Stichproben für Pixel abgedeckt, die durch konservative Rasterisierung gerastert werden. Einzelne Beispielstandorte werden nicht darauf getestet, ob sie in den Grundtyp fallen oder nicht.

SampleMask-Interaktion

Der Status des SampleMask-Rasterisierers wird auf die gleiche Weise angewendet wie, wenn die konservative Rasterung für InputCoveragenicht aktiviert ist, sich jedoch nicht auf auswirkt InnerCoverage (d. h. es wird nicht AND in eine eingabe eingefügt, die mit InnerCoveragedeklariert wurde). Dies liegt daran, InnerCoverage dass nichts damit zusammenhängt, ob MSAA-Stichproben maskiert werden: 0 InnerCoverage bedeutet nur, dass das Pixel nicht vollständig abgedeckt ist, nicht, dass keine Stichproben aktualisiert werden.

Tiefen-/Schablonentestinteraktion

Tiefen-/Schablonentests werden für ein konservatives rasterisiertes Pixel auf die gleiche Weise fortgesetzt, als ob alle Stichproben abgedeckt werden, wenn die konservative Rasterung nicht aktiviert ist.

Wenn Sie mit allen behandelten Beispielen fortfahren, kann dies zu einer Tiefen extrapolation führen, die gültig ist und wie angegeben an den Viewport geklemmt werden muss, wenn die konservative Rasterung nicht aktiviert ist. Dies ähnelt der Verwendung von Pixelfrequenzinterpolationsmodi auf einem RenderTarget mit einer Stichprobenanzahl von mehr als 1. Im Fall der konservativen Rasterung kann jedoch der Tiefenwert extrapoliert werden, der in den Tiefentest der festen Funktion eingeht.

Early Depth culling behavior with Depth Extrapolation is undefined. Dies liegt daran, dass einige Hardware für early Depth Culling nicht ordnungsgemäß extrapolierte Tiefenwerte unterstützen kann. Das Verhalten der frühen Tiefenträgheit in Gegenwart der Tiefen extrapolation ist jedoch problematisch, selbst bei Hardware, die extrapolierte Tiefenwerte unterstützen kann. Dieses Problem kann behoben werden, indem die Pixelshader-Eingabetiefe auf die minimalen und maximalen Tiefenwerte des Grundtyps eingeklemmt wird, der gerastert wird, und dieser Wert in oDepth (das Pixel-Shader-Ausgabetieferegister) geschrieben wird. In diesem Fall sind Implementierungen erforderlich, um early Depth culling aufgrund des Schreibvorgangs oDepth zu deaktivieren.

Hilfspixelinteraktion

Hilfsregeln für Pixel gelten auf die gleiche Weise wie bei nicht aktivierter konservativer Rasterung. Dabei müssen alle Pixel, einschließlich Hilfspixeln, genau wie im InputCoverage Interaktionsabschnitt angegeben gemeldet InputCoverage werden. Vollständig nicht abgedeckte Pixel melden also eine Abdeckung von 0.

Ausgabeabdeckungsinteraktion

Die Ausgabeabdeckung (oMask) verhält sich für ein konservatives rasterisiertes Pixel, wie dies der Fall ist, wenn die konservative Rasterung nicht aktiviert ist, wenn alle Beispiele behandelt werden.

InputCoverage-Interaktion

Im konservativen Rasterisierungsmodus wird dieses Eingaberegister aufgefüllt, als ob alle Stichproben abgedeckt sind, wenn die konservative Rasterung für ein bestimmtes, konservatives Rasterungspixel nicht aktiviert ist. Das heißt, alle vorhandenen Interaktionen gelten (z. B. SampleMask wird angewendet), und die ersten n Bits in InputCoverage aus dem LSB werden für ein konservatives rasterisiertes Pixel auf 1 festgelegt, wenn ein RenderTarget - und/oder DepthStencil-Puffer pro Pixel an die Ausgabezusammenführung gebunden ist, oder ein n Beispiel ForcedSampleCount. Die restlichen Bits sind 0.

Diese Eingabe ist unabhängig von der Verwendung der konservativen Rasterung in einem Shader verfügbar, obwohl die konservative Rasterisierung ihr Verhalten ändert, soweit nur alle behandelten Beispiele (oder keine für Hilfspixel) angezeigt werden.

InnerCoverage-Interaktion

Dieses Feature ist für die Ebene 3 erforderlich und nur verfügbar. Die Runtime schlägt bei der Shadererstellung für Shader fehl, die diesen Modus verwenden, wenn eine Implementierung eine Ebene unterstützt, die kleiner als Ebene 3 ist.

Der Pixel-Shader verfügt über eine 32-Bit-Skalar-ganzzahlige Systemgenerierungswert: InnerCoverage. Dies ist ein Bitfeld, für das bit 0 aus dem LSB für ein bestimmtes konservatives Rasterpixel auf 1 festgelegt ist, nur wenn dieses Pixel garantiert vollständig innerhalb des aktuellen Grundtyps liegt. Alle anderen Eingaberegisterbits müssen auf 0 festgelegt werden, wenn Bit 0 nicht festgelegt ist, sind aber undefiniert, wenn Bit 0 auf 1 festgelegt ist (im Wesentlichen stellt dieses Bitfeld einen booleschen Wert dar, bei dem false genau 0 sein muss, aber true kann ein beliebiger ungerader (d. h. bit 0 set) ungleich null-Wert sein). Diese Eingabe wird für unterschätzte Informationen zur konservativen Rasterisierung verwendet. Er informiert den Pixel-Shader darüber, ob das aktuelle Pixel vollständig innerhalb der Geometrie liegt.

Dadurch muss ein Andockfehler bei Auflösungen berücksichtigt werden, die größer oder gleich der Auflösung sind, mit der das aktuelle Zeichnen ausgeführt wird. Es darf keine falsch positiven Ergebnisse geben (festlegen InnerCoverage von Bits, wenn das Pixel nicht vollständig für andockende Fehler bei Auflösungen abgedeckt wird, die größer oder gleich der Auflösung sind, mit der das aktuelle Zeichnen ausgeführt wird), aber falsch negative Werte sind zulässig. Zusammenfassend kann gesagt werden, dass die Implementierung Pixel nicht fälschlicherweise als vollständig abgedeckt identifizieren darf, die nicht mit vollständigen Gleitkommakoordinaten im Rasterizer enthalten wären.

Pixel, die vollständig abgedeckt wären, wenn die Hardware vollständige Gleitkomma-Vertexkoordinaten verwendet, können nur ausgelassen werden, wenn sie den inneren Unsicherheitsbereich überschneiden, der nicht größer als die Größe des Subpixelrasters oder 1/256 eines Pixels in der Festpunktdomäne sein darf. Anders ausgedrückt: Pixel, die sich vollständig innerhalb der inneren Grenze des inneren Unsicherheitsbereichs befinden, müssen als vollständig abgedeckt markiert werden. Die innere Grenze des Unsicherheitsbereichs wird im folgenden Diagramm durch die fett formatierte schwarze gepunktete Linie dargestellt. 1/256 stammt aus der 16,8-Rasterizer-Koordinatendarstellung, die sich ändern kann, wenn sich die Rasterizergenauigkeit ändert. Dieser Unsicherheitsbereich reicht aus, um Andockfehler zu berücksichtigen, die durch die Konvertierung von Vertexkoordinaten für Gleitkommapunkte in Fixpunkt-Vertexkoordinaten im Rasterizer verursacht werden.

Auch hier gelten die gleichen 1/512 Mindestunsicherheitsregionenanforderungen, die in der Interaktion mit Rasterungsregeln definiert sind.

Das folgende Diagramm veranschaulicht einen gültigen inneren Unsicherheitsbereich, der durch das Kehren eines Quadrats um die Ränder des Grundtyps in der Fixpunktdomäne entsteht (d. h. die Scheitelpunkte wurden durch die 16,8-Fixpunktdarstellung quantisiert). Die Abmessungen dieses Quadrats basieren auf der gültigen größe des inneren Unsicherheitsbereichs: Für 1/256 eines Pixels ist das Quadrat 1/128 eines Pixels in Breite und Höhe. Das grüne Dreieck stellt ein bestimmtes Primitives dar, die fett gepunktete Linie stellt die Grenze des inneren Unsicherheitsbereichs dar, die festen schwarzen Quadrate stellen das Quadrat dar, das entlang der primitiven Kanten gekehrt wird, und der orange karierte Bereich ist der innere Unsicherheitsbereich:

Innere Unsicherheitsreqion.

Die Verwendung von InnerCoverage wirkt sich nicht darauf aus, ob ein Pixel konservativ gerastert ist, d. h. die Verwendung eines dieser InputCoverage Modi wirkt sich nicht darauf aus, welche Pixel gerastert werden, wenn der konservative Rasterisierungsmodus aktiviert ist. Wenn InnerCoverage der Pixel-Shader also verwendet wird und ein Pixel verarbeitet, das nicht vollständig von der Geometrie abgedeckt ist, ist der Wert 0, aber für den Pixel-Shader-Aufruf werden die Beispiele aktualisiert. Dies unterscheidet sich von InputCoverage 0, was bedeutet, dass keine Beispiele aktualisiert werden.

Diese Eingabe schließt sich gegenseitig aus mit InputCoverage : Beide können nicht verwendet werden.

Für den Zugriff InnerCoveragemuss es als einzelne Komponente aus einem der Pixel Shader-Eingaberegister deklariert werden. Der Interpolationsmodus für die Deklaration muss konstant sein (Interpolation gilt nicht).

Das InnerCoverage Bitfeld wird nicht von Tiefen-/Schablonentests beeinflusst, noch wird es mit dem SampleMask Rasterizer-Zustand anDed.

Diese Eingabe ist nur im konservativen Rasterungsmodus gültig. Wenn die konservative Rasterung nicht aktiviert ist, InnerCoverage wird ein nicht definierter Wert erzeugt.

Pixel-Shader-Aufrufe, die durch die Notwendigkeit von Hilfspixeln verursacht werden, andernfalls aber nicht durch das Primitive abgedeckt werden, müssen das InnerCoverage Register auf 0 festgelegt sein.

Interaktion zwischen Attributinterpolation

Die Attributinterpolationsmodi bleiben unverändert und gehen auf die gleiche Weise vor wie bei nicht aktivierter konservativer Rasterung, bei der die viewportskalierten und fixpunktkonvertierten Scheitelpunkte verwendet werden. Da alle Beispiele in einem konservativ gerasterten Pixel als abgedeckt gelten, ist es gültig, dass Werte extrapoliert werden, ähnlich wie beim Verwenden von Pixelfrequenzinterpolationsmodi für ein RenderTarget mit einer Stichprobenanzahl von mehr als 1. Zentrielle Interpolationsmodi erzeugen Ergebnisse, die mit dem entsprechenden nicht-zentriellen Interpolationsmodus identisch sind; der Begriff des Zentrierts ist in diesem Szenario bedeutungslos – in dem die Stichprobenabdeckung nur voll oder 0 ist.

Die konservative Rasterung ermöglicht degenerierte Dreiecke, um Pixel Shader-Aufrufe zu erzeugen. Daher müssen entartete Dreiecke die Werte verwenden, die Vertex 0 für alle interpolierten Werte zugewiesen sind.

Clippinginteraktion

Wenn der Konservative Rasterungsmodus aktiviert ist und der Tiefenclip deaktiviert ist (wenn der DepthClipEnable Rasterizer State auf FALSE festgelegt ist), kann es zu Abweichungen in der Attributinterpolation für Segmente eines Grundtyps kommen, die außerhalb des Bereichs 0 <= z <= w liegen, je nach Implementierung: Entweder werden konstanten Werte von einem Punkt verwendet, an dem das Primitive die relevante Ebene überschneidet (nah oder fern). oder die Attributinterpolation verhält sich so, als wenn der konservative Rasterungsmodus deaktiviert ist. Das Tiefenwertverhalten ist jedoch unabhängig vom konservativen Rasterungsmodus identisch, d. h. Primitiven, die außerhalb des Tiefenbereichs liegen, müssen weiterhin den Wert des nächsten Grenzwerts des Viewport-Tiefenbereichs erhalten. Das Verhalten der Attributinterpolation innerhalb des Bereichs 0 <= z <= w muss unverändert bleiben.

Clip Distance-Interaktion

Clip Distance ist gültig, wenn der Konservative Rasterungsmodus aktiviert ist, und verhält sich für ein konservativ gerastertes Pixel wie dies geschieht, wenn die konservative Rasterung nicht aktiviert ist, wenn alle Beispiele abgedeckt sind.

Beachten Sie, dass die konservative Rasterung eine Extrapolation der W-Vertexkoordinate verursachen kann, was W <= 0 verursachen kann. Dies kann dazu führen, dass Clip Distance-Implementierungen pro Pixel in einem Clip Distance-Wert ausgeführt werden, der perspektivisch durch einen ungültigen W-Wert geteilt wurde. Clip Distance-Implementierungen müssen vor dem Aufrufen der Rasterung für Pixel schützen, bei denen Vertexkoordinate W <= 0 (z. B. aufgrund der Extrapolation im konservativen Rasterungsmodus) aufgerufen wird.

Zielunabhängige Rasterungsinteraktion

Der konservative Rastermodus ist mit der zielunabhängigen Rasterung (Target Independent Rasterization, TIR) kompatibel. Es gelten TIR-Regeln und -Einschränkungen, die sich für ein konservativ gerastertes Pixel verhalten, als wären alle Stichproben abgedeckt.

Primitive Topologieinteraktion von IA

Die konservative Rasterung ist nicht für Linien- oder Punktgrundsätze definiert. Daher erzeugen primitive Topologien, die Punkte oder Linien angeben, ein undefiniertes Verhalten, wenn sie an die Rastereinheit übergeben werden, wenn die konservative Rasterung aktiviert ist.

Bei der Überprüfung der Debugebene wird überprüft, ob Anwendungen diese primitiven Topologien nicht verwenden.

Abfrageinteraktion

Bei einem konservativ gerasterten Pixel verhalten sich Abfragen wie, wenn die konservative Rasterung nicht aktiviert ist, wenn alle Beispiele behandelt werden. Bei einem konservativ gerasterten Pixel müssen sich beispielsweise D3D12_QUERY_TYPE_OCCLUSION und D3D12_QUERY_TYPE_PIPELINE_STATISTICS (von D3D12_QUERY_TYPE) wie verhalten, wenn die konservative Rasterung nicht aktiviert ist, wenn alle Stichproben abgedeckt sind.

Pixel shader-Aufrufe sollten für jedes konservativ gerasterte Pixel im konservativen Rasterungsmodus inkrementiert werden.

Interaktion mit dem Ullzustand

Alle Cull-Zustände sind im Konservativen Rasterungsmodus gültig und befolgen die gleichen Regeln wie bei nicht aktivierter konservativer Rasterung.

Beim Vergleich der konservativen Rasterung zwischen Auflösungen mit sich selbst oder ohne aktivierte konservative Rasterung besteht die Möglichkeit, dass einige Primitiven eine nicht übereinstimmende Schärfe aufweisen (d. h. eine nach hinten, die andere nach vorne). Anwendungen können diese Unsicherheit vermeiden, indem sie D3D12_CULL_MODE_NONE (von D3D12_CULL_MODE) und nicht den IsFrontFace vom System generierten Wert verwenden.

IsFrontFace-Interaktion

Der IsFrontFace systemgenerierte Wert ist für die Verwendung im Konservativen Rasterungsmodus gültig und folgt dem Verhalten, das definiert wird, wenn die konservative Rasterung nicht aktiviert ist.

Interaktion mit Füllmodi

Der einzige gültige D3D12_FILL_MODE für die konservative Rasterung ist D3D12_FILL_SOLID. Jeder andere Füllmodus ist ein ungültiger Parameter für den Rasterisierungszustand.

Dies liegt daran, dass die D3D12-Funktionsspezifikation angibt, dass der Wireframe-Füllmodus Dreiecksränder in Linien konvertieren und den Linienrasterregeln folgen soll, und dass das Verhalten der konservativen Linienrasterung nicht definiert wurde.

Details zur Implementierung

Der in Direct3D 12 unterstützte Rasterungstyp wird manchmal als "Überschätzte konservative Rasterung" bezeichnet. Es gibt auch das Konzept der "Unterschätzte konservative Rasterung", was bedeutet, dass nur Pixel, die vollständig von einem gerenderten Primitiven abgedeckt sind, gerastert werden. Informationen zur unterschätzten konservativen Rasterung sind über den Pixel-Shader durch die Verwendung von Eingabeabdeckungsdaten verfügbar, und nur die überschätzte konservative Rasterung ist als Rasterungsmodus verfügbar.

Wenn ein Teil eines Primitiven ein Pixel überlappt, wird dieses Pixel als abgedeckt betrachtet und dann gerastert. Wenn ein Rand oder eine Ecke eines Grundtyps entlang der Kante oder Ecke eines Pixels fällt, ist die Anwendung der "oben linken Regel" implementierungsspezifisch. Für Implementierungen, die degenerate Dreiecke unterstützen, muss ein entartetes Dreieck entlang einer Kante oder Ecke jedoch mindestens ein Pixel abdecken.

Konservative Rasterungsimplementierungen können auf unterschiedlicher Hardware variieren und falsch positive Ergebnisse erzeugen, was bedeutet, dass sie fälschlicherweise entscheiden können, dass Pixel abgedeckt werden. Dies kann aufgrund von implementierungsspezifischen Details wie primitiven Wachstums- oder Snappingfehlern auftreten, die den bei der Rasterung verwendeten Fixpunktvertexkoordinaten inhärent sind. Der Grund, warum falsch positive Werte (in Bezug auf Fixpunktvertexkoordinaten) gültig sind, liegt darin, dass eine gewisse Menge falsch positiver Werte erforderlich ist, um eine Implementierung die Erfassungsbewertung für nach dem Schnappen vorgenommene Scheitelpunkte (d. h. Vertexkoordinaten, die vom Gleitkommapunkt in den im Rasterisierer verwendeten Fixpunkt 16,8 konvertiert wurden) zu ermöglichen, aber die Abdeckung berücksichtigen, die von den ursprünglichen Gleitkommavertexkoordinaten erzeugt wurde.

Konservative Rasterungsimplementierungen erzeugen keine falschen Negativen in Bezug auf die Gleitkommavertexkoordinaten für nicht degenerierte Post-Snap-Primitive: Wenn ein Teil eines Primitiven einen Beliebigen Teil eines Pixels überschneidet, wird dieses Pixel gerastert.

Dreiecke, die degeneriert sind (doppelte Indizes in einem Indexpuffer oder kollinear in 3D) oder nach der Fixpunktkonvertierung degenerieren (kollineare Scheitelpunkte im Rasterisierer), können oder nicht gekullt werden; Beides sind gültige Verhaltensweisen. Entartete Dreiecke müssen als nach hinten gerichtet betrachtet werden. Wenn also ein bestimmtes Verhalten für eine Anwendung erforderlich ist, kann sie rückseitige Kulling- oder Tests für frontseitige Verkleidungen verwenden. Entartete Dreiecke verwenden die Werte, die Vertex 0 für alle interpolierten Werte zugewiesen sind.

Es gibt drei Ebenen der Hardwareunterstützung, zusätzlich zur Möglichkeit, dass die Hardware dieses Feature nicht unterstützt.

  • Ebene 1 erzwingt eine maximale Unsicherheitsregion von 1/2 Pixeln und unterstützt keine Degenerate nach dem Snap. Dies eignet sich gut für gekacheltes Rendering, einen Texturatlas, die Generierung von Lichtkarten und Schattenkarten unter Pixeln.
  • Tier 2 reduziert die maximale Unsicherheitsregion auf 1/256 und erfordert, dass Degenerate nach dem Einrasten nicht gekullt werden. Diese Ebene ist für die CPU-basierte Algorithmusbeschleunigung (z. B. Voxelisierung) hilfreich.
  • Ebene 3 behält eine maximale 1/256-Unsicherheitsregion bei und fügt Unterstützung für innere Eingabeabdeckung hinzu. Die Innere Eingabeabdeckung fügt den neuen Wert SV_InnerCoverage zur High Level Shading Language (HLSL) hinzu. Dies ist eine skalare 32-Bit-Ganzzahl, die bei der Eingabe in einen Pixel-Shader angegeben werden kann, und stellt die unterschätzten Informationen zur konservativen Rasterung dar (d. a. ob ein Pixel garantiert vollständig abgedeckt wird). Diese Ebene ist hilfreich für Die Okklusionskulling.

API-Zusammenfassung

Die folgenden Methoden, Strukturen, Enumerationen und Hilfsklassen verweisen auf die konservative Rasterung:

DirectX-Videotutorials für erweitertes Lernen: Konservative Rasterung

Geordnete Rasterizeransichten

Darstellung