Cosmetic tweaks to query_gltf_primitives (#16102)

# Objective

This example is really confusing to look at and tell at a glance whether
it's broken or not.

It's displaying a strange shape -- a cube with two vertices stretched in
a couple dimensions at an odd angle, and doing its vertex position
modification in a way where the intent isn't obvious.

## Solution

- Change the gltf geometry so that the object is a recognizable regular
shape
- Change the vertex modification so that the entire cube top is being
"lifted" from the cube
- Adjust colors, lighting, and camera location so we can see what's
going on
- Also remove some irrelevant shadow and environment map setup

## Before


![Image](https://github.com/user-attachments/assets/e5dd5075-0480-49d4-b1ed-cf1fe6106f3c)

## After

<img width="1280" alt="image"
src="https://github.com/user-attachments/assets/59cab60d-efbc-47c3-8688-e4544b462421">
This commit is contained in:
Rob Parrett 2024-10-27 12:06:19 -07:00 committed by GitHub
parent 7451900e71
commit 3fc2bd71ea
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 44 deletions

View file

@ -3,16 +3,10 @@
use std::f32::consts::PI; use std::f32::consts::PI;
use bevy::{ use bevy::{gltf::GltfMaterialName, prelude::*, render::mesh::VertexAttributeValues};
gltf::GltfMaterialName,
pbr::{CascadeShadowConfigBuilder, DirectionalLightShadowMap},
prelude::*,
render::mesh::VertexAttributeValues,
};
fn main() { fn main() {
App::new() App::new()
.insert_resource(DirectionalLightShadowMap { size: 4096 })
.add_plugins(DefaultPlugins) .add_plugins(DefaultPlugins)
.add_systems(Startup, setup) .add_systems(Startup, setup)
.add_systems(Update, find_top_material_and_mesh) .add_systems(Update, find_top_material_and_mesh)
@ -36,7 +30,7 @@ fn find_top_material_and_mesh(
if let Color::Hsla(ref mut hsla) = material.base_color { if let Color::Hsla(ref mut hsla) = material.base_color {
*hsla = hsla.rotate_hue(time.delta_secs() * 100.0); *hsla = hsla.rotate_hue(time.delta_secs() * 100.0);
} else { } else {
material.base_color = Color::from(Hsla::hsl(0.0, 0.8, 0.5)); material.base_color = Color::from(Hsla::hsl(0.0, 0.9, 0.7));
} }
} }
@ -44,53 +38,32 @@ fn find_top_material_and_mesh(
if let Some(VertexAttributeValues::Float32x3(positions)) = if let Some(VertexAttributeValues::Float32x3(positions)) =
mesh.attribute_mut(Mesh::ATTRIBUTE_POSITION) mesh.attribute_mut(Mesh::ATTRIBUTE_POSITION)
{ {
positions[0] = ( for position in positions {
ops::sin(2.0 * PI * time.elapsed_secs()), *position = (
positions[0][1], position[0],
positions[0][2], 1.5 + 0.5 * ops::sin(time.elapsed_secs() / 2.0),
position[2],
) )
.into(); .into();
} }
} }
} }
} }
}
} }
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) { fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(( commands.spawn((
Camera3d::default(), Camera3d::default(),
Transform::from_xyz(0.6, 1.6, 11.3).looking_at(Vec3::new(0.0, 0.0, 3.0), Vec3::Y), Transform::from_xyz(4.0, 4.0, 12.0).looking_at(Vec3::new(0.0, 0.0, 0.5), Vec3::Y),
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: 500.0,
rotation: Quat::IDENTITY,
},
)); ));
commands.spawn(( commands.spawn((
DirectionalLight { Transform::from_rotation(Quat::from_euler(EulerRot::ZYX, 0.0, 1.0, -PI / 4.)),
shadows_enabled: true, DirectionalLight::default(),
..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.
CascadeShadowConfigBuilder {
num_cascades: 1,
maximum_distance: 1.6,
..default()
}
.build(),
)); ));
commands.spawn((
SceneRoot(asset_server.load( commands.spawn(SceneRoot(asset_server.load(
GltfAssetLabel::Scene(0).from_asset("models/GltfPrimitives/gltf_primitives.glb"), GltfAssetLabel::Scene(0).from_asset("models/GltfPrimitives/gltf_primitives.glb"),
)), )));
Transform {
rotation: Quat::from_rotation_y(-90.0 / 180.0 * PI),
..default()
},
));
} }