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)

Racedriver GRID : les Codemasters frappent encore

RaceDriver GRID est un jeu de bagnoles stupéfiant. Oeuvre des « CodeMasters », il ressemble beaucoup à leur dernier opus, « DiRT« . Au premier coup d’oeil, on a l’impression d’un « DiRT sur route », avec des courses sur circuits organisés par saisons s’achevant par les « 24 minutes du Mans ». Au second coup d’oeil, on apprécie la variété des véhicules, la gestion des sponsors permettant de monter une équipe incluant un équipier, les types de courses variés donc des Drift piqués aux « Need for Speed ».

Sur le plan technique, GRID apporte surtout une fantastique gestion des dégats : à chaque choc, la voiture se déforme de façon très crédible et se comporte ensuite de façon très cohérente, en tirant à gauche ou à droite. Regardez ça:

Une autre innovation intéressante concerne les sauvegardes : on peut « remonter le temps » après un crash en visionnant les dernières secondes de la video playback, et reprendre la course juste avant de commettre l’erreur fatale. En gros, c’est le même système que dans un des derniers « Prince of Persia », très fun et agréable.

Femmes Virtuelles

Le degré de réalisme atteint dans la modélisation de personnages et de visages est impressionnant. Cet article liste 35 « making of » ou des artistes expliquent comment ils ont réalisé des images 2D ou des modèles 3D tels que celui-ci :

(Ella, par Ziv)

Dans un genre proche, ne manquez pas le « making of » video de Jessica Rabbit / Angelina Jolie ici

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 :

Trials2 : un peu de physique, beaucoup de fun !

Trials 2 de RedLynx est un de ces petits jeux tout bêtes, bien faits, pas chers, et horriblement prenants.

On pilote une moto de trial avec les 4 touches de direction : [haut] et [bas] pour accélérer et freiner, [gauche] et [droite] pour s’assoir ou se lever sur le siège, ce qui change complètement le comportement de la moto le long d’un parcours semé d’embûches :

La qualité de la simulation physique fait tout l’intérêt du jeu : la moto a un comportement vraiment très réaliste, l’adhérence et les rebonds dus aux amortisseurs sont parfaits. Il faut bien s’asseoir en arrière pour que la roue arrière adhère bien lors des accélérations, et se lever pendant les sauts pour ne pas faire des « backflips » involontaires. On peut même jouer des gaz et du frein en l’air pour faire tourner la moto par conservation du moment cinétique, comme les pros du supercross !

On se rate très souvent, et les chutes étant aussi rendues de manière physiquement réaliste, on se marre autant que devant VideoGag. Un petit compteur d’os brisés illustre d’ailleurs un avantage indiscutable du trial virtuel par rapport à celui qui réchauffe la planète.

Le moteur graphique maison donne un rendu 3D impeccable d’une scène essentiellement 2D, le tout sans requérir un PC hyper puissant, un autre avantage que Jacky appréciera.

Téléchargez la version gratuite ici, il y a déjà bien de quoi s’amuser quelques heures. Après, ce n’est que $20 pour avoir la totale.

Generation of high quality bitmap fonts

here is how to quickly and automatically generate bitmap fonts with an alpha channel, providing a perfect anti-aliasing on any background. Any vector font can be used and combined with an infinity of graphic effects.

The software that does 99% of the job is ImageMagick, a free, open-source image processing tool that I consider as a « GUI-less Photoshop » : as powerful as Adobe’s product, ImageMagick is used only from another program, or even from the shell. Install it urgently.

Below is the small batch file that creates a few files containing words including the font.png with the « font » text used in the image above :

@echo off
rem Function: Create transparent background, aliased texts from a list of words
rem Author: Philippe Guglielmetti
rem Requires: ImageMagick v.6 or later (www.imagemagick.org)
set texts=OK Abort Cancel font "This is Great !"
set params=-background none -font Bauhaus-93 -pointsize 72 -density 300 -fill blue -blur 0x5
for %%a in (%texts%) do convert.exe %params% label:%%a %%a.png
set texts=
set params=

« params » define the font to create:

  • -background none is mandatory to draw the font on a transparent background (alpha channel)
  • -font Bauhaus-93 defines the vector font to use (its name is sometimes not the same as the one displayed in Windows « Fonts » folder…)
  • -pointsize 72 -density 300 specifies the font should be 72pt high on a 300dpi device. The bitmap size will therefore be larger on screen, but it can be printed or used as a texture in a 3D game or a Demoniak3D demo with a perfect quality.
  • -fill blue -blur 0x5 are two basic effects : the symbol is filled with blue, and its contour (1 pixel of black by default) is slightly blured on 5 pixels. This creates semi-transparent pixels at the symbols borders, which enables a perfect superimposition whatever the background color, as shown on the zoom right:

To superimpose the text on a background texture for a quality check, another ImageMagick is called:

composite.exe -tile back.png -compose Dst_Over font.png test.jpg

Once the test passed, we can generate all the chars of the font. When only a few symbols are required, we could re-use the batch file above, definining for exemple

