Partage

[Moteur de jeu] Ungine

Moteur complet et puissant

21 juillet 2010 à 0:48:34

l'Ungine a été remplacé par Nazara


Image utilisateur


Bonjour,

Je m'appelle Jérôme(Lynix), j'ai 17 ans et je programme depuis tout jeune. Mes capacités vont du C/C++/PHP/Lua (Maitrisés) au xHTML/CSS/Javascript/SQL/VB (Maniés).

Il y a presque deux ans, je me suis lancé dans la création de mon propre jeu, mais les moteurs que j'ai testé (OGRE, Irrlicht) ne me convenaient pas, j'ai alors décidé de me lancer dans la création de mon propre moteur de jeu.

l'Ungine



C'est un moteur dont le but est d'être puissant, complet, rapide et facile à utiliser (Interface utilisateur).
Il dispose de classes haut-niveau qui permettent à l'utilisateur de faire des choses très facilement, par exemple charger un modèle depuis un fichier ne prend qu'une ligne, l'Ungine se chargeant même de trouver la texture tout seul si vous lui demandez.
Mais cette interface haut-niveau est basée sur des interfaces de niveau de plus en plus faible, permettant à l'utilisateur d'avoir un accès bas-niveau si besoin est.

L'Ungine est séparé en modules, dont le moteur 2D, le moteur 3D, le Renderer, le moteur physique, le moteur réseau, le moteur audio.

Sans oublier que l'Ungine propose aussi un module pour le scripting en Lua, très facile à utiliser.

Le noyau est ce qui est le plus abouti pour l'instant, je travaille en ce moment sur le moteur 3D et le Renderer.

Voici une liste non-exhaustive des fonctionnalités, ce qui est en vert est implanté et fonctionne parfaitement, ce qui est en orange est implanté mais fonctionne mal ou est en cours d'implantation, ce qui est en rouge n'est pas encore implanté

  • Moteur entier :
    • Portable (Windows, Linux, MacOS)
    • Thread-safe
    • MemoryManager actif en Debug Mode (Loggant chaque leak)
  • Noyau :
    • Gestion de chaine de caractère surpassant en fonctionnalités et en vitesse d'exécution la std::string
    • Gestion des fichiers et des dossiers
    • Gestion des hashs (CRC16, CRC32, MD5, SHA1, SHA256, SHA512, Whirlpool)
    • Gestion du fenêtrage et des évènements
    • Outil mathématique complet et puissant (Matrices 3x3, 4x4, *x*, Quaternions, Vecteur 2D, Vecteur 3D, Vecteur 4D)
    • Gestion des maillages 3D statiques et animés
    • Gestion des textures
    • Gestion du son
    • Gestion avancé des ressources (ResourceManager) avec loaders
    • Loaders de base (Formats supportés)
      • Modèles 3D : obj, md2
      • Images : bmp, jpg, jpeg, pcx, png, tga
      • Matériaux : mtl
      • Sons : ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5, pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64
      • Polices de caractère : ttf, cff, pcf, fnt, bdf, pfr, sfnt, type 1, type 42
    • Gestion du temps, des threads, des mutex
    • Gestion des angles en degrés et en radians
    • Gestion du boutisme (Détection + permutation des octets)
    • Benchmarks (Supportés par une classe automatisant les tests et calculant le nombre d'itérations nécessaire)
    • Gestion des plugins
    • Logs
    • Support des entités (Réunion des modèles du moteur 3D et des entités physiques)
    • Méthodes pour les maillages 3D (Génération automatique du LOD, génération automatique des normales, plaquage de texture, etc)
    • Support des textures animées (Vidéo par exemple)
    • Support de langages de scripts
    • Support de l'Unicode
  • Module graphique (Ungine OpenGL Graphics Module):
    • Affichage d'un Mesh normal (Vertex Arrays)
    • Gestion des index et pixel buffers ainsi que des déclarations
    • Support des textures
    • Support du multi-texturing
    • Support des shaders GLSLet Cg
    • Support du stencil buffer
    • Support du rendu sur image
    • Mipmapping
    • Support de la transparence
    • Support des modèles (Réunion d'un matériau et d'un maillage 3D)
    • Support du projective texturing (Texture projetée)
    • Support des ombres dynamiques
    • Support des ombres statiques
    • Organisation de la scène
    • Support des billboards
    • Support des backgrounds
    • Support du Bump Mapping
    • Support du Parallax Mapping
    • Support du deferred shading (Éclairage)
    • Support du per-pixel-lighting (Éclairage)
    • Moteur de particule (SPARK)
    • Système de vues
    • Affichage de chaines de caractère
    • Sprites
    • Gestion d'une GUI
  • Physique (Newton Game Dynamics) :
    • Gestion de plusieurs simulations
    • Choix du résolveur réaliste ou rapide
    • Gestion de matériaux (Définissant certains paramètres comme le coefficient de rebondissement, etc...)
    • Gestion de formes basiques (Cube, sphère, capsule, cylindre, heightfield)
    • Gestion de formes convexe
    • Gestion de formes non-convexe (Assemblage de formes convexes)
    • Lancer de rayons (Aussi appellé trace ou ray)
    • Gestion de la masse et de l'inertie
    • Gestion d'entités physique (Combinaison d'une forme et d'un objet mouvant
  • Audio (Ungine OpenAL Audio Wrapper) :
    • Utilisation de l'accélération matérielle si disponible
    • Spatialisation du son en 3D
    • Capture audio
    • Streaming
  • Réseau (Ungine TCP/UDP Network Module) :
    • Gestion de sockets TCP et UDP
    • Gestion de sélecteurs
    • Architecture réseau client/serveur
    • Gestion de packets via les opérateurs de flux

Il y a beaucoup de rouge, c'est vrai, mais tout ce qui n'est pas graphique n'est qu'un wrapper a écrire, l'implémentation du moteur physique entier s'est faite très rapidement par exemple, le moteur en lui-même était déjà écrit, cela vaut aussi pour l'audio et le réseau.

J'utilise le code source de la SFML 2, de tous les modules sauf le module graphique, il ne faut pas oublier Laurent Gomila pour son excellent travail.

Je n'ai pas encore décidé sous quelle licence j'allais distribuer mon moteur, mais il sera open-source.

L'objectif de l'Ungine est de simplifier la vie des programmeurs en donnant un accès haut-niveau à tous les modules, tout en gardant la possibilité d'utiliser du bas-niveau.
J'espère ainsi faire plaisir à tout le monde.

J'aimerais savoir si vous êtes intéressé par le projet.

Démos technique


Je sors des démo techniques montrant les capacités naissantes de l'Ungine.
La première démo technique montre le moteur fonctionnel et le Renderer, elle est disponible ici : http://forum.utopia-universe.net/viewtopic.php?f=11&t=58

Screens (Issus de la première démo technique et de quelques tests en interne) :
Image utilisateur
Image utilisateur
Image utilisateur
Image utilisateur
Image utilisateur
Image utilisateur
Image utilisateur

Le reste



Quelques liens :
Le site de mon jeu
La première démo technique de l'Ungine
Le site de la SFML

Voila voila :)
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
25 juillet 2010 à 16:35:29

