Nazara Engine

Moteur de jeu libre en C++14

a marqué ce sujet comme résolu.

Salut tout le monde !

Alors, ça faisait longtemps, j'ai pas mal de choses à vous annoncer !

Tout d'abord, petite liste des nouveautés:

Ça ressemble à ceci:

1
2
3
4
5
Nz::EventHandler& eventHandler = window.GetEventHandler();
eventHandler.OnKeyPressed.Connect([](Nz::EventHandler*, const WindowEvent::KeyEvent&)
{
    // Action en cas d'appui sur une touche
});

La boucle événementielle de la fenêtre est donc maintenant gérée directement par l'application, et de plus la fenêtre se ferme maintenant toute seule par défaut lorsque le système lui demande (cela comprend la fermeture par la croix en haut à droite sous Windows).

Désolé pour le gros bloc de texte indigeste, mais je vous avais promis du progrès !

Viennent ensuite d'autres changements qui ne touchent pas directement au code:

Tout d'abord dans un avenir proche je pense intégrer (enfin) le PBR dans Nazara, ainsi que d'autres améliorations graphiques (dont une presque terminée que je vous laisserai en aperçu à la fin de ce message).

Une autre nouvelle, concernant le logo vieillissant, celui-ci va être changé, pour l'instant j'hésite sur deux variations que voici:

Image utilisateur

Image utilisateur

Personnellement je préfère les traits du premier mais votre avis m'intéresse :)

Merci d'avoir lu jusqu'au bout !

Démonstration du compteur de FPS, entre autres

+18 -0

Au fait, juste comme ça, si tu veux un logo tu peux demander en issue sur ton projet et la faire tourner, ça peut faire un challenge graphique amusant pour beaucoup de monde ! (et t'auras un logo avec une vraie histoire et tout ! x))

+1 -0

Petite préférence pour le 1er logo également, avec peut-être un peu plus d'espace entre les lignes pour le "N". Je trouve pas d'identité visuelle parlante dans le deuxième logo… Même si c'est vrai qu'il est plus lisible à première vue. Pour autant, je ne suis pas certain qu'il soit identifiable sur le long terme.

Les traits (notamment sur le "Z") donnent un réel attrait pour les yeux sur le texte du logo, donc le fait qu'il soit moins lisible n'est pas gênant en soit :)

Merci pour vos avis sur le logo, mon ami graphiste et moi-même allons en tenir compte ! :)

Dans la foulée, je voudrais effectuer un petit sondage, je pense qu'un frein dans l'utilisation du moteur (mis à part le fait qu'il n'ait pas de version stable) est le besoin de le compiler, et je pensais donc commencer à distribuer des binaires précompilés pour Windows (pour Visual Studio 2015 et MinGW, en 32 et 64 bits), et dans la foulée commencer à le versionner.

Je voudrais donc savoir si ça vous intéresse, de façon plus large: est-ce que des précompilés du moteur vous inciteraient à l'utiliser ? Mettez un +1 sur le message si oui, ça me permettra de mesurer l'impact d'une telle décision (désolé pour le côté putalike de ce message !).

Merci à vous !

+11 -0

Je ne met pas un +1 parce que linux, mais ça me parait une très bonne idée si tu comptes rendre plus accessible l'utilisation de ton moteur. Ca permet de mettre en place un environnement pour tester le moteur sans se soucier du moteur en lui-même.

+1

Si tel est ton choix, je pourrais également faire des paquets pour les distributions linux les plus importantes (hum, archlinux, par exemple).

Si tel est ton choix, je pourrais également faire des paquets pour les distributions linux les plus importantes.

Pour ça, j'ai entendu du bien de OpenBuildService, qui permet de gérer des paquets pour Debian, Fedora, OpenSuse, Archilinux et Ubuntu d'un coup1. Ça permet d'avoir un gros paquet de distribution sans trop de problème. Après, je n'ai jamais utilisé moi-même.

Pour ma part, maintenant que j'ai réussi à le compiler, ça ne m’apporterait plus trop de chose d'avoir des binaires pour pouvoir l'essayer sérieusement (il faut juste que je prenne le temps). Par contre, si un jour je souhaite distribuer un programme avec Nazara, ce serait un vrai plus (car dans ce cas, il faudra créer des binaires de toute façon, et je préfère que ce soit déjà fait proprement à ce moment là :-° ).


  1. Et je ne dis pas ça parce que j'utilise OpenSuse. Du tout. 

+1 -0

Hello !

Aujourd'hui sort la première version du moteur, j'ai nommé la version 0.1.0, disponible avec des précompilés pour Windows !

