"""Build shared material inputs, roughness, and bump outputs.""" BUMP_BASE_DISTANCE = 0.001 def build_material_nodes(group): nodes = group.nodes group_input = nodes.new("NodeGroupInput") group_input.location = (-500.0, 100.0) group_output = nodes.new("NodeGroupOutput") group_output.location = (300.0, 100.0) roughness_curve = nodes.new("ShaderNodeFloatCurve") roughness_curve.mapping.initialize() curve_points = roughness_curve.mapping.curves[0].points curve_points[0].location = (0.0, 0.5) curve_points[-1].location = (1.0, 0.1) roughness_curve.mapping.update() roughness_curve.location = (-250.0, 350.0) bump = nodes.new("ShaderNodeBump") bump.location = (100.0, 0.0) return group_input, group_output, roughness_curve, bump def connect_material_outputs(group, group_input, group_output, roughness_curve, bump, processed_alpha, bump_location): nodes, links = group.nodes, group.links links.new(group_input.outputs["Color"], group_output.inputs["Color"]) links.new(group_input.outputs["Color"], roughness_curve.inputs["Value"]) links.new( roughness_curve.outputs["Value"], group_output.inputs["Roughness"], ) links.new(processed_alpha, group_output.inputs["Alpha"]) links.new(group_input.outputs["Color"], bump.inputs["Height"]) bump_distance = nodes.new("ShaderNodeMath") bump_distance.operation = "MULTIPLY" bump_distance.inputs[1].default_value = BUMP_BASE_DISTANCE bump_distance.location = bump_location links.new(group_input.outputs["Bump Scale"], bump_distance.inputs[0]) links.new(bump_distance.outputs[0], bump.inputs["Distance"]) links.new(bump.outputs["Normal"], group_output.inputs["Normal"])