Nazara – un véritable moteur de jeu

By

Lynix est un jeune développeur de 25 ans. Dans le but de créer son propre jeu vidéo, il s’est d’abord attelé à écrire rien de moins que son propre moteur de jeu.

LogoMini.png

Tout commence en 2009, quand Lynix eut l’idée d’un jeu vidéo. Pour le réaliser, il a d’abord travaillé sur un premier moteur de jeu avant de le reprendre à zéro, sous l’appellation Nazara. Nous sommes alors en 2011. Depuis, le moteur a bien évolué. Bien qu’il soit toujours en développement, il est déjà utilisé, comme nous le verrons la semaine prochaine.

Ce moteur donne donc différentes ressources pour aider le développeur dans sa tâche. Différents modules permettent de gérer le réseau, l’audio, la gestion d’entités, etc.

Nazara

La particularité de ce moteur est qu’il est transparent, facile à comprendre et à utiliser. Le moteur s’intègre au code facilement. Ce n’est pas au développeur d’adapter son code au moteur.

Ce projet est Open Source et disponible sur GitHub. Vous pouvez le découvrir, l’étudier, l’utiliser et même y contribuer.

Pour plus de détails sur son utilisation, rendez-vous sur le wiki officiel.

Lynix sur Twitch

Depuis peu, Lynix s’est lancé dans la diffusion en direct du développement de son moteur. Vous pouvez donc le voir à l’œuvre tous les mercredis soirs sur Twitch.

La semaine prochaine, nous verrons un projet justement réalisé avec le moteur Nazara.

Pour en savoir plus, visitez le blog de son auteur et suivez-le sur Twitter.


Interview de Lynix par Feldrise.

Bonjour à vous ! Vous êtes donc le développeur de Nazara. Pouvez-vous vous présenter en quelques mots ?

Salut Feldrise ! C’est toujours compliqué de répondre à cette question, du coup je me définis comme un développeur de jeux vidéos amateur et professionnel, c’est-à-dire que j’en ai fait mon métier mais que c’est avant tout une passion, depuis … aussi longtemps que je me souviens.

Cela fait longtemps que vous êtes dans le domaine du jeu vidéo de façon professionnelle ?

Cela fait très exactement trois ans et sept jours que j’ai été embauché dans ma première boîte. Actuellement j’en suis à la seconde, une boîte un peu plus centrée sur le développement de jeux-vidéos que la première, qui était plus sur la maintenance d’un jeu déjà sorti.

Et Nazara vous a-t-il aidé dans le domaine professionnel (à être embauché par exemple, ou dans l’utilisation quotidienne) ?

Indirectement ça m’a beaucoup aidé à acquérir et montrer des compétences à mes employeurs, et je l’utilise tous les jours dans mon travail actuel, comme support du jeu sur lequel nous sommes en train de travailler.

Et pensez-vous que Nazara puisse être utilisé par d’autres entreprises dans le jeu vidéo ?

Au fond pourquoi pas. J’ai encore du travail à fournir sur Nazara pour le rendre réellement intéressant d’utilisation par n’importe qui, mais le moteur fournit des outils pratiques qui peuvent servir comme toute bibliothèque.

Super ! Bon, recentrons-nous plus sur Nazara. Vous êtes seul dans le développement du moteur ?

Majoritairement, oui. Mais j’ai eu l’aide de quelques contributeurs au fil des années pour m’aider à faire notamment le portage sur Linux, les tests unitaires, la documentation, etc.

Et le projet a quel âge ?

Ça dépend à partir d’où tu commences à compter. Nazara a été commencé le 2 décembre 2011 si je me rappelle bien (j’avais pris soin de le noter). Mais il avait un grand frère, l’Ungine, un premier prototype de moteur de jeu qui n’a finalement pas été concluant et sur lequel j’avais travaillé environ un an et demi.
Aujourd’hui, du coup, le projet a un peu plus de six ans.

Ah ? Et pourquoi l’Ungine n’a pas été concluant ? Qu’est-ce qui fait que Nazara a tenu et pas l’Ungine ?

En un mot : l’architecture. C’est probablement l’une des plus grosses difficultés que j’ai pu rencontrer dans la conception d’un moteur de jeu : faire une architecture stable et cohérente, suffisamment flexible pour supporter les avancées au cours du temps.

L’architecture utilisée pour l’Ungine n’a tout simplement pas tenu sous son propre poids et a fini par s’effondrer. C’est-à-dire qu’elle devenait de plus en plus incohérente au fil des modifications et qu’il est arrivé un stade où il n’y avait plus rien d’autre à faire que de tout recommencer.

Une des idées que j’ai tiré de cette expérience et qui fait que Nazara est stable aujourd’hui à été de séparer de façon stricte le moteur en plusieurs modules de petites tailles, chacun disposant de sa propre architecture reposant sur une hiérarchie stricte.

De cette façon, si un module n’est pas assez bien conçu pour supporter ce qu’on lui demande, il peut être en partie voire totalement recommencé sans toucher aux autres modules.

Heureusement, au fil des années je n’ai eu qu’un module à recommencer entièrement (celui du rendu pour le support de Vulkan notamment).

Qui sont les personnes visées par Nazara ? Quels sont vos « concurrents » et pourquoi ces personnes devraient choisir Nazara plutôt que vos « concurrents » ?

C’est une question intéressante. Je vise les développeurs cherchant une bibliothèque pour les aider dans leurs tâches, car chaque module énoncé plus haut est une bibliothèque indépendante qui ne vise même pas spécialement le jeu-vidéo. En revanche, il existe une sorte de « super-module », le SDK de Nazara qui fournit plus d’outils spécifiques au jeu-vidéo et regroupe tous les autres modules. Je vise alors les développeurs C++ cherchant à faire un jeu sans pour autant utiliser un moteur aussi complet/intrusif qu’Unity/Unreal Engine et autres.

D’ailleurs, je ne les considère pas comme concurrents, car dans ces moteurs-là c’est ton code qui se greffe au moteur, et non l’inverse comme c’est le cas avec Nazara. Du coup, mes concurrents plus directs sont des bibliothèques/frameworks comme SDL, SFML, Ogre3D, Irrlicht, etc.

Nazara dispose globalement d’un code plus clair/performant, et de fonctionnalités plus étendues (comme la physique, le réseau, l’audio, etc.), et je pense qu’il a son petit potentiel

Merci beaucoup de votre temps et de vos réponses, ce fut un grand plaisir de vous interviewer ! Et à bientôt sur Twitch.