Archive for the ‘fluides’ 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

Simulations d’ondes de choc

« Visual Simulation of Shockwaves » de Jason Sewall et al est un intéressant papier qui sera présenté au Syposium on Computer Animation 2008 à Dublin.

La vidéo montre des résultats spectaculaires obtenus en quelques minutes de calcul seulement, ce qui laisse espérer du temps réel un jour prochain :

Programmation des GPU en C++

La montée en puissance des GPUs s’est accompagnée du développement de langages de programmation spécifiques comme Cg ou GLSL pour tirer parti de leurs performances. La syntaxe de ces langages est proche du C, mais ils sont clairement destinés à la programmation d’applications graphiques, et demandent une bonne connaissance du fonctionnement interne des GPU.

Pour exécuter des programmes plus généraux sur les GPUs, l’idéal serait de disposer de compilateurs capables de générer « tout seuls » du code optimisé pour les GPU à partir d’un source C++ standard. On n’y est pas encore, mais ça progresse.

Actuellement, il existe des librairies permettant d’utiliser le GPU comme coprocesseur au travers d’un API comme:

Dans sa thèse de doctorat « GPU++ – An Embedded GPU Development System for General-Purpose Computations » Thomas Jansen a franchi une étape de plus en permettant de développer des shaders directement en C++ à l’aide d’une librairie qui génère du code GPU (je n’ai pas encore compris comment) à la compilation sur un compilateur standard.

RapidMind propose une « plateforme » basée sur une idée similaire, mais en la généralisant encore. Leur système permet d’optimiser le même code sur des processeurs aussi différents que les GPU multi-coeurs, les GPU et le processeur Cell qui équipe les PlayStation 3. Mais comme on le voit ci-dessous, le langage C++ est difficilement reconnaissable derrière l’utilisation d’un API et de macros:

Cette approche est cependant très générale et efficace, comme on le voit sur la page des « Case Studies« , qui inclut au moins deux domaines qui m’intéressent:

  1. La simulation des fluides
  2. Les fractales. J’y reviens dans un prochain article

Documents intéressants:

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:

Jos Stam : Physique, Maya Nucleus et Caustiques

Dans « The Software That Will Take Digital F/X to the Next Level of Awesome » Michael Behar de Wired dresse le portrait de Jos Stam, chercheur formé à l’Université de Genève et développeur de modules de physique Maya chez Alias/Autodesk.

Son module nCloth est le premier basé sur le framework Nucleus et permet de calculer les mouvements réalistes de textiles dans Maya 8.5 comme dans ce joli exemple:

Comme Ron Fedkiv dont j’ai parlé ici, Jos s’intéresse aussi à la simulation de fluides et parvient à des résultats très encourageants:

Malheureusement, Jos ne maintient pas trop sa page perso, ce qui fait qu’on trouve beaucoup moins de matériel sur son travail que sur celui de Ron Fedkiv.

caus1.gifSa page sur les caustiques est par contre bien détaillée et très utile à ceux qui veulent simuler une surface d’eau vite fait bien fait car elle offre 8 ensembles de 32 textures périodiques 512×512 permettant de réaliser des caustiques animées comme ci-contre

A part ça, je me retrouve bien dans cette phrase de Jos Stam: « I started coding just for the beauty of it. »

Progrès en mécanique des fluides

La mécanique des fluides est l’un des domaines de la physique classique les plus difficiles, et des plus utiles.

Utile parce que l’écoulement d’un fluide intervient dans de très nombreuses applications de l’ingénierie, par exemple:

  • pour créer la force de portance qui soulève les avions et certains bateaux
  • dans le refroidissement des circuits électroniques avec des ventilateurs et des radiateurs
  • dans les prévisions météo
  • dans les problèmes de tuyauterie, etc etc.

Difficile parce que les équations de Navier-Stokes qui permettent de calculer le mouvement des fluides sont relativement simples à écrire, mais qu’on ne savait pas les résoudre sans faire faire énormément de calculs à de gros ordinateurs jusqu’à il y peu. Ce qu’il y a de nouveau récemment, c’est que:

  1. La puissance des PC actuels permet désormais de simuler des fluides en temps réel en 2 dimensions.
    Après l’excellent petit jeu « The Odyssey : Winds of Athena » qui m’avait déjà étonné, Liquid Studios présente sa technologie « Splash » par une vidéo spectaculaire, surtout après la 1ère minute:

    voir aussi cette les vidéos sur cette page
  2. Keenan Crane a écrit un solveur des équations Navier-Stokes 3D tournant entièrement sur le GPU (voir « GPUs et physique« ), permettant de réaliser des animations réalistes, basées sur la physique, d’eau et de fumée en temps réel !


    cliquer sur l’image pour une vidéo (8.7 Mb )

  3. Penny Smith, une mathématicienne géniale pourrait bien avoir gagné 1 million de dollars en ayant résolu l’un des « problèmes du millénaire » : trouver une solution aux équations de Navier-Stokes ! Si quelqu’un parvient à corriger ou contourner des erreurs trouvées dans des résultats précédents sur lesquelles elle s’est basée, on pourrait bientôt voir apparaitre de nouvelles méthodes de calcul beaucoup plus rapides. Voir: