Partage

[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

Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
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 ! ^^
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 ;)
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 !
3 mai 2012 à 19:57:33

Bonne chance avec ce nouveau moteur. :)
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 :)
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
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...
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
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
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 ?
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 ^^
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
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.
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
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
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/
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 !
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...
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>
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
5 mai 2012 à 15:00:13

Pourra-t-on utiliser un seul fichier pour tous les inclures?¿?
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.
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
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 :)
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
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 :)
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
22 mai 2012 à 0:51:53

je vais suivre ça de près ;)

bon courage :)
24 mai 2012 à 15:12:39

Je serais interessé par une version Unix :(
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
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
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
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 :)
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 ?
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 :)
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)
Nazara Engine (Moteur de jeu C++14 libre) - Groupe #42 (Chat de développeurs)
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.

[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