Cette page présente des démos que j'ai réalisé. Le but de ces démos est de montrer un effet
particulier avec un minimum de code. Elles n'ont pas pour prétentions d'êtres exaustives dans
les sujets qu'elles traitent, mais sont plutôt à but didactique, pour montrer les principes.
J'essaye autant que possible de fournire le code en même temps que la démo, mais ce n'est pas
toujours possible. Par exemple, pour la démo sur les moteurs de particules, j'utilise le moteur
physique NovodeX (renommé depuis PhysX) dans sa version gratuite, qui me permet de redistribuer
les DLL mais pas le SDK qui est necessaire pour pouvoir compiler la démo.
Cette démo est un des premier shader que j'ai réalisé. Il met en oeuvre un effet de sépia, dans sa version standard, et dans une version modifiée que j'ai mis au point.
La version standard consiste simplement à passer la couleur de chaque pixel par une matrice de tranformation particulière qui effectue le changement d'espace de couleur. Je me suis basé sur un document d'ATI pour effectuer ce shader, tout en améliorant ses performances. En effet, dans le shader proposé dans le document, on pouvait reduire le calcul matriciel à un produit scalaire et deux affectation, au lieu de trois produit scalaires et deux affectation.
La version modifiée du shader consiste à prendre chaque composante de la couleur du pixel et à la mettre à une puissance donnée. On obtient ainsi des couleurs plus chaudes et plus saturées.
Cette démo permet de changer le shader utilisé en cours d'éxécution avec les touches 0,1 et 2. le 0 désactive le shader et affiche simplement la texture, le 1 active l'effet sepia modifié, et le 2 active l'effet sepia standard.
Vous pouvez télécharger la démo ici.
rendu sans shader
rendu en sépia standard
rendu en sépia modifié
Cette démo montre une version basique de l'effet de parallax mapping (offset bump mapping). Cet effet permet de déformer une texture en fonction d'une height map afin de donner l'impression que l'objet est en relief.
Dans cette demo, j'ai aussi implementé du dot3 bump mapping pour bien montrer les effets d'éclairages et souligner le résultat du parallax mapping. Il y a 2 sources lumineuses : une fixe, bleu, et une orange dirigée à la souris.
Note : l'effet de spéculaire appliqué ici est buggé. Pour un meilleur spéculaire, voir mon tutoriel sur la gestion de l'éclairage dynamique ici
Pour déplacer la camera (basique), ce sont les touches z,q,s,d. On peut activer le parallax mapping avec la touche p, et le désactiver (bump mapping seul) avec la touche o. On peut aussi augmenter/diminuer la répétition de texture avec les touches + et -.
Vous pouvez télécharger la démo ici.
Cette démo met en oeuvre un système complexe de particules. Elle utilise un framework de gestion de moteurs de particules que j'ai crée et qui est facilement extensible pour ajouter de nouveaux types de particules ou de générateurs de particules. Dans ce framework, les particules peuvent être triées à l'interieur de leur moteur, mais on peut aussi effectuer un tri entre plusieurs moteurs de particules afin de pouvoir activer du blending non additif pour les moteurs de particules qui nécéssitent un affichage dépendant de la distance à la camera (order dependant transparency).
J'ai intégré le moteur physique NovodeX dans cette démo afin de montrer les
possibilitées d'interactions des particules avec leur environnement. Ainsi,
certaines particules rebondissent sur le décor et peuvent même bouger les
objets qu'elles rencontrent.
Comme la licence de NovodeX ne permet pas de redistribuer le SDK, je n'ai pas mis les
sources de cette démo.
Les touches pour cette démo sont : 8,4,5,6 pour déplacer la camera, 7,9 pour monter/descendre la camera. +,- pour accélérer/ralentire le temps. On peut séléctionner l'emplacement du feu d'artifice avec les touches e et r, et déplacer le grand feu avec les touches / et *.
Vous pouvez télécharger la démo ici.
Cette démo sert à montrer comment réaliser un effet d'eau réaliste à la Far Cry en utilisant des vertex/fragments program ARB.
Pour réaliser le rendu j'utilise une simple normal map générée statiquement, puis je calcul le décalage de la réflexion/réfraction en temps réel. J'ai choisi cette methode à la place d'utiliser une du/dv map généralement utilisée car elle me permet d'ajouter facilement des reflets spéculaires sur l'eau, ce que ne permet pas l'utilisation d'une map du/dv.
Le rendu se decompose en 3 etapes :
1 - on rend la scène à réflechire inversée dans une texture
2 - on rend la scène à réfracter dans une autre texture
3 - on effectue la projection des deux textures sur la surface de l'eau en calculant
la réflexion/réfraction à l'aide d'un vertex/fragment program.
La caméra utilisée dans cette démo est particulierement naze, elle se déplace avec les touches z,q,s,d, on peut la monter déscendre avec les touches r et f.
Pour activer le rendu de l'eau, c'est la touche w, pour accélérer/ralentire le défilement de l'eau, ce sont les touches 9 et 6, et pour augmenter/diminuer la taille des vagues : + et -.
Vous pouvez télécharger la démo ici.
Copyright © 2006 Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.