Archive for the ‘raytracing’ Category

Ray Tracing temps réel

Il y a quelques temps j’avais commencé un article sur le Ray Tracing sur GPU, mais ça semblait être encore de la science-fiction. Mais là, nVidia a présenté au SIGGRAPH 2008 une belle bagnole rendue en ray tracing temps réel (sur 4 cartes Quadro FX 5800) à 30 fps en 1920×1080.

Pour les novices, le ray tracing ou  lancer de rayons est la technique privilégiée pour le rendu ultra-réaliste des films d’animation, où on peut se permettre de calculer chaque image pendant des heures, alors que les jeux et autres applications 3D temps réel sont basées sur la rastérisation.

  • le ray tracing consiste à calculer le trajet des rayons lumineux qui arrivent à l’observateur. On obtient ainsi des effets optiques comme les réflections et la réfraction très corrects, comme on peut les voir dans les reflets de la carosserie ci-dessus. Le temps de calcul dépend donc beaucoup de la taille de l’image, mais on peut le « paralléliser » en partie si on dispose de plusieurs processeurs.
  • la rastérisation calcule des effets de lumière simplifiés sur des triangles composant la scène 3D. L’optique physique est nettement moins parfaite, mais on parvient à rendre des images très réalistes beaucoup plus rapidement.

Jusqu’ici, les cartes graphiques utilisaient des processeurs optimisés pour la rastérisation (GPU). Mais les GPU évoluent et deviennent de plus en plus des processeurs plus généraux, massivement parallèles, très puissants. On pressentait qu’un jour, qui approche à grands pas, les GPU parviendraient à calculer une image en ray-tracing en une fraction de seconde au lieu de minutes, ce qui pourrait bouleverser non seulement l’industrie du graphisme 3D, mais aussi celui des processeurs car la puce d’intel n’est désormais plus la plus puissante de votre PC, donc toute l’informatique …

sources: shadows.fr et hothardware

  1. « The Coming Combo Of The CPU And GPU, Ray Tracing Versus Rasterization, And Why Billions Of Dollars Is At Stake »
  2. Dean Calver. « Real-Time Ray Tracing : Holy Grail or Fools’ Errand? » , Beyond3D, 12th Oct 2007
  3. Jeffrey Howard « Real Time Ray-Tracing: The End of Rasterization?« , Intel, October 10, 2007
  4. Nathan A. Carr, Jared Hoberock, Keenan Crane, John C. Hart « Fast GPU Ray Tracing of Dynamic Meshes using Geometry Images », Proceedings of Graphics Interface 2006 (pdf)
  5. Martin Christen « Implementing Ray Tracing on GPU« , 2005 Diploma Thesis, University of Applied Sciences Basel, Switzerland (pdf)
Publicités

3D impossible

Trouvé quelques magnifiques images sur Mighty Optical Illusions :

Il s’agit d’illusions d’optique assez classiques, mais traitées d’une façon assez remarquable : comment les auteurs ont-il réussi à faire de l’ombrage, voire du ray-tracing sur des objets impossibles à construire en 3D ???

Encore faut-il être sur que ces « objets » ne sont réellement pas modélisables : cette liste d’objets impossible montre que l’impossibilité est souvent une question de point de vue, ce que j’ai déjà montré sur la page consacrée au maitre de cet art : Escher

Ensembles de Julia calculés en temps réel par GPU

Retrouvé par hasard un travail très intéressant de Keenan Crane (dont on a déjà parlé ici) datant de 2005 sur cette page et dans cet article. Il s’agit d’un véritable tutoriel sur le ray-tracing en temps réel d’un objet mathématique particulier, l’ensemble de Julia, le tout calculé sur un GPU. Comme le dit Keenan, il y a deux problèmes avec l’ensemble de Julia:

  1. il prend des siècles à calculer
  2. il est totalement inutile

mais il est très beau, comme on le voit sur ces captures :

En fait, l’ensemble de Julia est un objet à 4 dimensions que l’on visualise par « tranche en 3 dimensions ». En coupant une tranche en 2 dimensions dans une direction particulière, on obtient d’ailleurs l’ensemble de Mandelbrot plus connu, que Demoniak3D calcule sur GPU de façon spectaculaire.

Un exécutable avec son code source sont disponible sur la page « Ray Tracing Quaternion Julia Sets on the GPU » de Keenan Crane. Il utilise

Le problème, c’est que ce dernier code n’a plus l’air de fonctionner avec le tout récent Cg 2.0… Avant que je m’attaque à porter tout ceci en GLSL + LUa sur Demoniak 3D, est-ce que quelqu’un qui connait le Cg pourrait me dire ce qui cloche, voire corriger la version actuelle ?