@@ -550,3 +550,210 @@ def test_material_mesh_override(self):
550550
551551 # Check that the material bind is overwritten with blue_material.
552552 self .check_material_binding (two_boxes_prim , blue_material )
553+
554+ def test_dae_materials (self ):
555+ input_path = "tests/data/dae_materials.urdf"
556+ output_dir = self .tmpDir ()
557+
558+ converter = urdf_usd_converter .Converter ()
559+ asset_path = converter .convert (input_path , output_dir )
560+
561+ self .assertIsNotNone (asset_path )
562+ self .assertTrue (pathlib .Path (asset_path .path ).exists ())
563+
564+ stage : Usd .Stage = Usd .Stage .Open (asset_path .path )
565+ self .assertIsValidUsd (stage )
566+
567+ default_prim = stage .GetDefaultPrim ()
568+
569+ # Check the materials.
570+ material_scope_prim = default_prim .GetChild ("Materials" )
571+ self .assertTrue (material_scope_prim .IsValid ())
572+
573+ material_prim = material_scope_prim .GetChild ("texture_mat" )
574+ self .assertTrue (material_prim .IsValid ())
575+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
576+ texture_material = UsdShade .Material (material_prim )
577+
578+ diffuse_color_texture_path = self .get_material_texture_path (texture_material , "diffuseColor" )
579+ self .assertEqual (diffuse_color_texture_path , pathlib .Path ("./Textures/grid.png" ))
580+ opacity = self .get_material_opacity (texture_material )
581+ self .assertAlmostEqual (opacity , 1.0 , places = 6 )
582+
583+ material_prim = material_scope_prim .GetChild ("emissive_mat" )
584+ self .assertTrue (material_prim .IsValid ())
585+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
586+ emissive_material = UsdShade .Material (material_prim )
587+
588+ diffuse_color = self .get_material_diffuse_color (emissive_material )
589+ diffuse_color = usdex .core .linearToSrgb (diffuse_color )
590+ self .assertTrue (Gf .IsClose (diffuse_color , Gf .Vec3f (0 , 0 , 0 ), 1e-6 ))
591+ emissive_color = self .get_material_emissive_color (emissive_material )
592+ emissive_color = usdex .core .linearToSrgb (emissive_color )
593+ self .assertTrue (Gf .IsClose (emissive_color , Gf .Vec3f (1 , 1 , 0 ), 1e-6 ))
594+ opacity = self .get_material_opacity (emissive_material )
595+ self .assertAlmostEqual (opacity , 1.0 , places = 6 )
596+
597+ material_prim = material_scope_prim .GetChild ("emissive_color_tex_mat" )
598+ self .assertTrue (material_prim .IsValid ())
599+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
600+ emissive_color_tex_material = UsdShade .Material (material_prim )
601+
602+ diffuse_color = self .get_material_diffuse_color (emissive_color_tex_material )
603+ self .assertTrue (Gf .IsClose (diffuse_color , Gf .Vec3f (0 , 0 , 0 ), 1e-6 ))
604+ emissive_color_texture_path = self .get_material_texture_path (emissive_color_tex_material , "emissiveColor" )
605+ self .assertEqual (emissive_color_texture_path , pathlib .Path ("./Textures/emissive.png" ))
606+
607+ material_prim = material_scope_prim .GetChild ("opacity_mat" )
608+ self .assertTrue (material_prim .IsValid ())
609+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
610+ opacity_material = UsdShade .Material (material_prim )
611+
612+ diffuse_texture_path = self .get_material_texture_path (opacity_material , "diffuseColor" )
613+ self .assertEqual (diffuse_texture_path , pathlib .Path ("./Textures/grid.png" ))
614+ opacity = self .get_material_opacity (opacity_material )
615+ self .assertAlmostEqual (opacity , 0.4 , places = 6 )
616+
617+ material_prim = material_scope_prim .GetChild ("opacity_texture_mat" )
618+ self .assertTrue (material_prim .IsValid ())
619+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
620+ opacity_texture_material = UsdShade .Material (material_prim )
621+
622+ diffuse_texture_path = self .get_material_texture_path (opacity_texture_material , "diffuseColor" )
623+ self .assertEqual (diffuse_texture_path , pathlib .Path ("./Textures/grid.png" ))
624+ opacity_texture_path = self .get_material_texture_path (opacity_texture_material , "opacity" )
625+ self .assertEqual (opacity_texture_path , pathlib .Path ("./Textures/opacity.png" ))
626+
627+ material_prim = material_scope_prim .GetChild ("specular_mat" )
628+ self .assertTrue (material_prim .IsValid ())
629+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
630+ specular_material = UsdShade .Material (material_prim )
631+
632+ diffuse_color = self .get_material_diffuse_color (specular_material )
633+ diffuse_color = usdex .core .linearToSrgb (diffuse_color )
634+ self .assertTrue (Gf .IsClose (diffuse_color , Gf .Vec3f (0.2 , 0.2 , 0.2 ), 1e-6 ))
635+ specular_color = self .get_material_specular_color (specular_material )
636+ specular_color = usdex .core .linearToSrgb (specular_color )
637+ self .assertTrue (Gf .IsClose (specular_color , Gf .Vec3f (0.8 , 0.7 , 0.1 ), 1e-6 ))
638+ opacity = self .get_material_opacity (specular_material )
639+ self .assertAlmostEqual (opacity , 1.0 , places = 6 )
640+ specular_workflow = self .get_material_specular_workflow (specular_material )
641+ self .assertTrue (specular_workflow )
642+
643+ material_prim = material_scope_prim .GetChild ("specular_texture_mat" )
644+ self .assertTrue (material_prim .IsValid ())
645+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
646+ specular_texture_material = UsdShade .Material (material_prim )
647+
648+ diffuse_color = self .get_material_diffuse_color (specular_texture_material )
649+ diffuse_color = usdex .core .linearToSrgb (diffuse_color )
650+ self .assertTrue (Gf .IsClose (diffuse_color , Gf .Vec3f (0.2 , 0.2 , 0.2 ), 1e-6 ))
651+ specular_texture_path = self .get_material_texture_path (specular_texture_material , "specularColor" )
652+ self .assertEqual (specular_texture_path , pathlib .Path ("./Textures/specular.png" ))
653+ opacity = self .get_material_opacity (specular_texture_material )
654+ self .assertAlmostEqual (opacity , 1.0 , places = 6 )
655+ specular_workflow = self .get_material_specular_workflow (specular_texture_material )
656+ self .assertTrue (specular_workflow )
657+
658+ material_prim = material_scope_prim .GetChild ("Material_red" )
659+ self .assertTrue (material_prim .IsValid ())
660+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
661+ material_red = UsdShade .Material (material_prim )
662+
663+ diffuse_color = self .get_material_diffuse_color (material_red )
664+ diffuse_color = usdex .core .linearToSrgb (diffuse_color )
665+ self .assertTrue (Gf .IsClose (diffuse_color , Gf .Vec3f (1 , 0 , 0 ), 1e-6 ))
666+ opacity = self .get_material_opacity (material_red )
667+ self .assertAlmostEqual (opacity , 1.0 , places = 6 )
668+
669+ material_prim = material_scope_prim .GetChild ("Material_green" )
670+ self .assertTrue (material_prim .IsValid ())
671+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
672+ material_green = UsdShade .Material (material_prim )
673+
674+ diffuse_color = self .get_material_diffuse_color (material_green )
675+ diffuse_color = usdex .core .linearToSrgb (diffuse_color )
676+ self .assertTrue (Gf .IsClose (diffuse_color , Gf .Vec3f (0 , 1 , 0 ), 1e-6 ))
677+ opacity = self .get_material_opacity (material_green )
678+ self .assertAlmostEqual (opacity , 1.0 , places = 6 )
679+
680+ material_prim = material_scope_prim .GetChild ("transparent_mat" )
681+ self .assertTrue (material_prim .IsValid ())
682+ self .assertTrue (material_prim .IsA (UsdShade .Material ))
683+ material_transparent = UsdShade .Material (material_prim )
684+
685+ diffuse_color = self .get_material_diffuse_color (material_transparent )
686+ diffuse_color = usdex .core .linearToSrgb (diffuse_color )
687+ self .assertTrue (Gf .IsClose (diffuse_color , Gf .Vec3f (0.1 , 0.8 , 0.1 ), 1e-6 ))
688+ opacity = self .get_material_opacity (material_transparent )
689+ self .assertAlmostEqual (opacity , 0.8 , places = 6 )
690+
691+ # Check the bindings.
692+ default_prim = stage .GetDefaultPrim ()
693+ geometry_scope_prim = default_prim .GetChild ("Geometry" )
694+ self .assertTrue (geometry_scope_prim .IsValid ())
695+ self .assertTrue (geometry_scope_prim .IsA (UsdGeom .Scope ))
696+ link1_prim = geometry_scope_prim .GetChild ("link1" )
697+ box_materials_prim = link1_prim .GetChild ("box_materials" )
698+ self .assertTrue (box_materials_prim .IsValid ())
699+ self .assertTrue (box_materials_prim .IsA (UsdGeom .Xform ))
700+ self .assertTrue (box_materials_prim .HasAuthoredReferences ())
701+
702+ cube_prim = box_materials_prim .GetChild ("Cube" )
703+ self .assertTrue (cube_prim .IsValid ())
704+ self .assertTrue (cube_prim .IsA (UsdGeom .Mesh ))
705+ self .check_material_binding (cube_prim , texture_material )
706+
707+ cube_002_prim = box_materials_prim .GetChild ("tn__Cube002_VB" )
708+ self .assertTrue (cube_002_prim .IsValid ())
709+ self .assertTrue (cube_002_prim .IsA (UsdGeom .Mesh ))
710+ self .check_material_binding (cube_002_prim , emissive_material )
711+
712+ cube_003_prim = box_materials_prim .GetChild ("tn__Cube003_VB" )
713+ self .assertTrue (cube_003_prim .IsValid ())
714+ self .assertTrue (cube_003_prim .IsA (UsdGeom .Mesh ))
715+ self .check_material_binding (cube_003_prim , emissive_color_tex_material )
716+
717+ cube_004_prim = box_materials_prim .GetChild ("tn__Cube004_VB" )
718+ self .assertTrue (cube_004_prim .IsValid ())
719+ self .assertTrue (cube_004_prim .IsA (UsdGeom .Mesh ))
720+ self .check_material_binding (cube_004_prim , opacity_material )
721+
722+ cube_005_prim = box_materials_prim .GetChild ("tn__Cube005_VB" )
723+ self .assertTrue (cube_005_prim .IsValid ())
724+ self .assertTrue (cube_005_prim .IsA (UsdGeom .Mesh ))
725+ self .check_material_binding (cube_005_prim , opacity_texture_material )
726+
727+ cube_001_prim = box_materials_prim .GetChild ("tn__Cube001_VB" )
728+ self .assertTrue (cube_001_prim .IsValid ())
729+ self .assertTrue (cube_001_prim .IsA (UsdGeom .Mesh ))
730+ self .check_material_binding (cube_001_prim , specular_material )
731+
732+ cube_006_prim = box_materials_prim .GetChild ("tn__Cube006_VB" )
733+ self .assertTrue (cube_006_prim .IsValid ())
734+ self .assertTrue (cube_006_prim .IsA (UsdGeom .Mesh ))
735+ self .check_material_binding (cube_006_prim , specular_texture_material )
736+
737+ # Check material binding to GeomSubset.
738+ link2_prim = link1_prim .GetChild ("link2" )
739+ box_materials_prim = link2_prim .GetChild ("box_two_materials" )
740+ self .assertTrue (box_materials_prim .IsValid ())
741+ self .assertTrue (box_materials_prim .IsA (UsdGeom .Mesh ))
742+ self .assertTrue (box_materials_prim .HasAuthoredReferences ())
743+
744+ subset_001_prim = box_materials_prim .GetChild ("GeomSubset_001" )
745+ self .assertTrue (subset_001_prim .IsValid ())
746+ self .assertTrue (subset_001_prim .IsA (UsdGeom .Subset ))
747+ self .check_material_binding (subset_001_prim , material_red )
748+
749+ subset_002_prim = box_materials_prim .GetChild ("GeomSubset_002" )
750+ self .assertTrue (subset_002_prim .IsValid ())
751+ self .assertTrue (subset_002_prim .IsA (UsdGeom .Subset ))
752+ self .check_material_binding (subset_002_prim , material_green )
753+
754+ link_transparent_prim = link2_prim .GetChild ("link_transparent" )
755+ box_transparent_prim = link_transparent_prim .GetChild ("box_transparent_material" )
756+ self .assertTrue (box_transparent_prim .IsValid ())
757+ self .assertTrue (box_transparent_prim .IsA (UsdGeom .Mesh ))
758+ self .assertTrue (box_transparent_prim .HasAuthoredReferences ())
759+ self .check_material_binding (box_transparent_prim , material_transparent )
0 commit comments