Archive for the 'realtime' Category

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…) :

Plus d’infos »

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.

Plus d’infos »