Cette première version va apporter quelques bénéfiques changement par rapport au cycle de développement:

  • Tout d'abord la mise à disposition de précompilés, vous avez été nombreux à montrer que cela vous intéresserait, et c'est maintenant chose faite. :magicien:
  • Ensuite de véritables changelog, dernièrement je n'ai fait que poster toutes les deux à trois semaines la liste des changements intéressants, en passant des changements mineurs du point de vue de l'utilisateur mais parfois essentiel du point de vue du développeur (un changement d'interface par exemple).
  • La mise à disposition de nightlies: depuis peu le moteur dispose d'intégrations continue via AppVeyor et Travis CI, ces deux services compilent le moteur à chaque push, exécute(ront) les tests unitaires et mettent les binaires compilés à disposition pour le téléchargement.
  • Dernier changement et le plus important: le moteur va enfin être utilisé par quelques-un d'entre vous (du moins j'espère :D ).

Quelques questions éventuelles que vous pouvez vous poser (et leurs réponses):

  1. Pourquoi une version 0.1 et pas 1.0 ?
    Parce que malgré toutes ces années de développement, le moteur ne répond pas encore à mes critères pour une version stable, qui sont que chaque système majeur fonctionne et ait été testé par suffisamment d'entre-vous.
    De plus, n'étant pas encore certain du système que je vais adopter pour les versions, je préfère tester avec une version beta.
  2. Quel système pour les versions ?
    Le système bien courant major.minor.patch va être utilisé, où major représente le numéro de version majeur, qui ne change qu'en cas de gros changement cassant complètement la compatibilité de l'API.
    Le numéro de version mineur pourra changer pour deux raisons, en cas d'ajout de fonctionnalité suffisamment importante ou en cas de changement d'API existant (en faisant en sorte de respecter la compatibilité le plus possible).
    Quant au numéro de patch, il augmentera avec chaque modification mineure (le plus souvent des corrections de bug ou l'ajout de fonctionnalités mineures), il est remis à zéro en cas de changement de version mineure.
    Un système bien classique en somme :)
  3. Des paquets prévus pour Linux ?
    J'adorerai en faire, mais je ne suis pas certain que ça soit une excellente idée pour l'instant, le moteur risquant de voir de nombreuses corrections arriver prochainement. N'hésitez pas à me faire remarquer si je me trompe.

Voici maintenant le dernier changelog à l'ancienne, dont les changements font partie de la version 0.1:

  • Le moteur propose maintenant l'allocation sur la pile (alloca). : Très utile lorsque vous avez un espace de taille relativement faible mais connu seulement à l'exécution, je ne recommande cependant pas son utilisation dans la vie de tous les jours (alloca étant connu pour être désastreux lorsque mal utilisé, et le site StackOverflow n'a pas ce nom pour rien :D ), si alloca n'est pas supporté alors une allocation sur le tas est employée.
  • Les tilesmap supportent maintenant les maps isométriques - L'affichage de maps isométriques est une feature demandée par un utilisateur, pouvant donner des résultats intéressants. Exemple de ce que ça peut afficher.
  • La classe SocketPoller a été ajoutée, cette classe était assez attendue côté réseau, elle vous permet par exemple de faire attendre un serveur sur plusieurs sockets en attendant que des données soient reçues, de plus je l'ai implémenté avec WSAPoll sous Windows (si l'option NT6 est active, ce qui casse la compatibilité avec Windows XP, select sinon), epoll() sous Linux et poll() sous les autres, ce qui autorise de très bonnes performances sans limitation du nombre de sockets attendues (un des gros problème de l'implémentation traditionnelle).
  • Les tests unitaires ont été corrigés, ils devraient fonctionner correctement maintenant (je vais en faire une version serveur pour qu'AppVeyor et Travis CI les exécute en fin de build).
  • Le loader OBJ ne va plus perdre son temps à essayer de décoder des fichiers sans aucun token obj, jusqu'ici lorsque le loader OBJ était confronté à un flux, il tentait de décoder le fichier OBJ en émettant une erreur à chaque ligne qu'il ne pouvait pas décoder (jusqu'à arrêter le chargement si le taux d'erreur est trop élevé). Ce comportement est corrigé, le loader va maintenant essayer de trouver au moins une directive OBJ dans les vingt premières lignes n'étant pas des commentaires avant d'abandonner silencieusement.
  • Le premake propose maintenant une option de packaging, vous permettant de compiler le moteur vous-même, d'exécuter l'action et d'obtenir un dossier package/ avec tous les fichiers intéressants placés aux bons endroits, très utile pour générer les nightlies ou compiler des précompilés à redistribuer aux autres :)
  • J'ai recompilé Newton avec le flag /MT, un problème rencontré par les utilisateurs de MinGW était que Nazara nécessitait quand même le runtime de Visual Studio à cause de cette dépendance.

Toutes mes autres contributions concernent la mise en place de Travis CI, et AppVeyor.

Quelques liens utiles:

  • Le wiki, plusieurs utilisateurs du moteur ont créé des pages pouvant vous aider avec la suite du tutoriel que j'ai commencé à écrire :)
  • La documentation, presque complète et suffisante pour les nouveaux utilisateurs, que demander de plus ?
  • Groupe #42, il s'agit d'un Mattermost, un genre de chat en temps réel qui, bien qu'il ne soit pas dédié entièrement à Nazara (il y a un canal pour ça), peut vous être très utile, j'y suis très souvent et je peux vous donner un coup de main (que votre problème soit sur Nazara ou sur du C++ en général).

Et pour finir:

Nazara Engine - Release 0.1.0

N'hésitez pas à me faire part des problèmes que vous rencontrez !

+14 -0

Youhou !

Petite question : Il y aurait pas un petit projet communautaire autour de ce moteur ?

J'aimerai me remettre au c++, et bosser avec d'autre sur un petit projet ce serait sympa :) Bosser sur le moteur en lui-même me semble un peu complexe, mais si du fait de la release, yen a plusieurs qui sont motivés pour se lancer, ça pourrait être sympa :)

