Intrinsic: un moteur de jeux 3D basé sur Vulkan

Intrinsic est un moteur de jeux vidéo basé sur Vulkan et développé par l’allemand Benjamin Glatzel. Le moteur est open source (licence Apache 2.0 ou GPL v3) et le code est hébergé sur GitHub.

Du côté du rendu, le moteur supporte le Physically Based Rendering (PBR) ainsi que les lumières volumétriques. Les scripts peuvent être écrits en LUA, un des langages de script les plus simples à utiliser. L’éditeur IntrinsicEd vous accompagne dans votre création. Le format FBX permet d’importer des ressources.

Intrinsic est multi-plateforme, le moteur est compilable sous Windows (VS2015) et Ubuntu 16.04 mais c’est encore un prototype.

Le moteur de rendu et le noyau d’Intrinsic sont programmés en C/C++. L’architecture permet de profiter des performances multitheads des CPU.

Encore un énième moteur de jeu 3D me direz-vous ? Non, ce n’est pas pour ça que je vous en parle.  En fait, ce projet vous permet de mettre les mains dans le cambouis… sous le moteur si vous préférez. Vous avez envie de faire un petit projet utilisant l’API Vulkan ? Avec Intrinsic, vous bénéficiez d’un petit projet (qui se veut grand à terme), qui est déjà bien ficelé puisqu’il dispose d’un éditeur par exemple, et que vous pourrez triturer dans tous les sens pour apprendre à coder avec Vulkan. Pour rappel, Vulkan, c’est OpenGL Next Gen qui apporte de la puissance aux mobiles notamment. Le Samsung Galaxy S7 le supporte par exemple, voir ce projet avec Unreal dont nous avions déjà parlé.

En même temps, je dois vous avertir: le code n’est pas commenté et semble écrit à l’arrache avec des macro inline partout ! Et y-a au moins un million de lignes de code… Mais bon, vous pouvez vous concentrer sur certaines parties comme le render Vulkan par exemple (71 fichiers, 510 Ko de sources).

Le projet utilise les bibliothèques suivantes :

  • Vulkan SDK / SPIRV-Cross:  Un SDK pour exploiter Vulkan sous Windows et Linux. Il facilite l’accès aux fonctions bas niveau de Vulkan, et le développement GPU //. Pour Android, il vous faudra adapter.
  • Microprofile: petite librairie pour analyser les performances – assez simple à utiliser, le tuto principal est ici.
  • EnkiTS : Gestionnaire de tâches C/C++ assez léger. Voir présentation.
  • Gli : OpenGL Image – Liste de fonctions (headers) pour manipuler plus facilement les images
  • Glm: OpenGL Mathematics – Liste de fonctions (headers) pour les mathématiques.
  • Glslang : Pour intégrer un compilateur de shaders GLSL
  • LuaJIT / SOL v2.0:: Permet d’intégrer la compilation à la volée de scripts LUA.
  • Rapidjson : Permet de gérer le format de données JSON
  • SDL 2.0: Fonctions de la librairie SDL pour la création de jeux.
  • Sparsepp: Librairie de gestion de Hash Tables/Cartes très rapide
  • Tinydir: Lib très légère et cross-platforme pour gérer les répertoires de fichiers.
  • TLSF allocator: Allocation de mémoire basé sur le modèle “Two-Level Segregated Fit memory“, évite la fragmentation.
  • PhysX 3: moteur de physique PhysX
  • Qt (éditeur seulement): Librairie de Widgets cross-platforms
  • FBX SDK (éditeur seulement):  Pour la lecture de fichiers FBX (format d’objets 3D).
  • NVTT: Librairies permettant d’utiliser les fonctions de compression de textures de Nvidia.
  • Cloc: Petite lib pour compter les lignes de codes, les blanks, les commentaires, etc.
  • 7za: Gestion du format 7Zip

D’après un article paru sur developpez par LittleWhite. Vous pouvez tester la dernière Build ici.

Ces articles pourraient aussi vous intéresser …