Realtime Path Tracer for Bevy
bevy-hikari
is an implementation of global illumination for Bevy.
After Bevy releasing 0.8, the plugin moves to deferred hybrid path tracing.
For the old version (0.1.x) which uses voxel cone tracing with anisotropic mip-mapping, please check the bevy-0.6
branch.
:construction: This project is under heavily development. Certain passes are yet optimized, public interfaces may change between major versions, and minor versions may release very often.
:warning: Notes:
- Please run examples with
--release
flag to avoid the texture non-uniform indexing error - Please compile this libaray in release mode when using as a dependency
- Supported meshes must have these 3 vertex attributes: position, normal and uv
Bevy Version Support
bevy |
bevy-hikari |
---|---|
0.6 | 0.1 |
0.8 | 0.2 |
0.9 | 0.3 |
Progress
- Extraction and preparation of mesh assets and instances
- Asynchronous building of acceleration structures
- G-Buffer generation
- N-bounce indirect lighting
- Transparency
- Next event estimation
- Better light sampling (L-BVH + Alias table)
- ReSTIR: Temporal sample reuse
- ReSTIR: Spatial sample reuse
- Spatiotemporal filtering
- Temporal anti-aliasing
- Spatial up-scaling (FSR 1.0)
- Temporal up-scaling (SMAA TU4X)
- Skinned animation
- HDR output
- Bloom
- Hardware ray tracing (upstream related)
Basic Usage
- Add
HikariPlugin
to yourApp
afterPbrPlugin
- Setup the scene with a directional light
- Insert
HikariSettings
component to the camera
One can configure the renderer through HikariSettings
component on the camera entity.
Available options are:
If you are unsure about some terms in these options, you could check render passes for details.
use *;
use *;
use PI;
Custom Materials
bevy-hikari
is built based on bevy
's PBR standard material.
A material that is eligible for lighting needs to have surface properties a StandardMaterial
has (base color, metallic, etc).
In order to render with custom materials,
- Implement
Into<StandardMaterial>
for the materialCustomMaterial
, and - Add
GenericMaterialPlugin::<CustomMaterial>::default()
to the app - Add
GenericInstancePlugin::<CustomMaterial>::default()
to the app
Screenshots
Here are the screenshots of examples.
Simple
Cornell (2 Indirect Bounces)
City (Song Dynasty)
Scene (WW2)
Render Passes
License
Just like Bevy, all code in this repository is dual-licensed under either:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option.
Credits
- "Fire Extinguisher" model and textures by Cameron 'cron' Fraser.
- "WW2 City Scene" from sketchfab.
- "Song Dynasty Architectures" by 唐晨.
References
- ReSTIR: https://cs.dartmouth.edu/wjarosz/publications/bitterli20spatiotemporal.pdf
- ReSTIR GI: https://d1qx31qr3h6wln.cloudfront.net/publications/ReSTIR%20GI.pdf
- GRIS: https://d1qx31qr3h6wln.cloudfront.net/publications/sig22_GRIS.pdf
- SVGF: https://cg.ivd.kit.edu/publications/2017/svgf/svgf_preprint.pdf
- Filmic SMAA TU: https://www.activision.com/cdn/research/Dynamic_Temporal_Antialiasing_and_Upsampling_in_Call_of_Duty_v4.pdf