DirectX Raytracing (DXR) Tier 1.1 Neue Funktionen können nur mit Treiberunterstützung ohne umfangreiche Hardwaremodifikationen verwendet werden
Ray Tracing ist sicherlich eine Funktion, auf die Gamer, insbesondere mit High-End-Grafikkarten von NVIDIA und AMD, gespannt sind. Führende Hersteller von GPUs, zu denen in Kürze auch Intel gehören wird, bauen ihre Hardware aktiv auf, um die Funktion zu unterstützen, die die Licht- und Schatteneffekte basierend auf den realen Gesetzen der Physik realistisch wiedergibt und hyperrealistische und immersive Grafiken liefert.
In der Zwischenzeit stellt Microsoft sicher, dass das Windows-Betriebssystem als ideale Plattform für das Spielen von High-End-Spielen gut geeignet ist. Die DirectX-Plattform des Unternehmens, die seit langem ein führender Standard für Desktop-Spiele ist, wird optimiert, um das "Echtzeit-Ray-Tracing" nativ zu unterstützen und sogar zu verbessern. Tatsächlich ist das DirectX Raytracing (DXR) Tier 1.1 der neueste Standard, der eine Reihe neuer Funktionen unterstützt. Einige der aufregenden Funktionen, die Echtzeit-Raytracing in der Near-Funktion unterstützen könnte, umfassen Inline-Raytracing, DispatchRays () ruft über ExecuteIndirect () auf, Wachsende Statusobjekte über AddToStateObject (), GeometryIndex () in Raytracing-Shadern, und mehr. Schauen wir uns einige der neuen Funktionen an, die DirectX 12 für Windows 10 für die Raytracing-Funktion unterstützt.
Inline Ray Tracing:
Als alternative Form der Raytracing-Funktion verwendet die Inline-Raytracing-Funktion keine separaten dynamischen Shader oder Shader-Tabellen. Die API für das Merkmal verbirgt den Zugriff auf die Beschleunigungsstruktur (z. B. Datenstrukturdurchquerung, Box, Dreieckskreuzung). Dies überlässt es im Wesentlichen der Hardware / dem Treiber. Interessanterweise kann der gesamte erforderliche App-Code für die Verarbeitung sowohl der aufgezählten Kandidatentreffer als auch des Ergebnisses einer Abfrage (z. B. Treffer gegen Fehlschlag) in dem Shader enthalten sein, der die RayQuery.
Inline-Raytracing bietet Entwicklern die Möglichkeit, auf mehr Raytracing-Prozesse zu drängen, anstatt die Arbeitsplanung vollständig an das System zu übergeben. Diese Optimierung von Prozessen ist natürlich sehr nützlich für Entwickler, die mit mehreren Schatten kämpfen. Darüber hinaus haben die Entwickler die völlige Freiheit, für einfache rekursive Strahlen dynamisch in die Inline-Form zu wechseln.
DispatchRays () Aufrufe über ExecuteIndirect ():
Mit dieser Funktion können Shader auf der GPU eine Liste von erstellen DispatchRays () Anrufe. Dazu gehören einzelne Parameter wie Thread-Zählungen, Shader-Tabelleneinstellungen und andere Root-Parametereinstellungen. Der beste Aspekt der Funktion ist, dass die gesamte Liste ausgeführt werden kann, ohne dass der Prozess jemals einen Zwischen-Roundtrip zurück zur CPU benötigt.
Alle Szenarien, die Raytracing-Arbeiten auf der GPU vorbereiten und diese dann sofort erzeugen, sollten von der Funktion immens profitieren. Diese Funktion sollte natürlich bei mehreren adaptiven Raytracing-Szenarien wie Shader-basiertem Culling, Sortieren, Klassifizieren und Verfeinern sehr hilfreich sein.
Wachsende Statusobjekte über AddToStateObject ():
Diese neue Optimierungsfunktion versucht, verschwenderische Verarbeitungsthreads zu reduzieren. Nicht wenige Apps und Prozesse erstellen heute eine vollständig bestückte Raytracing-Pipeline, die viele Ressourcen verschwendet und das System belastet. Derzeit analysiert die D3D12-Laufzeit noch das vollständige Statusobjekt, das aus Bausteinen erstellt wird.
Auch wenn dies getan wird, um die Richtigkeit zu überprüfen, mit AddToStateObject ()Ein neues Statusobjekt kann erstellt werden, indem Shader zu einem vorhandenen Shader-Statusobjekt hinzugefügt werden. Der CPU-Overhead bleibt natürlich nur proportional zu den hinzugefügten Daten.
GeometryIndex () In Ray Tracing Shadern:
Mit dieser Funktion können Shader Geometrien innerhalb von Beschleunigungsstrukturen auf der untersten Ebene unterscheiden. Früher konnten Geometrien durch Variieren der Daten in Shader-Tabellendatensätzen für jede Geometrie unterschieden werden. Mit der neuen Methode wird die App jedoch von der Belastung befreit. Wenn alle Geometrien denselben Shader verwenden, kann die App außerdem festlegen, dass der Shader festgelegt wird MultiplierForGeometryContributionToHitGroupIndex Parameter zu TraceRay () 0.
Dadurch wird im Wesentlichen sichergestellt, dass der Geometrieindex nicht mehr in die Indizierungsberechnung für Shader-Tabellen mit festen Funktionen einbezogen wird. Falls erforderlich oder gewünscht, können die Shader dennoch verwendet werden GeometryIndex () um in die eigenen Datenstrukturen der App zu indizieren.
Zusätzlich zu den oben genannten Funktionen enthält das DirectX Raytracing (DXR) Tier 1.1 auch RAY_FLAG_SKIP_TRIANGLES und RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES Flaggen. Während diese Flags für einzelne Raytracing-Aufrufe verfügbar sind, können sie auch global über die Konfiguration der Raytracing-Pipeline deklariert werden.
Es ist klar, dass Microsoft versucht, DirectX 12 für grafikintensive Spiele zu optimieren. Da Raytracing eine der wichtigsten Funktionen für High-End-Spiele und Gamer sein soll, stellt das Unternehmen außerdem sicher, dass System, CPU und GPU mit minimalen Redundanzen optimal genutzt werden.