Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_solari/src/pathtracer/mod.rs
9460 views
1
mod extract;
2
mod node;
3
mod prepare;
4
5
use crate::SolariPlugins;
6
use bevy_app::{App, Plugin};
7
use bevy_asset::embedded_asset;
8
use bevy_camera::Hdr;
9
use bevy_core_pipeline::schedule::{Core3d, Core3dSystems};
10
use bevy_ecs::{component::Component, reflect::ReflectComponent, schedule::IntoScheduleConfigs};
11
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
12
use bevy_render::{
13
renderer::RenderDevice, ExtractSchedule, Render, RenderApp, RenderStartup, RenderSystems,
14
};
15
use extract::extract_pathtracer;
16
use node::{init_pathtracer_pipelines, pathtracer};
17
use prepare::prepare_pathtracer_accumulation_texture;
18
use tracing::warn;
19
20
/// Non-realtime pathtracing.
21
///
22
/// This plugin is meant to generate reference screenshots to compare against,
23
/// and is not intended to be used by games.
24
pub struct PathtracingPlugin;
25
26
impl Plugin for PathtracingPlugin {
27
fn build(&self, app: &mut App) {
28
embedded_asset!(app, "pathtracer.wgsl");
29
}
30
31
fn finish(&self, app: &mut App) {
32
let render_app = app.sub_app_mut(RenderApp);
33
34
let render_device = render_app.world().resource::<RenderDevice>();
35
let features = render_device.features();
36
if !features.contains(SolariPlugins::required_wgpu_features()) {
37
warn!(
38
"PathtracingPlugin not loaded. GPU lacks support for required features: {:?}.",
39
SolariPlugins::required_wgpu_features().difference(features)
40
);
41
return;
42
}
43
44
render_app
45
.add_systems(RenderStartup, init_pathtracer_pipelines)
46
.add_systems(ExtractSchedule, extract_pathtracer)
47
.add_systems(
48
Render,
49
prepare_pathtracer_accumulation_texture.in_set(RenderSystems::PrepareResources),
50
)
51
.add_systems(Core3d, pathtracer.after(Core3dSystems::MainPass));
52
}
53
}
54
55
#[derive(Component, Reflect, Default, Clone)]
56
#[reflect(Component, Default, Clone)]
57
#[require(Hdr)]
58
pub struct Pathtracer {
59
pub reset: bool,
60
}
61
62