|
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 |
|
|