Lors du banquet de la conférence i3D 2009 qui s'est déroulée à Boston, Austin Robinson du groupe de recherche NVIDIA a annoncé la sortie à la mi-printemps d'une nouvelle API nommée NVIRT (NVIDIA Ray-Tracing engine) qui, comme son nom l'indique, sera un moteur de lancer de rayon. Ce sera une API basée sur CUDA, la toute nouvelle API de NVIDIA pour faire du calcul général sur les cartes graphiques et NVSG , le graphe de scène proposé par NVIDIA.
Cette annonce d'un outil permettant de calculer facilement des algorithmes de lancer de rayon sur des GPUs est une première mondiale dans l'industrie. Les algorithmes de lancer de rayon sont de plus en plus utilisés dans l'industrie du jeu vidéo (pour les moteurs physiques ou algorithmes de rendu sophistiqués), mais également pour des simulations physiques plus générales utiles pour les industries de pointes (aéronautique, aérospatiale, etc.) ou dans le domaine de l'IA. A l'heure actuelle, seul CUDA permet de créer un moteur de lancer de rayon exécuté entièrement sur GPU mais NVIDIA veut nous proposer une API plus adaptée et qui sera très flexible.
NVIRT devrait être une architecture de type pipeline mais plus sophistiquée que OpenGL et DirectX. En effet, il y aurait deux types d'objets qui seront traités : les rayons et les objets qui représenteront nos modèles 3D si nous voulons faire du rendu.
Les objets pourront être stockés dans des structures accélératrices différentes elles-même pouvant être contenues dans d'autres structures accélératrices. C'est apparemment l'implantation de la structure méta-hiérarchique de Jim Arvo. Vous pourrez ainsi choisir de stocker vos géométries statiques dans un K-D-Tree qui est long à construire mais très efficace et vos géométries dynamiques dans un BVH qui est moins efficace mais très rapide à mettre-à-jour. Au niveau du type de modélisation pour les objets que NVIRT pourra supporter, rien n'est sûr mais il semblerait que n'importe quelle modélisation soit possible (triangles, surfaces paramétriques telles que les NURBS, etc.).
Pour les rayons, différentes politiques d'intersections seront possibles par soucis d'efficacité et des résultats différents nous seront fournis :
- un booléen indiquant si une intersection a eu lieu (utile pour les rayons d'ombre) ;
- la plus proche intersection (rayon partant des yeux, de réfraction ou de réflexion) ;
- toutes les intersections rencontrées (utile pour gérer des objets transparents).
Des shaders permettant de faire du shading ou de générer de nouveaux rayons (rayons de réfraction ou de réflexion par exemple) pourront être fournis. Apparemment il y aurait un type de shader qui génèrera les rayons primaires, un type de shader différent pour chaque politique d'intersection des rayons et un autre type pour les rayons qui n'ont pas eu d'intersections. Ces derniers seront programmés dans le langage CUDA.
Tout ceci semble prometteur mais tout n'est pas rose. NVIRT étant basé sur CUDA, il en hérite toutes ses limitations à savoir qu'il ne peut être exécuté que sur des cartes CUDA compatibles (geforce 8 et plus) et ne peut accéder directement aux buffers des APIs graphiques (il est nécessaire de faire une copie sur le GPU, certe très rapide mais pouvant devenir problématique) et qu'actuellement le coût de changement de contexte (passage de CUDA vers OpenGL/DirectX et vice-versa) est non négligeable bien qu'NVIDIA ait promis une amélioration très importante dans un futur proche pour ce dernier point.
Néanmoins, tout ceci est fort intéressant pour l'avenir du lancer de rayon en temps réel ou le rendu hybride rasterisation/lancer de rayon comme il se fait de plus en plus dans les jeux-vidéos et nous pourrons espérer que ceci va donner des idées au groupe de standardisation Khronos et qu'il va s'atteler à faire une API standardisée tout comme l'a été OpenCL pour CUDA.
Sources :
Real Time Rendering : http://www.realtimerendering.com/blo...reating-games/
ompf.org : http://ompf.org/forum/viewtopic.php?f=16&t=1239
Icare3D : http://www.icare3d.org/blog_techno/g...and_nvirt.html
Zest for graphics : http://zestforgraphics.blogsome.com/...-el-i3d-nvirt/
i3D 2009 : http://graphics.cs.williams.edu/i3d09/
D'autres actualités sur le blog de la rubrique 2D/3D/Jeux
Partager