Spaces:
Build error
Build error
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 | |
# clear_material(material) | |
nodes = material.node_tree.nodes | |
links = material.node_tree.links | |
output = nodes.new(type='ShaderNodeOutputMaterial') | |
# diffuse = nodes.new(type='ShaderNodeBsdfDiffuse') | |
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 | |
# keys: | |
# ['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'] | |
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 | |