Ce moteur 3D a l'ambition d'être multi-plate-forme et multi-renderer.
Pour l'instant, le développement sous Windows et Linux est complètement exploitable. Pour Linux la distribution testée est une Debian Wheezy amd64.
Le renderer OpenGL est complètement fonctionnel, les renderers Direct 3D sont bien avancés, mais il y a encore quelques bugs.
La reconnaissance des Shaders GLSL est implémentée, HLSL est en cours d'implémentation.
Support de nombreux formats de fichiers en utilisant ASSIMP.
Le système d'animation a un squelette qu'il me faut compléter afin d'avoir une implémentation correcte d'un système d'animation avec ou sans squeleton (notamment Morphing).
Version 0.7.0
Modifications
CMake
- Ajout de la possibilité de changer le dossier des binaires, au travers des variables PROJECTS_BINARIES_OUTPUT_PATH et PROJECTS_BINTEMP_OUTPUT_PATH.
- Ajout du support d'AStyle, activé via l'option PROJECTS_USE_PRETTY_PRINTING.
- Utilisation de CPack pour générer le setup WiX (ou DEB), activé via l'option PROJECTS_PACKAGE_WIX (respectivement PROJECTS_PACKAGE_DEB).
- Ajout de la possibilité d'activer le profileur de code de Visual Studio, avec l'option PROJECTS_PROFILING.
- Ajout de la possibilité de choisir quels projets du Castor sont à générer (dans le groupe CASTOR).
- Réorganisation globale de l'arborescence des fichiers
Général
- Découpe des fichiers afin de n'avoir plus qu'une classe par fichier.
- Support de la compilation x64.
- Compabilité avec wxWidgets 2.8 et Linux améliorée.
- Ajout de fonctions Destroy pour chaque fonction Create dans les plug-ins, afin que la création et la destruction de ceux-ci se fassent dans l'espace mémoire des DLL (pour Windows).
- Ajout du plug-in d'import ASSIMP, permettant d'élargir le nombre de formats supportés. La fonction ImporterPlugin::GetExtensions permet maintenant de récupérer un tableau de paires <extension, file type>.
CastorUtils
- Toutes les variables statiques et globales ont été enlevées.
- Remplacement de la classe String par une classe str_utils.
- Suppression des dépendances à boost, à part pour thread, et uniquement pour les compilateurs ne supportant pas std::thread.
- Les macros cstrnlen, cstrftime, cstrncpy, cfopen, cfopen64, cfseek et cftell ont été remplacées par des fonctions dans Castor.
- Suppression de la macro DECLARE_SHARED_PTR, remplacée par DECLARE_SMART_PTR, et les typedefs XxxPtr ont été remplacés par leurs équivalents XxxSPtr.
- Suppression de l'encodage Unicode pour les fichiers.
- Ajout du support de l'indentation de flux.
- Améliorations de Castor::FileParser :
- Il peut ignorer des sections de code sans avoir à les commenter (tels que les blocs de shader HLSL alors que le RenderSystem chargé est GlRenderSystem, etc.).
- Il prend en compte les paramètres des fonctions d'analyse.
- Les fonctions peuvent maintenant avoir des paramètres, pas uniquement des types de paramètres, et ces paramètres s'analysent eux-mêmes.
- Réduction de l'occupation mémoire des images.
- Modification de Castor:oint :
- les fonctions non dépendantes ont été déplacées dans une classe d'aide : Castor::point. Cette classe contient donc les fonctions normalise, get_normalised, dot, cos_theta, negate et toutes les fonctions de calcul de distance.
- Suppression des méthodes link, copy/clopy/clone.
- Il contient maintenant un tableau statique au lieu d'un tableau dynamique.
- La classe Castor::Colour ne dérive plus de Point4f.
- La fonction DynamicLibrary::GetFunction a été modifiée, ajout d'un paramètre template, le type de fonction, afin de ne plus avoir de conversions lors de l'utilisation de DynamicLibrary::GetFunction.
- Ajout du support des niveaux de log pour Castor::Logger.
- Modifications de Castor::Line3D :
- Implémentation de la méthode de calcul d'intersection
- Cette classe a maintenant deux constructeurs nommés : FromPointAndSlope et FromPoints, pour éviter les confusions.
- Création de deux nouvelles classes : Size et Positionau lieu d'un typedef pour chacune.
- Création de la classe Castor::Coord pour récupérer les fonctionnalités dynamiques de l'ancien Castor:oint.
Castor3D
- Ajout des méthodes HasParameter et SetParameter dans la classe ShaderObject, pour appliquer les matrices de la classe Pipeline.
- Ajout de fonctions Begin et End dans la classe Mesh afin de pouvoir itérer sur les submeshes sans passer par les fonctions GetSubmesh et GetSubmeshCount.
- Ajout de fonctions Begin et End dans la classe Material functions Begin and End.
- Ajout de la classe FrameVariableBuffer pour gérer les variables uniformes avec les UBO OpenGL ou les Constant buffer de Direct3D 11.
- Ajout de la classe DepthStencilState pour gérer ces états à la mode Direct3D 11 (qui fait ça bien).
- De même, ajout des classes BlendState et RasteriserState.
- Création des classes TextureBase, StaticTexture et DynamicTexture pour faciliter l'implémentation des cibles de rendu.
- Ajout de canaux pour les textures (couleur, ambiante, diffusion, speculaire, normale, hauteur, brillance).
- Création de la classe TechniqueParameters pour passer des paramètres spécifiques aux techniques comme, par exemple, le nombre d'échantillons (pour le MSAA).
- Introduction de la classe SamplerState pour grouper les appels à SetSamplerState et autres.
- Implémentation des Frame Buffers.
- Réduction de l'occupation mémoire des tampons de sommets.
- Modification de BufferElementGroup afin qu'il ne puisse plus contenir son tampon.
- La classe Overlay n'étend plus Renderable, il n'y a plus qu'une instance de OverlayRenderer, gérée par la classe OverlayManager. Toutes les incrustations sont maintenant rendues via cette instance.
- Amélioration de l'occupation mémoire : diminution drastique de la taille d'un Vertex (de 152 à 24 octets) et d'une Face (de 140 à 16 octets).
- Modification de Subdivision, elle se trouve maintenant uniquement dans Subdivider et plus dans Geometry, Mesh ou Submesh.
- Les lumières sont maintenant implémentées dans une texture, passant la limite de 8 à 100 sources.
- Suppression des méthodes ApplyXXXMatrix de la classe IPipelineImpl, maintenant la classe Pipeline applique les matrices elle-même.
- Implémentation du MSAA.
- Implémentation de l'Alpha to Coverage lorsque le MSAA est activé.
- Revue des tailles : Viewport contient la taille interne, RenderTarget et RenderWindow contiennent la taille externe.
- Découpe de eBUFFER_MODE en eBUFFER_ACCESS_TYPE et eBUFFER_ACCESS_NATURE.
- L'initialisation des objets GPU se passe maintenant avec l'utilisation de deux évènements : InitialiseEvent et CleanupEvent.
- Fusion de GpuBuffer::Initialise et GpuBuffer::SetShaderProgram afin d'en simplifier l'utilisation.
- Suppression de la génération automatique des mipmaps. Maintenant, si l'utilisateur vuet les générer, il utilise la fonction DynamicTexture::GenerateMipmaps.
- Implémentation de l'instanciation hardware des maillages.
- Modifications de Castor3D::Submesh :
- Les classes Submesh et SmoothingGroup ont été fusionnées.
- Modification de la méthode ComputeTangents pour prendre en compte les normales des sommets.
- Ajout d'un overload pour la méthode AddPoints afin de pouvoir lui donner un stVERTEX_GROUP en paramètre.
- Modification de la génération des normales.
- Déplacement des matériaux, de Submesh à Geometry.
- Modification du compte des instances, pour le rendre spécifique aux matériaux utilisés par les instances du Submesh.
- Modifications de Castor3D:ass :
- Création d'une fonction Pass::Initialise afin que les shaders ne soient initialisés qu'une fois, et pas à chaque frame.
- Réorganisation des unités de texture des passes, afin que celles associées à un canal arrivent premières.
- Ajout d'une instance de BlendState dans la classe Pass et suppression de la gestion du mélange RGB/Alpha de la classe Pass.
- Modifications de Castor3D::Scene :
- Ajout de la possibilité d'activer ou désactiver le deferred rendering, option disponible dans les fichier cscn.
- Ajout de fonctions templates pour ajouter, supprimer ou récupérer un objet quel que soit son type (Light, Geometry, Camera, SceneNode).
- Les Submesh sont maintenant triés en fonction du matériau appliqué afin de pouvoir, entre autres, rendre les sous-maillages avec transparence après les autres.
- Modifications de Castor3D::RenderTarget :
- Modifié RenderTarget : elle contient maintenant son frame buffer et ce qui s'y rattache. C'est maintenant un Renderable et un TargetRenderer a donc été créé.
- RenderTarget utilise maintenant RenderTechnique pour effectuer son rendu.
- Modifications de Castor3D::RenderWindow :
- RenderWindow n'étend plus RenderTarget, mais en a un en membre privé.
- Création d'une méthode WindowRenderer::EndScene pour préparer le rendu du frame buffer de la RenderTarget dans la fenêtre.
- Modifications des shaders :
- Suppression des appels à ShaderObject afin d'en faire une classe interne à Castor3D.
- Modification des shaders, ils prennent maintenant en compte le modèle de shader, contiennent tous les fichiers et sources définis par modèle. Le choix du modèle est fait à la compilation, en choisissant le modèle le plus haut supporté.
- Modification des sources par défaut pour les shaders. Elles sont maitenant générées automatiquement et plus aucun fichier externe n'est nécessaire.
- Modification de FrameVariable afin de prendre en compte eFRAME_VARIABLE_TYPE.
- Modifications de Castor3D::Context
- Suppression des méthodes Context::Enable et Context:isable, suppression de la classe RenderState.
- Suppression de la méthode Context::SetPolygonMode.
GlRenderSystem
- Création de la classe GeometryBuffers pour gérer les Vertex Array Objects. Ils contiennent maintenant leurs tampons, permettant d'intégrer le choix d'utiliser les VAO ou non.
- Les Geometry shader fonctionnent dans GlRenderSystem.
- Suppression de la dépendance à GLEW.
- Support des extensions de debug d'OpenGL.
- Ajout du support de GL_MIRRORED_REPEAT.
- Ajout du support de GL_TEXTURE_MAX_ANISOTROPY.
GuiCommon
- Maintenant ShaderDialog utilise wxSizers.
- Utilisation de wxStcEditor pour l'édition de shaders.
- La fenêtre de matériaux utilise les wxSizers pour placer et redimensionner les éléments.
- Ajout de la possibilité de changer le matériau utilisé par un sous-maillage, avec la fenêtre wxGeometriesListFrame.
- Correction de bugs dans le chargement des images.
- Amélioration de StcTextEditor afin d'avoir une meilleure coloration syntaxique.
CastorViewer
- Maintenant, MainFrame utilise wxSizers.
- Ajout d'options de ligne de commande :
-f/--file pour charger un fichier de scène au chargement-h/--help pour afficher une aide-l/--level pour définir le niveau de log :- 0 pour logger debug, infos, warnings et erreurs- 1 pour logger infos, warnings et erreurs- 2 pour logger warnings et erreurs- 3 pour logger les erreurs uniquement. - Maintenant les plug-ins sont chargés dans un thread
- Ajout d'un bouton "Export".
Corrections
General
- Modification des importeurs afin de ne plus avoir de fuites de mémoires détectées par Visual Studio.
CastorUtils
- Castor::Image a été modifiée, j'ai retiré la possibilité de charger les images par handle, car cela provoquait des problèmes avec FreeImage sur certains formats.
- Réparation d'un problème de matrices lors du rendu des incrustations.
- Correction des transformations récursives.
Castor3D
- Corrections des sous-maillages ayant un matériau transparent, car ils n'étaient pas affichés.
- Corrigé la génération de mipmaps.
CastorViewer
- Déplacement de la destruction de m_pCastor3D dans la méthode OnDestroy.
GlRenderSystem
- Correction d'un bug dans DoGetDeferredShaderSource.
- Correction de la génération des mipmaps dans les classes GlStaticTexture et GlDynamicTexture.
- Correction du traitement des textures de brillance dans les programmes GLSL auto générés.
ObjImporter
- L'import des matériaux et textures a été corrigé.
Dépendances
- Pour compiler CastorUtils, vous aurez besoin de FreeImage et freetype2.
- Pour compiler Castor3D, vous aurez besoin de FreeImage, freetype2.
- Pour compiler GlRenderSystem vous aurez besoin de OpenGL.
- Pour compiler GuiCommon, CastorShape et CastorViewer, vous aurez besoin de wxWidgets, version 2.8.12 au minimum (testé avec les versions 2.8.12, 2.9.x et 3.0).
- Pour compiler ASSIMPImporter, vous aurez besoin de ASSIMP.
Téléchargement
Sources
Sources de Castor3D (Miroir).
Exécutables
Installeur (Windows x86) (Miroir).
Installeur (Debian amd64) (Miroir).
Données optionnelles
Images et scènes de test (Miroir).