set texts=0 1 2 3 4 5 6 7 8 9

This can be cumbersome for a complete font, and for application programming reasons it might be useful to name the files by the ASCII code of each char. As this is not possible to code in Windows batch language, we have to code it in a real language such as LUA:

params="-background none -font Bauhaus-93 -pointsize 72 -density 300 -fill white -blur 0x5 "
for i=32,167 do
os.execute("convert.exe "..params.."label:"..string.char(i).." "..i..".png")
end

These 4 lines automatically generate 130 files of nice symbols ready to be loaded as textures in your game. Note that these files total about 10 Mb au total, more than ImageMagick. It might therefore be worth to consider including ImageMagick in your product and use it at insall time to generate the required fonts instead of creating a heavy distribution

Now, if the fonts above are a bit rough for you, have a look at  this page which will give you some idea of the possible effects, and explore this one for the full picture.

Génération de polices bitmap de haute qualité

Voici comment générer rapidement et automatiquement des polices de caractères bitmap avec canal alpha, donnant un anti-aliasing parfait quel que soit la texture de fond utilisée. Toutes les polices vectorielles peuvent être utilisées et combinées avec une infinité d’effets graphiques.

Le logiciel réalisant 99% du travail est ImageMagick, un programme de traitement d’images open-source gratuit que je considère comme un « Photoshop sans GUI » : aussi puissant que l’outil d’Adobe, ImageMagick s’utilise uniquement depuis un autre programme, voire simplement la ligne de commande du shell. A installer d’urgence.

Voici par exemple le petit fichier batch qui crée quelques fichiers contenant des mots, dont le fichier font.png contenant le mot « font » de l’image ci-dessus :

@echo off
rem Function: Create transparent background, aliased texts from a list of words
rem Author: Philippe Guglielmetti
rem Requires: ImageMagick v.6 or later (www.imagemagick.org)
set texts=OK Abort Cancel font "This is Great !"
set params=-background none -font Bauhaus-93 -pointsize 72 -density 300 -fill blue -blur 0x5
for %%a in (%texts%) do convert.exe %params% label:%%a %%a.png
set texts=
set params=

Les « params » définissent la police à réaliser:

  • -background none est essentiel pour dessiner la police sur un fond transparent (canal alpha)
  • -font Bauhaus-93 définit la police vectorielle à utiliser (dont le nom n’est parfois pas identique à celui apparaissant dans le dossier « Fonts » de Windows…)
  • -pointsize 72 -density 300 spécifient que la police doit faire 72pt de haut à 300dpi. La taille du bitmap sera donc supérieure à l’écran, mais il pourra être imprimé ou utilisé comme texture dans un jeu 3D ou une démo Demoniak3D avec un résultat d’excellente qualité
  • -fill blue -blur 0x5 sont deux petits effets de base : on remplit le caractère en bleu, et on adoucit le tracé de la lettre, qui est d’un pixel de noir par défaut. Ceci crée des pixels semi-transparents au bord des caractères, ce qui permet une découpe parfaite des caractères quel que soit le fond, comme on le voit sur le zoom ci-contre:

Pour placer la police sur la texture de fond afin de vérifier sa qualité, on utilise un autre module d’ImageMagick;

composite.exe -tile back.png -compose Dst_Over font.png test.jpg

Une fois ce test réalisé, on peut s’attaquer à la génération de tous les caractères de la police. Si seuls quelques caractères sont nécessaires, on peut utiliser le batch ci-dessus en définissant par exemple

set texts=0 1 2 3 4 5 6 7 8 9

Mais ceci est fastidieux pour une police complète, et pour des raisons de programmation de l’application finale, il peut être utile de nommer les fichiers d’après le code ASCII de chaque caractère. Comme cette fonctionnalité n’est pas disponible dans le langage de commande Windows, il faut programmer ceci dans un langage évolué. Par exemple en LUA:

params="-background none -font Bauhaus-93 -pointsize 72 -density 300 -fill white -blur 0x5 "
for i=32,167 do
os.execute("convert.exe "..params.."label:"..string.char(i).." "..i..".png")
end

Ces 2 lignes génèrent automatiquement 130 fichiers de belles lettres prêtes à être utilisées comme textures dans votre jeu. A noter que ces fichiers pèsent déjà 10 Mb au total, soit plus que l’exécutable d’ImageMagick : il peut donc être intéressant d’inclure ImageMagick à votre produit et de l’utiliser pour créer les polices nécessaires lors de l’installation plutôt que d’alourdir votre distribution…

Enfin, si vous trouvez les polices ci-dessus un peu trop carrées, visitez cette page qui vous donnera une petite idée des effets possibles, et explorez celle-ci pour une vision plus complète.

Historique du hardware 3D

En préparant ma prochaine présentation au Microclub, j’ai créer un historique du hardware 3D intitulé « History of 3D hardware and software » sur Dipity, un site permettant de créer des « timelines ».

Ca se présente comme ça:

Comme Dipity est un site « web 2.0 », vous pouvez compléter cette timeline si vous le souhaitez😉

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