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