Tu ferais mieux de mettre de couleur différente au lieu de souligné, ce serait beaucoup plus lisible, là faut faire gaffe si c'est en italique ou pas ..
25 juillet 2010 à 16:53:01

Fait :)
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
25 juillet 2010 à 17:33:57

Bon ben, toujours au top à ce que je vois ;) .
C'est une très bonne idée d'avoir fait ce post, comme ça on peut savoir où en est le moteur et les fonctionnalités qu'il compte avoir.

Bonne continuation :) !

25 juillet 2010 à 18:43:08

Ton moteur à l'air très intéressant ;) .

Les sources sont-elles déjà en ligne ou pas? Vu que tu n'as pas encore choisi la licence ça m'étonnerait mais on s'est jamais :p .

Je suivrais en tout cas ton projet de prêt :D .
Bonne continuation.
26 juillet 2010 à 0:55:58

Salut,
Wahou, 17 ans dis-tu ?
Ca a l'air très intéressant, et surtout réfléchi.
J'aurais bien apprécié quelques screens de rendu (je suis allé jeter un oeil sur ton site, mais honnêtement la police bleue-marine sur un fond noir, ça pique les yeux, surtout quand on switch avec le SdZ qui est blanc).
Bonne continuation, sincèrement.

[EDIT] Si c'est portable sur Linux, faut simplement faire gaffe à n'utiliser que des systèmes IPC/protocoles UNIX, et hop, ça devient portable sur Mac.
NON il n'y a pas que PHP côté serveur. Ruby, Python, JS, C++, et tellement d'autres
26 juillet 2010 à 1:26:43

En rendu on a une application qui affiche le nombre d'fps suite à l'affichage d'un vaisseau (on peut se déplacer le voir de près ...).
26 juillet 2010 à 1:42:06

17 ans ! Chapeau ;)

Ca fait combien de temps exactement (enfin en gros quoi) que tu programmes ?
26 juillet 2010 à 8:51:15

Normal qu'aucun des liens ne marche ?
Directeur technique, créateur de jeux HTML5 et fan de JavaScript | La suite de OnHack est sur les rails !
26 juillet 2010 à 12:52:03

Citation : skynet1994

Les sources sont-elles déjà en ligne ou pas? Vu que tu n'as pas encore choisi la licence ça m'étonnerait mais on s'est jamais :p .


