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

Repository files navigation

Moonshine

A general purpose GPU ray traced renderer 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 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

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
    • Should work on Windows without additional dependencies

Run

  • A GPU supporting Vulkan ray tracing

// TODO

  • Tonemapping
  • HDR display
  • Cameras
    • Projection
      • Orthographic
      • Arbitrary distortion
    • Bloom
    • Glare
  • Materials
    • Metal
    • Transmissive with roughness
    • Mix
    • Layer
  • Volumetric
  • Spectral
  • Lights
    • Experiment with sampling triangle via solid angle after selecting it via area
    • Experiment with unifying sampling mesh lights and environment map
  • 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
    • Delayed-destruction resources should be attached to command buffer
    • GPU resource arrays should be resizable
    • Need some sort of way to do async resource creation (transfers, processing)
  • Use physical (with correct scales) units
  • Integrators
    • ReSTIR DI
    • ReSTIR PT

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