Bonjour
Après plus de trois ans de développement, je viens ici présenter mon projet perso, réalisé sur mon temps libre comme un hobby, sans prétendre évidemment aboutir à un JV AAA fini, mais dont la finalité est seulement de parfaire mes connaissances en rendu 3D qui est un domaine qui me passionne (entre autres )
Il s'agit d'un moteur 3D censé offrir un certain nombre de "facilités" pour le développement de jeux/simulations spatiales, avec notamment :
- quelques fonctionnalités basiques : caméras, scenegraph, gestion de resources graphiques, gestion d'évenements fenêtres, système de connexion "signaux/slots" façon Qt, etc...
- un système de log pour faciliter le debug.
- un moteur physique (Bullet 2.82) déja intégré, pour les collisions/contacts et devant servir de base pour la mise au point de modèle de vols de vaisseaux (vols atmosphérique et dans l'espace)
- un système de plugin pour l'intégration propre du renderer 3D : à ce jour, seul un plugin Direct3D 9 existe (oui je sais c'est vieux); un plugin Direct3D 11 est en cours d'écriture en ce moment.
- un module de géneration procédurale de planètes. Il est aujourd'hui possible de se poser avec un vaisseau sur une planète, et de se promener "à pied" dans les alentours. Pour des problèmes de précision limite en float32 je suis actuellement bridé à des tailles de planètes de 500 km de rayon.
- des effets sympas comme les nuages volumétriques, le rendu de l'eau, et d'autres...
- une API pour créer et contrôler les orbites des planètes au sein du système solaire.
- gestion/rendu d'impostors en grand nombre.
- système de GUI (à faire).
- je réfléchis à l'intégration d'un système de scripting Lua afin de faciliter le dév d'application et aussi d'outils. J'avoue que cette partie est encore très floue dans ma tête...
- et plein d'autre choses...
Je travaille pour l'instant sur plateforme Windows, sous Visual 2013. Un portage Linux est envisagé, quand j'aurais bien avancé sur le reste.
Le projet est open source GPLV3, et hébergé sous github ici
Quelques screenshots de la génération procédurale de planète :
Screenshot d'un test de rendu de l'eau
quelques vidéos:
Ce qui reste à faire (liste non exhaustive) :
- système de module : système de plugin pour encapsuler et réutiliser des fonctionnalités complexes et des noeuds scenegraph; exemple: le rendu d'une planète procédurale implique tout
un ensemble de classes custom et de code complexe, ce qui fait que le code actuel du client est assez bordelique, et surtout je suis incapable d'instancier plus d'une planète.
- tester differents types de planètes (océaniques, lunes infertiles/rocheuses, gazeuses, avec les anneaux planétaires) en jouant sur la customisation des classes.
- intégrer plusieurs planètes au sein d'un même système.
- le portage vers D3D11 devrait aboutir; il faudrait aussi que je prenne le temps de faire un portage vers OpenGL, voire (soyons fou) sur Vulkan (dans une autre vie)
- en corollaire du point précedent, faire un portage sous Linux de l'ensemble.
- un système de GUI (fenêtres/boutons et autres widgets) intégré.
- un certain nombre d'outils à mettre au point, notamment pour visualiser les scenes et planètes et jouer en live avec les paramètres shaders ou coté C++, et voir le résultat immédiatement
au lieu de recompiler...
Enfin, si quelques personnes prennent la peine de s'amuser à explorer le code, je rappelle qu'il s'agit ici d'un projet non pro, avec beaucoup de choses pas finies/à peine commencées/en chantier, fait par une seule personne sur son maigre temps libre; merci donc de faire preuve d'indulgence ;-) ceci dit, les questions/remarques/critiques constructives sont évidemment les bienvenues, puisque c'est le but de ma démarche ici : obtenir un "feedback" après trois ans de dev en solo...
-Nev-
Partager