OpenMotionLab/MotionGPT
118
1import bpy2 3 4def clear_material(material):5 if material.node_tree:6 material.node_tree.links.clear()7 material.node_tree.nodes.clear()8 9 10def colored_material_diffuse_BSDF(r, g, b, a=1, roughness=0.127451):11 materials = bpy.data.materials12 material = materials.new(name="body")13 material.use_nodes = True14 clear_material(material)15 nodes = material.node_tree.nodes16 links = material.node_tree.links17 output = nodes.new(type='ShaderNodeOutputMaterial')18 diffuse = nodes.new(type='ShaderNodeBsdfDiffuse')19 diffuse.inputs["Color"].default_value = (r, g, b, a)20 diffuse.inputs["Roughness"].default_value = roughness21 links.new(diffuse.outputs['BSDF'], output.inputs['Surface'])22 return material23 24def colored_material_relection_BSDF(r, g, b, a=1, roughness=0.127451, saturation_factor=1):25 materials = bpy.data.materials26 material = materials.new(name="body")27 material.use_nodes = True28 # clear_material(material)29 nodes = material.node_tree.nodes30 links = material.node_tree.links31 output = nodes.new(type='ShaderNodeOutputMaterial')32 # diffuse = nodes.new(type='ShaderNodeBsdfDiffuse')33 diffuse = nodes["Principled BSDF"]34 diffuse.inputs["Base Color"].default_value = (r*saturation_factor, g*saturation_factor, b*saturation_factor, a)35 diffuse.inputs["Roughness"].default_value = roughness36 links.new(diffuse.outputs['BSDF'], output.inputs['Surface'])37 return material38 39# keys:40# ['Base Color', 'Subsurface', 'Subsurface Radius', 'Subsurface Color', 'Metallic', 'Specular', 'Specular Tint', 'Roughness', 'Anisotropic', 'Anisotropic Rotation', 'Sheen', 1Sheen Tint', 'Clearcoat', 'Clearcoat Roughness', 'IOR', 'Transmission', 'Transmission Roughness', 'Emission', 'Emission Strength', 'Alpha', 'Normal', 'Clearcoat Normal', 'Tangent']41DEFAULT_BSDF_SETTINGS = {"Subsurface": 0.15,42 "Subsurface Radius": [1.1, 0.2, 0.1],43 "Metallic": 0.3,44 "Specular": 0.5,45 "Specular Tint": 0.5,46 "Roughness": 0.75,47 "Anisotropic": 0.25,48 "Anisotropic Rotation": 0.25,49 "Sheen": 0.75,50 "Sheen Tint": 0.5,51 "Clearcoat": 0.5,52 "Clearcoat Roughness": 0.5,53 "IOR": 1.450,54 "Transmission": 0.1,55 "Transmission Roughness": 0.1,56 "Emission": (0, 0, 0, 1),57 "Emission Strength": 0.0,58 "Alpha": 1.0}59 60def body_material(r, g, b, a=1, name="body", oldrender=True):61 if oldrender:62 material = colored_material_diffuse_BSDF(r, g, b, a=a)63 else:64 materials = bpy.data.materials65 material = materials.new(name=name)66 material.use_nodes = True67 nodes = material.node_tree.nodes68 diffuse = nodes["Principled BSDF"]69 inputs = diffuse.inputs70 71 settings = DEFAULT_BSDF_SETTINGS.copy()72 settings["Base Color"] = (r, g, b, a)73 settings["Subsurface Color"] = (r, g, b, a)74 settings["Subsurface"] = 0.075 76 for setting, val in settings.items():77 inputs[setting].default_value = val78 79 return material80 81 82def colored_material_bsdf(name, **kwargs):83 materials = bpy.data.materials84 material = materials.new(name=name)85 material.use_nodes = True86 nodes = material.node_tree.nodes87 diffuse = nodes["Principled BSDF"]88 inputs = diffuse.inputs89 90 settings = DEFAULT_BSDF_SETTINGS.copy()91 for key, val in kwargs.items():92 settings[key] = val93 94 for setting, val in settings.items():95 inputs[setting].default_value = val96 97 return material98 99 100def floor_mat(name="floor_mat", color=(0.1, 0.1, 0.1, 1), roughness=0.127451):101 return colored_material_diffuse_BSDF(color[0], color[1], color[2], a=color[3], roughness=roughness)102 103 104def plane_mat():105 materials = bpy.data.materials106 material = materials.new(name="plane")107 material.use_nodes = True108 clear_material(material)109 nodes = material.node_tree.nodes110 links = material.node_tree.links111 output = nodes.new(type='ShaderNodeOutputMaterial')112 diffuse = nodes.new(type='ShaderNodeBsdfDiffuse')113 checker = nodes.new(type="ShaderNodeTexChecker")114 checker.inputs["Scale"].default_value = 1024115 checker.inputs["Color1"].default_value = (0.8, 0.8, 0.8, 1)116 checker.inputs["Color2"].default_value = (0.3, 0.3, 0.3, 1)117 links.new(checker.outputs["Color"], diffuse.inputs['Color'])118 links.new(diffuse.outputs['BSDF'], output.inputs['Surface'])119 diffuse.inputs["Roughness"].default_value = 0.127451120 return material121 122 123def plane_mat_uni():124 materials = bpy.data.materials125 material = materials.new(name="plane_uni")126 material.use_nodes = True127 clear_material(material)128 nodes = material.node_tree.nodes129 links = material.node_tree.links130 output = nodes.new(type='ShaderNodeOutputMaterial')131 diffuse = nodes.new(type='ShaderNodeBsdfDiffuse')132 diffuse.inputs["Color"].default_value = (0.8, 0.8, 0.8, 1)133 diffuse.inputs["Roughness"].default_value = 0.127451134 links.new(diffuse.outputs['BSDF'], output.inputs['Surface'])135 return material136 