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
- Clustered lighting pour le calcul de toutes les sources lumineuses.
- Utilisation d'un visibility buffer pour les objets opaques.
- Weighted Blended rendering pour les objets transparents.
- Normal mapping (avec utilisation du Mikktspace ou spécification explicite des bitangentes).
- Shadow Mapping (avec choix entre Raw, PCF ou Variance Shadow Maps).
- Parallax Occlusion Mapping.
- 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 ainsi que divers opérateurs de colour grading.
- Screen Space Subsurface Scattering (sans la backlit transmittance pour l'instant).
- Volumetric Light Scattering, pour la source lumineuse directionelle.
- Cascaded Shadow Maps 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.
- glTF, en utilisant la bibliothèque fastgltf pour un support du glTF 2.0 plus précis que clui fourni via assimp.
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.
- PbrBloom : une implémentation de PBR Bloom.
- DrawEdges : Détecte et dessine les bordures, basé sur les normales, la profondeur, et/ou l'ID d'objet.
- FilmGrain : Pour afficher un grain sur le rendu.
- GrayScale : Conversion en niveaux de gris.
- LightStreaks (utilisant Kawase Light Streaks).
- FXAA : un antialiasing rapide de qualité basique.
- SMAA : un antialiasing temporel de bonne qualité.
- Linear Motion Blur.
- DepthOfField : Implémentation de depth of field
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.
- WaterMaterial: Un matériau de rendu de l'eau, basé sur l'utilisation de plusieurs normal maps.
- FFTOceanRendering : Permet le rendu d'océan en se basant sur les transformées de Fourier.
- WavesRendering : 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 :
- None: Un passe plats, utilisé pour le rendu sur écran HDR.
- 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.