//! Loads and renders a glTF file as a scene. use bevy::{ pbr::{CascadeShadowConfigBuilder, DirectionalLightShadowMap}, prelude::*, }; use std::f32::consts::*; fn main() { App::new() .insert_resource(DirectionalLightShadowMap { size: 4096 }) .add_plugins(DefaultPlugins) .add_systems(Startup, setup) .add_systems(Update, animate_light_direction) .run(); } fn setup(mut commands: Commands, asset_server: Res) { commands.spawn(( Camera3dBundle { transform: Transform::from_xyz(0.7, 0.7, 1.0) .looking_at(Vec3::new(0.0, 0.3, 0.0), Vec3::Y), ..default() }, EnvironmentMapLight { diffuse_map: asset_server.load("environment_maps/pisa_diffuse_rgb9e5_zstd.ktx2"), specular_map: asset_server.load("environment_maps/pisa_specular_rgb9e5_zstd.ktx2"), intensity: 250.0, }, )); commands.spawn(DirectionalLightBundle { directional_light: DirectionalLight { shadows_enabled: true, ..default() }, // This is a relatively small scene, so use tighter shadow // cascade bounds than the default for better quality. // We also adjusted the shadow map to be larger since we're // only using a single cascade. cascade_shadow_config: CascadeShadowConfigBuilder { num_cascades: 1, maximum_distance: 1.6, ..default() } .into(), ..default() }); commands.spawn(SceneBundle { scene: asset_server.load("models/FlightHelmet/FlightHelmet.gltf#Scene0"), ..default() }); } fn animate_light_direction( time: Res