@@ -651,7 +651,8 @@ impl GltfNode {
651
651
#[ derive( Clone , Debug ) ]
652
652
pub struct GltfSkin {
653
653
pub index : usize ,
654
- // Indices of the skeleton nodes used as joints in this skin
654
+ // Indices of the skeleton nodes used as joints in this skin, unused internally
655
+ // but possibly useful.
655
656
pub joint_nodes : Vec < usize > ,
656
657
pub joint_transforms : HybridArray < Id < Transform > > ,
657
658
// Containins the 4x4 inverse-bind matrices.
@@ -662,7 +663,7 @@ pub struct GltfSkin {
662
663
// Index of the node used as the skeleton root.
663
664
// When None, joints transforms resolve to scene root.
664
665
pub skeleton : Option < usize > ,
665
-
666
+ // Skin as seen by shaders, on the GPU
666
667
pub skin : Hybrid < Skin > ,
667
668
}
668
669
@@ -734,24 +735,33 @@ impl GltfDocument {
734
735
log:: debug!( "Loading {} nodes" , document. nodes( ) . count( ) ) ;
735
736
let mut nodes = vec ! [ ] ;
736
737
let mut node_transforms = HashMap :: < usize , NestedTransform > :: new ( ) ;
738
+
737
739
fn transform_for_node (
740
+ nesting_level : usize ,
738
741
stage : & mut Stage ,
739
742
cache : & mut HashMap < usize , NestedTransform > ,
740
743
node : & gltf:: Node ,
741
744
) -> NestedTransform {
742
- if let Some ( nt) = cache. get ( & node. index ( ) ) {
745
+ let padding = std:: iter:: repeat ( " " )
746
+ . take ( nesting_level * 2 )
747
+ . collect :: < Vec < _ > > ( )
748
+ . join ( "" ) ;
749
+ log:: debug!( "{padding}{} {:?}" , node. index( ) , node. name( ) ) ;
750
+ let nt = if let Some ( nt) = cache. get ( & node. index ( ) ) {
743
751
nt. clone ( )
744
752
} else {
745
753
let transform = stage. new_nested_transform ( ) ;
746
754
let mat4 = Mat4 :: from_cols_array_2d ( & node. transform ( ) . matrix ( ) ) ;
747
755
transform. set_local_transform ( mat4. into ( ) ) ;
748
756
for node in node. children ( ) {
749
- let child_transform = transform_for_node ( stage, cache, & node) ;
757
+ let child_transform =
758
+ transform_for_node ( nesting_level + 1 , stage, cache, & node) ;
750
759
transform. add_child ( & child_transform) ;
751
760
}
752
761
cache. insert ( node. index ( ) , transform. clone ( ) ) ;
753
762
transform
754
- }
763
+ } ;
764
+ nt
755
765
}
756
766
let mut camera_index_to_node_index = HashMap :: < usize , usize > :: new ( ) ;
757
767
let mut light_index_to_node_index = HashMap :: < usize , usize > :: new ( ) ;
@@ -772,7 +782,7 @@ impl GltfDocument {
772
782
let light = node. light ( ) . map ( |light| light. index ( ) ) ;
773
783
let weights = node. weights ( ) . map ( |w| w. to_vec ( ) ) . unwrap_or_default ( ) ;
774
784
let weights = stage. new_array ( weights) ;
775
- let transform = transform_for_node ( stage, & mut node_transforms, & node) ;
785
+ let transform = transform_for_node ( 0 , stage, & mut node_transforms, & node) ;
776
786
nodes. push ( GltfNode {
777
787
index : node. index ( ) ,
778
788
name : node. name ( ) . map ( String :: from) ,
0 commit comments