/Althea

Althea is a glTF-based rendering engine built in Vulkan.

Primary LanguageC++Apache License 2.0Apache-2.0

Althea

Nithin Pranesh

Althea is a glTF-based rendering engine built in Vulkan. The goal is to create a flexible and performant rendering platform to support future graphics projects. The progress so far and some of my current projects using the engine are detailed below.

Projects Showcase

These are a few projects built using Althea.

Althea Demo: Restir DI

Stable Fluids is a 2D incompressible fluid simulation based on "Stable Fluids" by Jos Stam.

Althea Demo: GPU Particle Collisions

Pies for Althea is an Althea integration of Pies. Pies is a constraint- and particle-based, soft-body physics engine based on the paper "Projective Dynamics: Fusing Constraint Projections for Fast Simulation", Bouaziz et. al 2014.

Features

Point lights and omni-directional shadow mapping.

Physically based rendering of glTF models with HDR image-based lighting.

Results

Precomputed diffuse and glossy irradiance maps

Deferred Rendering

G-Buffer contains textures for positions, normals, albedo, and metallic-roughness-occlusion.

Screen-Space Reflection / Ambient Occlusion

Results

An example GBuffer, the reflection buffer, the Gaussian-blurred glossy reflections, and the final render.

Shader Hot-Reloading

Core API

  • Vulkan backend to initialize device, manage the swapchain, synchronize a double-buffered render-loop, etc.
  • Abstractions and convenient builders for render passes, graphics / compute / RT pipelines, frame buffers, etc.
  • Abstractions for old-school descriptor set allocation / binding.
  • More modern, bindless heap available for easy registration of resources. Matching shader-side framework to dereference bindless handles safely.
  • Resource wrappers and utilities for all sorts of buffers, images, samplers, acceleration structures, shader binding tables, render targets, etc. VMA integration to manage device allocations.
  • Shader hot-reloading - shaderc used for GLSL to Spir-V compilation.

Gltf Loading

  • Loading and rendering of gltfs - compatible with both bindless as well as conventional binding-based contexts. Cesium Native is used for parsing the glTFs.
  • Integrate MikkTSpace for generating tangents when missing from the glTF.

Rendering Features

  • Deferred rendering framework. Screen-space reflections / ambient-occlusion
  • Various PBR shader utilities for BRDF evaluations, random sampling, IBL pre-computation / sampling, etc.
  • Screen-space reflection and screen-space ambient occlusion.
  • Point-light shadow-cubemaps.
  • Realtime path-tracing framework based on Restir - currently implements Restir DI.

Miscellaneous

  • GPU-visible input system built on GLFW.
  • Velocity feedback based camera controller.
  • ImGui integration.
  • Integrated clang-format.