RedBud Engine

RedBud is a real-time rendering and game engine I started working on years ago.  The engine was started from scratch and is written entirely in C++.  The graphics module was originally written in Direct3D 11, and was updated to Direct3D 12 when it was publicly released.  Since it’s a hobby project I work on in my free time for enjoyment, and based on the fact that I’m typically a bit more interested in implementing new and interesting rendering techniques than anything, only one graphics back-end is implemented, although it has been designed in a way that porting to similar-level APIs (Vulkan, particularly) shouldn’t be too difficult.

Skip past the feature list for screenshots.

Rendering

  • Full Direct3D 12 support
  • Multi-threaded command list generation and submission
  • Deferred rendering
  • Forward rendering
  • Shadow maps for directional, point, and spot lights
  • Cascaded shadow maps for directional lights
  • Multi-camera support (split-screen, etc.)
  • Physically-based lighting model
  • Area lights
  • Atmosphere with multiple scattering
  • Volumetric clouds
  • Crepuscular rays for directional lights
  • Opaque and transparent geometry
  • Screen-space separable subsurface scattering with transmittance
  • Screen-space glossy reflections
  • Screen-space ambient occlusion
  • Depth of field with bokeh
  • Motion blur
  • Lens flare
  • Chromatic abberation
  • Vignette
  • Film grain
  • Bloom
  • Tone mapping
  • Fast approximate anti-aliasing (FXAA)
  • Real-time updating of environment probes
  • Approximated global illumination using environment probes
  • Heightmap terrain
  • Font rendering

Animation

  • Skinned models

Math

  • Custom math library with vector, matrix, and quaternion types, as well as common functions for each
  • Noise library with support for OpenSimplex noise and Worley noise

Physics

  • Bullet Physics SDK integration
  • Application-level callbacks for customizable, user-defined collision responses
  • Mass aggregate system for particle physics

Sound

  • 3D audio support
  • Reverb
  • Mixing of master track channels
  • Multiple channels of simultaneously playing sound effects

Networking

  • TCP/UDP packet sending and receiving
  • Broader networking support is future work

General Features

  • JSON scene definitions
  • Configuration file support for easy feature-toggling and setting adjustment
  • Entity-component system for handling scene object creation, updating, and communication
  • Customizable logging
  • Model loading from various formats
  • .DDS, .PNG, and .JPG texture support
  • Keyboard and mouse input support
  • Gamepad input support
  • Thread pool implementation for running concurrent tasks
  • Screenshot capture

Third-Party Libraries

Upcoming Features

  • Improved skin BRDF
  • Impoved cloth BRDF
  • Hair and fur rendering
  • Grass rendering
  • Small and large body water rendering
  • Volumetric lighting
  • Post-process color grading

Screenshots

Physically based shading for dielectrics and metals

PBR Materials 1 PBR Materials 2

Area Lights

Area Lights 1

Atmospheric scattering

Seamless ground-to-space transition.

Ground to Space 1 Ground to Space 2 Ground to Space 3

Mars-like atmosphere.

Mars-like Atmosphere

Volumetric clouds and terrain

Volumetric Clouds Terrain Day Terrain Evening

Subsurface scattering and transmittance

Subsurface Scattering 1 Subsurface Scattering 2
Transmittance 1 Transmittance 2

Depth of field with bokeh

DOF Focal Point 1 DOF Focal Point 2 DOF Focal Point 3
DOF Face 1 DOF Face 2
DOF Bokeh 1 DOF Bokeh 2 DOF Bokeh 3

Crepuscular rays and lens flare

Crepuscular Rays Lens Flare Lens Flare with Vignette and Film Grain

Screen space glossy reflections with reflection probe fallback

Smooth Surface Reflections Rough Surface Reflections

Motion blur

Subtle Nauseating

Mixed deferred and forward rendering for transparent objects

Transparent Objects