Castor3D is a multiplatform 3D engine written in C++ 14.
It uses a descriptive and easily comprehensible scene files text format.
It works on Windows and on GNU/Linux (GTK).
It uses OpenGL (with GLSL).
This engine is still a work in progress.
Download the source code from github to contribute!


The supported features are those:

  • Deferred rendering for opaque objects.
  • Weighted Blended rendering for transparent objects.
  • Normal mapping.
  • Parallax Occlusion mapping.
  • Screen Space Ambient Occlusion.
  • Shadow Mapping.
  • Reflection Mapping.
  • PBR rendering (Metallic and Specular), and Legacy rendering.
  • HDR rendering with various tone mapping operators.
  • Skeleton animations.
  • Per-vertex animations.
  • Scene graph.
  • Shaders are generated automatically from material and pass configuration.
  • Shaders are writable directly from C++ code.
  • Modular architecture, through different plug-ins types.
  • Compilable on supported platforms, using CMake.


The supported plug-ins types are: Importer, Divider, Renderer, PostEffect, Generic and ToneMapping.


Importer plug-ins allow the importing of various mesh files.
Currently implemented:

  • AssimpImporter, using ASSIMP library, to import a wide range of formats.
  • PlyImporter, used to import large PLY meshes (for which ASSIMP encounters some problems).
  • ObjImporter, used to import OBJ meshes.


Divider plug-ins allow mesh subdivision using various algorithms.
Currently implemented:

  • PN-Triangles subdivision surfaces;
  • Phong patches;
  • Loop patches.


Allows the selection of the rendering API.
Currently implemented:

  • GlRenderSystem, to use OpenGL.
  • TestRenderSystem, a test renderer, which does nearly nothing, but allows tests implementation.


Plug-in type that allows post processing effects.
Currently implemented:

  • Bloom: HDR bloom post effect.
  • GrayScale.
  • FXAA, a basic antialiasing.
  • SMAA, a good quality temporal antialiasing.
  • FilmGrain.
  • Kawase Light Streaks.


Used by HDR rendering, to customise the tone mapping type.
Currently implemented:

  • Linear.
  • Haarm Pieter Duiker.
  • Hejl Burgess Dawson (also named Filmic).
  • Reinhard.
  • Uncharted 2.


Plug-in type which allows to generate meshes, or textures, or other.
Currently implemented:

  • DiamondSquareTerrain: to generate terrains inside Castor3D scenes, using diamond-quare algorithm.


Plug-in type which allows to extend the behaviour of Castor3D.
Currently implemented:

  • CastorGUI: to build GUIs inside Castor3D scenes.

Some additional projects are also generated:

  • ImgConverter: Allows you to convert any image file type to XPM or ICO.
  • CastorUtilsTest: Allows you to run unit and performance tests for CastorUtils.
  • Castor3DTest: Allows you to run unit tests for Castor3D.
  • CastorViewer: A scene viewer demonstrating the use of Castor3D.


The documentation for CastorUtils and Castor3D can be generated using Doxygen.


Cerberus model
Cerberus model

Park Legacy
Park Legacy

Sponza PBR Bloom

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.