🌖 Rendering

Personal Vulkan Rasterizer — Smoke Engine

A real-time 3D rendering engine I built in C++ and Vulkan as a personal project to explore modern graphics techniques. It loads glTF 2.0 scenes and renders them through physically based, image-based-lit pipelines with filmic tone mapping.

  • Vulkan
  • C++
  • glTF 2.0
  • PBR (metallic-roughness)
  • Image-based lighting
  • Forward + deferred
  • Bindless textures

Rendering highlights

  • Physically based rendering with a metallic-roughness workflow and normal mapping.
  • Image-based lighting — HDR environment maps converted to irradiance and radiance cubemaps in a compute pass for ambient diffuse and specular.
  • Forward and deferred pipelines, with a bindless texture array indexing all materials in the forward pass.

Model credits. Sponza — original model by Marko Dabrovic (2002), improved version by Frank Meinl / Crytek, with a PBR texture pack via alexandre-pestana.com. Battle Damaged Sci-fi Helmet — PBR by theblueturtle_ (Sketchfab), published under a Creative Commons Attribution-NonCommercial license. Both distributed via the Khronos glTF Sample Models collection. Amazon Lumberyard Bistro — courtesy of Amazon Lumberyard, via the NVIDIA Open Research Content Archive (ORCA), licensed under CC BY 4.0.


Personal Pathtracer

Repo

A personal ray tracer implementation mainly for studying path tracing techniques on my own. Implementation is based on @Peter_shirley’s Ray Tracing in One Weekend (a very fun series, I highly recommend!) and PBRT.

Ray traced spheres

Assorted ray traced objects


WebGL deferred renderer

Repo

A WebGL renderer built in my graduate study.

Open in a new tab

WebGL renderer preview

Runs the live WebGL build in place — requires a browser with WebGL support. Best on desktop; may be slow on mobile devices.