Team Ai
Apppublic

OpenMotionLab/MotionGPT

sourceHugging Facemitupdated 1y agoView on Hugging Face
118likes
materials.py136 linesDownload Raw Back to blender
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