[C++] SPARK moteur de particules opensource

Juff Message lu Posté le 12 Juil 2009 à 05:32 Bulle
Membre Novice

Messages : 21
GCPoints : 2592
Bonjour,

je vous présente mon projet sur lequel je travaille durant mon temps libre :
SPARK est un moteur de particules gratuit et opensource codé en C++ concu dans le but d'etre :

    _ facile à utiliser
    _ paramétrable
    _ optimisé
    _ générique (evolution coté utilisateur)
    _ portable


Il permet de rendre toute sorte d'effets 2D et 3D a base de particules (fumée, feu, pluie, neige, sang, magie...). Il est également fourni avec un moteur physique interne et de nombreuses classes d'extensions (emetteurs, modifieurs, zones...). Sa généricité lui permet de s'interfacer avec n'importe quel moteur graphique très facilement.

Le partie calcul est totalement indépendante du rendu. Le moteur est livré avec 2 modules de rendu :

    _ OpenGL
    _ SFML (moteur 2D)


Le siteweb propose des tutoriaux, les specifications complete de la lib, les lib, les projets, des démos...

Une video youtube est disponible ici.

Quelques screenshots :
Image

Image

Image


Dites moi ce que vous en pensez.
Merci beaucoup
Dernière édition le 12 Juil 2009 à 17:02
SPARK moteur de particules opensource avec modules de rendu openGL et SFML
graphiboc Message lu Posté le 12 Juil 2009 à 09:27 Bulle
Membre Avancé

Messages : 262
GCPoints : 40352
Le premier effet de la vidéo est très impressionant je trouve.
COmbien de particules pour un tel effet ? Est-ce gérable en temps réel?
Et sinon quel est le principe pour obtenir ce genre de mouvement? juste une équation mathématique?
En tout cas bravo c'est très joli, après moi ce qui m'inquiète c'est l'efficacité de ton code

Ps : le lien pour la vidéo a été mal posté il y a des www et http en trop
L'Homme est un créateur...
stilobique Message lu Posté le 12 Juil 2009 à 10:40 Bulle
Avatar de stilobique
Newser

Messages : 2368
GCPoints : 834447
Fort sympathique en effet, un projet prometteur je trouve et qui sera mené à terme j'espère !

Edit : Plus d'information sur les balises par ici.
Dernière édition le 12 Juil 2009 à 10:51

(___/)
(='.'= )Voici Lapin. Copiez et collez Lapin dans votre signature
(")_(") pour l'aider à concrétiser sa domination du monde.
Mod Message lu Posté le 12 Juil 2009 à 12:15 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Oh, jolis effets dans cette vidéo. Et la liste des fonctionnalités et alléchante, ma foi...

En pratique, à quel point système est-il gourmand en ressources ?

Sinon bien vu pour l'idée d'avoir séparé le rendu du calcul :).
Je n'ai pas le temps de tester dans l'immédiat le moteur, mais je pencherai assurément dessus, surtout s'il est générique (et adaptable à d'autres langages, donc ?).
Juff Message lu Posté le 12 Juil 2009 à 17:53 Bulle
Membre Novice

Messages : 21
GCPoints : 2592
Hello,

Merci pour vos réponses ! J'ai édité mon premier post pour que les liens fonctionnent.

Pour répondre au questions :

Graphiboc, le premier effet utilise en rendereur particulier, le GLLineTrailRenderer, qui permet en gros de réaliser du motion blur de facon procédural. La démo utilise environ 2500 particules echantillonés sur 32 positions donc environ 80000 points. C'est tout a fait gérable en temps réel (j'ai du 250 fps sur mon laptop assez performant). Disons que ce qui risque de limiter le framerate sera l antialiasing x4 que j'ai mis dans la démo pour lisser les lignes. Les particules sont représentées par des lignes qui fades plutot que par de classique points (en appyant sur F4 dans la démo on peut changé de rendereur et passé en rendu point). Le mouvement des particules n'est pas du a une equation mathématique mais a 2 points de masse invisibles en mouvement qui attirent les particules (d ou le nom de la démo "gravitation").

Concernant l'efficacité du code ? qu'entend tu par la ? niveau performance ? consommation mémoire ? clarté de l'interface utilisateur ? Je pense que le moteur est assez optimisé. J'ai eu pas mal de retour d'utilisateurs me disant qu'il était très rapide (plus rapide que des classes perso de particules simplistes implémenté par certains utilisateurs et pourtant beaucoup plus générique) et également très facile a mettre en place. Après les calculs sont effectué coté CPU donc forcément moins rapide que si c'était entièrement coté GPU mais en contrepartie il y a beaucoup moins de contrainte sur le moteur, et une meilleur intégration des systèmes (lecture des paramètres des système par exemple). Disons que dans la plupart des démos, c'est le fillrate qui est le goulot d'étranglement et non l'update ou le transfert des particules.

