Partage
  • Partager sur Facebook
  • Partager sur Twitter

Castor3D

Moteur 3D qui affiche des trucs

    23 février 2022 à 1:38:06

    Présentation

    Castor3D est un moteur 3D multi-plateformes (Linux et Windows pour l'instant).
    Il supporte Vulkan, et utilise Ashes pour étendre ce support sur OpenGL et Direct3D11.

    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.

    Ce moteur est encore un work in progress (ça fait 16 ans, d'ailleurs).
    Téléchargez le code source sur GitHub pour contribuer !

    Attention, ceci n'est pas un moteur de jeu !

    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 implémentant le Scalable Ambiance Obscurance).
    • Reflection/Refraction Mapping.
    • Rendu PBR (Metallic/Roughness et Specular/Glossiness) 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 directionnelle, si elle projette des ombres.
    • Cascaded Shadow Maps pour la source lumineuse directionelle.
    • Global Illumination, via les Light Propagation Volumes (layered ou pas) ou le Voxel Cone Tracing.
    • Frustum culling.
    • Graphe de scène.
    • Graphe de rendu (en utilisant RenderGraph).
    • Architecture modulaire, à base de plug-ins.
    • Génération automatique de shaders, en fonction de la configuration du pipeline.
    • Ecriture du code du shader directement depuis le code C++ (en utilisant ShaderWriter).
    • Scènes décrites dans un format texte facilement compréhensible et extensible.
    • Rendu synchrone (timers) ou asynchrone (thread).
    • Utilisation de Mesh et Task shaders, si disponibles.
    • Primitives de GUI.

    Plugins implémentés

    Importers

    • 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.

    PostEffect

    • 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 du depth of field décrit ici.

    Generators

    • DiamondSquareTerrain : Génération de terrains, utilisant l'algorithme diamond square pour générer des reliefs.

    Generic

    • 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 (Implémentation de Scalable and Production Ready Sky and Atmosphere Rendering Technique).

    ToneMapping

    • 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

    • CastorViewer : Visualiseur de scènes utilisant Castor3D.
    • 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.
    • ImgConverter : Projet de conversion de tout type d'images vers XPM ou ICO.

    Screenshots

    Intel Sponza, Candles, Bloom Sponza, VCT Cerberus Park, Comparison Nyra, PBR SanMiguel, PBR SanMiguel, PBR, LPV Bistro, PBR, VCT FFTOcean, Terrain

    -
    Edité par dragonjoker il y a environ 22 heures

    • Partager sur Facebook
    • Partager sur Twitter

    Si vous ne trouvez plus rien, cherchez autre chose.

      20 mars 2022 à 1:02:53

      Version 0.12.0

      Les changements importants apportés par cette nouvelle version sont les suivants :

      • Utilisation de RenderGraph pour la construction du frame graph.
      • Utilisation des bindless textures.
      • Implémenté le MultiDrawIndirect.
      • Implémentation d'un écran de chargement.
      • Implémentation des animations de textures.
      • Implémentation des animations de scene nodes.

      Nouvelles fonctionnalités

      Generic

      • Ajout du plugin DrawEdges, pour détecter et dessiner les bordures.
      • Implémentation d'un plugin de rendu basique d'océan.
      • Implémentation d'un plugin de rendu d'océan basé sur les Fast Fourier Transform.
      • Implémentation d'un plugin de rendu d'eau sur surface plane.
      • Implémentation d'une collection de matériaux toon.

      ToneMappings

      • Ajout d'un plugin de tone mapping ACES.

      Tools

      • Ajout de l'application HeightMapToNormalMap.

      Modifications

      CastorUtils

      • Ajout du support des tile maps.
      • Ajout de la conversion depuis array map vers tile mapp
      • Ajout d'AsyncJobQueue, basée sur ThreadPool.
      • Ajout de GliImageWriter.
      • FreeImageLoader est maintenant optionnel.
      • Ajout de la compression en BC1/BC3 lors du chargement des images, en utilisant cvtt.
      • Ajout d'une implémentation de SpinMutex.
      • TextWriter écrit maintenant dans un castor::StringStream.
      • Génération des mipmaps lors du chargement des images.
      • Intégration de la gestion des parsers additionnels dans FileParser.
      • Le parsing des brace files se fait maintenant en deux étapes.

      Castor3D

      • Ajout du frustum culling pour les point lights shadow maps.
      • Ajout du support de plusieurs rendering devices.
      • Tous les post effects sont maintenant créés avec la render target, pour être activables/désactivables à l'envi.
      • Ajout de l'import de scène en plus de l'import de mesh.
      • Ajout d'une passe Blinn-Phong.
      • Généralisation des shaders, en passant par des classes intermédiaires : LightingModel, ReflectionModel et LightMaterial.
      • Ajout d'un TextureCache, utilisé pour fusionner les images utilisées par une passe.
      • Ajout d'un moyen d'avoir des objets non sélectionnables.
      • Ajout d'options de rotation de mesh lors de l'import.
      • Ajout du support d'un second set d'UV.
      • Ajout du support de render nodes passes custom.
      • Ajout du support des tessellation shaders pour les render nodes passes.
      • Ajout du support des material passes non affectées par l'éclairage.
      • Ajout du support des safe bands dans Camera.
      • Ajout de la possibilité de remapper les composantes d'une texture lors de l'import d'une scène.
      • La depth prepass écrit maintenant aussi les normales.
      • Implémenté les LPV pour les point lights.
      • Les Events peuvent maintenant être ignorés.
      • Fusion des LightingModels PBRMR et PBRSG en interne.
      • Ajout de la possibilité d'exclure des objects des tests de culling.
      • Suppression de la correction gamma pour les textures, en utilisant les formats SRGB.
      • Suppression des PassBuffers spécifiques.
      • Réorganisation de l'écriture et lecture des Pass dans les fichiers de scène.
      • Déplacement des profils de SSS dans leur propre shader buffer.

      CastorGui

      • Ajout des classes de style, afin d'en avoir une meilleure gestion.

      DiamondSquareTerrain

      • Ajout d'une option permettant de désactiver la random seed.
      • Ajout d'une option permettant de tiler les UV.

      AssimpImporter

      • Améliorations relatives à l'import des matériaux.
      • Amélioration de l'import des animations.
      • Ajout de l'import des scene nodes et sources lumineuses.

      GuiCommon

      • Ajout de l'affichage de la configuration des render nodes passes custom.
      • La configuration des PostEffects a été ajoutée à l'arbre.
      • Suppression de la liste de matériaux, et de doublons dans la vue de scène.

      Corrections

      CastorUtils

      • Correction de l'inversion de Matrix2x2 et Matrix3x3.
      • Correction de l'allocation alignée sous Windows.

      Castor3D

      • Correction d'un crash lorsqu'une keyframe de skinning manque.
      • Correction de la background pass par rapport au brouillard.
      • Correction de l'interaction entre l'indirect diffuse et les réflexions.
      • Correction d'un crash en release avec le morphing.
      • Correction de l'import/export des animations de morphing.
      • Correction de l'éclairage indirect dans les forward passes.
      • Correction des point shadow maps.
      • Correction des spot shadow maps.
      • Correction du traitement des cleanup event dans la render loop.
      • Correction de la création de render target creation, afin de lui donner les bonnes taille et pixel format.
      • Correction de la réinitialisation de la swapchain lors de l'initialisation de la RenderWindow.
      • Correction du changement au runtime du tone mapping.

      GuiCommon

      • Correction d'un crash dans LanguageFileParser.
      • Correction d'un crash lors du changement de l'algo de GI d'une source lumineuse.
      • Correction des crashes lors du chargement des images HDR.
      • Correction de l'affichage des propriétés des textures.

      Bistro, PBR, VCT

      -
      Edité par dragonjoker 20 mars 2022 à 1:03:36

      • Partager sur Facebook
      • Partager sur Twitter

      Si vous ne trouvez plus rien, cherchez autre chose.

        20 mars 2022 à 13:34:36

        Je me concentre beaucoup là-dessus, et je suis donc content que ça te fasse cet effet :D
        • Partager sur Facebook
        • Partager sur Twitter

        Si vous ne trouvez plus rien, cherchez autre chose.

          20 mars 2022 à 14:41:17

          Est-ce qu'un hello world est prevu? ce serait sympa pour ceux qui veulent tester et voir a quoi ressemble l'API
          • Partager sur Facebook
          • Partager sur Twitter
            20 mars 2022 à 14:50:17

            Il faudrait que j'en écrive un, ça fait tellement longtemps que j'utilise CastorViewer ^^'

            Après, le code de CastorTestLauncher est assez basique, et dans mon repo de scènes de test ( https://github.com/DragonJoker/Castor3DTestScenes ), la scène Common/Test-1.cscn est on ne peut plus simple (elle affiche un simple fond gris).

            • Partager sur Facebook
            • Partager sur Twitter

            Si vous ne trouvez plus rien, cherchez autre chose.

              11 juin 2022 à 12:27:03

              Version 0.13.0

              • Amélioration drastique des performances.
              • Implémentation des mesh et task shader, avec frustum culling et backface culling.
              • Refonte de l'import des données externes (meshes, skeletons, animations).
              • Implémentation des morph target animations, en remplacement des per-vertex animations.
              • Ajout du support de multiples sets de coordonnées de textures (jusqu'à 4).
              • Ajout des couleurs de sommets.
              • Fusion des deux workflows de PBR implémentés en un hybride, plus flexible par rapport à l'import de scènes externes.
              • Partager sur Facebook
              • Partager sur Twitter

              Si vous ne trouvez plus rien, cherchez autre chose.

                27 novembre 2022 à 11:24:51

                Version 0.14.0

                Les changements importants apportés par cette nouvelle version sont les suivants :

                - Ajout du support de changement d'unité de longueur du moteur.
                - Ajout de la personnalisation des passes de rendu du fond.
                - Ajout du support de mélange des matériaux multi-passes.
                - Refonte complète de Pass, en introduisant des PassComponent, pour une meilleur flexibilité.
                - Implémentation du support complet des matériaux glTF et de leurs extensions.

                Generic

                - Implémentation d'atmosphere scattering depluis [Scalable and Production Ready Sky and Atmosphere Rendering Technique](https://sebh.github.io/publications/egsr2020.pdf).
                - Premier jet d'implementation de nuages.

                Generators

                - Amélioration pour DiamondSquareTerrain, ajout du mode île, et support des biomes.

                Importers

                - Amélioration d'AssimpImporter par rapport aux matériaux glTF.
                - Suppression du plugin PlyImporter.

                PostEffects

                - Implémentation du PBR Bloom, effectuant un bloom sur l'image complète.

                Screenshots

                glTF Attenuation
                glTF Iridescence
                glTF Sheen
                glTF Transmission
                glTF Clearcoat

                -
                Edité par dragonjoker 27 novembre 2022 à 11:29:03

                • Partager sur Facebook
                • Partager sur Twitter

                Si vous ne trouvez plus rien, cherchez autre chose.

                  28 avril 2023 à 23:03:22

                  Version 0.15.0

                  Changements importants

                  • Corrections du binding COM, et implémentation d'une application de visualisation de scène en C#.
                  • Support de multiples modèles d'éclairage dans la même scène.
                  • Amélioration des ombres PCF, en échantillonnant un disque de Poisson.
                  • Castor3D utilise maintenant un reversed Z buffer.
                  • Améliorations drastiques des preformances de préparation et rendu des incustations.
                  • Suppression de la majorité des utilisations de std::shared_ptr.
                  • Amélioration de la prise en compte du composant spéculaire en PBR, par rapport à ses interactions avec la metalness.
                  • Amélioration des réflexions via les environment maps, elles sont plus cohérentes avec l'IBL.

                  Nouvelles fonctionnalités

                  • Implémentation de noeuds statiques, qui sont dessinés une seule fois lors des passes de shadow map ou de voxellisation.
                  • Déplacement de tout le code de CastorGui dans Castor3D, et ajout de nouveaux contrôles d'IHM.
                  • Support de l'inversion des normales, soit à l'import d'un mesh, soit via la passe de matériau.
                  • Mise à jour des tree item properties, par rapport aux composants de passe de matériau.

                  Screenshots

                  Multiple Lighting Models Spheres

                  Multiple Lighting Models Nyras

                  -
                  Edité par dragonjoker 28 avril 2023 à 23:17:26

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Si vous ne trouvez plus rien, cherchez autre chose.

                    Il y a environ 23 heures

                    Version 0.16.0

                    Changements importants

                    • Implémentation du clustered lighting.
                    • L'atténuation des sources lumineuses est maintenant une distance max.
                    • Implémentaiton d'opérateurs de colour grading.
                    • Implémentation des context blocks dans le scene file parser.
                    • Suppression du deferred rendering.

                    Nouvelles fonctionnalités

                    • Ajout du support de l'espace tangent de Mikkelsen.
                    • Implémentation d'un importeur glTF.
                    • Implémentation d'un plugin de depth of field.
                    • Ajout du support des écrans HDR.
                    • Les importeurs de scène peuvent maintenant importer les caméras.
                    • Réimplémentation des submesh components à la manière des pass components.
                    • Déplacement des données d'ombre des sources lumineuses dans un buffer séparé.
                    • Correction de l'interaction du light scattering avec les ombres.
                    • Refonte de l'upload en VRAM des ressources.
                    • Réparation des particules GPU.
                    • Renommage des évènements pour plus de clarté.
                    • Expression de l'océan FFT en termes de pass component et submesh component.
                    • Implémentation de l'eau en tant que pass component.
                    • Refonte de l'update des render nodes pour améliorer les performances à ce niveau.
                    • Réécriture de l'écran de chargement.

                    Screenshots

                    Intel Sponza, 10000 candles

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Si vous ne trouvez plus rien, cherchez autre chose.

                    Castor3D

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    • Editeur
                    • Markdown