Développé par | Nvidia![]() |
---|---|
Écrit en | C++ etC![]() |
Système d'exploitation | Microsoft Windows,Linux etmacOS![]() |
Environnement | IBM compatible PC![]() |
Type | Lancer de rayon![]() |
Site web | developer.nvidia.com/optix![]() |
Le moteur d'accélération logicielOptiX est uneinterface de programmation (API) delancer de rayons[1], développée parNvidia. Les calculs sont confiés auxprocesseurs graphiques (GPU) par l'intermédiaire de l'API introduite avec le langage de programmationCUDA, disponible uniquement pour lescartes 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 leray 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 leurrendu larastérisation plutôt que lelancer de rayons.
SelonNvidia, OptiX est conçu pour être suffisamment flexible pour les «définitions de procédures et les approches de rendu hybrides». Outre le renduinfographique, OptiX facilite également la conceptionoptique etacoustique, la recherche sur lesrayonnements et l'électromagnétisme[2], les requêtes d'intelligence artificielle et l'analyse descollisions[3].
OptiX fonctionne à partir d'instructions fournies par l'utilisateur (sous la forme de noyauxCUDA), relatives à l'action d'un rayon dans des circonstances particulières pour simuler un processus complet de lancer de rayons[4].
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 codePTX et sont liés entre eux lorsqu'ils sont utilisés par le moteur OptiX.
Pour utiliser OptiX, le système doit disposer d'unGPU compatible avecCUDA 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 lekit 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 lesarbres kd ou dehié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);
Afin de restituer une scène complexe ou de tracer des chemins différents pour n'importe quel rayon, OptiX tire profit du calcul parGPGPU en exploitant la plateforme NVIDIACUDA. 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.
À 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 uneAPI 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 etintersection 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 lesombrages 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 leQuadro VCA.
TechnologiesNvidia | |||||||||
---|---|---|---|---|---|---|---|---|---|
Processeur graphique |
| ||||||||
Autres séries | |||||||||
GPU pourconsole | |||||||||
Électronique grand public | |||||||||
Chipsets nForce | |||||||||
Technologies | |||||||||
Logiciels |