Archive for the ‘realtime’ Category

Fluides : en temps réel aussi

Autre avancée spectaculaire de nVidia : l’intégration d’une méthode (approximative) permettant de calculer l’écoulement d’un fluide en temps réel en exploitant un GPU. ça donne ça:

La méthode utilisée est la « Smoothed particle hydrodynamics » (SPH), qui approxime le fluide par des sphères dont le mouvement et la taille de chacune est influencée par ses voisines les plus proches.

Un des précurseurs (le précurseur ?) de cette méthode est Matthias Muller (de Zürich, en Suisse…) dont j’ai déjà parlé ici et qui a travaillé sur le moteur PhysX chez Ageia, l’entreprise rachetée l’an passé par nVidia … Depuis, la méthode a été appliqueé à d’autres domaines, notamment la simulation de phénomènes astrophysiques dont je causerai très bientôt sur Dr. Goulu.

Une chose est sure : bientôt les jeux vont devenir nettement plus aquatiques. Cool.

download (si vous avez une GeForce 8600 ou mieux…)

source: shadows.fr

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)

Visualisation de Molécules

Tombé par hasard sur VMD – Visual Molecular Dynamics, un logiciel scientifique Open Source disponible sur Windows, Linux et MacOS-X. Il permet de visualiser en 3D temps réel des molécules complexes et se combine avec de nombreux plugins et autres logiciels pour réaliser des rendus assez spectaculaires :

La modélisation des molécules demande énormément de puissance de calcul car il faut simuler les attractions/répulsions électrostatiques entre de très nombreux atomes pour trouver les positions de chacun. L’équipe de développement de VMD a beaucoup utilisé les GPU pour accélérer ces simulations, et CUDA en particulier (seulement sur Linux pour l’instant).

L’article « GPGPUs: Neat Idea or Disruptive Technology? » sur ce sujet est très intéressant : l’auteur montre que les GPU peuvent apporter un gain d’un facteur 10 en puissance de calcul, mais que ce n’est pas suffisant pour changer radicalement la face de l’informatique.

VMD supporte une ribambelle de formats de fichier de représentation des molécules dont certains, comme PDB, sont des fichiers textes, donc potentiellement importables dans d’autres logiciels …

Mathias Müller : Simulation temps réel de fluides dans les jeux

Le cours « Real Time Fluids in Games » de Matthias Müller-Fischer présenté à la conférence SIGGRAPH 2007 est une remarquable synthèse des différents problèmes posés par la simulation réaliste des fluides. L’auteur propose de distinguer 3 situations et les solutions correspondantes:

  1. « L’eau procédurale » (Procedural Water) pour représenter de vastes étendues océaniques ou de l’eau sans interaction physique avec le jeu.
  2. La technique des « champs de hauteur » (Heightfield Fluids) permet de calculer en temps réel des vagues causées par des interactions physiques sur de petites étendues d’eau.
  3. Les « fluides basés sur les particules » (Particle Based Fluids) sont proposés pour traiter les situations où le fluide gicle ou s’écoule de façon turbulente.

Procedural Water

Cette approche vise un but purement visuel. La physique n’est utilisée que pour précalculer des textures et les animer pour obtenir un rendu réaliste sans calculs supplémentaires. L’article de Yuri Kryachko « Using Vertex Texture Displacement for Realistic Water Rendering » paru dans GPU Gems 2 explique par exemple comment des images telles que celle ci-dessous sont générées dans le jeu Pacific Fighters

Heightfield Fluids

Cette technique consiste à modifier en temps réel un maillage représentant la surface de l’eau, modélisée comme une membrane sur laquelle se propagent les vagues. Matthias Müller la décrit de façon très complète dans son document, largement assez pour l’implanter dans une démo Demoniak 3D, par exemple (encore un projet en cours de plus, je vous en reparle bientôt…)

La principale limitation de cette méthode est que la hauteur du fluide ne peut avoir qu’une seule valeur en chaque poitn de la surface. Matthias montre comment contourner cette limitation dans 2 cas:

  1. pour les objets flottants que l’eau peut partiellement recouvrir ou des objets semi immergés, il montre qu’une seule variable supplémentaire par point du maillage permet d’en tenir compte pour modifier la surface de façon réaliste
  2. l’article de  N. Thürey, M. Mueller-Fischer, S. Schirm, M. Gross « Real-time Breaking Waves for Shallow Water Simulations » montre comment utiliser un système de particules pour représenter la crête des vagues, les déferlantes et les rouleaux.

Toutes ces techniques sont illustrées sont illustrées dans cette video:

Après avoir cofondé Novodex à Zürich, Matthias Müller y travaille pour Ageia, entreprise qui développe et commercialise l’API PhysX  permettant d’intégrer facilement la simulation physique aux jeux ainsi qu’un « Physical Processing Unit » (PPU) accélérant notablement les calculs correspondants. Le support des « heightmap fluids » est annoncé pour la prochaine version de PhysX.

Particle Based Fluids

Quand le fluide gicle et s’écoule de façon turbulente, Matthias Muller propose de modéliser le fluide comme un ensemble de particules en interaction entre elles et avec l’environnement. Cette méthode est très différente de celle que j’avais décrite ici, basée sur la résolution des équations de la mécanique des fluides. Elle présente l’avantage de pouvoir plus facilement représenter les interactions entre le fluide et son environnement, comme on le voit dans cette vidéo montrant plusieurs exemples:

Par contre, et comme on le voit déjà dans l’exemple de la vague déferlante, le réalisme visuel des fluides représentés par des particules n’est pas terrible, ce qui est assez facile à comprendre.

Autres références:

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 ?

Réalité augmentée

Christophe me parlait déjà de « réalité augmentée » à la fin du siècle passé: il superposait en temps réel des indicateurs graphiques sur une image vidéo d’un mécanisme en mouvement, permettant ainsi de réaliser des expérience de laboratoire à distance.

Depuis, la technologie a un peu évolué et permet d’intégrer des images 3D en temps réel dans une vidéo. On trouve plein d’exemples spectaculaires en cherchant « augmented reality » sur YouTube comme:

Les startups européennes ont l’air assez avancées dans ce domaine (les américaines traveillent peut-être pour les militaires…) :

Lire la suite

Hyperion

Hypergraphics-3D est une entreprise genevoise en création qui va « faire très fort ». Son produit « Hyperion » est une version « professionnelle et facile à utiliser » des moteurs 3D utilisés dans les jeux pour faire du rendu et de l’animation en temps réel.

Par « professionnelle », il faut comprendre qu’Hyperion vise le réalisme et la qualité d’image pour la visualisation de produits industriels ou de constructions.


Exemple de rendu en temps réel obtenu avec Hyperion !

Hyperion est « facile à utiliser » car toute la scène à représenter, les informations d’éclairage, de matière (texture) , l’interactivité, les effets visuels spéciaux et bien d’autres choses sont décrites dans un seul fichier XML, éditable avec un éditeur de texte comme PsPad par exemple.

Lire la suite