Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ashpil/moonshine
A general purpose ray traced renderer built with Zig + Vulkan
https://github.com/ashpil/moonshine
Last synced: 2 months ago
JSON representation
A general purpose ray traced renderer built with Zig + Vulkan
- Host: GitHub
- URL: https://github.com/ashpil/moonshine
- Owner: ashpil
- License: agpl-3.0
- Created: 2021-06-21T02:48:39.000Z (about 3 years ago)
- Default Branch: trunk
- Last Pushed: 2024-04-14T08:26:42.000Z (2 months ago)
- Last Synced: 2024-04-15T07:21:13.287Z (2 months ago)
- Language: Zig
- Homepage:
- Size: 24.8 MB
- Stars: 104
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: COPYING
Lists
- awesome-zig - moonshine🗒️A general purpose ray traced renderer built with Zig + Vulkan
- awesome-zig - ashpil/moonshine
README
# Moonshine
**A general purpose GPU ray traced renderer built with Zig + Vulkan**
[![A bathroom scene rendered with moonshine](https://repository-images.githubusercontent.com/378788480/b9ad3836-4558-43f6-82ed-6668d99399b4)](https://blendswap.com/blend/12584)
*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](.github/workflows/build.yml))
* 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
* Build sampling data structures on GPU
* 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
- [Importance sampling](https://computergraphics.stackexchange.com/q/4979)
- [Explicit light sampling](https://computergraphics.stackexchange.com/q/5152)
- [Multiple importance sampling](https://graphics.stanford.edu/courses/cs348b-03/papers/veach-chapter9.pdf)
- [Microfacets](https://agraphicsguy.wordpress.com/2015/11/01/sampling-microfacet-brdf/)
- [Actual materials](https://github.com/wdas/brdf) - ton of BRDF examples, in **CODE**!
- [Better sky](https://sebh.github.io/publications/egsr2020.pdf)### License
This project is licensed under the AGPL.