From 320d53c1d2d7e1ff796daea1c2ab6eed171375fc Mon Sep 17 00:00:00 2001 From: Shane Celis Date: Tue, 8 Oct 2024 08:37:46 -0400 Subject: [PATCH] Vary transforms for custom_skinned_mesh example (#15710) # Objective Enhance the [custom skinned mesh example](https://bevyengine.org/examples/animation/custom-skinned-mesh/) to show some variety and clarify what the transform does to the mesh. ## Solution https://github.com/user-attachments/assets/c919db74-6e77-4f33-ba43-0f40a88042b3 Add variety and clarity with the following changes: - vary transform changes, - use a UV texture, - and show transform changes via gizmos. (Maybe it'd be worth turning on wireframe rendering to show what happens to the mesh. I think it'd be nice visually but might make the code a little noisy.) ## Testing I exercised it on my x86 macOS computer. It'd be good to have it validated on Windows, Linux, and WASM. --- ## Showcase - Custom skinned mesh example varies the transforms changes and uses a UV test texture. --- assets/textures/uv_checker_bw.png | Bin 0 -> 84853 bytes examples/animation/custom_skinned_mesh.rs | 95 +++++++++++++++++++--- 2 files changed, 83 insertions(+), 12 deletions(-) create mode 100644 assets/textures/uv_checker_bw.png diff --git a/assets/textures/uv_checker_bw.png b/assets/textures/uv_checker_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..bef39cd66b9d1483dbcb89341ae9d5e4f0e8a25d GIT binary patch literal 84853 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∨r3bQo3wV-wJY*;O#_4^)h4G-KzS|$G0fa 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 literal 0 HcmV?d00001 diff --git a/examples/animation/custom_skinned_mesh.rs b/examples/animation/custom_skinned_mesh.rs index 383fbaefff..bffcf7eb08 100644 --- a/examples/animation/custom_skinned_mesh.rs +++ b/examples/animation/custom_skinned_mesh.rs @@ -31,13 +31,14 @@ fn main() { /// Used to mark a joint to be animated in the [`joint_animation`] system. #[derive(Component)] -struct AnimatedJoint; +struct AnimatedJoint(isize); /// Construct a mesh and a skeleton with 2 joints for that mesh, /// and mark the second joint to be animated. /// It is similar to the scene defined in `models/SimpleSkin/SimpleSkin.gltf` fn setup( mut commands: Commands, + asset_server: Res, mut meshes: ResMut>, mut materials: ResMut>, mut skinned_mesh_inverse_bindposes_assets: ResMut>, @@ -45,7 +46,7 @@ fn setup( // Create a camera commands.spawn(( Camera3d::default(), - Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y), + Transform::from_xyz(2.5, 2.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), )); // Create inverse bindpose matrices for a skeleton consists of 2 joints @@ -75,6 +76,23 @@ fn setup( [1.0, 2.0, 0.0], ], ) + // Add UV coordinates that map the left half of the texture since its a 1 x + // 2 rectangle. + .with_inserted_attribute( + Mesh::ATTRIBUTE_UV_0, + vec![ + [0.0, 0.00], + [0.5, 0.00], + [0.0, 0.25], + [0.5, 0.25], + [0.0, 0.50], + [0.5, 0.50], + [0.0, 0.75], + [0.5, 0.75], + [0.0, 1.00], + [0.5, 1.00], + ], + ) // Set mesh vertex normals .with_inserted_attribute(Mesh::ATTRIBUTE_NORMAL, vec![[0.0, 0.0, 1.0]; 10]) // Set mesh vertex joint indices for mesh skinning. @@ -130,9 +148,15 @@ fn setup( for i in -5..5 { // Create joint entities let joint_0 = commands - .spawn(Transform::from_xyz(i as f32 * 1.5, 0.0, i as f32 * 0.1)) + .spawn(Transform::from_xyz( + i as f32 * 1.5, + 0.0, + // Move quads back a small amount to avoid Z-fighting and not + // obscure the transform gizmos. + -(i as f32 * 0.01).abs(), + )) .id(); - let joint_1 = commands.spawn((AnimatedJoint, Transform::IDENTITY)).id(); + let joint_1 = commands.spawn((AnimatedJoint(i), Transform::IDENTITY)).id(); // Set joint_1 as a child of joint_0. commands.entity(joint_0).add_children(&[joint_1]); @@ -143,11 +167,15 @@ fn setup( // Create skinned mesh renderer. Note that its transform doesn't affect the position of the mesh. commands.spawn(( Mesh3d(mesh.clone()), - MeshMaterial3d(materials.add(Color::srgb( - rng.gen_range(0.0..1.0), - rng.gen_range(0.0..1.0), - rng.gen_range(0.0..1.0), - ))), + MeshMaterial3d(materials.add(StandardMaterial { + base_color: Color::srgb( + rng.gen_range(0.0..1.0), + rng.gen_range(0.0..1.0), + rng.gen_range(0.0..1.0), + ), + base_color_texture: Some(asset_server.load("textures/uv_checker_bw.png")), + ..default() + })), SkinnedMesh { inverse_bindposes: inverse_bindposes.clone(), joints: joint_entities, @@ -157,8 +185,51 @@ fn setup( } /// Animate the joint marked with [`AnimatedJoint`] component. -fn joint_animation(time: Res