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.
![]() |
![]() |
![]() |
![]() |
For more renders and progress click here.
- 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
- 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, ...)
- 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