@@ -25,33 +25,39 @@ def check_material_binding(self, prim: Usd.Prim, material: UsdShade.Material):
2525 bound_material = material_binding .GetDirectBindingRel ().GetTargets ()[0 ]
2626 self .assertEqual (bound_material , material .GetPrim ().GetPath ())
2727
28- def get_material_diffuse_color (self , material : UsdShade .Material ) -> Gf .Vec3f | None :
28+ def _get_input_value (self , shader : UsdShade .Shader , input_name : str ):
29+ value_attrs = UsdShade .Utils .GetValueProducingAttributes (shader .GetInput (input_name ))
30+
31+ # If no value is set, returns None.
32+ if not value_attrs or len (value_attrs ) == 0 :
33+ return None
34+
35+ return value_attrs [0 ].Get ()
36+
37+ def _get_material_input_value (self , material : UsdShade .Material , input_name : str ):
2938 shader : UsdShade .Shader = usdex .core .computeEffectivePreviewSurfaceShader (material )
30- return shader .GetInput ("diffuseColor" ).Get ()
39+ return self ._get_input_value (shader , input_name )
40+
41+ def get_material_diffuse_color (self , material : UsdShade .Material ) -> Gf .Vec3f | None :
42+ return self ._get_material_input_value (material , "diffuseColor" )
3143
3244 def get_material_specular_color (self , material : UsdShade .Material ) -> Gf .Vec3f | None :
33- shader : UsdShade .Shader = usdex .core .computeEffectivePreviewSurfaceShader (material )
34- return shader .GetInput ("specularColor" ).Get ()
45+ return self ._get_material_input_value (material , "specularColor" )
3546
3647 def get_material_specular_workflow (self , material : UsdShade .Material ) -> bool :
37- shader : UsdShade .Shader = usdex .core .computeEffectivePreviewSurfaceShader (material )
38- return shader .GetInput ("useSpecularWorkflow" ).Get () == 1
48+ return self ._get_material_input_value (material , "useSpecularWorkflow" ) == 1
3949
4050 def get_material_opacity (self , material : UsdShade .Material ) -> float :
41- shader : UsdShade .Shader = usdex .core .computeEffectivePreviewSurfaceShader (material )
42- return shader .GetInput ("opacity" ).Get ()
51+ return self ._get_material_input_value (material , "opacity" )
4352
4453 def get_material_roughness (self , material : UsdShade .Material ) -> float :
45- shader : UsdShade .Shader = usdex .core .computeEffectivePreviewSurfaceShader (material )
46- return shader .GetInput ("roughness" ).Get ()
54+ return self ._get_material_input_value (material , "roughness" )
4755
4856 def get_material_metallic (self , material : UsdShade .Material ) -> float :
49- shader : UsdShade .Shader = usdex .core .computeEffectivePreviewSurfaceShader (material )
50- return shader .GetInput ("metallic" ).Get ()
57+ return self ._get_material_input_value (material , "metallic" )
5158
5259 def get_material_ior (self , material : UsdShade .Material ) -> float :
53- shader : UsdShade .Shader = usdex .core .computeEffectivePreviewSurfaceShader (material )
54- return shader .GetInput ("ior" ).Get ()
60+ return self ._get_material_input_value (material , "ior" )
5561
5662 def get_material_texture_path (self , material : UsdShade .Material , texture_type : str = "diffuseColor" ) -> pathlib .Path :
5763 """
@@ -69,9 +75,9 @@ def get_material_texture_path(self, material: UsdShade.Material, texture_type: s
6975 self .assertTrue (texture_input .HasConnectedSource ())
7076
7177 connected_source = texture_input .GetConnectedSource ()
72- texture_prim = connected_source [0 ].GetPrim ()
73- texture_file_attr = texture_prim . GetAttribute ( "inputs: file" )
74- return pathlib .Path (texture_file_attr . Get () .path )
78+ texture_shader = UsdShade . Shader ( connected_source [0 ].GetPrim () )
79+ texture_file_value = self . _get_input_value ( texture_shader , " file" )
80+ return pathlib .Path (texture_file_value .path )
7581
7682 def get_material_diffuse_color_texture_fallback (self , material : UsdShade .Material ) -> Gf .Vec4f | None :
7783 shader : UsdShade .Shader = usdex .core .computeEffectivePreviewSurfaceShader (material )
@@ -80,5 +86,5 @@ def get_material_diffuse_color_texture_fallback(self, material: UsdShade.Materia
8086 source = diffuse_color_input .GetConnectedSource ()
8187 if len (source ) > 0 and isinstance (source [0 ], UsdShade .ConnectableAPI ) and source [0 ].GetPrim ().IsA (UsdShade .Shader ):
8288 diffuse_texture_shader = UsdShade .Shader (source [0 ].GetPrim ())
83- return diffuse_texture_shader . GetInput ( "fallback" ). Get ( )
89+ return self . _get_input_value ( diffuse_texture_shader , "fallback" )
8490 return None
0 commit comments