Castor3D

Présentation

Castor3D est un moteur 3D multi-plateformes écrit en C++ 14.
Il utilise un format de fichiers de scènes texte descriptif et compréhensible facilement.
Il fonctionne sur les plateformes Linux (GTK) et Windows.
Pour l’instant seul OpenGL est supporté, et un renderer Vulkan est prévu.
Ce moteur est encore un work in progress.
Téléchargez le code source sur github pour contribuer!

Fonctionnalités

Ce moteur propose comme fonctionnalités :

  • Normal Mapping.
  • Parallax Occlusion Mapping.
  • Rendu HDR avec application de divers opérateurs de Tone Mapping.
  • Rendu PBR (Metallic ou Specular) et Legacy (diffuse/specular/shininess).
  • Deferred rendering pour les objets opaques.
  • Weighted Blended rendering pour les objets transparents.
  • Screen Space Ambient Occlusion.
  • Shadow Mapping (directional, point et spot lights)
  • Animations par squelette.
  • Animations par sommets.
  • Shaders (GLSL), avec écriture du code du shader directement depuis le code C++.
  • Génération automatique de shaders, en fonction de la configuration de la passe.
  • Scènes décrites dans un format texte facilement compréhensible et extensible.
  • Basé sur une architecture modulaire, via divers types de plug-ins.
  • Compilable sur les plateformes supportées en utilisant CMake.

Plug-ins

Les différents types de plug-ins supportés sont: Importer, Divider, Renderer, PostEffect, Generator, Generic et ToneMapping.

Importer

Les plug-ins de type Importer permettent l’ajout de l’importation de nouveaux formats de fichiers de maillages.
Sont actuellement implémentés :

  • AssimpImporter, utilisant la bibliothèque ASSIMP pour l’import d’une grande variété de formats.
  • PlyImporter, permettant l’import de gros maillage PLY (pour lesquels assimp éprouve des difficultés).
  • ObjImporter, permettant l’import de maillages au format OBJ.

Divider

Les plug-ins de type Divider permettent d’implémenter des algorithmes de subdivision de maillage.
J’ai pour l’instant implémenté les algorithmes suivants :

  • PN-Triangles ;
  • Phong ;
  • Loop.

Renderer

Les plug-ins de type Renderer sont le support des API de rendu.
Sont actuellement implémentés :

  • GlRenderSystem, pour utiliser OpenGL.
  • TestRenderSystem, un renderer de test, ne faisant à peu près rien, mais permettant l’implémentation de tests.

PostEffect

Les plug-ins PostEffect permettent l’application d’effets post-rendu.
Sont actuellement implémentés :

  • HDRBloom.
  • Grayscale.
  • FXAA, un antialiasing basique.
  • SMAA, un antialiasing temporel de bonne qualité.
  • FilmGrain.
  • Kawase Light Streaks.

ToneMapping

Les plug-ins de ToneMapping permettent de personnaliser le mappage de tons du HDR.
Sont actuellement implémentés :

  • Linear.
  • Haarm Pieter Duiker.
  • Hejl Burgess Dawson (aussi appelé Filmic).
  • Reinhard.
  • Uncharted 2.

Generator

Les plug-ins de type Generator servent à la génération de maillages, ou textures, ou autres..
Pour l’instant un seul plug-in de ce type est implémenté :

  • DiamondSquareTerrain, permettant la création de terrains via l’algorithme diamond-square.

Generic

Enfin, les plug-ins de type Generic ont pour but d’étendre les fonctionnalités globales du moteur.
Pour l’instant un seul plug-in de ce type est implémenté :

  • CastorGui, étendant les fichiers de scène pour ajouter et dessiner des IHM (boutons, zones de texte, …) via les incrustations 2D.

En plus du moteur et des divers plug-ins, le projet est accompagné de diverses applications :

  • CastorViewer, visualiseur de scènes utilisant Castor3D.
  • ImgConverter, projet de conversion de tout type d’images vers XPM ou ICO.

Documentation

La documentation du projet est contenue dans les headers et peut être générée via Doxygen.

Gallerie

Cerberus PBR
Cerberus PBR

Park Legacy
Park Legacy

Sponza PBR Bloom
Sponza PBR Bloom

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.