Path: blob/main/crates/bevy_solari/src/pathtracer/mod.rs
6596 views
mod extract;1mod node;2mod prepare;34use crate::SolariPlugins;5use bevy_app::{App, Plugin};6use bevy_asset::embedded_asset;7use bevy_core_pipeline::core_3d::graph::{Core3d, Node3d};8use bevy_ecs::{component::Component, reflect::ReflectComponent, schedule::IntoScheduleConfigs};9use bevy_reflect::{std_traits::ReflectDefault, Reflect};10use bevy_render::{11render_graph::{RenderGraphExt, ViewNodeRunner},12renderer::RenderDevice,13view::Hdr,14ExtractSchedule, Render, RenderApp, RenderSystems,15};16use extract::extract_pathtracer;17use node::PathtracerNode;18use prepare::prepare_pathtracer_accumulation_texture;19use tracing::warn;2021/// Non-realtime pathtracing.22///23/// This plugin is meant to generate reference screenshots to compare against,24/// and is not intended to be used by games.25pub struct PathtracingPlugin;2627impl Plugin for PathtracingPlugin {28fn build(&self, app: &mut App) {29embedded_asset!(app, "pathtracer.wgsl");30}3132fn finish(&self, app: &mut App) {33let render_app = app.sub_app_mut(RenderApp);3435let render_device = render_app.world().resource::<RenderDevice>();36let features = render_device.features();37if !features.contains(SolariPlugins::required_wgpu_features()) {38warn!(39"PathtracingPlugin not loaded. GPU lacks support for required features: {:?}.",40SolariPlugins::required_wgpu_features().difference(features)41);42return;43}4445render_app46.add_systems(ExtractSchedule, extract_pathtracer)47.add_systems(48Render,49prepare_pathtracer_accumulation_texture.in_set(RenderSystems::PrepareResources),50)51.add_render_graph_node::<ViewNodeRunner<PathtracerNode>>(52Core3d,53node::graph::PathtracerNode,54)55.add_render_graph_edges(Core3d, (Node3d::EndMainPass, node::graph::PathtracerNode));56}57}5859#[derive(Component, Reflect, Default, Clone)]60#[reflect(Component, Default, Clone)]61#[require(Hdr)]62pub struct Pathtracer {63pub reset: bool,64}656667