Archive pour décembre, 2008

Joyeux Noël !

Posté le 27 décembre 2008, dans Développement.

Un joyeux noël un petit peu en retard, mais je devais finir le morceau sur lequel je travaillais, à savoir les particules. Après quelques problèmes de répartition de mes particules dans l’espace, j’ai pu enfin simuler l’effet que je voulais : la neige !

Voila ce que ça donne en image, avec un modèle un peu plus festif que le vaisseau habituel :

J’ai du au passage modifier le rendu pour supporter les modèles 3D qui ont des matériaux à la place des textures.

L’étape suivante concerne les ombres, car je voudrais implémenter des Soft Shadows, c’est à dire des ombres dont les bords sont plus réalistes, grâce aux Variance shadow maps.

Malheureusement je vais devoir prendre un peu de recul sur le projet car je dois avancer d’avantage sur un projet scolaire, mais je tiendrais à jour le blog pour donner des informations sur l’avancement.

Les particules arrivent

Posté le 6 décembre 2008, dans Développement.

Ça fait quelque temps que je n’ai rien posté car j’étais en train de bosser sur une grosse partie : le moteur de particules. J’ai passé pas mal de temps sur la conception pour avoir quelque chose de suffisamment flexible, et j’ai ensuite perdu du temps avec une technique sensée m’en faire gagner : les Point Sprites.

Il s’agit d’un mode de rendu qui permet d’afficher facilement des particules, simplement en envoyant à la carte graphique des coordonnées pour chaque particule, et une texture à afficher. Direct3D s’occupe alors de créer des quads texturés (une sorte de panneau carré) et de les orienter pour qu’ils soient toujours face à la caméra. Dans la théorie c’est super, mais dans la pratique c’est très limité quand on l’utilise avec des techniques de rendu un peu avancées comme le Deferred rendering, car il est impossible de passer des informations depuis le vertex shader vers le pixel shader. Il m’était donc impossible de gérer la profondeur, et les particules étaient visibles à travers les objets solides.

Avec les point sprites, les particules pourtant situées sous les vaisseaux sont visibles à travers :

J’ai donc du abandonner cette technique et utiliser le Billboarding, qui consiste à générer les quads à la main et les orienter (à la main aussi, mais dans le vertex shader). Le problème est que je passe beaucoup plus d’informations à la carte graphique, ce qui est moins performant, mais au moins ça fonctionne.

Le rendu avec le Billboarding, les particules sont correctement masquées par les vaisseaux :

La partie graphique étant au point, il ne reste plus qu’à gérer la dynamique des particules, mais ça devrait être beaucoup plus rapide.