Skip to content

A general purpose ray traced renderer built with Zig + Vulkan

License

Notifications You must be signed in to change notification settings

ashpil/moonshine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Moonshine

A spectral path tracer built with Zig + Vulkan

A bathroom scene rendered with moonshine Salle de bain by nacimus, rendered with Moonshine

Features

  • Binaries
    • offline -- a headless offline renderer
    • online -- a real-time windowed renderer
    • hydra -- a hydra render delegate
  • Light Transport
    • Full spectral path tracing
    • Direct light sampling with multiple importance sampling for all lights and materials
  • Lights
    • 360° environment maps
    • Emissive meshes
  • Materials
    • Standard PBR with metallic + roughness
    • Mirror
    • Glass with dispersion

Dependencies

Build

  • zig (see version in CI)
  • DirectXShaderCompiler
  • For the online (real-time) renderer:
    • For Linux (Ubuntu, similar on others):
      • For Wayland: wayland-protocols libwayland-dev libxkbcommon-dev
      • For X11: libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev

Run

  • A GPU supporting Vulkan ray tracing

// TODO

  • Cameras
    • Fisheye
    • Lens System
  • Materials
    • Conductor with complex IOR
    • Transmissive with roughness
    • Material composition
  • Volumetrics
  • Lights
    • Experiment with sampling triangle via solid angle after selecting it via area
    • Experiment with unifying sampling mesh lights and environment map
    • BVH
  • Testing
    • Proper statistical tests GPU sampling routines
    • Proper statistical tests to make sure images have expected mean/variance
    • Should ensure validation layers are clean during tests
  • Resource management
    • Make sure we have all necessary errdefers
    • GPU resource arrays should be resizable
    • Need some sort of way to do async/parallel resource creation (transfers, processing)
  • Use physical (with correct scales) units
  • Integrators
    • ReSTIR
  • Spectral EXR output
  • Tonemapping
  • HDR display

Some notes about conventions

  • +z is up
  • phi is azimuthal angle (0-2pi) and theta is polar angle (0-pi)

Some light reading

License

This project is licensed under the AGPL.

About

A general purpose ray traced renderer built with Zig + Vulkan

Topics

Resources

License

Stars

Watchers

Forks