implement shadows, tweak world objects for better visibility

This commit is contained in:
yuni 2024-04-24 19:54:37 +02:00
parent f0df596ea1
commit 4c26f2ef4f
4 changed files with 49 additions and 10 deletions

View file

@ -17,7 +17,7 @@ use bevy::input::mouse::{MouseMotion, MouseWheel};
use bevy::window::PrimaryWindow; use bevy::window::PrimaryWindow;
use bevy::core_pipeline::bloom::{BloomCompositeMode, BloomSettings}; use bevy::core_pipeline::bloom::{BloomCompositeMode, BloomSettings};
use bevy::core_pipeline::tonemapping::Tonemapping; use bevy::core_pipeline::tonemapping::Tonemapping;
use bevy::pbr::CascadeShadowConfigBuilder; use bevy::pbr::{CascadeShadowConfigBuilder, DirectionalLightShadowMap};
use bevy::transform::TransformSystem; use bevy::transform::TransformSystem;
use bevy::math::{DVec3, DQuat}; use bevy::math::{DVec3, DQuat};
use bevy_xpbd_3d::prelude::*; use bevy_xpbd_3d::prelude::*;
@ -43,6 +43,7 @@ impl Plugin for CameraPlugin {
.after(PhysicsSet::Sync) .after(PhysicsSet::Sync)
.before(TransformSystem::TransformPropagate)); .before(TransformSystem::TransformPropagate));
app.insert_resource(MapCam::default()); app.insert_resource(MapCam::default());
//app.insert_resource(DirectionalLightShadowMap { size: 4096 });
} }
} }
@ -80,6 +81,7 @@ impl Default for MapCam {
pub fn setup_camera( pub fn setup_camera(
mut commands: Commands, mut commands: Commands,
settings: Res<var::Settings>,
) { ) {
// Add player // Add player
commands.spawn(( commands.spawn((
@ -103,16 +105,16 @@ pub fn setup_camera(
commands.spawn(DirectionalLightBundle { commands.spawn(DirectionalLightBundle {
directional_light: DirectionalLight { directional_light: DirectionalLight {
illuminance: 3000.0, illuminance: 3000.0,
shadows_enabled: false, shadows_enabled: settings.shadows_sun,
..default() ..default()
}, },
transform: Transform::from_rotation(Quat::from_rotation_y(PI/2.0)), transform: Transform::from_rotation(Quat::from_rotation_y(PI/2.0)),
cascade_shadow_config: CascadeShadowConfigBuilder { cascade_shadow_config: CascadeShadowConfigBuilder {
first_cascade_far_bound: 7.0, num_cascades: 4,
maximum_distance: 25.0, minimum_distance: 0.001,
maximum_distance: 250000.0,
..default() ..default()
} }.into(),
.into(),
..default() ..default()
}); });
} }

View file

@ -14,7 +14,8 @@ extern crate regex;
use bevy::prelude::*; use bevy::prelude::*;
use bevy_xpbd_3d::prelude::*; use bevy_xpbd_3d::prelude::*;
use bevy::math::DVec3; use bevy::math::DVec3;
use crate::{actor, camera, chat, hud, nature, shading, skeleton, world}; use bevy::pbr::{NotShadowCaster, NotShadowReceiver};
use crate::{actor, camera, chat, hud, nature, shading, skeleton, var, world};
use regex::Regex; use regex::Regex;
use std::f32::consts::PI; use std::f32::consts::PI;
use std::f64::consts::PI as PI64; use std::f64::consts::PI as PI64;
@ -484,6 +485,7 @@ fn spawn_entities(
mut materials: ResMut<Assets<StandardMaterial>>, mut materials: ResMut<Assets<StandardMaterial>>,
mut materials_jupiter: ResMut<Assets<shading::JupitersRing>>, mut materials_jupiter: ResMut<Assets<shading::JupitersRing>>,
mut id2pos: ResMut<actor::Id2Pos>, mut id2pos: ResMut<actor::Id2Pos>,
settings: Res<var::Settings>,
) { ) {
for state_wrapper in er_spawn.read() { for state_wrapper in er_spawn.read() {
let state = &state_wrapper.0; let state = &state_wrapper.0;
@ -591,6 +593,10 @@ fn spawn_entities(
unlit: true, unlit: true,
..default() ..default()
})); }));
actor.insert((
NotShadowCaster,
NotShadowReceiver,
));
} }
if state.is_targeted_on_startup { if state.is_targeted_on_startup {
actor.insert(hud::IsTargeted); actor.insert(hud::IsTargeted);
@ -634,6 +640,7 @@ fn spawn_entities(
intensity: state.light_brightness, intensity: state.light_brightness,
color, color,
range: 2000.0, range: 2000.0,
shadows_enabled: settings.shadows_pointlights,
..default() ..default()
}, },
bevy::pbr::CubemapVisibleEntities::default(), bevy::pbr::CubemapVisibleEntities::default(),
@ -688,6 +695,8 @@ fn spawn_entities(
visibility: Visibility::Hidden, visibility: Visibility::Hidden,
..default() ..default()
}, },
NotShadowCaster,
NotShadowReceiver,
)); ));
skeleton::load(ar_asset_name, &mut entitycmd, &*asset_server); skeleton::load(ar_asset_name, &mut entitycmd, &*asset_server);
} }
@ -701,6 +710,8 @@ fn spawn_entities(
visibility: Visibility::Hidden, visibility: Visibility::Hidden,
..default() ..default()
}, },
NotShadowCaster,
NotShadowReceiver,
)); ));
skeleton::load("point_of_interest", &mut entitycmd, &*asset_server); skeleton::load("point_of_interest", &mut entitycmd, &*asset_server);
} }
@ -721,6 +732,8 @@ fn spawn_entities(
Position::new(relative_pos), Position::new(relative_pos),
Rotation::from(Quat::IDENTITY), Rotation::from(Quat::IDENTITY),
//Rotation::from(Quat::from_rotation_x(-0.3f32.to_radians())), //Rotation::from(Quat::from_rotation_x(-0.3f32.to_radians())),
NotShadowCaster,
NotShadowReceiver,
)); ));
} }
} }