Non, ce n'est pas si compliqué, il faut juste utiliser les primitives, imaginons qu'on veuille faire un pavé droit de 300x400x100 :

1
2
3
4
Nz::MeshRef mesh = Nz::Mesh::New();
mesh->BuildSubMesh(Nz::Primitive::Box(Nz::Vector3f(300.f, 400.f, 100.f));
Nz::ModelRef model = Nz::Model::New();
model->SetMesh(mesh);

Reste plus qu'à attacher le model à l'entité et voilà !
Bon, par contre, il sera affiché en "fil de fer" car aucun material ne lui a été donné, en regardant FirstScene c'est facilement trouvable comment faire :)

+2 -0

Hey !

Merci à tous pour vos encouragements, merci particulièrement à @elyppire pour la mise à la une, ça aide à la visibilité du projet :)

Petite question : Il y aurait pas un petit projet communautaire autour de ce moteur ?

J'aimerai me remettre au c++, et bosser avec d'autre sur un petit projet ce serait sympa :) Bosser sur le moteur en lui-même me semble un peu complexe, mais si du fait de la release, yen a plusieurs qui sont motivés pour se lancer, ça pourrait être sympa :)

Shellbash

On est en train de parler de relancer le concours autour de Nazara avec gbdivers, maintenant que le moteur dispose d'une documentation correcte et de quelques tutoriels.
Cependant s'il y en a qui veulent lancer un petit projet utilisant Nazara, sachez que je suis prêt à vous aider en vous conseillant (voire même en participant directement au niveau du code si j'ai du temps) :)

En parlant de cas d’usage… Si je veux pouvoir dessiner facilement des parallélépipèdes dans une scène 3D, Nazara est sans doute un peu overkill, mais ça serait possible ?

lethom

De façon générale, Nazara a été conçu pour servir dans n'importe quelle situation, car tu es libre d'utiliser les modules que tu veux.
Pour ce qui est du rendu, non je ne pense pas que Nazara soit overkill, et il te permet de faire ça plutôt facilement (voir le code d'@Ardakaniz, auquel il manque un mesh->CreateStatic(); avant le BuildSubMesh pour éviter des problèmes :D ).

Aujourd'hui sort la version 0.1.1, elle corrige les problèmes qui ont été rencontrés lors de l'utilisation de la 0.1 (dont la liste se trouve dans le changelog), mais aussi, des précompilés Linux sont maintenant disponibles !

Nazara Engine - Release 0.1.1

N'hésitez pas à me faire part des fonctionnalités que vous souhaiteriez voir apparaître prochainement, que ça soit ici ou sur le canal dédié dans le Mattermost.

+10 -0

Hello !

Désolé du manque de nouvelles dernièrement, j'ai pas mal voyagé (d'ailleurs, bonjour à Ardakaniz, rencontré aux Utopiales de Nantes :D ).

Aujourd'hui sort enfin la nouvelle version de Nazara, la version 0.2.

Elle corrige tous les bugs connus (à l'exception du RUdp qui se verra corrigé d'ici deux ou trois versions, à cause de sa complexité), et ajoute quelques changements intéressants !

Quelques points marquants:

  • Le module Physics a été renommé en Physics3D
  • Le module Physics2D a fait son apparition (Nazara peut maintenant gérer de la physique bi-dimensionnelle rudimentaire).
  • La configuration NAZARA_UTILITY_THREADED_WINDOW a été remplacée par le style WindowStyle_Threaded (permettant de faire tourner sélectivement des fenêtres dans un thread séparé).
  • Material, Matrix4, Sprite, Texture, etc. sont maintenant accessibles depuis le binding Lua.
  • Correction de la compilation d'un shader interne sur les chipset Intel.

Un lien vers le changelog (beaucoup plus complet) et les liens de téléchargement:

Nazara Engine - Release 0.2

J'ai aussi mis en place plusieurs issues sur Github permettant de discuter de certaines fonctionnalités à venir, et voir quand je prévois leurs arrivées.
J'ai aussi mis en place un tableau de bord plus complet sur les fonctionnalités à venir, afin de partager ma vision sur l'évolution du moteur.

Comme toujours, vous pouvez venir retrouver la toute dernière actualité/poser vos questions sur le moteur sur le canal dédié à Nazara sur Mattermost ou bien ici même.

:)

+8 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte