PDA

Voir la version complète : Petit moteur de particules



oks2024
19/01/2013, 21h35
Bonjour à tous.

Je me suis dit que ça pourrais intéresser des personnes ici. J'ai implémenté un moteur de particule statefull (c'est à dire qu'il conserve sont état précédent pour se mettre à jour) qui tourne entièrement sur la carte graphique (physique, collision, affichage).

Une petite vidéo (c'est mieux en 720p:

G6Edk4fHmD4

J'ai mis plus d'explications sur mon site www.alexandre-pestana.com (http://www.alexandre-pestana.com), il y a aussi le code source (loin d'être optimisé, je fais sans cesses des expérimentations) et un setup si vous voulez vous amuser avec (il y a plein de touches cachées à découvrir, c'est assez ludique :D).

Sans rentrer dans les détails, chaque position et vélocité de particule est stocké dans un pixel d'une texture. Aux vertices qui représente une particule est attribué des coordonnées de textures qui correspondent à l'endroit ou se trouvent leurs données.
Le gros avantage c'est qu'on peut stocker et utiliser des informations d'une frame sur l'autre, ce qui permet de faire du calcul de collisions, appliquer des forces, etc, tout en restant sur le GPU ce qui donne de bonne perf.
Là il y a 1 000 000 de particules, j'ai fais la vidéo sur mon portable et je l'ai locké à 30fps, mais sur mon fixe (ATI 6870) je suis à 120 fps.

Voilà, si jamais vous avez des questions ou des suggestions, hésitez pas.

EDIT: Ah oui au fait, c'est du C#/XNA, la version C++/DX11 arrive dés que j'ai corrigé une saloperie de bug ^^.

Sahnvour
20/01/2013, 12h56
Ça a l'air très sympa bravo, et une version OpenGL ? ;)

oks2024
21/01/2013, 10h27
J'ai toujours eu une préférence pour DirectX, donc c'est pas prévu.
Par contre j'aurai toujours un iPad de dev, je testerai bien cette technique par curiosité, histoire de voir les perfs qu'on peut atteindre. Et puis avec le tactile, ça doit être sympa à contrôler.

Ah, et j'ai oublié de dire que la version actuelle est compatible Kinect, on peut contrôler les particules avec les mains.