OptiX - OptiX

OptiX
OptiX logo.png
Entwickler Nvidia
Stabile Version
7.3 / 16. April 2021  ( 2021-04-16 )
Geschrieben in C / C ++
Betriebssystem Linux , OS X , Windows 7 und höher
Art Ray Tracing
Lizenz proprietäre Software , kostenlos für den kommerziellen Gebrauch
Webseite NVIDIA OptiX-Entwicklerseite

Nvidia OptiX ( OptiX Application Acceleration Engine ) ist eine Raytracing- API . Die Berechnungen werden entweder über die mit CUDA eingeführte Low-Level- oder die High-Level- API auf die GPUs verlagert . CUDA ist nur für die Grafikprodukte von Nvidia verfügbar. Nvidia OptiX ist Teil von Nvidia GameWorks . OptiX ist eine High-Level- oder "To-the-Algorithmus" -API, dh es wurde entwickelt, um den gesamten Algorithmus zu kapseln, zu dem die Raytracing-Funktion gehört, und nicht nur die Raytracing-Funktion selbst. Dies soll es der OptiX-Engine ermöglichen, den größeren Algorithmus mit großer Flexibilität ohne anwendungsseitige Änderungen auszuführen.

In der Regel verwenden Videospiele für das Rendern eher Rasterisierung als Raytracing.

Laut Nvidia ist OptiX flexibel genug für "prozedurale Definitionen und hybride Rendering-Ansätze". Neben dem Rendern von Computergrafiken hilft OptiX auch bei der optischen und akustischen Gestaltung, der Strahlungs- und elektromagnetischen Forschung, bei Abfragen künstlicher Intelligenz und bei der Kollisionsanalyse .

Raytracing mit OptiX

Ein mit NVIDIA OptiX gezeichnetes Julia-Set. Dies ist auch ein Beispiel für das SDK

OptiX verwendet vom Benutzer bereitgestellte Anweisungen (in Form von CUDA- Kerneln), wie ein Strahl unter bestimmten Umständen einen vollständigen Verfolgungsprozess simulieren soll.

Ein Lichtstrahl (oder vielleicht eine andere Art von Strahl) hat möglicherweise ein anderes Verhalten, wenn er auf eine bestimmte Oberfläche trifft, als auf eine andere. OptiX ermöglicht es, diese Trefferbedingungen mit vom Benutzer bereitgestellten Programmen anzupassen. Diese Programme sind in CUDA C oder direkt in PTX- Code geschrieben und bei Verwendung durch die OptiX-Engine miteinander verknüpft.

Um OptiX verwenden zu können, muss eine CUDA- fähige GPU auf dem System verfügbar sein und das CUDA-Toolkit muss installiert sein.

Die Verwendung der OptiX-Engine in einer Raytracing-Anwendung umfasst normalerweise die folgenden Schritte:

  • Definieren von Programmen zur Strahlerzeugung (z. B. Strahlen können parallel, perspektivisch oder wie ein Gradientenfeld aufgenommen werden), fehlender Strahl (wenn ein Strahl kein Objekt schneidet), ein optionales Ausnahmeprogramm (wenn der Strahl nicht aufgenommen werden kann) aus irgendeinem Grund), ein Bounding-Box- Programm (das Programm, das einen Bounding-Box-Schnittpunkttest für ein bestimmtes Objekt bereitstellt) und ein Schnittprogramm.

Einige Beispiele für diese Programme sind im SDK des Programms verfügbar

// Sample code using OptiX APIs //

/* Ray generation program */
rtProgramCreateFromPTXFile( *context, path_to_ptx, "pinhole_camera", &ray_gen_program );
rtContextSetRayGenerationProgram( *context, 0, ray_gen_program );

/* Miss program */
rtProgramCreateFromPTXFile( *context, path_to_ptx, "miss", &miss_program );
rtContextSetMissProgram( *context, 0, miss_program );

/* Bounding box and intersection program */
rtProgramCreateFromPTXFile( context, path_to_ptx, "box_bounds", &box_bounding_box_program );
rtGeometrySetBoundingBoxProgram( *box, box_bounding_box_program );
rtProgramCreateFromPTXFile( context, path_to_ptx, "box_intersect", &box_intersection_program );
rtGeometrySetIntersectionProgram( *box, box_intersection_program );

