/ThreeL

An implementation of lighting via light linked list in Direct3D 12 with a side of PBR

Primary LanguageC++MIT LicenseMIT

ThreeL: An implementation of lighting via light linked list

MIT Licensed

ThreeL is an implementation of a somewhat unusual lighting algorithm, real-time lighting via light linked list.

You can read more about ThreeL and the lighting via light linked list algorithm on my portfolio.

Pre-built binaries can be found here on GitHub.

The project utilizes relatively thin abstractions, hopefully making it more friendly for beginners to learn something from. In this renderer you'll find:

  • Direct3D 12
  • Physically-based rendering (matching the core glTF feature set)
  • A forward renderer with a depth pre-pass
  • Generating mipmap chains in compute
  • Compute-based particle systems
  • Basic glTF loading (non-conformant, it's restricted to the features needed by ThreeL)
  • Bindless rendering (Specifically for textures/samplers used by PBR materials and some mesh data)
  • A few little Dear ImGui-based tools for fiddling with things

Controls

Move with WASD*, click and drag to look around. Hold Shift to sprint, Ctrl to move slowly.

You can also use an Xbox Controller. Click in the left stick to sprint.

Various debug visualizations, settings, and tools can be accessed using the UI.

(*Or ZWSD or ,AOE or WARS whatever your keyboard uses for those keys. Arrow keys work too.)

Building

Building should be as simple as opening ThreeL.sln in Visual Studio 2022 and pressing F5.

Build Configurations

ThreeL has three build configrations:

  • Debug - Code optimizations disabled (including shaders) with debug layer & asserts – slowest
  • Checked - Optimizations enabled with asserts only – faster
  • Release - Optimizations enabled without asserts – fastest

The debug and checked configurations are instrumented with WinPixEventRuntime if you're wanting to inspect the structure of the frame using PIX or RenderDoc.

License

ThreeL is licensed under the MIT License. See the license file for details.

Additionally, ThreeL has some third-party dependencies. See the third-party notice listing for details.