Les sources sont sur un SVN auquel danman et moi avons accès, je ne sais pas encore quand est-ce que je vais le rendre public, mais il me faudrait choisir une licence avant ça justement.

Citation : uaip

J'aurais bien apprécié quelques screens de rendu


Il y en a, il y a même une première démo technique mais ça ne montre pas grand chose, enfin je vais mettre des images en rentrant chez moi ce soir

Citation : uaip

je suis allé jeter un oeil sur ton site, mais honnêtement la police bleue-marine sur un fond noir, ça pique les yeux, surtout quand on switch avec le SdZ qui est blanc



Oui c'est vrai que les couleurs sont à l'opposé du site du zéro, mais pour un site d'un jeu orienté sur l'espace, je pense que les couleurs sombres sont les seules qui peuvent donner quelque chose de bien :)

Quant au logo de l'Ungine, c'est vrai que il n'y a pas de raison de préférer une certaine couleur, je préfère personnellement ce qui est soft, on pourrait voir pour un logo transparent, enfin c'est pas le plus important non plus :p

Citation : uaip

Si c'est portable sur Linux, faut simplement faire gaffe à n'utiliser que des systèmes IPC/protocoles UNIX, et hop, ça devient portable sur Mac.



Malheureusement il n'y a pas que ça, il y a aussi OpenGL, et pour le rendu sur image il y a aussi besoin d'une technique différente sous Linux et MacOS.

Citation : petitfou

17 ans ! Chapeau ;)

Ca fait combien de temps exactement (enfin en gros quoi) que tu programmes ?



Ça fait plus de 7 ans ;)

Citation : Shivaan

Normal qu'aucun des liens ne marche ?



Je viens de les essayer, ils fonctionnent tous, peut-être un souci de DNS?
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
1 août 2010 à 19:19:45

Salut,

Pourrais-tu nous montrer des screens de ton moteur. Peut-être pas tout de suite mais quand tu feras des nouvelles choses nous les présentaient.
Je sais que là il y a la démo mais des screens seraient tout aussi bien ;) .
1 août 2010 à 19:40:05

+1 pour les screens !
Etant sous Linux, j'aimerais voir à quoi ça ressemble. :)
10 août 2010 à 15:58:25

Et voila, je viens de terminer d'implanter le moteur physique dans l'Ungine.

Il me reste encore à implanter le début du moteur 2D et les buffers avant de faire les deux démo techniques (Une pour le moteur 3D, une pour le moteur physique).

Pour les intéressés, l'Ungine fait actuellement 29 502 lignes de code (21604 lignes remplies, le reste est constitué de commentaires ou d'espaces blancs).

Je vais mettre à jour le premier post avec des screens de la première démo technique, en attendant les deux suivantes.
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
19 septembre 2010 à 19:28:54

Après trois jours de travail, j'ai enfin pu intégrer l’Unicode dans l'Ungine.

Ceci grâce à une nouvelle classe Ungine::UnicodeString fonctionnant comme l'Ungine::String, excepté que elle peut gérer l'Unicode, et par conséquent prend plus de place en mémoire.

Cependant les algorithmes sont les mêmes, mais appeler la version Unicode avec un const char* en paramètre est bien plus lent qu'avec la version normale.

Voici un benchmark résumant la situation (Généré par ma classe Ungine::Benchmark) :

Image utilisateur

Pour les curieux, voici le code source du projet de Benchmark :
#include <Ungine/Benchmark.h>
#include <Ungine/String.h>
#include <Ungine/UnicodeString.h>
#include <iostream>
#include <string>

std::string str = "Bonjour le monde";
std::string str2 = "monde";
Ungine::String ustr = "Bonjour le monde";
Ungine::String ustr2 = "monde";
Ungine::UnicodeString unistr = "Bonjour le monde";
Ungine::UnicodeString unistr2 = "monde";

const char* str3 = "monde";

void Test1()
{
	str.find(str2);
}

void Test2()
{
	ustr.Find(ustr2);
}

void Test3()
{
	unistr.Find(unistr2);
}

void Test4()
{
	str.find(str3);
}

void Test5()
{
	ustr.Find(str3);
}

void Test6()
{
	unistr.Find(str3);
}

int main()
{
	Ungine::Benchmark bench("Benchmark Find");
	bench.AddTest(Test1, "std::string::find(const std::string&)");
	bench.AddTest(Test2, "Ungine::String::Find(const Ungine::String&)");
	bench.AddTest(Test3, "Ungine::UnicodeString::Find(const Ungine::UnicodeString&)");
	bench.AddTest(Test4, "std::string::find(const char*)");
	bench.AddTest(Test5, "Ungine::String::Find(const char*)");
	bench.AddTest(Test6, "Ungine::UnicodeString::Find(const char*)");
	bench.Launch();
	std::cout << bench << std::endl;
	return 0;
}
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
Anonyme
19 septembre 2010 à 20:41:29

