From 0cb3eaef6755f9482f49f220e71b1afbb40cfdb4 Mon Sep 17 00:00:00 2001 From: Rob Parrett Date: Tue, 11 Feb 2025 15:19:24 -0700 Subject: [PATCH] Fix validation errors in `Fox.glb` (#17801) # Objective Fix gltf validation errors in `Fox.glb`. Inspired by #8099, but that issue doesn't appear to describe a real bug to fix, as far as I can tell. ## Solution Use the latest version of the Fox from [glTF-Sample-Assets](https://github.com/KhronosGroup/glTF-Sample-Assets/blob/main/Models/Fox/glTF-Binary/Fox.glb). ## Testing Dropped both versions in https://github.khronos.org/glTF-Validator/ `cargo run --example animated_mesh` seems to still look fine. Before: ``` The asset contains errors. "numErrors": 126, "numWarnings": 4184, ``` After: ``` The asset is valid. "numErrors": 0, "numWarnings": 0, ``` ## Discussion The 3d testbed was panicking with ``` thread 'main' panicked at examples/testbed/3d.rs:288:60: called `Result::unwrap()` on an `Err` value: QueryDoesNotMatch(35v1 with components Transform, GlobalTransform, Visibility, InheritedVisibility, ViewVisibility, ChildOf, Children, Name) ``` Which is bizarre. I think this might be related to #17720, or maybe the structure of the gltf changed. I fixed it by using updating the testbed to use a more robust method of finding the correct entity as is done in `animated_mesh`. --- CREDITS.md | 2 +- assets/models/animated/Fox.glb | Bin 162856 -> 162852 bytes examples/testbed/3d.rs | 28 ++++++++++++++-------------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index cc8b15083ac69..05e4dc60a1f2b 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -32,7 +32,7 @@ * Epic orchestra music sample, modified to loop, from [Migfus20](https://freesound.org/people/Migfus20/sounds/560449/) ([CC BY 4.0 DEED](https://creativecommons.org/licenses/by/4.0/)) [MorphStressTest]: https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/MorphStressTest -[fox]: https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/Fox +[fox]: https://github.com/KhronosGroup/glTF-Sample-Assets/tree/main/Models/Fox [by PixelMannen]: https://opengameart.org/content/fox-and-shiba [by @tomkranis on Sketchfab]: https://sketchfab.com/models/371dea88d7e04a76af5763f2a36866bc [CC-BY 4.0]: https://creativecommons.org/licenses/by/4.0/ diff --git a/assets/models/animated/Fox.glb b/assets/models/animated/Fox.glb index 2bb946e2d4815aa7fe9960ea291459e1f6247f0e..1ef5c0d05658caea339680fe581aa2c8302b3365 100644 GIT binary patch delta 14067 zcmchdJ#QXG5XU#RgY6`aiGvd)s3IgN;s{6-2_iv(g!lk_0fbN*3WQQnAYDO0ft1Ey zfC33xO`0@GgXYZUpJbQnZ|I^tAGyHGQPww3>c0b&E z+wkJz-qTALUwru0^_{yPo&WaPpBE24zxHdFhfO=_&Gc5mBO}ur<=_7W%lQ3(SL(oy zR}1I$1*Gvy25cnDgix7)-Ywjerf78=+F>sPNlgw-rmJ4p4=BcsO2-UbP2wC^N9*x= zv1sXcQQ$LFKv&XUaX=;7$=@cr^#3LWbFou) z2ScBs?H2?_Y9o><^ky=x^*19Zp}#7=mC2s{bWpKCF1^NY_Q1;qFwLCh%}c&p$DeF0 z7gp^2D{q>aj4lyiDsNxDxs*7b)01JP_wYetcFN0R%NJuV@7 ztTsx!-__+X9dNu;`M~gntYhSLSq*BhUZEH05%fADae-z6jobs&%#b_kz5vbX8F9B> zaH`*Kvh(2pY^4-AtA{QJm-%`5S^r@$jMUC~_%tEdTGz-UZq&E_!(gN0KyO?9xPKfa zZQX{Y|4~3d%BfXE zQKx1=OV#OXd*HLvdl;^wWX=BgKh;(CJS2qVK7kK=@^KC34|sBv5Wf9 zAbyN4{WmADc47lDgW=9as(qbnr(nN8&VE8hVumtb{XZip?YzWyc~MUcG=1@i%NYHB z{fj{fa2)B#=T^*hIwEqA5>c}J{x4R~s5FZ7Mr-Ru4ic~<_kSh`EzIj52FIyrBIb<+ znt@oy&|u`pRS@J|fBQuMvR-i<9WBxLK`+wc=l(oZ=vV-xAG%s_E9(H4773rnjKSUmM^*dY?u(e{y@`H~0)HK$3iJ!m!vo($pL(uh< z38%4pA$~X5v*#U=T53oyuw!}?DgbXzns5{5{&NG>5Qnk*p)!)Wdl69U@Zq#WkDC-d6Enp=Fes_ke{3ckv}QnRBgO$KB?A(G z_fS6n>_L&H!T`ho8eHa&_W?E@GQHQ;ACX|NuKl~7IIRqA%O|to;`(2Im5R%^B(`7P z+$F(!r?mTzE|-2Q)$292r6e>Lh#chljyz)2Q`6@DBlUDSiqQcy-Hu*F^c>Y)=y9rATZAA3ox9*6@Td18d_n&Wxs!=o`pomc~ z(o2CAx%Gd`F!EW?eD^;oALaZr9rByu2MY8~(#hxI7fXJc2C4RmC*e@S?uGPOtLkUE+8xQjPcu2Dw&>AJ@bL$Yd|p5I-;#klQUEw~ zgdcHp^Ookc{-;YpA8_oz`5K6x;VuVFFSKZG%_cAF55=LthJe3zfY!kD4Dtc3_3r`= z=?a?Zdb(xb;&)>KH8e8vqap@t`3&f& ztDMuC5OfzKMG%nyK;+P1<9SYUiTQ@LV)C4B4u zmLqEK$h}{IP5E5gLFv<5uJ86`{n6#TNO&!AB!urMOYfoW^s^tWeL>f^Kdb57cKLa^(B@@Qe554K3B?Zd|95*B7-U0Qi(D?ZM!Wyovt+n7khUIY$9Ri=jDZI*x}P@#YrWkz_`f`Q M{?DW5m;UYk11N*o3;+NC delta 14098 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 diff --git a/examples/testbed/3d.rs b/examples/testbed/3d.rs index edb53a0c57377..5b35b945c5eef 100644 --- a/examples/testbed/3d.rs +++ b/examples/testbed/3d.rs @@ -282,19 +282,19 @@ mod animation { animation: Res, mut players: Query<(Entity, &mut AnimationPlayer)>, ) { - let entity = children.get(trigger.target()).unwrap()[0]; - let entity = children.get(entity).unwrap()[0]; - - let (entity, mut player) = players.get_mut(entity).unwrap(); - let mut transitions = AnimationTransitions::new(); - transitions - .play(&mut player, animation.animation, Duration::ZERO) - .seek_to(0.5) - .pause(); - - commands - .entity(entity) - .insert(AnimationGraphHandle(animation.graph.clone())) - .insert(transitions); + for child in children.iter_descendants(trigger.target()) { + if let Ok((entity, mut player)) = players.get_mut(child) { + let mut transitions = AnimationTransitions::new(); + transitions + .play(&mut player, animation.animation, Duration::ZERO) + .seek_to(0.5) + .pause(); + + commands + .entity(entity) + .insert(AnimationGraphHandle(animation.graph.clone())) + .insert(transitions); + } + } } }