OptiX

OptiX
Description de l'image OptiX Julia set.png.
Informations
Développé par NvidiaVoir et modifier les données sur Wikidata
Écrit en C++ et CVoir et modifier les données sur Wikidata
Système d'exploitation Microsoft Windows, Linux et macOSVoir et modifier les données sur Wikidata
Environnement IBM compatible PCVoir et modifier les données sur Wikidata
Type Lancer de rayonVoir et modifier les données sur Wikidata
Site web developer.nvidia.com/optixVoir et modifier les données sur Wikidata

Le moteur d'accélération logiciel OptiX est une interface de programmation (API) de lancer de rayons, développée par Nvidia. Les calculs sont confiés aux processeurs graphiques (GPU) par l'intermédiaire de l'API introduite avec le langage de programmation CUDA, disponible uniquement pour les cartes graphiques Nvidia. OptiX fait partie de la suite logicielle Nvidia GameWorks. C'est une API de haut niveau, "au service de l'algorithme", ce qui signifie qu'elle est conçue pour englober l'ensemble de l'algorithme dont le ray tracing fait partie, et pas seulement le ray tracing lui-même. Cela permet au moteur OptiX d'exécuter l'algorithme le plus complet avec une grande flexibilité sans avoir à modifier l'application.

Généralement, les jeux vidéo utilisent pour leur rendu la rastérisation plutôt que le lancer de rayons.

Selon Nvidia, OptiX est conçu pour être suffisamment flexible pour les «définitions de procédures et les approches de rendu hybrides». Outre le rendu infographique, OptiX facilite également la conception optique et acoustique, la recherche sur les rayonnements et l'électromagnétisme, les requêtes d'intelligence artificielle et l'analyse des collisions.

Spécificités du ray tracing

Un ensemble de Julia dessiné avec OptiX, servant également d'exemple dans le kit de développement logiciel (SDK).

OptiX fonctionne à partir d'instructions fournies par l'utilisateur (sous la forme de noyaux CUDA), relatives à l'action d'un rayon dans des circonstances particulières pour simuler un processus complet de lancer de rayons.

Un rayon lumineux (ou tout autre type de rayon) peut avoir un comportement différent lorsqu'il frappe une surface particulière plutôt qu'une autre. OptiX permet de personnaliser ces conditions de frappe avec des programmes fournis par l'utilisateur. Ces programmes sont écrits en CUDA C ou directement en code PTX et sont liés entre eux lorsqu'ils sont utilisés par le moteur OptiX.

Pour utiliser OptiX, le système doit disposer d'un GPU compatible avec CUDA et de la boîte à outils (toolkit) CUDA.

L'utilisation du moteur OptiX dans une application de lancer de rayons implique généralement les étapes suivantes :

Plusieurs exemples de ces programmes sont disponibles avec le kit de développement (SDK) du programme.

// Exemple de code utilisant l'API OptiX //

/* Programme de génération de rayon */
rtProgramCreateFromPTXFile( *context, path_to_ptx, "pinhole_camera", &ray_gen_program );
rtContextSetRayGenerationProgram( *context, 0, ray_gen_program );

/* Programme d'absence de rayon */
rtProgramCreateFromPTXFile( *context, path_to_ptx, "absence", &miss_program );
rtContextSetMissProgram( *context, 0, miss_program );

/* Programme de boîte englobante et d'intersection */
rtProgramCreateFromPTXFile( context, path_to_ptx, "boite_limites", &box_bounding_box_program );
rtGeometrySetBoundingBoxProgram( *box, box_bounding_box_program );
rtProgramCreateFromPTXFile( context, path_to_ptx, "boite_intersection", &box_intersection_program );
rtGeometrySetIntersectionProgram( *box, box_intersection_program );

Les programmes de boîtes englobantes sont utilisés pour définir les volumes englobants destinés à accélérer le processus de lancer de rayons dans les structures d'accélération comme les arbres kd ou de hiérarchie des volumes englobants.

// Exemple de code utilisant l'API OptiX //

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

/* Associe à une matière les programmes de frappe la plus proche et frappe quelconque */
rtMaterialCreate( context, material );
rtMaterialSetClosestHitProgram( *material, 0, closest_hit_program );
rtMaterialSetAnyHitProgram( *material, 1, any_hit_program );
Un exemple de graphe pour NVIDIA OptiX

Afin de restituer une scène complexe ou de tracer des chemins différents pour n'importe quel rayon, OptiX tire profit du calcul par GPGPU en exploitant la plateforme NVIDIA CUDA. Comme le processus de tir des rayons et la définition de leur comportement sont extrêmement personnalisables, OptiX peut être utilisé dans une multitude d'autres applications que celle du lancer de rayons.

OptiX Prime

À partir de la version 3.5.0 d'OptiX, une deuxième bibliothèque, appelée OptiX Prime, est ajoutée à l'ensemble. Elle fournit une API rapide de bas niveau pour le lancer de rayons - construction de la structure d'accélération, traversée de la structure d'accélération et intersection rayon-triangle. Prime propose également une fonction de repli vers le processeur lorsqu'aucun GPU compatible n'est trouvé sur le système. Contrairement à OptiX, Prime n'est pas une API programmable, et ne prend donc pas en charge les primitives non triangulaires et les ombrages personnalisés. N'étant pas programmable, OptiX Prime n'encapsule pas l'intégralité de l'algorithme dont le lancer de rayons fait partie. Ainsi, Prime ne peut pas recompiler l'algorithme pour de nouveaux GPU, refaçonner le calcul en fonction des performances, ou utiliser un dispositif réseau comme le Quadro VCA.

Logiciels utilisant OptiX

Références

  1. ↑ « Scheduling in OptiX, the Nvidia ray tracing engine »,
  2. ↑ Robert Felbecker, Leszek Raschkowski, Wilhelm Keusgen et Michael Peter, 2012 6th European Conference on Antennas and Propagation (EUCAP), IEEE Xplore, , 488–492 p. (ISBN 978-1-4577-0920-3, DOI 10.1109/EuCAP.2012.6206198), « Electromagnetic wave propagation in the millimeter wave band using the NVIDIA OptiX GPU ray tracing engine »
  3. ↑ Steven G. Parker, Heiko Friedrich, David Luebke et Keith Morley, « Magazine Communications of the ACM - GPU ray tracing », Communications of the ACM, ACM,‎ (lire en ligne, consulté le )
  4. ↑ Steven G. Parker, Heiko Friedrich, David Luebke et Keith Morley, « OptiX: a general purpose ray tracing engine », ACM Transactions on Graphics (Tog), ACM,‎ (DOI 10.1145/1778765.1778803, lire en ligne, consulté le )
  5. ↑ « Blender 2.81 Benchmarks On 19 NVIDIA Graphics Cards - RTX OptiX Rendering Performance Is Incredible », phoronix.com, (consulté le )
  6. ↑ « D-NOISE: Rapid AI Denoising for Blender », Remington Creative, (consulté le )
  7. ↑ « Adobe showcasing OptiX in a technology demo for ray tracing motion graphics with GPUs », NVIDIA, (consulté le )
  8. ↑ « Nvidia announces Gameworks Program at Montreal 2013; supports SteamOS », NVIDIA, (consulté le )
  9. ↑ « GPU changes (for CUDA and OpenGL) in After Effects CC (12.1) | After Effects region of interest » (consulté le )
  10. ↑ « Daz Studio Changelog », DAZ 3D (consulté le )

Voir aussi

Liens externes