Mod, concernant la consommation en ressource le système a été pensé pour limiter au maximum la consommation mémoire. En effet, la structure des particules n'est pas figé comme dans la plupart des systèmes mais définie par l'utilisateur a l'aide de flags. Donc la taille en mémoire pour une particules est limité uniquement a ce qui est utilisé. Certains rendereurs utilise un buffer coté CPU pour stocker de facon efficace les données avant l'envoie au GPU. La je travaille pour la prochaine release a passer pas mal de calcul coté GPU, l'utilisation de geometry shader sur les dernières cartes graphique permettra également de ne pas utilisé de buffers pour les renderers en RAM mais de tous construire directement sur le GPU (moins de mémoire utilisé donc et un transfert CPU/GPU accéléré).

Concernant la généricité du moteur, j entendais plus par la que comme le moteur est basé sur un système de classes dérivables, les possibilité sont immenses en terme de fonctionnalités en créant ses propres emetteurs, rendereurs, modifieurs... Après le moteur est livré avec un set déjà pas mal fourni (il n'est pas necessaire de créer de nouvelles classes en pratique). L'adaptabilité a d'autres language quand a elle impose soit un binding soit un portage (donc du boulot quand meme).

Voila; si vous avez d'autres questions n'hésitez pas. Merci
SPARK moteur de particules opensource avec modules de rendu openGL et SFML
freemaul Message lu Posté le 13 Juil 2009 à 11:49 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
J'aime beaucoup le rendu sur la vidéo, et j'ai hâte d'essayer ça, bien que je n'ai pas trop le temps en ce moment.

Je trouve les choix que tu a fait très intéressant, comme par exemple utilisé la SFML et OpenGl est un bon point pour ma part.
Tu es seul sur ce projet ?

J'essaierais de tester tout ça plus tard, en attendant bonne continuation.
"La vie n'a pas de prix, mais elle coûte chère"
Juff Message lu Posté le 13 Juil 2009 à 18:27 Bulle
Membre Novice

Messages : 21
GCPoints : 2592
Salut, merci pour ta réponse !

Oui je suis tout seul sur le projet. Je ne cherche pas forcément de monde mais si certains veulent donner un coup de main, ca sera avec plaisir.

Pour le rendu, je suis parti sur un truc générique puis ai implémenté le module OpenGL. Pour SFML, je l'ai rajouté après parceque je trouve cette bibliotheque interessante, qu'elle n'a pas de moteur de particules efficace (ni vraiment de moyen d'intégrer des particules efficacement sans aller dans le bas niveau (openGL)) et que ca me permettait de tester l'interfaceage de SPARK avec une bibliotheque. D'ailleurs si vous avez d'autres idée de modules, ca m'interesse (a part direct3D qui est prévu a terme).
Dernière édition le 13 Juil 2009 à 18:28
SPARK moteur de particules opensource avec modules de rendu openGL et SFML
Darktib Message lu Posté le 15 Juil 2009 à 17:19 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Très interessant, je vais voir à quoi ca ressemble niveau code pour voir si ca peut etre adapté à Irrlicht facilement^^

Juff Message lu Posté le 16 Juil 2009 à 02:38 Bulle
Membre Novice

Messages : 21
GCPoints : 2592

Darktib a écrit :

Très interessant, je vais voir à quoi ca ressemble niveau code pour voir si ca peut etre adapté à Irrlicht facilement^^



Salut Darktib,

si tu interfaces SPARK avec Irrlicht, ca m'interesse beaucoup. Je n'ai jamais utilisé Irrlicht et j'ai checké leur système de particules et il est assez light. Avoir une alternative plus complète pourrais être intéressant (pourquoi pas un module Irrlicht pour SPARK). Si tu as des questions, n'hésites surtout pas.
SPARK moteur de particules opensource avec modules de rendu openGL et SFML
Angelis Message lu Posté le 16 Juil 2009 à 11:13 Bulle
Avatar de Angelis
Membre Confirmé

Messages : 177
GCPoints : 13420
Pensez pas qu'a Irrlicht, pensez aussi a Ogre :)
Lolilolight Message lu Posté le 16 Juil 2009 à 12:00 Bulle
Avatar de Lolilolight
Membre Avancé

Messages : 301
GCPoints : 45457
Wahou!
C'est justement ce genre d'effet que je cherche pour mettre sur les maps de mon jeux, enfin du moins, pour le feu et tout ça.

Je pensais utiliser le normal mapping et le GLSL, mais bon, façon je suppose que ta librairie n'est faîte que pour le c++ parce là j'utilise le Java, mais si je met mon code en c++ un jour, je jetterai un coup d'oeuil.
Même si on est peu entouré, et de ce qu'en pense les autres, soyons fier de ce que nous créons!
Je n'existe que avec ce que je créé.
Juff Message lu Posté le 16 Juil 2009 à 16:27 Bulle
Membre Novice

Messages : 21
GCPoints : 2592
Angelis, concernant Ogre, j y ai déja pensé mais ce n'est pas pour l'instant une priorité comme le moteur de particules de Ogre est déja pas mal customisable et me semble plus avancé que celui d'Irrlicht. Je reregarderai en tout cas.

