| import bpy |
|
|
|
|
| def clear_material(material): |
| if material.node_tree: |
| material.node_tree.links.clear() |
| material.node_tree.nodes.clear() |
|
|
|
|
| def colored_material_diffuse_BSDF(r, g, b, a=1, roughness=0.127451): |
| materials = bpy.data.materials |
| material = materials.new(name="body") |
| material.use_nodes = True |
| clear_material(material) |
| nodes = material.node_tree.nodes |
| links = material.node_tree.links |
| output = nodes.new(type='ShaderNodeOutputMaterial') |
| diffuse = nodes.new(type='ShaderNodeBsdfDiffuse') |
| diffuse.inputs["Color"].default_value = (r, g, b, a) |
| diffuse.inputs["Roughness"].default_value = roughness |
| links.new(diffuse.outputs['BSDF'], output.inputs['Surface']) |
| return material |
|
|
| def colored_material_relection_BSDF(r, g, b, a=1, roughness=0.127451, saturation_factor=1): |
| materials = bpy.data.materials |
| material = materials.new(name="body") |
| material.use_nodes = True |
| |
| nodes = material.node_tree.nodes |
| links = material.node_tree.links |
| output = nodes.new(type='ShaderNodeOutputMaterial') |
| |
| diffuse = nodes["Principled BSDF"] |
| diffuse.inputs["Base Color"].default_value = (r*saturation_factor, g*saturation_factor, b*saturation_factor, a) |
| diffuse.inputs["Roughness"].default_value = roughness |
| links.new(diffuse.outputs['BSDF'], output.inputs['Surface']) |
| return material |
|
|
| |
| |
| DEFAULT_BSDF_SETTINGS = {"Subsurface": 0.15, |
| "Subsurface Radius": [1.1, 0.2, 0.1], |
| "Metallic": 0.3, |
| "Specular": 0.5, |
| "Specular Tint": 0.5, |
| "Roughness": 0.75, |
| "Anisotropic": 0.25, |
| "Anisotropic Rotation": 0.25, |
| "Sheen": 0.75, |
| "Sheen Tint": 0.5, |
| "Clearcoat": 0.5, |
| "Clearcoat Roughness": 0.5, |
| "IOR": 1.450, |
| "Transmission": 0.1, |
| "Transmission Roughness": 0.1, |
| "Emission": (0, 0, 0, 1), |
| "Emission Strength": 0.0, |
| "Alpha": 1.0} |
|
|
| def body_material(r, g, b, a=1, name="body", oldrender=True): |
| if oldrender: |
| material = colored_material_diffuse_BSDF(r, g, b, a=a) |
| else: |
| materials = bpy.data.materials |
| material = materials.new(name=name) |
| material.use_nodes = True |
| nodes = material.node_tree.nodes |
| diffuse = nodes["Principled BSDF"] |
| inputs = diffuse.inputs |
|
|
| settings = DEFAULT_BSDF_SETTINGS.copy() |
| settings["Base Color"] = (r, g, b, a) |
| settings["Subsurface Color"] = (r, g, b, a) |
| settings["Subsurface"] = 0.0 |
|
|
| for setting, val in settings.items(): |
| inputs[setting].default_value = val |
|
|
| return material |
|
|
|
|
| def colored_material_bsdf(name, **kwargs): |
| materials = bpy.data.materials |
| material = materials.new(name=name) |
| material.use_nodes = True |
| nodes = material.node_tree.nodes |
| diffuse = nodes["Principled BSDF"] |
| inputs = diffuse.inputs |
|
|
| settings = DEFAULT_BSDF_SETTINGS.copy() |
| for key, val in kwargs.items(): |
| settings[key] = val |
|
|
| for setting, val in settings.items(): |
| inputs[setting].default_value = val |
|
|
| return material |
|
|
|
|
| def floor_mat(name="floor_mat", color=(0.1, 0.1, 0.1, 1), roughness=0.127451): |
| return colored_material_diffuse_BSDF(color[0], color[1], color[2], a=color[3], roughness=roughness) |
|
|
|
|
| def plane_mat(): |
| materials = bpy.data.materials |
| material = materials.new(name="plane") |
| material.use_nodes = True |
| clear_material(material) |
| nodes = material.node_tree.nodes |
| links = material.node_tree.links |
| output = nodes.new(type='ShaderNodeOutputMaterial') |
| diffuse = nodes.new(type='ShaderNodeBsdfDiffuse') |
| checker = nodes.new(type="ShaderNodeTexChecker") |
| checker.inputs["Scale"].default_value = 1024 |
| checker.inputs["Color1"].default_value = (0.8, 0.8, 0.8, 1) |
| checker.inputs["Color2"].default_value = (0.3, 0.3, 0.3, 1) |
| links.new(checker.outputs["Color"], diffuse.inputs['Color']) |
| links.new(diffuse.outputs['BSDF'], output.inputs['Surface']) |
| diffuse.inputs["Roughness"].default_value = 0.127451 |
| return material |
|
|
|
|
| def plane_mat_uni(): |
| materials = bpy.data.materials |
| material = materials.new(name="plane_uni") |
| material.use_nodes = True |
| clear_material(material) |
| nodes = material.node_tree.nodes |
| links = material.node_tree.links |
| output = nodes.new(type='ShaderNodeOutputMaterial') |
| diffuse = nodes.new(type='ShaderNodeBsdfDiffuse') |
| diffuse.inputs["Color"].default_value = (0.8, 0.8, 0.8, 1) |
| diffuse.inputs["Roughness"].default_value = 0.127451 |
| links.new(diffuse.outputs['BSDF'], output.inputs['Surface']) |
| return material |
|
|