forked from Game4all/bevy_vox_mesh
-
Notifications
You must be signed in to change notification settings - Fork 3
/
transmission-scene.rs
87 lines (80 loc) · 2.64 KB
/
transmission-scene.rs
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
use bevy::{
core_pipeline::{
bloom::BloomSettings,
core_3d::ScreenSpaceTransmissionQuality,
experimental::taa::{TemporalAntiAliasBundle, TemporalAntiAliasPlugin},
tonemapping::Tonemapping,
},
pbr::{VolumetricFogSettings, VolumetricLight},
prelude::*,
};
use bevy_vox_scene::{VoxLoaderSettings, VoxScenePlugin};
use utilities::{PanOrbitCamera, PanOrbitCameraPlugin};
fn main() {
let mut app = App::new();
app.add_plugins((
DefaultPlugins,
PanOrbitCameraPlugin,
VoxScenePlugin {
global_settings: Some(VoxLoaderSettings {
voxel_size: 0.05,
..default()
}),
},
))
.add_systems(Startup, setup);
// *Note:* TAA is not _required_ for specular transmission, but
// it _greatly enhances_ the look of the resulting blur effects.
// Sadly, it's not available under WebGL.
#[cfg(not(all(feature = "webgl2", target_arch = "wasm32")))]
app.insert_resource(Msaa::Off)
.add_plugins(TemporalAntiAliasPlugin);
app.run();
}
fn setup(mut commands: Commands, assets: Res<AssetServer>) {
commands.spawn((
Camera3dBundle {
camera: Camera {
hdr: true,
..Default::default()
},
camera_3d: Camera3d {
screen_space_specular_transmission_quality: ScreenSpaceTransmissionQuality::High,
screen_space_specular_transmission_steps: 1,
..default()
},
transform: Transform::from_xyz(8.0, 1.5, 8.0).looking_at(Vec3::ZERO, Vec3::Y),
tonemapping: Tonemapping::BlenderFilmic,
..Default::default()
},
PanOrbitCamera::default(),
BloomSettings {
intensity: 0.3,
..default()
},
#[cfg(not(all(feature = "webgl2", target_arch = "wasm32")))]
TemporalAntiAliasBundle::default(),
EnvironmentMapLight {
diffuse_map: assets.load("pisa_diffuse.ktx2"),
specular_map: assets.load("pisa_specular.ktx2"),
intensity: 500.0,
},
VolumetricFogSettings::default(),
));
commands.spawn((
DirectionalLightBundle {
directional_light: DirectionalLight {
illuminance: 5000.0,
shadows_enabled: true,
..Default::default()
},
transform: Transform::IDENTITY.looking_to(Vec3::new(2.5, -1., 0.85), Vec3::Y),
..default()
},
VolumetricLight,
));
commands.spawn(SceneBundle {
scene: assets.load("study.vox"),
..default()
});
}