Skip to content

3D path tracing renderer written in C++ and Nvidia CUDA.

Notifications You must be signed in to change notification settings

Greketrotny/RayZath

Repository files navigation

RayZath

RayZath is a 3D Monte Carlo path tracing renderer written in C++ and CUDA. It's a learning project involving topics like: graphics rendering, radiosity, light transport, rendering equation, linear algebra, GPGPU programming, micro optimization, asynchronous execution and efficient memory management.

living_room_ui

bugatti teapot normal per vertex 7k spp
multiple lights 13k billiard

For more renders and progress click here.

Features

Engine core

  • Renderable objects: Triangle based meshes
  • Lights: Direct lights, Spot lights
  • Materials: Mirror, Glossy, Diffuse, Refractive, Scattering, Transparent, Emissive
  • Camera: Field of view, Depth of view, Aperture, Exposure time
  • Mapping: textures, normals, metalness, roughness, emission
  • Acceleration structure: oct-tree bounding volume hierarchy
  • Rendering:
    • asynchronous GPU/CPU rendering
    • cumulative sampling
    • progressive rendering
    • next event estimation (NEE)
    • multiple importance sampling (MIS)
  • System of handles and smart pointers
  • Resource sharing and mesh instantiation
  • Loading/saving .obj, .mtl files and .json scene description

GUI

  • Real time render viewport preview
  • Multiple viewports (resizing, panning, zooming, object selection)
  • Editing properties of all components
  • Live attaching/detaching maps to/from materials
  • Mesh instancing manipulation
  • Object groupping
  • Loading/Saving maps, materials, meshes, models and scenes
  • Common mesh generation (cube, uv sphere, plane, cone, cylinder, torus)
  • Common material generation (metals, plastics, translusives, ...)

Libraries and dependences

  • CUDA - gpu rendering
  • Vulkan + GLFW - backend for GUI
  • ImGui - immediate user interface
  • json library - loading/saving json files
  • stb image - loading/saving textures and images
  • Math - tiny math library

Releases

No releases published

Packages

No packages published