bevy_core_pipeline/core_3d/
camera_3d.rs1#![expect(deprecated)]
2
3use crate::{
4 core_3d::graph::Core3d,
5 tonemapping::{DebandDither, Tonemapping},
6};
7use bevy_ecs::prelude::*;
8use bevy_reflect::{std_traits::ReflectDefault, Reflect, ReflectDeserialize, ReflectSerialize};
9use bevy_render::{
10 camera::{Camera, CameraMainTextureUsages, CameraRenderGraph, Exposure, Projection},
11 extract_component::ExtractComponent,
12 primitives::Frustum,
13 render_resource::{LoadOp, TextureUsages},
14 sync_world::SyncToRenderWorld,
15 view::{ColorGrading, Msaa, VisibleEntities},
16};
17use bevy_transform::prelude::{GlobalTransform, Transform};
18use serde::{Deserialize, Serialize};
19
20#[derive(Component, Reflect, Clone, ExtractComponent)]
25#[extract_component_filter(With<Camera>)]
26#[reflect(Component, Default)]
27#[require(
28 Camera,
29 DebandDither(|| DebandDither::Enabled),
30 CameraRenderGraph(|| CameraRenderGraph::new(Core3d)),
31 Projection,
32 Tonemapping,
33 ColorGrading,
34 Exposure
35)]
36pub struct Camera3d {
37 pub depth_load_op: Camera3dDepthLoadOp,
39 pub depth_texture_usages: Camera3dDepthTextureUsage,
41 pub screen_space_specular_transmission_steps: usize,
59 pub screen_space_specular_transmission_quality: ScreenSpaceTransmissionQuality,
66}
67
68impl Default for Camera3d {
69 fn default() -> Self {
70 Self {
71 depth_load_op: Default::default(),
72 depth_texture_usages: TextureUsages::RENDER_ATTACHMENT.into(),
73 screen_space_specular_transmission_steps: 1,
74 screen_space_specular_transmission_quality: Default::default(),
75 }
76 }
77}
78
79#[derive(Clone, Copy, Reflect, Serialize, Deserialize)]
80#[reflect(Serialize, Deserialize)]
81pub struct Camera3dDepthTextureUsage(pub u32);
82
83impl From<TextureUsages> for Camera3dDepthTextureUsage {
84 fn from(value: TextureUsages) -> Self {
85 Self(value.bits())
86 }
87}
88impl From<Camera3dDepthTextureUsage> for TextureUsages {
89 fn from(value: Camera3dDepthTextureUsage) -> Self {
90 Self::from_bits_truncate(value.0)
91 }
92}
93
94#[derive(Reflect, Serialize, Deserialize, Clone, Debug)]
96#[reflect(Serialize, Deserialize)]
97pub enum Camera3dDepthLoadOp {
98 Clear(f32),
101 Load,
103}
104
105impl Default for Camera3dDepthLoadOp {
106 fn default() -> Self {
107 Camera3dDepthLoadOp::Clear(0.0)
108 }
109}
110
111impl From<Camera3dDepthLoadOp> for LoadOp<f32> {
112 fn from(config: Camera3dDepthLoadOp) -> Self {
113 match config {
114 Camera3dDepthLoadOp::Clear(x) => LoadOp::Clear(x),
115 Camera3dDepthLoadOp::Load => LoadOp::Load,
116 }
117 }
118}
119
120#[derive(Resource, Default, Clone, Copy, Reflect, PartialEq, PartialOrd, Debug)]
127#[reflect(Resource, Default, Debug, PartialEq)]
128pub enum ScreenSpaceTransmissionQuality {
129 Low,
133
134 #[default]
138 Medium,
139
140 High,
144
145 Ultra,
149}
150
151#[derive(Bundle, Clone)]
154#[deprecated(
155 since = "0.15.0",
156 note = "Use the `Camera3d` component instead. Inserting it will now also insert the other components required by it automatically."
157)]
158pub struct Camera3dBundle {
159 pub camera: Camera,
160 pub camera_render_graph: CameraRenderGraph,
161 pub projection: Projection,
162 pub visible_entities: VisibleEntities,
163 pub frustum: Frustum,
164 pub transform: Transform,
165 pub global_transform: GlobalTransform,
166 pub camera_3d: Camera3d,
167 pub tonemapping: Tonemapping,
168 pub deband_dither: DebandDither,
169 pub color_grading: ColorGrading,
170 pub exposure: Exposure,
171 pub main_texture_usages: CameraMainTextureUsages,
172 pub msaa: Msaa,
173 pub sync: SyncToRenderWorld,
175}
176
177impl Default for Camera3dBundle {
179 fn default() -> Self {
180 Self {
181 camera_render_graph: CameraRenderGraph::new(Core3d),
182 camera: Default::default(),
183 projection: Default::default(),
184 visible_entities: Default::default(),
185 frustum: Default::default(),
186 transform: Default::default(),
187 global_transform: Default::default(),
188 camera_3d: Default::default(),
189 tonemapping: Default::default(),
190 color_grading: Default::default(),
191 exposure: Default::default(),
192 main_texture_usages: Default::default(),
193 deband_dither: DebandDither::Enabled,
194 msaa: Default::default(),
195 sync: Default::default(),
196 }
197 }
198}