@@ -579,7 +579,7 @@ void RegisterNode(SharpGLTF.Schema2.Node node, MeshAssetNode parent)
579
579
var m = new MeshAssetMeshInfo
580
580
{
581
581
name = $ "{ mesh . Name } { primitive . LogicalIndex } ",
582
- materialGuid = primitive . Material . LogicalIndex >= 0 && primitive . Material . LogicalIndex < materialMapping . Count ?
582
+ materialGuid = ( primitive . Material ? . LogicalIndex ?? - 1 ) >= 0 && primitive . Material . LogicalIndex < materialMapping . Count ?
583
583
materialMapping [ primitive . Material . LogicalIndex ] : "" ,
584
584
type = node . Skin != null &&
585
585
primitive . VertexAccessors . ContainsKey ( "JOINTS_0" ) &&
@@ -629,30 +629,122 @@ void RegisterNode(SharpGLTF.Schema2.Node node, MeshAssetNode parent)
629
629
continue ;
630
630
}
631
631
632
- var vert = primitive . GetVertexAccessor ( "POSITION" ) . AsVector3Array ( ) ;
633
- var tan = primitive . GetVertexAccessor ( "TANGENT" ) ? . AsVector4Array ( ) ;
634
- var nor = primitive . GetVertexAccessor ( "NORMAL" ) ? . AsVector3Array ( ) ;
635
- var bi = primitive . GetVertexAccessor ( "JOINTS_0" ) ? . AsVector4Array ( ) ;
636
- var bw = primitive . GetVertexAccessor ( "WEIGHTS_0" ) ? . AsVector4Array ( ) ;
632
+ List < Vector2 > SafeGetVertexAccessorVector2 ( string name , bool debug )
633
+ {
634
+ var accessor = primitive . GetVertexAccessor ( name ) ;
635
+
636
+ if ( ( accessor ? . Count ?? 0 ) == 0 )
637
+ {
638
+ return null ;
639
+ }
640
+
641
+ if ( accessor . Dimensions == SharpGLTF . Schema2 . DimensionType . VEC2 )
642
+ {
643
+ return [ .. accessor . AsVector2Array ( ) ] ;
644
+ }
645
+
646
+ if ( debug )
647
+ {
648
+ Log . Debug ( $ "Failed to get Vector2 vertex accessor { name } : Dimensions were { accessor . Dimensions } ") ;
649
+ }
650
+
651
+ return null ;
652
+ }
653
+
654
+ List < Vector3 > SafeGetVertexAccessorVector3 ( string name , bool debug )
655
+ {
656
+ var accessor = primitive . GetVertexAccessor ( name ) ;
657
+
658
+ if ( ( accessor ? . Count ?? 0 ) == 0 )
659
+ {
660
+ return null ;
661
+ }
662
+
663
+ if ( accessor . Dimensions == SharpGLTF . Schema2 . DimensionType . VEC3 )
664
+ {
665
+ return [ .. accessor . AsVector3Array ( ) ] ;
666
+ }
667
+
668
+ if ( debug )
669
+ {
670
+ Log . Debug ( $ "Failed to get Vector3 vertex accessor { name } : Dimensions were { accessor . Dimensions } ") ;
671
+ }
672
+
673
+ return null ;
674
+ }
675
+
676
+ List < Vector4 > SafeGetVertexAccessorVector4 ( string name , bool debug )
677
+ {
678
+ var accessor = primitive . GetVertexAccessor ( name ) ;
679
+
680
+ if ( ( accessor ? . Count ?? 0 ) == 0 )
681
+ {
682
+ return null ;
683
+ }
684
+
685
+ if ( accessor . Dimensions == SharpGLTF . Schema2 . DimensionType . VEC4 )
686
+ {
687
+ return [ .. accessor . AsVector4Array ( ) ] ;
688
+ }
689
+
690
+ if ( debug )
691
+ {
692
+ Log . Debug ( $ "Failed to get Vector4 vertex accessor { name } : Dimensions were { accessor . Dimensions } ") ;
693
+ }
694
+
695
+ return null ;
696
+ }
697
+
698
+ List < Vector4 > SafeGetVertexColor ( string name )
699
+ {
700
+ var l = SafeGetVertexAccessorVector4 ( name , false ) ;
701
+
702
+ if ( l != null )
703
+ {
704
+ return l ;
705
+ }
706
+
707
+ var l2 = SafeGetVertexAccessorVector3 ( name , false ) ;
708
+
709
+ if ( l2 != null )
710
+ {
711
+ var newList = new Vector4 [ l2 . Count ] ;
712
+
713
+ for ( var i = 0 ; i < l2 . Count ; i ++ )
714
+ {
715
+ newList [ i ] = new ( l2 [ i ] , 1 ) ;
716
+ }
717
+
718
+ return [ .. newList ] ;
719
+ }
720
+
721
+ return null ;
722
+ }
723
+
724
+ var vert = SafeGetVertexAccessorVector3 ( "POSITION" , true ) ;
725
+ var tan = SafeGetVertexAccessorVector4 ( "TANGENT" , true ) ;
726
+ var nor = SafeGetVertexAccessorVector3 ( "NORMAL" , true ) ;
727
+ var bi = SafeGetVertexAccessorVector4 ( "JOINTS_0" , true ) ;
728
+ var bw = SafeGetVertexAccessorVector4 ( "WEIGHTS_0" , true ) ;
637
729
638
730
var texcoords = new IList < Vector2 > [ ]
639
731
{
640
- primitive . GetVertexAccessor ( "TEXCOORD_0" ) ? . AsVector2Array ( ) ,
641
- primitive . GetVertexAccessor ( "TEXCOORD_1" ) ? . AsVector2Array ( ) ,
642
- primitive . GetVertexAccessor ( "TEXCOORD_2" ) ? . AsVector2Array ( ) ,
643
- primitive . GetVertexAccessor ( "TEXCOORD_3" ) ? . AsVector2Array ( ) ,
644
- primitive . GetVertexAccessor ( "TEXCOORD_4" ) ? . AsVector2Array ( ) ,
645
- primitive . GetVertexAccessor ( "TEXCOORD_5" ) ? . AsVector2Array ( ) ,
646
- primitive . GetVertexAccessor ( "TEXCOORD_6" ) ? . AsVector2Array ( ) ,
647
- primitive . GetVertexAccessor ( "TEXCOORD_7" ) ? . AsVector2Array ( ) ,
732
+ SafeGetVertexAccessorVector2 ( "TEXCOORD_0" , true ) ,
733
+ SafeGetVertexAccessorVector2 ( "TEXCOORD_1" , true ) ,
734
+ SafeGetVertexAccessorVector2 ( "TEXCOORD_2" , true ) ,
735
+ SafeGetVertexAccessorVector2 ( "TEXCOORD_3" , true ) ,
736
+ SafeGetVertexAccessorVector2 ( "TEXCOORD_4" , true ) ,
737
+ SafeGetVertexAccessorVector2 ( "TEXCOORD_5" , true ) ,
738
+ SafeGetVertexAccessorVector2 ( "TEXCOORD_6" , true ) ,
739
+ SafeGetVertexAccessorVector2 ( "TEXCOORD_7" , true ) ,
648
740
} ;
649
741
650
742
var colors = new IList < Vector4 > [ ]
651
743
{
652
- primitive . GetVertexAccessor ( "COLOR_0" ) ? . AsVector4Array ( ) ,
653
- primitive . GetVertexAccessor ( "COLOR_1" ) ? . AsVector4Array ( ) ,
654
- primitive . GetVertexAccessor ( "COLOR_2" ) ? . AsVector4Array ( ) ,
655
- primitive . GetVertexAccessor ( "COLOR_3" ) ? . AsVector4Array ( ) ,
744
+ SafeGetVertexColor ( "COLOR_0" ) ,
745
+ SafeGetVertexColor ( "COLOR_1" ) ,
746
+ SafeGetVertexColor ( "COLOR_2" ) ,
747
+ SafeGetVertexColor ( "COLOR_3" ) ,
656
748
} ;
657
749
658
750
var vertexCount = vert . Count ;
0 commit comments