Ca plante au chargement ...
19 septembre 2010 à 20:43:11

Qu'est-ce qui plante au chargement?
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
Anonyme
19 septembre 2010 à 20:46:48

Il plante quand il charge voyager.mtl, la fenêtre s'ouvre et une autre fenêtre où il dit le programme à cessé de fonctionner.

Signature du problème :
  Nom d’événement de problème:    APPCRASH
  Nom de l’application:    TestUngine.exe
  Version de l’application:    0.0.0.0
  Horodatage de l'application:    4bee74ce
  Nom du module par défaut:    StackHash_9446
  Version du module par défaut:    0.0.0.0
  Horodateur du module par défaut:    00000000
  Code de l’exception:    c0000005
  Décalage de l’exception:    00000000
  Version du système:    6.0.6002.2.2.0.768.3
  Identificateur de paramètres régionaux:    1036
  Information supplémentaire n° 1:    9446
  Information supplémentaire n° 2:    f11091cb6c31bd60085c581bbfe8ca63
  Information supplémentaire n° 3:    1241
  Information supplémentaire n° 4:    88dc83b66b18bc23e9cd816dba661cd6

Lire notre déclaration de confidentialité :
  http://go.microsoft.com/fwlink/?linkid=50163&clcid=0x040c
19 septembre 2010 à 20:50:26

Ah d'accord, c'est de la première démo technique que tu parles.

C'est un bug connu et corrigé depuis quelques mois maintenant, le crash se produit à la fermeture du programme pour la plupart mais pour certains c'est au démarrage comme dans ton cas.

Je n'ai pas pensé à remettre une version exempte de bug, étant donné que je fais mon possible pour sortir la seconde démo technique la semaine qui vient.

J'essayerais de penser à refaire la première démo technique avec le moteur actuel afin de corriger ce crash.
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
6 octobre 2010 à 18:49:30

Une petite image en provenance de la démo technique #2

Image utilisateur

J'en ai aussi profité pour changer un peu le logo, il est maintenant sur fond transparent :)

Il ne me reste pas grand chose à faire pour sortir la démo technique #2, un peu de patience :)
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
6 octobre 2010 à 21:43:49

Eh ben dis donc ! Bravo !
Sinon, il y a moins de rouge qu'au début, c'est plutot bien.
En core bravo.
15 octobre 2010 à 23:10:52

Sortie de la seconde démo technique de l'Ungine :
http://forum.utopia-universe.net/viewtopic.php?f=11&t=70

Les résultats de benchmark sont intéressants, n'hésitez pas à les distribuer. :)
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
17 octobre 2010 à 12:48:18

Image utilisateur
Processeur Intel® Core™ i7-740QM
Vitesse du processeur (GHz) : 1,73
8 GO Mémoire vive
Processeur graphique NVIDIA® GeForce® 330M GT (1GO)
17 octobre 2010 à 12:59:54

Tu as un fichier benchmark.txt qui reprend ces informations :)
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
17 octobre 2010 à 13:18:45

Salut,

J'ai posté mon poste à l'arrache avant de manger.
En effet, c'est beaucoup plus simple :

Citation : Ungine


Démo technique de l'Ungine #2 : Résultats du benchmark
Carte graphique : GeForce GT 330M/PCI/SSE2
Module graphique : Ungine Renderer Module (0.0.434 - OpenGL 3.1 NVIDIA 189.25)

Test n°1 - Modèles - Score : 51782
Test n°2 - Shaders - Score : 15176
Test n°3 - Textures - Score : 9862
Test n°4 - Masques (Stencil) - Score : 20817

Score global : 97637



C'est bien ce score ? ^^ (ça à l'air moyen...)
17 octobre 2010 à 13:36:40

C'est un score moyen, il y a mieux et pire.

Le record est actuellement 521 135 détenu par Zlatows, un belge (L'honneur est sauf :D , vive la belgique)
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
Anonyme
24 octobre 2010 à 20:47:41

Y a un lien vers ça sur le site ?
24 octobre 2010 à 20:48:36

Un lien vers quoi?
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
Anonyme
24 octobre 2010 à 20:52:29

Non, il n'y a pas de site pour parler de l'Ungine et quand il y en aura un, ce sera le sujet qui donnera un lien pour le site :)
Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)
Anonyme
24 octobre 2010 à 21:15:49

Je disais que ça pouvait être intéressant de poster sur utopia-universe.net car tant que l'Ungine ne sera pas fini, le jeu non plus et que cela peut donner matière à patienter :)

[Moteur de jeu] Ungine

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
  • Editeur
  • Markdown