Lolilolight, il n'y a pas de portage JAVA de prévu pour SPARK. Par contre en moteur de particule JAVA il y a JOPS. Je ne l'ai jamais testé mais il a l'air assez complet. Mais la dernière release date de decembre 2008 donc je ne sais pas s'il est toujours bien maintenu.
SPARK moteur de particules opensource avec modules de rendu openGL et SFML
Lolilolight Message lu Posté le 16 Juil 2009 à 18:26 Bulle
Avatar de Lolilolight
Membre Avancé

Messages : 301
GCPoints : 45457
Ok, j'y jetterai un oeuil, merci pour l'info.
Même si on est peu entouré, et de ce qu'en pense les autres, soyons fier de ce que nous créons!
Je n'existe que avec ce que je créé.
Angelis Message lu Posté le 16 Juil 2009 à 18:37 Bulle
Avatar de Angelis
Membre Confirmé

Messages : 177
GCPoints : 13420

Juff a écrit :

Angelis, concernant Ogre, j y ai déja pensé mais ce n'est pas pour l'instant une priorité comme le moteur de particules de Ogre est déja pas mal customisable et me semble plus avancé que celui d'Irrlicht. Je reregarderai en tout cas.

Okay,

Effectivement Ogre a un systeme de gestion des particules sympa, mais bon, on sait jamais.

En tout cas, beau travail !!!
Darktib Message lu Posté le 18 Juil 2009 à 12:00 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Hop, je suis en train d'essayer de le télécharger pour vraiment le tester en profondeur.
Sinon sous Irrlicht il existe un autre moteur de particules, il est plutot impressionnant, mais e permet pas ce qui est possible sous Spark apparemment.
Juff Message lu Posté le 18 Juil 2009 à 19:17 Bulle
Membre Novice

Messages : 21
GCPoints : 2592

Darktib a écrit :

Sinon sous Irrlicht il existe un autre moteur de particules, il est plutot impressionnant



Je n'arrive pas a le trouver. C'est un plugin non officiel a part ? Ou peut on le trouver ?
SPARK moteur de particules opensource avec modules de rendu openGL et SFML
Darktib Message lu Posté le 19 Juil 2009 à 10:56 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Non officiel en effet, et ca n'est pas vraiment un moteur, mais une grosse extension

J'ai regardé succinctement, ca m'a l'air très logique et bien organisé, j'ai juste une question: peut tu m'expliquer précisément à quoi servent les systèmes ? Parce qu'avec les groupes on peut déjà tout faire sans avoir besoin des systèmes...

Sinon, il y a quelques fautes d'orthographe, et les possibilité sont impressionnantes.
Dernière édition le 19 Juil 2009 à 10:58
Juff Message lu Posté le 19 Juil 2009 à 16:52 Bulle
Membre Novice

Messages : 21
GCPoints : 2592
Les systèmes servent en fait a organiser les groupes.
Un système de particules avancé va souvent être composé de plusieurs groupes. Par exemple pour une explosion on va avoir :
_ un groupe avec les particules de fumée
_ un groupe avec des etincelles
_ un group avec des débris
_ ...
Avec un système on va pouvoir gérer tous ces groupes comme une seul instance et tout positionner/gérer dans l'univers 3D d'un coup.

C'est également la classe qui est dérivée pour pouvoir permettre l interfacage de SPARK avec des moteurs 3D (ou 2D). Par exemple avec le module SFML, il y a la classe SFMLSystem qui hérite du drawable de SFML et qui se gère donc comme n'importe quel drawable SFML.

Je pense que je vais me lancer dans un module pour Irrlicht. Les sytème de particules dans Irrlicht est assez figé car la structure d une particule dans Irrlicht est fixe et très light. Dans SPARK elle est dynamique donc on peut avoir autant de caractéristique qu on veut pour définir une particule. Donc ca permettra de faire des systèmes de particules bien plus avancés.

Merci pour la suggestion d Irrlicht !
SPARK moteur de particules opensource avec modules de rendu openGL et SFML
Juff Message lu Posté le 19 Juil 2009 à 16:52 Bulle
Membre Novice

Messages : 21
GCPoints : 2592
[EDIT] double post, désolé... Si un modérateur qui passe par la peut effacer ce mess
Dernière édition le 19 Juil 2009 à 16:53
SPARK moteur de particules opensource avec modules de rendu openGL et SFML
Darktib Message lu Posté le 19 Juil 2009 à 22:39 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Pour Irrlicht je pense le faire, vu que j'ai toute l'architecture en tete... a condition que ca compile (je n'ai pas vc++ sous la main actuellement), j'ai une grosse erreur dans SPK_Group.h: gcc n'aime pas la spécification de swapElements en Particles après l'instantiation...

Dommage, car j'ai déjà fait un tout petit truc pour tester avec irrlicht, mais je ne désespère pas^^

En gros : Faire un IRRSystem qui dérive de SPK::System et de irr::scene::ISceneNode, sachant que cette dernière classe est un des composant essentiel d'irrlicht. Le rendu sera automatique, pas besoin d'appeller IRRSystem::render(), c'est un gros avantage. Sinon je pense que je vais tenter d'utiliser les VBOs, mais faut d'abord que je regarde si ca peux etre utile pour les perfs.
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0516 secondes