Bounding-Box-Programme werden verwendet, um Begrenzungsvolumina zu definieren, die zur Beschleunigung des Raytracing-Prozesses innerhalb von Beschleunigungsstrukturen als kd-Bäume oder Begrenzungsvolumenhierarchien verwendet werden

  • Erstellen Sie Material für alle Treffer- und nächsten Trefferprogramme: Diese beiden Programme bestimmen ein Strahlenverhalten, wenn sie auf die erste Kreuzung (nächster Treffer) oder eine generische Kreuzung (beliebiger Treffer) stoßen.
// Sample code using OptiX APIs //

rtProgramCreateFromPTXFile( context, path_to_ptx, "closest_hit_radiance", &closest_hit_program );
rtProgramCreateFromPTXFile( context, path_to_ptx, "any_hit_shadow", &any_hit_program );

/* Associate closest hit and any hit program with a material */
rtMaterialCreate( context, material );
rtMaterialSetClosestHitProgram( *material, 0, closest_hit_program );
rtMaterialSetAnyHitProgram( *material, 1, any_hit_program );
  • Definieren Sie Puffer , Variablen , die in den bereitgestellten Programmen verwendet werden können. Puffer sind Speicherbereiche, in denen Host-Code (dh normaler CPU- Code) mit Gerätecode (dh dem Code, der auf der GPU ausgeführt wird) kommunizieren kann und umgekehrt. Variablen sind die interne Methode von OptiX zur Kommunikation und Verwendung von Puffern zum Hin- und Herübertragen von Daten.
  • Definieren Sie die OptiX-Hierarchie von Geometrieobjekten, Gruppen, Selektoren und anderen Knoten, um ein Baumdiagramm der gesamten zu rendernden Szene zu erstellen
Ein Beispieldiagrammbaum für NVIDIA OptiX

Um eine komplexe Szene zu rendern oder verschiedene Pfade für einen beliebigen Strahl zu verfolgen, nutzt OptiX das GPGPU- Computing, indem es die NVIDIA CUDA- Plattform nutzt . Da der Prozess des Aufnehmens von Strahlen und des Einstellens ihres Verhaltens in hohem Maße anpassbar ist, kann OptiX neben der Strahlverfolgung in einer Vielzahl anderer Anwendungen verwendet werden.

OptiX Prime

Ab OptiX 3.5.0 wurde dem Bundle eine zweite Bibliothek namens OptiX Prime hinzugefügt, die eine schnelle Low-Level- API für die Raytracing -Funktion bereitstellen soll - Aufbau der Beschleunigungsstruktur , Durchqueren der Beschleunigungsstruktur und Schnittpunkt zwischen Strahlendreieck . Prime bietet auch einen CPU-Fallback, wenn keine kompatible GPU auf dem System gefunden wird. Im Gegensatz zu OptiX ist Prime keine programmierbare API, sodass benutzerdefinierte Nicht-Dreieck-Grundelemente und Schattierungen nicht unterstützt werden. Da OptiX Prime nicht programmierbar ist, kapselt es nicht den gesamten Algorithmus, zu dem Raytracing gehört. Daher kann Prime den Algorithmus für neue GPUs nicht neu kompilieren, die Berechnung für die Leistung umgestalten oder eine Netzwerk-Appliance wie den Quadro VCA usw. verwenden.

Software mit OptiX

  • Blender unterstützt OptiX seit Version 2.81 (7.1 in 2.92)
  • Das Blender-Add-On D-NOISE verwendet OptiX-Binärdateien für AI-beschleunigtes Entrauschen
  • FurryBall - Erweiterter Final Frame Renderer in Echtzeit-GPU-Produktionsqualität mit Raytrace und Rasterize - basierend auf Nvidia OptiX
  • Auf der SIGGRAPH 2011 präsentierte Adobe OptiX in einer Technologiedemo der GPU-Raytracing-Funktion für Bewegungsgrafiken.
  • Auf der SIGGRAPH 2013 wurde OptiX in Pixars GPU-basiertem Echtzeit-Beleuchtungsvorschau-Tool vorgestellt.
  • OptiX wurde zusammen mit PhysX und anderen CUDA- basierten Grafik-Engines und Frameworks in die GameWorks- Entwicklerbibliothek integriert .
  • Adobe After Effects CC
  • Daz Studio hatte OptiX Prime Acceleration seit seiner Iray-Integration, die Unterstützung wurde jedoch in Version 4.12.1.8 entfernt
  • Luxrender 2.5: Beschleunigung bis zu 600%

Verweise

Externe Links