1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//! Built-in render passes for the default pipeline.
//!
//! These passes implement [`PassNode`](super::rendergraph::PassNode) and can be used
//! directly or as references for custom pass implementations.
//!
//! # Geometry Passes
//!
//! | Pass | Description |
//! |------|-------------|
//! | [`MeshPass`] | Static mesh rendering with lighting |
//! | [`SkinnedMeshPass`] | Animated skeletal mesh rendering |
//! | [`DecalPass`] | Projected decal rendering |
//! | [`ParticlePass`] | GPU particle billboard rendering |
//! | [`TextPass`] | 3D text rendering |
//! | [`LinesPass`] | Debug line rendering |
//! | [`GridPass`] | Infinite ground grid |
//! | [`SkyPass`] | Procedural sky/atmosphere |
//! | [`UiPass`] | UI rectangle + text rendering (batched) |
//!
//! # Shadow Passes
//!
//! | Pass | Description |
//! |------|-------------|
//! | [`ShadowDepthPass`] | Cascaded shadow map generation |
//!
//! Shadow mapping uses 4 cascades (`NUM_SHADOW_CASCADES`) for directional lights.
//!
//! # Post-Processing Passes
//!
//! | Pass | Description |
//! |------|-------------|
//! | [`PostProcessPass`] | Final compositing with tonemapping |
//! | [`BloomPass`] | HDR bloom effect |
//! | [`SsaoPass`] | Screen-space ambient occlusion |
//! | [`SsaoBlurPass`] | SSAO blur for soft shadows |
//! | [`SsgiPass`] | Screen-space global illumination |
//! | [`SsgiBlurPass`] | SSGI bilateral blur |
//! | [`DepthOfFieldPass`] | Bokeh depth of field |
//! | [`OutlinePass`] | Selection outline rendering |
//! | [`SelectionMaskPass`] | Selection mask generation |
//! | [`BlitPass`] | Simple texture copy |
//!
//! # Using Built-in Passes
//!
//! ```ignore
//! fn configure_render_graph(
//! &mut self,
//! graph: &mut RenderGraph<World>,
//! device: &wgpu::Device,
//! surface_format: wgpu::TextureFormat,
//! resources: RenderResources,
//! ) {
//! // Add bloom post-processing
//! let bloom = BloomPass::new(device, width, height);
//! graph.pass(Box::new(bloom))
//! .read("hdr", resources.scene_color)
//! .write("bloom", bloom_texture);
//!
//! // Add SSAO
//! let ssao = SsaoPass::new(device, width, height);
//! graph.pass(Box::new(ssao))
//! .read("depth", resources.depth)
//! .read("normals", resources.view_normals)
//! .write("ssao_raw", ssao_raw);
//!
//! let ssao_blur = SsaoBlurPass::new(device, width, height);
//! graph.pass(Box::new(ssao_blur))
//! .read("input", ssao_raw)
//! .write("output", ssao_final);
//!
//! // Final post-process with tonemapping
//! let postprocess = PostProcessPass::new(device, surface_format, bloom_intensity);
//! graph.pass(Box::new(postprocess))
//! .read("hdr", resources.scene_color)
//! .read("bloom", bloom_texture)
//! .read("ssao", ssao_final)
//! .write("output", resources.swapchain);
//! }
//! ```
//!
//! # Pass Configuration
//!
//! Most passes accept configuration in their constructors:
//!
//! ```ignore
//! // Bloom with custom mip levels
//! let bloom = BloomPass::new(device, width, height);
//!
//! // SSAO with custom radius/samples
//! let ssao = SsaoPass::new(device, width, height);
//!
//! // Post-process with bloom intensity
//! let postprocess = PostProcessPass::new(device, format, 0.3); // 30% bloom
//! ```
pub use ;
pub use GrassPass;
pub use ;
pub use ;
pub use ;
pub use ;