View file

@ -246,7 +246,7 @@ actor 0 0 0 moonlet
scale 83.5e3 scale 83.5e3
angularmomentum 0 0.025 0 angularmomentum 0 0.025 0
actor 3000 0 0 moonlet actor 3000 0 -300 moonlet
name Moonlet name Moonlet
collider mesh collider mesh
relativeto player relativeto player
@ -335,7 +335,7 @@ actor -3300 10 0 pizzeria
density 500 density 500
angularmomentum 0 0 0.2 angularmomentum 0 0 0.2
pointofinterest yes pointofinterest yes
actor -30 100 -23 pizzasign actor 60 60 -23 pizzasign
name "Pizzeria Sign" name "Pizzeria Sign"
relativeto pizzeria relativeto pizzeria
scale 20 scale 20
@ -382,7 +382,7 @@ actor -3300 10 0 pizzeria
angularmomentum 0 0 0 angularmomentum 0 0 0
pronoun he pronoun he
actor 60 -15 -40 suitv2 actor 30 -12 -20 suitv2
relativeto player relativeto player
name Icarus name Icarus
id Icarus id Icarus
@ -398,6 +398,26 @@ actor 60 -15 -40 suitv2
wants maxrotation 0.5 wants maxrotation 0.5
wants maxvelocity 0 wants maxvelocity 0
pronoun it pronoun it
actor 12 -35 -27 lightorb
name "Light Orb 1"
relativeto Icarus
scale 0.25
light FF8F4A 5000000
actor -2 -11 -9 lightorb
name "Light Orb 2"
relativeto Icarus
scale 0.25
light FF8F4A 5000000
actor 26 -39 4 lightorb
name "Light Orb 3"
relativeto Icarus
scale 0.25
light FF8F4A 5000000
actor 1.8 -15.5 16 lightorb
name "Light Orb 4"
relativeto Icarus
scale 0.25
light FF8F4A 5000000
actor -300 0 40 suitv2 actor -300 0 40 suitv2
relativeto player relativeto player

View file

@ -58,6 +58,8 @@ pub struct Settings {
pub is_zooming: bool, pub is_zooming: bool,
pub third_person: bool, pub third_person: bool,
pub rotation_stabilizer_active: bool, pub rotation_stabilizer_active: bool,
pub shadows_sun: bool,
pub shadows_pointlights: bool,
pub key_selectobject: MouseButton, pub key_selectobject: MouseButton,
pub key_zoom: MouseButton, pub key_zoom: MouseButton,
pub key_map: KeyCode, pub key_map: KeyCode,
@ -168,6 +170,8 @@ impl Default for Settings {
is_zooming: false, is_zooming: false,
third_person: false, third_person: false,
rotation_stabilizer_active: true, rotation_stabilizer_active: true,
shadows_sun: true,
shadows_pointlights: false,
key_selectobject: MouseButton::Left, key_selectobject: MouseButton::Left,
key_zoom: MouseButton::Right, key_zoom: MouseButton::Right,
key_map: KeyCode::KeyM, key_map: KeyCode::KeyM,