A playground to test my patience.
model by futaba@blender, environment map downloaded from Poly Haven
Common Vulkan utilities to save my sanity: abstraction classes, validation layer, debug draw,etc.
Dear ImGui and RenderDoc integration
Loading gLTF scenes and basic scene management
- With a Blender addon to make my workflow easier
- Automatic hot reload when asset files change
A CPU shader simulator that helps myself prototype and debug GLSL shaders. It was first created to help develop the sky atmosphere. See example usage in Vincent.cpp.
A variety of rendering paths that can be modified/extended into more variants:
- Simple unlit forward
- PBR deferred with many post-processing options
- emissive and translucent materials
- environment maps
- HDR, tone mapping, gamma correction, exposure compensation
- Multi-threaded CPU path tracing with optional SIMD acceleration using Intel ISPC
- basic optimizations (BVH, direct light rays, Russian Roulette, correlated multi-jittered sampling within each pixel, cosine-weighted importance sampling)
- SIMD-specific optimizations that were part of my CMU-15418 final project, see pathtracer-standalone branch
- diffuse, mirror and glass materials
- image-based lighting
- depth of field
- Render to file using the path tracer
- RTX pipeline using the
VK_KHR_ray_tracing_pipeline
extension, even though it now just draws a single triangle
Physically-based sky atmosphere for both deferred rendering path and path tracer
- It's an implementation of Unreal's sky atmosphere
(OpenGL legacy feature, not integrated yet) Procedural grass generation and animation. See grass-sim branch.
(OpenGL legacy feature, now deleted) shadow mapping for point and directional lights
It used to run on both PC and Mac, but now it's probably broken on Mac.
(The above water tower model and its textures are from www.animatedheaven.weebly.com)
./ellyn
WASD to move the camera, E/Q to move up/down. LMB drag to rotate camera. ESC to quit.
When pathtracer is set as the active renderer, camera control is disabled, but instead some pathtracer-specific controls become effective. Look for PathtracerController
in the scene hierarchy for details.
Something like:
./asz -w 200 -h 150 -o output.png
See config/global.ini
for properties that get loaded on program start. It gets loaded once and stays effective for the duration of the program.
There's also config/pathtracer.ini
that gets loaded when the path tracer initializes. It automatically hot reloads, so I use it for tweaking path tracer settings.
This is Ellyn:
And this is Asz (short for Aszelea):
There is also Vin (short for Vincent), but I still need to make them a portrait.