Description
Castor3D est un moteur 3D écrit en C++17.
Il fonctionne sur les plateformes GNU/Linux (GTK) et Windows.
Il utilise Vulkan comme API de rendu.
Sont actuellement implémentés :
Sont implémentés pour l'instant :
Pour l'instant un seul plug-in de ce type est implémenté :
Sont implémentés pour l'instant :
Sont implémentés les opérateurs suivants :
Le projet en lui-même est compilable sur les plateformes supportées en utilisant CMake.
Il fonctionne sur les plateformes GNU/Linux (GTK) et Windows.
Il utilise Vulkan comme API de rendu.
Fonctionnalités
- Deferred rendering pour les objets opaques
- Weighted Blended rendering pour les objets transparents.
- Normal mapping.
- Parallax Occlusion Mapping.
- Shadow Mapping (avec choix entre Raw, PCF ou Variance Shadow Maps).
- Screen Space Ambiant Occlusion (en utilisant le Scalable Ambient Obscurance).
- Reflection/Refraction Mapping.
- Rendu PBR (Hybride Metallic/Specular/Roughness) et rendu Phong/Blinn-Phong.
- Rendu HDR avec application de divers opérateurs de Tone Mapping.
- Screen Space Subsurface Scattering (sans la backlit transmittance pour l'instant).
- Volumetric Light Scattering, pour la source lumineuse directionelle.
- Illumination Globale, via les Light Propagation Volumes ou le Voxel Cone Tracing, au choix.
- Frustum culling.
- Graphe de scène.
- Graphe de rendu.
- Architecture modulaire, à base de plug-ins.
- Génération automatique de shaders, en fonction de la configuration de la passe.
- Les shaders peuvent être écrits directement depuis le code C++.
- Scènes décrites dans un format texte facilement compréhensible et extensible.
- Rendu synchrone ou asynchrone.
- Utilisation de Mesh et Task shaders, si disponibles.
- Primitives de GUI.
Plug-ins implémentés
Importers
Les plug-ins de type Importer permettent l'ajout de l'importation de nouveaux formats de fichiers de maillages.Sont actuellement implémentés :
- ASSIMP, utilisant la bibliothèque assimp pour l'import d'une grande variété de formats.
PostEffects
Les plug-ins PostEffect permettent l'application d'effets post-rendu.Sont implémentés pour l'instant :
- Bloom: une implémentation de HDR bloom.
- FilmGrain: ajoute un grain au rendu.
- GrayScale.
- LightStreaks: effet utilisant les Kawase Light Streaks.
- FXAA: un antialisaing de mauvais qualité, mais rapide.
- SMAA: un antialiasing de bonne qualité, mais plutôt ,lent (1X et T2X jusqu'à présent).
- Linear Motion Blur.
- DrawEdges : Détecte et dessine les bordures, basé sur les normales, la profondeur, et/ou l'ID d'objet.
- PbrBloom : une implémentation de PBR Bloom.
Generators
Les plug-ins de type Generator permettant de générer des maillages ou textures, de manière procédurale.Pour l'instant un seul plug-in de ce type est implémenté :
- DiamondSquareTerrain: génère des terrains en utilisant l'algorithme diamond square.
Generics
Les plug-ins de type Generic ont pour but d'étendre les fonctionnalités globales du moteur.Sont implémentés pour l'instant :
- ToonMaterial : Un ensemble de matériaux toon, à combiner avec le plugin DrawEdges.
- FFTOceanRendering : Permet le rendu d'océan en se basant sur les transformées de Fourier.
- OceanRendering : Rendu basique d'océan, en spécifiant les propriétés des vages.
- WaterRendering : Rendu de surfaces planes d'eau, basé sur l'utilisation de normal maps.
- AtmosphereScattering : Implémentation de rendu de ciel et d'atmosphère.
ToneMappings
Les plug-ins de type ToneMapping permettent de définir de nouveaux opérateurs de tone mapping.Sont implémentés les opérateurs suivants :
- Linear: l'opérateur par défaut.
- Haarm Pieter Duiker.
- Hejl Burgess Dawson (aussi appelé Filmic).
- Reinhard.
- Uncharted 2.
- ACES.
Autres applications
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.
- CastorMeshConverter : Convertisseur de divers formats de fichier de maillaige vers le format Castor3D.
- CastorMeshUpgrader : Met à jour les fichiers de maillage utilisant un format Castor3D antérieur à la dernière version.
- HeightMapToNormalMap : Convertit une height map en normal map.
Documentation
La documentation du projet est contenue dans les headers et peut être générée via Doxygen.Le projet en lui-même est compilable sur les plateformes supportées en utilisant CMake.