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

    Ce moteur propose comme fonctionnalités :

    • Deferred rendering pour les objets opaques.
    • Weighted Blended pour le rendu des objets transparents.
    • Normal mapping.
    • Parallax Occlusion Mapping.
    • Screen Space Ambient Occlusion (en utilisant Scalable Ambiant Obscurance).
    • Shadow Mapping (Raw, Percentage Close Filtering ou Variance Shadow Mapping).
    • Reflection/Refraction Mapping.
    • Rendu PBR (Metallic/Roughness et Specular/Glossiness), Blinn-Phong et Phong.
    • Render graph (en utilisant RenderGraph).
    • Scene graph.
    • Shaders (GLSL), avec écriture du code du shader directement depuis le code C++ (en utilisant ShaderWriter).
    • Génération automatique de shaders, en fonction de la configuration de la passe.
    • Support de différents types de canaux, pour l'affectation des textures, et pour la génération automatique des shaders.
    • Génération de l'espace tangent par sommet.
    • Scènes décrites dans un format texte facilement compréhensible et extensible.
    • Rendu HDR avec application de divers algorithmes de Tone Mapping.
    • Animations des maillages par skinning (via un squelette) ou morphing (par vertex, sans squelette).
    • Animation des UV de textures (rotation et translation).
    • Support des tilemaps, et animation de celles-ci.
    • Illumination globale, via les Light Propagation Volumes ou le Voxel Cone Tracing, au choix.
    • Le rendu peut être synchrone (timers) ou asynchrone (thread).
    • Il est basé sur une architecture modulaire, à base de plug-ins.

    Plug-ins

    Les différents types de plug-ins supportés sont: Importer, Divider, 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.

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

    Divider

    Les plug-ins de type Divider permettent d'implémenter des algorithmes de subdivision de maillage.

    • PN-Triangles ;
    • Phong ;
    • Loop.

    PostEffect

    Les plug-ins PostEffect permettent l'application d'effets post-rendu.

    • HDRBloom : algorithme de bloom basé sur le downscale et application de gaussian blur.
    • Grayscale : convertit le résultat en niveaux de gris.
    • FXAA : un antialiasing de moyenne qualité.
    • SMAA : un antialiasing temporel de bonne qualité.
    • KawaseLightStreaks : affiche des trainées lumineuses sur les zones émettant de la lumière.
    • FilmGrain : donne un grain à l'image.
    • Linear Motion Blur.
    • Draw Edges : permet d'afficher les contours des objets, en se basant sur deux algorithmes d'edge detection (normals + depth, et object ID).

    Generator

    Les plug-ins de type Generator permettant de générer des maillages ou textures, de manière procédurale.

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

    Generic

    Les plug-ins de type Generic ont pour but d'étendre les fonctionnalités globales du moteur.

    • CastorGui : plugin étendant les fichiers de scène pour ajouter et dessiner des IHM (boutons, zones de texte, ...) via les incrustations 2D.
    • WaterRendering : permet un rendu de surfaces planes d'eau, avec support de la réfraction, en utilisant deux normal maps animées.
    • OceanRendering : permet l'affichage d'océan très basique, en définissant le vagues (orientation, vitesse et amplitude).
    • FFTOceanRendering : rendu d'océan plus avancé, basé sur l'algorithme de Tessendorf (utilisant les transformées de Fourrier) et le spectre de Phillips.

    ToneMapping

    Les plug-ins de type ToneMapping permettent de définir de nouveaux opérateurs de tone mapping.

    • Linear : l'opérateur par défaut.
    • Haarm Pieter Duiker.
    • Hejl Burgess Dawson (aussi appelé Filmic).
    • Reinhard.
    • Uncharted 2.
    • ACES

    Autres

    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.
    • HeightMapToNormalMap: Permet de convertir une height map en normal map.
    • CastorMeshConverter: permettant de convertir des meshes en format externe au format Castor3D
    • CastorMeshUpgrader: met à jour les meshes au format Castor3D vers la version la plus récente.

    Screenshots

    SponzaSponza, VCTCerberusPark, LegacyPark, PBRNyra, PBRSanMiguel, PBRSanMiguel, PBR, LPV

    -
    Edité par dragonjoker 20 mars 2022 à 16:00:00

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

              Castor3D

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