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