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 ^^.
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 ^^.