Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Moteur de jeu] Nazara Engine

Moteur de jeu en développement

    3 mai 2012 à 18:28:28

    Cette présentation est assez vieille et je n'ai pas encore eu le temps de la mettre à jour, je vous invite à venir page 48 pour la sortie de la version 0.1 et des précompilés !

    Bonjour,
    Je m'appele Jérôme et j'ai 18 ans à l'heure où j'écris ces lignes. Je fais du C++ depuis presque quatre ans maintenant, j'ai également fait pendant quelques années du C, du PHP, du Lua, ainsi que touché au xHTML/CSS (Version 4), du Javascript, du SQL et du VB.

    Il y a plus de deux ans j'ai entrepris la création de mon propre moteur dans un but pédagogique, et j'ai en effet beaucoup appris de cette expérience.
    Par la suite j'ai décidé de mener à terme ce moteur, malheureusement son architecture n'étant ni mature ni robuste et sa nomenclature me déplaisant de plus en plus, j'ai pris une décision il y a six mois. Celle de tout recommencer pour partir d'une bonne base.

    Image utilisateur
    Merci à Shade Master pour le logo


    Nazara n'est pas un changement de nom, il s'agit d'une réécriture complète de mon ancien moteur, les quelques rares fichiers repris ont étés révisés ligne par ligne, algorithme par algorithme.

    Je suis donc assez fier de le présenter maintenant, Nazara dispose d'une architecture nettement plus solide, d'un code plus mûr et plus performant :)
    Aussi, une des différence majeure est que la licence est passée de LGPL à MIT (Presque du domaine libre) :)

    Mon moteur est donc divisé en plusieurs bibliothèques organisées dans une certaine hiérarchie, chacune disposant de ses fonctionnalités et de ses prérequis.

    À noter également qu'il est possible d'étendre Nazara en créant et en maintenant votre bibliothèque qui pourra peut-être se voir intégrée dans le projet.
    Par exemple, OveRdrivR est à l'origine de deux modules de Nazara.

    Une dernière chose, Nazara est en C++, certes, mais en C++11. Cela signifie que pour compiler le moteur ou un projet l'utilisant, il vous faut un compilateur à jour (J'utilise la dernière version de GCC comme référence).

    Nazara est donc un moteur de jeu :
    • Portable
    • Libre (Licence MIT autorisant tout)
    • Divisé en plusieurs bibliothèques
    • Écrit en C++11
    • Utilisant Premake
    • Disponible sur GitHub


    Le moteur est encore en développement intensif, mais passera bientôt en beta-test.
    Vous pouvez voir son avancement (Ainsi que ses capacités actuelles) ici à cette page (Attention déprécié).

    Comme vous pouvez le voir sur la page des fonctionnalités, Nazara n'est pas encore tout à fait portable, car bien que son architecture le permette, je n'ai pas les connaissances des API Linux/Mac OS X. C'est pourquoi je suis à la recherche de personnes pouvant m'aider de ce côté ;)
    Le noyau a déjà été adapté avec l'aide de Danman.

    Le projet vous intéresse-t-il ? Car je cherche également des personnes pour tester le moteur une fois son entrée en beta-test, m'aider à développer l'interface (Voir ce qu'il manque, ce qu'il faut renommer/enlever, ...) et repérer les éventuels bugs ;)

    Il est juste nécessaire de connaître le C++ (Pas forcément le C++11) et d'avoir un compilateur supportant suffisamment la norme, je ne peux que vous conseiller GCC (>= 4.7) qui est mon compilateur ;)

    GCC à jour sur Windows (+ Utilisation avec CodeBlocks)
    Désolé, le lien est actuellement hors-service

    Exemples de code pour illustrer la nomenclature :
    #include <Nazara/Core/String.hpp>
    
    NzString str = "Hello world !";
    str.Replace("Hello", "Goodbye");
    

    #include <Nazara/Renderer/Shader.hpp>
    
    NzShader shader(nzShaderLanguage_GLSL);
    if (!shader.LoadFromFile(nzShaderType_Fragment, "blur.frag"))
    {
    	std::cout << "Failed to load fragment shader from file:" << std::endl;
    	std::cout << shader.GetLog() << std::endl;
    	return 1;
    }
    
    if (!shader.LoadFromFile(nzShaderType_Vertex, "blur.vert"))
    {
    	std::cout << "Failed to load vertex shader from file:" << std::endl;
    	std::cout << shader.GetLog() << std::endl;
    	return 1;
    }
    
    if (!shader.Compile())
    {
    	std::cout << "Failed to compile shader" << std::endl;
    	return 1;
    }
    


    Démos:

    À noter que je travaille actuellement sur un tutoriel sur Progdupeupl pour utiliser Nazara :)

    Vidéos (Ordre chronologique):
    • AnimatedMesh (Keyframe)

      Vidéo de la démo AnimatedMesh de Nazara (Montrant les animations keyframe).
    • Première animation squelettique

      Vidéo de la première animation squelettique du moteur, utilisant le Hellknight de Doom 3.
    • Première animation skinnée

      Vidéo du premier skinning du moteur, reprenant le modèle et l'animation de la vidéo précédente.
    • Terrains dynamiques

      Démonstration du module DynaTerrain d'OveRdrivR.
    • Rendu 16bits

      Petit test du rendu sur texture (16bits en l'occurence) afin d'imiter un rendu des temps anciens.
    • Démo FirstScene

      Vidéo de la première démo du moteur (FirstScene) montrant une scène spatiale simple (une source d'éclairage, un modèle et une skybox).
    • Démo House

      Vidéo de la seconde démo du moteur (House) présentant une scène plus aboutie (caméra FPS, multiples modèles et sources d'éclairages, intégration du son).
    • Test du skinning

      Intégration d'un modèle squelettique dans la scène précédente.
    • Premières particules

      Démonstration de la première implémentation des particules dans le moteur.
    • Cercles de feu

      Démonstration un peu plus avancée des particules.
    • Binding Lua et Console

      Démonstration de la console intégrée au moteur et de l'interface Lua qui va avec.
    • Space battle

      Démonstration interactive sous la forme d'un combat entre des vaisseaux automatiques et une tourelle.



    Quelques screenshots pris durant le développement du moteur:

    Image utilisateur
    Image utilisateur
    Image utilisateur
    Image utilisateur
    Image utilisateur
    Image utilisateur
    Image utilisateur
    Image utilisateur
    Image utilisateur

    Merci de vos avis :)

    -
    Edité par Lynix 24 novembre 2016 à 19:26:25

    • Partager sur Facebook
    • Partager sur Twitter
    Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
      3 mai 2012 à 18:39:35

      Génial ! :)
      Franchement, ca me donne envie d'apprendre le C++

      EDIT: En testant un code aussi simple de votre ancien moteur, je me demande comment est celui-ci ! ^^
      • Partager sur Facebook
      • Partager sur Twitter
      Vous voulez créer des jeux-vidéos en C/C++ ? Vous aimez regarder des gameplays ? Visitez ma chaîne YouTube ;) 
        3 mai 2012 à 19:38:19

        Excellente nouvelle, je vais suivre de près ;)
        • Partager sur Facebook
        • Partager sur Twitter
          3 mai 2012 à 19:55:37

          Je tire mon chapeau et je m'incline, c'est assez impressionnant de voir qu'il est possible de créer un moteur en amateur !
          Pour la Beta-test il y a t-il des connaissances particulières a avoir (notamment en C++) ?

          Je te donne tout mes encouragements pour la suite !
          • Partager sur Facebook
          • Partager sur Twitter
            3 mai 2012 à 19:57:33

            Bonne chance avec ce nouveau moteur. :)
            • Partager sur Facebook
            • Partager sur Twitter
              3 mai 2012 à 22:41:02

              Citation : LowiSky

              Pour la Beta-test il y a t-il des connaissances particulières a avoir (notamment en C++) ?



              Non, Nazara n'est pas plus compliqué à utiliser que n'importe quelle bibliothèque, il est juste requis d'avoir un compilateur supportant suffisamment la norme (Ce n'est pas encore le cas de Visual Studio 2011), mais GCC pour Windows (MinGW) peut s'installer avec ce tuto.

              J'ai rajouté des exemples de code ainsi qu'un lien vers le tutoriel :)
              • Partager sur Facebook
              • Partager sur Twitter
              Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                4 mai 2012 à 2:23:33

                Tu devrais mettre le code dabs un espace de nom plustôt que de mettre le préfixe Nz parce que ça ralonge le code...
                Y a-t-il un fichier d'entête qui va permettre de tout les inclures?¿?
                J'ai hâte de le tester...
                • Partager sur Facebook
                • Partager sur Twitter
                L'être humain, contrairement aux geeks qui ne sont de toute façon pas des êtres humains, est un animal social taillé pour vivre en "meute".
                  4 mai 2012 à 11:07:41

                  L'espace de nom est pire selon moi que deux petites lettres (Au passage, Nz:: ça fait quatre caractères :P)
                  Quant au using namespace, ça fait perdre toute leur utilité aux namespace, et les collisions avec des noms comme File ou String sont très probables.

                  Et puis, si on fait un using namespace avec la std en plus, on se retrouve avec string et String, je trouve ça moche personnellement.
                  Sans oublier l'argument sur l'auto-compétition :)

                  Pour toutes ces raisons j'ai opté pour un préfixe, après c'est une question de goûts
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                    4 mai 2012 à 14:48:37

                    Je te souhaite bon courage dans ton projet, j'éspére que tu réussira, ça a l'air prometteur.

                    Quelles sont les techniques que tu as prévu d'implanter ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 mai 2012 à 20:13:23

                      Au niveau du moteur 3D ? Deferred Shading, Occlusion Culling, Scene Manager, ...

                      Je dois avouer que ta question est un peu vague ^^
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                        4 mai 2012 à 20:17:44

                        Citation : Lynix

                        Au niveau du moteur 3D ? Deferred Shading, Occlusion Culling, Scene Manager, ...

                        Je dois avouer que ta question est un peu vague ^^


                        Oui par exemple quand tu dis scene Manager pourrais le développer ? Quels technique tu pense employer pour l'occlusion culling et le manager de Scéne.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 mai 2012 à 20:34:27

                          Pour le culling, je pense proposer :
                          -L'occlusion culling (Je lis un document sur le Coherent Hierarchical Culling actuellement)
                          -L'octree culling
                          -Le frustrum culling

                          Le but n'est pas d'utiliser les trois en même temps, mais de les proposer, et de laisser l'utilisateur choisir ce qu'il pense le plus adapté pour la scène :)

                          Si tu as des propositions n'hésite pas
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                            4 mai 2012 à 20:44:40

                            Citation : Lynix

                            -L'occlusion culling (Je lis un document sur le Coherent Hierarchical Culling actuellement)


                            Pourrais tu donner un lien vers le papier ? Je suis intéresser.

                            Citation : Lynix

                            Si tu as des propositions n'hésite pas


                            Ah

                            http://http.developer.nvidia.com/GPUGe [...] ems_ch29.html
                            http://http.developer.nvidia.com/GPUGe [...] hapter06.html
                            http://rastergrid.com/blog/2010/10/hie [...] sion-culling/
                            http://kriscg.blogspot.fr/2010/09/soft [...] -culling.html
                            http://www.nickdarnell.com/2010/06/hie [...] sion-culling/

                            Pour le dernier parcours un peu son blog, il y a pleins d'autre article intéréssant: http://www.nickdarnell.com/
                            • Partager sur Facebook
                            • Partager sur Twitter
                              5 mai 2012 à 12:39:41

                              Pour revenir sur cette idée, j'avoue être personnellement plus favorable à un espace de nom qu'un préfixe, notamment parce que les espaces de nom sont une nouveauté assez plaisante visuellement.

                              Pour le nombre de caractères, using namespace Nz; est une possibilité de réduction du nombre de caractères utilisés ;) !

                              Sinon, très bon projet, je vais suivre son évolution avec intérêt !
                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 mai 2012 à 14:18:24

                                Les espaces de nom permettent aussi de bien diviser le code...
                                Ainsi, si tu créer un fichier d'entête qui inclu tous les autres, les personnes pourront savoir de quelle partie de ton moteur fait parti NzString et on pourra choisir d'utiliser ou pas les espace de nom.
                                En plus, cela permet de diminuer le nombre de fichier à inclure lorsque l'on utilise ton moteur...
                                • Partager sur Facebook
                                • Partager sur Twitter
                                L'être humain, contrairement aux geeks qui ne sont de toute façon pas des êtres humains, est un animal social taillé pour vivre en "meute".
                                  5 mai 2012 à 14:40:05

                                  Citation : Pampattitude

                                  Pour revenir sur cette idée, j'avoue être personnellement plus favorable à un espace de nom qu'un préfixe, notamment parce que les espaces de nom sont une nouveauté assez plaisante visuellement.

                                  Pour le nombre de caractères, using namespace Nz; est une possibilité de réduction du nombre de caractères utilisés ;) !

                                  Sinon, très bon projet, je vais suivre son évolution avec intérêt !



                                  Si le seul objectif des espace de noms est de les enlever, ils ne servent à rien, et si on le garde, alors ça fait pas mal de caractères en plus.

                                  J'utilisais les espaces de noms avec l'Ungine et franchement je préfère un préfixe de deux lettres, c'est plus clair je trouve. :)

                                  Chacun ses goûts, mais je doute que ça soit très gênant, on s'y fait vite ;)

                                  Citation : charlesfire

                                  Les espaces de nom permettent aussi de bien diviser le code...
                                  Ainsi, si tu créer un fichier d'entête qui inclu tous les autres, les personnes pourront savoir de quelle partie de ton moteur fait parti NzString et on pourra choisir d'utiliser ou pas les espace de nom.
                                  En plus, cela permet de diminuer le nombre de fichier à inclure lorsque l'on utilise ton moteur...



                                  Je trouve personnellement Nz::Core::String affreux comme manière d'écrire les choses, mais de toute façon l'utilisateur est censé savoir de quelle partie vient telle classe, il y a généralement peu d’ambiguïtés de ce côté. :)

                                  Je n'ai pas compris par contre au niveau des fichiers à inclure, il est prévu de faire des includes "globaux" à la Qt (Qui utilise par ailleurs un préfixe) :
                                  #include <Nazara/Core.hpp>
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                                    5 mai 2012 à 15:00:13

                                    Pourra-t-on utiliser un seul fichier pour tous les inclures?¿?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    L'être humain, contrairement aux geeks qui ne sont de toute façon pas des êtres humains, est un animal social taillé pour vivre en "meute".
                                      5 mai 2012 à 19:45:04

                                      Pour inclure tous les fichiers d'un module oui, comme je viens de le dire :)

                                      Après un seul fichier pour inclure tous les modules ne sert à rien, si on a besoin de tous les modules dans un seul fichier c'est qu'on a, à mon avis, un problème d'architecture.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                                        11 mai 2012 à 13:58:42

                                        Nazara supporte maintenant les algorithmes de hachage SHA-1 et SHA-2 (224, 256, 384 et 512) :)

                                        https://github.com/DigitalPulseSoftwar [...] 8b517f56d34b5

                                        Il y a aussi quelques corrections au niveau du thread-safety, qui fonctionne correctement maintenant pour le noyau :)

                                        Je travaille sur les images actuellement avec leur chargement, pour ensuite ajouter les textures et le chargement des meshs, pour enfin avoir un véritable rendu :)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                                          21 mai 2012 à 22:00:18

                                          Une grosse mise à jour du moteur, il supporte maintenant les images et peut charger les formats bmp, gif, hdr, jpg, jpeg, pic, png, psd, tga :)

                                          Beaucoup de choses ont bougées par ce commit, la liste complète ici :
                                          https://github.com/DigitalPulseSoftwar [...] 147671a2714e5

                                          Prochaine étape : les textures et les meshes :)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                                            22 mai 2012 à 0:51:53

                                            je vais suivre ça de près ;)

                                            bon courage :)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              24 mai 2012 à 15:12:39

                                              Je serais interessé par une version Unix :(
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter - Edsger Dijkstra
                                                24 mai 2012 à 18:59:42

                                                Moi aussi, mais j'ai besoin d'un développeur pour faire le portage (Il n'y a pas grand chose à faire, mais je n'ai aucune expérience là-dedans...)

                                                Un nouveau commit qui ajoute la conversion entre les formats de pixels (Et une nouvelle nomenclature pour les formats)

                                                https://github.com/DigitalPulseSoftwar [...] 8fea7730b3350
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                                                  24 mai 2012 à 19:29:47

                                                  Tous mes voeux de réussite,je suis justement dans un projet similaire actuellement,sans être un moteur de jeu,je créé un moteur 3D.Comme toi il y a deux ans,c'est dans un but pédagogique,et je rencontre souvent des difficultés qu'il faut surmonter,et cela permet d'apprendre énormément de choses.

                                                  Bonne chance :D
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    24 mai 2012 à 19:56:28

                                                    Je suivais Ungine et je n'en démordrais pas je suivrais encore Nazara :)
                                                    Bonne chance cette fois ci sa sera la bonne :)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      24 mai 2012 à 22:33:44

                                                      Citation : Lynix

                                                      (Il n'y a pas grand chose à faire, mais je n'ai aucune expérience là-dedans...)



                                                      Il y aurait quoi à faire précisément ? Connaître la libX et adapter ton code ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter - Edsger Dijkstra
                                                        25 mai 2012 à 0:12:44

                                                        Bas franchement félicitation ! Justement moi qui chercher un Moteur de jeu, j'espere avoir trouver le bon :)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          25 mai 2012 à 10:51:20

                                                          Citation : damjuve

                                                          Citation : Lynix

                                                          (Il n'y a pas grand chose à faire, mais je n'ai aucune expérience là-dedans...)



                                                          Il y aurait quoi à faire précisément ? Connaître la libX et adapter ton code ?



                                                          Il faut gérer (Noyau):
                                                          -Dossiers et fichiers (Chemins Unicode et taille de 64bits)
                                                          -Threads, mutex, sémaphores (pthread, rien de bien compliqué)
                                                          -Les bibliothèques dynamiques

                                                          Je peux me charger des deux derniers, sans pouvoir tester

                                                          Il y a aussi le module Utility
                                                          -Xlib (Gestion de fenêtres, d'évenements et de modes vidéos)

                                                          Module Renderer:
                                                          -OpenGL (Gestion de contextes OpenGL, rien de bien compliqué ;) )

                                                          Les implémentations système sont séparées en terme de fichiers du reste du moteur, il n'y a donc pas besoin de changer mon code :) (Mais tu peux reprendre l'implémentation windows pour t'inspirer)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
                                                            27 mai 2012 à 18:28:27

                                                            Salut !

                                                            Je trouve que c'est une super idée de vouloir faire de son moteur de jeu, un programme libre. J'ai moi aussi un moteur de jeu (opengl et donc multiplateforme) en construction, qui adopte cette même philosophie et aussi hébergé sur github, bien que je n'ai pas mis à jour mon git depuis deux mois. Personnellement je suis motivé par le fait qu'il faut que Windows ne soit pas la seule plateforme (pour ordinateur) dédiée aux jeux-vidéos.

                                                            Par contre je demandais ; tu as l'intention de supporter quel(s) formats de modèles 3D (COLLADA, OBJ, MD5, CAL3D, ...) ?

                                                            Sinon bon courage pour la suite. Je continuerai de suivre ce projet de près.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            [Moteur de jeu] Nazara Engine

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            • Editeur
                                                            • Markdown