Sébastien Morris

sebw.morris@gmail.com

Back

DirectX11 Render Engine for Voxel worlds

Native C++ Direct3D11 engine prototype exploring custom rendering pipelines and simulations

A personal R&D project exploring low-level 3D graphics subsystems and rendering pipelines utilising Direct3D 11.

This engine serves as an architectural prototype designed to implement core graphics mechanics from scratch. It provides the testing environment and core architecture currently being used for my custom C++ Engine, TheGameEngine.

Technical features:

Rendering Pipeline:

  • Input Assembler: Configured initialisation with customisable vertex layout options, including position, UV coordinates, and normal mapping.
  • Custom Shaders: Generating compiled shader .cso files and handling data allocations for custom vertex and pixel shaders, and UV texture mapping. 
  • Buffer Wrappers: Developed generic utility structures to handle GPU buffer allocations (Vertex, Index, and Constant buffers), passing model, view, and projection transformation matrices.
  • Render Targets & Depth Stencils: Render target setups alongside depth-stencil states to manage opaque and transparent passes.

Voxel Pipeline:

  •  Camera Matrix Class: Modular camera controller to calculate view and projection matrices and modifying the respective constant buffers.
  •  Block Generation Utility Classes: Functions for creating blocks, handling type and texture data, world and UV coordinates, and orientation.
  • World Generation Utility Classes: Functions for generating customisable worlds with a chunk-based system, reusing the block generation utilities.  
  • Face Culling & Optimisation: Chunk batching and face visibility checks, taking into account transparency to cull vertices hidden within the terrain, reducing data memory size and draw calls.  

Future improvements:

  • Noise and heightmap terrain generation for visualising and simulating larger scale worlds
  • Lighting (Diffuse, ambient, specular), with handling of different types of lights (Directional, spot, ...)
  • Physically Based Rendering
  • Shadow casting (Shadow and depth maps)
  • Reflections and refractions (water, glass, ...)
  • Physics and collision simulation
  • Terraforming (Adding/Removing blocks)
  • Direct3D12 compatibility

Motivations:

This project was originally started in a rendering programming class, during which I established the base of the render engine. I am continuing this project because I want to further my low-level graphics knowledge by adding and exploring more advanced rendering features, like different lighting models, shadow techniques, physically based rendering, reflections and refractions... 
This allows me to prototype and grasp new features before correctly and cleanly integrating them within my main C++ Engine, TheGameEngine. 

    C++, Dierct3D11

    As this is a prototyping and experimentation project, all images and videos are works in progress