@@ -890,6 +890,20 @@ def __emit_front_material_bsdf_tree(self, material, material_name, scene, layers
890890 else :
891891 bsdfs .append ([metal_bsdf_name , layer .metal_weight ])
892892
893+ # Plastic BRDF
894+ elif layer .bsdf_type == "plastic_brdf" :
895+ plastic_bsdf_name = "{0}|{1}" .format (material_name , layer .name )
896+ self .__emit_plastic_brdf (material , plastic_bsdf_name , scene , layer )
897+ # Layer mask textures.
898+ if layer .plastic_use_tex and layer .plastic_mix_tex != '' :
899+ bsdfs .append ([plastic_bsdf_name , layer .plastic_mix_tex + "_inst" ])
900+ mix_tex_name = layer .plastic_mix_tex + "_inst"
901+ if mix_tex_name not in self ._textures_set :
902+ self .__emit_texture (bpy .data .textures [layer .plastic_mix_tex ], False , scene )
903+ self ._textures_set .add (mix_tex_name )
904+ else :
905+ bsdfs .append ([plastic_bsdf_name , layer .plastic_weight ])
906+
893907 # Diffuse BTDF
894908 elif layer .bsdf_type == "diffuse_btdf" :
895909 dt_bsdf_name = "{0}|{1}" .format (material_name , layer .name )
@@ -1428,11 +1442,6 @@ def __emit_blinn_brdf(self, material, bsdf_name, scene, layer=None, node=None):
14281442 if exponent_name not in self ._textures_set :
14291443 self ._textures_set .add (exponent_name )
14301444 self .__emit_texture (bpy .data .textures [layer .blinn_exponent_tex ], False , scene )
1431- if exponent_name == "" :
1432- exponent_name = "{0}_exponent" .format (bsdf_name )
1433- self .__emit_solid_linear_rgb_color_element (exponent_name ,
1434- layer .blinn_exponent ,
1435- 1 )
14361445
14371446 self .__open_element ('bsdf name="{0}" model="blinn_brdf"' .format (bsdf_name ))
14381447 self .__emit_parameter ("exponent" , exponent_name )
@@ -1673,6 +1682,79 @@ def __emit_metal_brdf(self, material, bsdf_name, scene, layer=None, node=None):
16731682 self .__emit_parameter ("anisotropy" , anisotropy )
16741683 self .__close_element ("bsdf" )
16751684
1685+ # ----------------------
1686+ # Write Plastic BRDF
1687+ # ----------------------
1688+ def __emit_plastic_brdf (self , material , bsdf_name , scene , layer = None , node = None ):
1689+ specular_reflectance = ""
1690+ specular_reflectance_multiplier = layer .plastic_specular_reflectance_multiplier
1691+ roughness = layer .plastic_roughness
1692+ diffuse_reflectance = ""
1693+ diffuse_reflectance_multiplier = layer .plastic_diffuse_reflectance_multiplier
1694+
1695+ # check for texture in specular_reflectance slot
1696+ if layer .plastic_specular_reflectance_tex and layer .plastic_specular_reflectance_tex != "" :
1697+ if util .is_uv_img (bpy .data .textures [layer .plastic_specular_reflectance_tex ]):
1698+
1699+ specular_reflectance = layer .plastic_specular_reflectance_tex + "_inst"
1700+ if specular_reflectance not in self ._textures_set :
1701+ self ._textures_set .add (specular_reflectance )
1702+ self .__emit_texture (bpy .data .textures [layer .plastic_specular_reflectance_tex ], False , scene )
1703+ if specular_reflectance == "" :
1704+ specular_reflectance = "{0}_specular_reflectance" .format (bsdf_name )
1705+ self .__emit_solid_linear_rgb_color_element (specular_reflectance ,
1706+ layer .plastic_specular_reflectance ,
1707+ 1 )
1708+
1709+ # check for texture in specular_reflectance_multiplier slot
1710+ if layer .plastic_specular_reflectance_multiplier_use_tex and layer .plastic_specular_reflectance_multiplier_tex != "" :
1711+ if util .is_uv_img (bpy .data .textures [layer .plastic_specular_reflectance_multiplier_tex ]):
1712+ specular_reflectance_multiplier = layer .plastic_specular_reflectance_multiplier_tex + "_inst"
1713+ if specular_reflectance_multiplier not in self ._textures_set :
1714+ self ._textures_set .add (specular_reflectance_multiplier )
1715+ self .__emit_texture (bpy .data .textures [layer .plastic_specular_reflectance_multiplier_tex ], False , scene )
1716+
1717+ # check for texture in roughness slot
1718+ if layer .plastic_roughness_use_tex and layer .plastic_roughness_tex != "" :
1719+ if util .is_uv_img (bpy .data .textures [layer .plastic_roughness_tex ]):
1720+ roughness = layer .plastic_roughness_tex + "_inst"
1721+ if roughness not in self ._textures_set :
1722+ self ._textures_set .add (roughness )
1723+ self .__emit_texture (bpy .data .textures [layer .plastic_roughness_tex ], False , scene )
1724+
1725+ # check for texture in diffuse_reflectance slot
1726+ if layer .plastic_diffuse_reflectance_tex and layer .plastic_diffuse_reflectance_tex != "" :
1727+ if util .is_uv_img (bpy .data .textures [layer .plastic_diffuse_reflectance_tex ]):
1728+
1729+ diffuse_reflectance = layer .plastic_diffuse_reflectance_tex + "_inst"
1730+ if diffuse_reflectance not in self ._textures_set :
1731+ self ._textures_set .add (diffuse_reflectance )
1732+ self .__emit_texture (bpy .data .textures [layer .plastic_diffuse_reflectance_tex ], False , scene )
1733+ if diffuse_reflectance == "" :
1734+ diffuse_reflectance = "{0}_diffuse_reflectance" .format (bsdf_name )
1735+ self .__emit_solid_linear_rgb_color_element (diffuse_reflectance ,
1736+ layer .plastic_diffuse_reflectance ,
1737+ 1 )
1738+
1739+ # check for texture in diffuse_reflectance_multiplier slot
1740+ if layer .plastic_diffuse_reflectance_multiplier_use_tex and layer .plastic_diffuse_reflectance_multiplier_tex != "" :
1741+ if util .is_uv_img (bpy .data .textures [layer .plastic_diffuse_reflectance_multiplier_tex ]):
1742+ diffuse_reflectance_multiplier = layer .plastic_diffuse_reflectance_multiplier_tex + "_inst"
1743+ if diffuse_reflectance_multiplier not in self ._textures_set :
1744+ self ._textures_set .add (diffuse_reflectance_multiplier )
1745+ self .__emit_texture (bpy .data .textures [layer .plastic_diffuse_reflectance_multiplier_tex ], False , scene )
1746+
1747+ self .__open_element ('bsdf name="{0}" model="plastic_brdf"' .format (bsdf_name ))
1748+ self .__emit_parameter ("mdf" , layer .plastic_mdf )
1749+ self .__emit_parameter ("specular_reflectance" , specular_reflectance )
1750+ self .__emit_parameter ("specular_reflectance_multiplier" , specular_reflectance_multiplier )
1751+ self .__emit_parameter ("roughness" , roughness )
1752+ self .__emit_parameter ("highlight_falloff" , layer .plastic_highlight_falloff )
1753+ self .__emit_parameter ("ior" , layer .plastic_ior )
1754+ self .__emit_parameter ("diffuse_reflectance" , diffuse_reflectance )
1755+ self .__emit_parameter ("diffuse_reflectance_multiplier" , diffuse_reflectance_multiplier )
1756+ self .__close_element ("bsdf" )
1757+
16761758 # ----------------------
16771759 # Write Specular BRDF.
16781760 # ----------------------
0 commit comments