def init(node_tree): """Initialize node tree with links for this shader. :param node_tree: node tree on which this shader should be created :type node_tree: bpy.types.NodeTree """ start_pos_x = 0 start_pos_y = 0 pos_x_shift = 185 # node creation vcol_group_n = node_tree.nodes.new("ShaderNodeGroup") vcol_group_n.name = UnlitVcolTex.VCOL_GROUP_NODE vcol_group_n.label = UnlitVcolTex.VCOL_GROUP_NODE vcol_group_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1650) vcol_group_n.node_tree = vcolor_input.get_node_group() geometry_n = node_tree.nodes.new("ShaderNodeGeometry") geometry_n.name = UnlitVcolTex.GEOM_NODE geometry_n.label = UnlitVcolTex.GEOM_NODE geometry_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1500) geometry_n.uv_layer = _MESH_consts.none_uv diff_col_n = node_tree.nodes.new("ShaderNodeRGB") diff_col_n.name = UnlitVcolTex.DIFF_COL_NODE diff_col_n.label = UnlitVcolTex.DIFF_COL_NODE diff_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1700) vcol_scale_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_scale_n.name = UnlitVcolTex.VCOLOR_SCALE_NODE vcol_scale_n.label = UnlitVcolTex.VCOLOR_SCALE_NODE vcol_scale_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1600) vcol_scale_n.blend_type = "MULTIPLY" vcol_scale_n.inputs['Fac'].default_value = 1 vcol_scale_n.inputs['Color2'].default_value = (2, ) * 4 opacity_n = node_tree.nodes.new("ShaderNodeMath") opacity_n.name = UnlitVcolTex.OPACITY_NODE opacity_n.label = UnlitVcolTex.OPACITY_NODE opacity_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1300) opacity_n.operation = "MULTIPLY" base_tex_n = node_tree.nodes.new("ShaderNodeTexture") base_tex_n.name = UnlitVcolTex.BASE_TEX_NODE base_tex_n.label = UnlitVcolTex.BASE_TEX_NODE base_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1500) diff_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_mult_n.name = UnlitVcolTex.DIFF_MULT_NODE diff_mult_n.label = UnlitVcolTex.DIFF_MULT_NODE diff_mult_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1700) diff_mult_n.blend_type = "MULTIPLY" diff_mult_n.inputs['Fac'].default_value = 1 diff_mult_n.inputs['Color2'].default_value = (0, 0, 0, 1) tex_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") tex_mult_n.name = UnlitVcolTex.TEX_MULT_NODE tex_mult_n.label = UnlitVcolTex.TEX_MULT_NODE tex_mult_n.location = (start_pos_x + pos_x_shift * 5, start_pos_y + 1500) tex_mult_n.blend_type = "MULTIPLY" tex_mult_n.inputs['Fac'].default_value = 1 output_n = node_tree.nodes.new("ShaderNodeOutput") output_n.name = UnlitVcolTex.OUTPUT_NODE output_n.label = UnlitVcolTex.OUTPUT_NODE output_n.location = (start_pos_x + +pos_x_shift * 7, start_pos_y + 1500) # links creation node_tree.links.new(base_tex_n.inputs['Vector'], geometry_n.outputs['UV']) node_tree.links.new(vcol_scale_n.inputs['Color1'], vcol_group_n.outputs['Vertex Color']) node_tree.links.new(diff_mult_n.inputs['Color1'], diff_col_n.outputs['Color']) node_tree.links.new(diff_mult_n.inputs['Color2'], vcol_scale_n.outputs['Color']) node_tree.links.new(opacity_n.inputs[0], base_tex_n.outputs["Value"]) node_tree.links.new(opacity_n.inputs[1], vcol_group_n.outputs["Vertex Color Alpha"]) node_tree.links.new(tex_mult_n.inputs['Color1'], diff_mult_n.outputs['Color']) node_tree.links.new(tex_mult_n.inputs['Color2'], base_tex_n.outputs['Color']) node_tree.links.new(output_n.inputs['Color'], tex_mult_n.outputs['Color'])
def init(node_tree): """Initialize node tree with links for this shader. NOTE: this shader can not be fully implemented, because in game this shader works with frame buffer which already has color of underlying pixel. :param node_tree: node tree on which this shader should be created :type node_tree: bpy.types.NodeTree """ start_pos_x = 0 start_pos_y = 0 pos_x_shift = 185 # node creation # geometry vcol_group_n = node_tree.nodes.new("ShaderNodeGroup") vcol_group_n.name = Glass.VCOL_GROUP_NODE vcol_group_n.label = Glass.VCOL_GROUP_NODE vcol_group_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1650) vcol_group_n.node_tree = vcolor_input.get_node_group() geometry_n = node_tree.nodes.new("ShaderNodeGeometry") geometry_n.name = Glass.GEOM_NODE geometry_n.label = Glass.GEOM_NODE geometry_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1500) geometry_n.uv_layer = _MESH_consts.none_uv # inputs refl_tex_n = node_tree.nodes.new("ShaderNodeTexture") refl_tex_n.name = Glass.REFL_TEX_NODE refl_tex_n.label = Glass.REFL_TEX_NODE refl_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2700) env_col_n = node_tree.nodes.new("ShaderNodeRGB") env_col_n.name = Glass.ENV_COLOR_NODE env_col_n.label = Glass.ENV_COLOR_NODE env_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2400) tint_col_n = node_tree.nodes.new("ShaderNodeRGB") tint_col_n.name = Glass.TINT_COL_NODE tint_col_n.label = Glass.TINT_COL_NODE tint_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2200) tint_opacity_n = node_tree.nodes.new("ShaderNodeValue") tint_opacity_n.name = Glass.TINT_OPACITY_NODE tint_opacity_n.label = Glass.TINT_OPACITY_NODE tint_opacity_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2000) spec_col_n = node_tree.nodes.new("ShaderNodeRGB") spec_col_n.name = Glass.SPEC_COL_NODE spec_col_n.label = Glass.SPEC_COL_NODE spec_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1900) diff_col_n = node_tree.nodes.new("ShaderNodeRGB") diff_col_n.name = Glass.DIFF_COL_NODE diff_col_n.label = Glass.DIFF_COL_NODE diff_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1700) base_tex_n = node_tree.nodes.new("ShaderNodeTexture") base_tex_n.name = Glass.BASE_TEX_NODE base_tex_n.label = Glass.BASE_TEX_NODE base_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1500) # pass 1 add_env_gn = node_tree.nodes.new("ShaderNodeGroup") add_env_gn.name = Glass.ADD_ENV_GROUP_NODE add_env_gn.label = Glass.ADD_ENV_GROUP_NODE add_env_gn.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 2500) add_env_gn.node_tree = add_env.get_node_group() add_env_gn.inputs["Apply Fresnel"].default_value = 1.0 add_env_gn.inputs["Base Texture Alpha"].default_value = 1.0 add_env_gn.inputs["Fresnel Scale"].default_value = 2.0 add_env_gn.inputs["Fresnel Bias"].default_value = 1.0 tint_col_hsv_n = node_tree.nodes.new("ShaderNodeSeparateHSV") tint_col_hsv_n.name = Glass.TINT_HSV_NODE tint_col_hsv_n.label = Glass.TINT_HSV_NODE tint_col_hsv_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 2100) tint_opacity_combine_n = node_tree.nodes.new("ShaderNodeCombineRGB") tint_opacity_combine_n.name = Glass.TINT_OPACITY_COMBINE_NODE tint_opacity_combine_n.label = Glass.TINT_OPACITY_COMBINE_NODE tint_opacity_combine_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1800) diff_vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_vcol_mult_n.name = Glass.DIFF_VCOL_MULT_NODE diff_vcol_mult_n.label = Glass.DIFF_VCOL_MULT_NODE diff_vcol_mult_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1650) diff_vcol_mult_n.blend_type = "MULTIPLY" diff_vcol_mult_n.inputs["Fac"].default_value = 1 spec_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") spec_mult_n.name = Glass.SPEC_MULT_NODE spec_mult_n.label = Glass.SPEC_MULT_NODE spec_mult_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1450) spec_mult_n.blend_type = "MULTIPLY" spec_mult_n.inputs["Fac"].default_value = 1 # pass 2 tint_sat_subtract_n = node_tree.nodes.new("ShaderNodeMath") tint_sat_subtract_n.name = Glass.TINT_SAT_SUBTRACT_NODE tint_sat_subtract_n.label = Glass.TINT_SAT_SUBTRACT_NODE tint_sat_subtract_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 2200) tint_sat_subtract_n.operation = "SUBTRACT" tint_sat_subtract_n.inputs[0].default_value = 1.0 tint_vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") tint_vcol_mult_n.name = Glass.TINT_VCOL_MULT_NODE tint_vcol_mult_n.label = Glass.TINT_VCOL_MULT_NODE tint_vcol_mult_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1950) tint_vcol_mult_n.blend_type = "MULTIPLY" tint_vcol_mult_n.inputs["Fac"].default_value = 1 diff_opacity_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_opacity_mult_n.name = Glass.DIFF_OPACITY_MULT_NODE diff_opacity_mult_n.label = Glass.DIFF_OPACITY_MULT_NODE diff_opacity_mult_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1750) diff_opacity_mult_n.blend_type = "MULTIPLY" diff_opacity_mult_n.inputs["Fac"].default_value = 1 # pass 3 tint_val_sat_mult_n = node_tree.nodes.new("ShaderNodeMath") tint_val_sat_mult_n.name = Glass.TINT_VAL_SAT_MULT_NODE tint_val_sat_mult_n.label = Glass.TINT_VAL_SAT_MULT_NODE tint_val_sat_mult_n.location = (start_pos_x + pos_x_shift * 5, start_pos_y + 2150) tint_val_sat_mult_n.operation = "MULTIPLY" # pass 4 tint_diff_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") tint_diff_mult_n.name = Glass.TINT_DIFF_MULT_NODE tint_diff_mult_n.label = Glass.TINT_DIFF_MULT_NODE tint_diff_mult_n.location = (start_pos_x + pos_x_shift * 6, start_pos_y + 1900) tint_diff_mult_n.blend_type = "MULTIPLY" tint_diff_mult_n.inputs["Fac"].default_value = 1 # pass 5 out_mat_n = node_tree.nodes.new("ShaderNodeExtendedMaterial") out_mat_n.name = Glass.OUT_MAT_NODE out_mat_n.label = Glass.OUT_MAT_NODE if "Refl" in out_mat_n: out_mat_n.inputs["Refl"].default_value = 1.0 elif "Reflectivity" in out_mat_n: out_mat_n.inputs["Reflectivity"].default_value = 1.0 out_mat_n.location = (start_pos_x + pos_x_shift * 7, start_pos_y + 2100) tint_val_subtract_n = node_tree.nodes.new("ShaderNodeMath") tint_val_subtract_n.name = Glass.TINT_VAL_SUBTRACT_NODE tint_val_subtract_n.label = Glass.TINT_VAL_SUBTRACT_NODE tint_val_subtract_n.location = (start_pos_x + pos_x_shift * 7, start_pos_y + 1400) tint_val_subtract_n.operation = "SUBTRACT" tint_val_subtract_n.inputs[0].default_value = 1.0 # pass 6 out_add_spec_n = node_tree.nodes.new("ShaderNodeMixRGB") out_add_spec_n.name = Glass.OUT_ADD_SPEC_NODE out_add_spec_n.label = Glass.OUT_ADD_SPEC_NODE out_add_spec_n.location = (start_pos_x + pos_x_shift * 8, start_pos_y + 2050) out_add_spec_n.blend_type = "ADD" out_add_spec_n.inputs["Fac"].default_value = 1 out_add_spec_a_n = node_tree.nodes.new("ShaderNodeMath") out_add_spec_a_n.name = Glass.OUT_ADD_SPEC_A_NODE out_add_spec_a_n.label = Glass.OUT_ADD_SPEC_A_NODE out_add_spec_a_n.location = (start_pos_x + pos_x_shift * 8, start_pos_y + 1550) out_add_spec_a_n.operation = "ADD" max_tint_n = node_tree.nodes.new("ShaderNodeMath") max_tint_n.name = Glass.MAX_TINT_VAL_OR_OPACITY_NODE max_tint_n.label = Glass.MAX_TINT_VAL_OR_OPACITY_NODE max_tint_n.location = (start_pos_x + pos_x_shift * 8, start_pos_y + 1350) max_tint_n.operation = "MAXIMUM" # pass 7 out_add_refl_n = node_tree.nodes.new("ShaderNodeMixRGB") out_add_refl_n.name = Glass.OUT_ADD_REFL_NODE out_add_refl_n.label = Glass.OUT_ADD_REFL_NODE out_add_refl_n.location = (start_pos_x + pos_x_shift * 9, start_pos_y + 2200) out_add_refl_n.blend_type = "ADD" out_add_refl_n.inputs["Fac"].default_value = 1 out_add_tint_max_a_n = node_tree.nodes.new("ShaderNodeMath") out_add_tint_max_a_n.name = Glass.OUT_ADD_TINT_MAX_A_NODE out_add_tint_max_a_n.label = Glass.OUT_ADD_TINT_MAX_A_NODE out_add_tint_max_a_n.location = (start_pos_x + pos_x_shift * 9, start_pos_y + 1500) # output output_n = node_tree.nodes.new("ShaderNodeOutput") output_n.name = Glass.OUTPUT_NODE output_n.label = Glass.OUTPUT_NODE output_n.location = (start_pos_x + +pos_x_shift * 11, start_pos_y + 1900) # links creation # input node_tree.links.new(base_tex_n.inputs["Vector"], geometry_n.outputs["UV"]) node_tree.links.new(refl_tex_n.inputs["Vector"], geometry_n.outputs["Normal"]) # pass 1 node_tree.links.new(add_env_gn.inputs["Normal Vector"], geometry_n.outputs["Normal"]) node_tree.links.new(add_env_gn.inputs["View Vector"], geometry_n.outputs["View"]) node_tree.links.new(add_env_gn.inputs["Reflection Texture Color"], refl_tex_n.outputs["Color"]) node_tree.links.new(add_env_gn.inputs["Env Factor Color"], env_col_n.outputs["Color"]) node_tree.links.new(add_env_gn.inputs["Specular Color"], spec_col_n.outputs["Color"]) node_tree.links.new(tint_col_hsv_n.inputs["Color"], tint_col_n.outputs["Color"]) node_tree.links.new(tint_opacity_combine_n.inputs["R"], tint_opacity_n.outputs["Value"]) node_tree.links.new(tint_opacity_combine_n.inputs["G"], tint_opacity_n.outputs["Value"]) node_tree.links.new(tint_opacity_combine_n.inputs["B"], tint_opacity_n.outputs["Value"]) node_tree.links.new(diff_vcol_mult_n.inputs["Color1"], diff_col_n.outputs["Color"]) node_tree.links.new(diff_vcol_mult_n.inputs["Color2"], vcol_group_n.outputs["Vertex Color"]) node_tree.links.new(spec_mult_n.inputs["Color1"], spec_col_n.outputs["Color"]) node_tree.links.new(spec_mult_n.inputs["Color2"], base_tex_n.outputs["Value"]) # pass 2 node_tree.links.new(tint_sat_subtract_n.inputs[1], tint_col_hsv_n.outputs["S"]) node_tree.links.new(tint_vcol_mult_n.inputs["Color1"], tint_col_n.outputs["Color"]) node_tree.links.new(tint_vcol_mult_n.inputs["Color2"], vcol_group_n.outputs["Vertex Color"]) node_tree.links.new(diff_opacity_mult_n.inputs["Color1"], tint_opacity_combine_n.outputs["Image"]) node_tree.links.new(diff_opacity_mult_n.inputs["Color2"], diff_vcol_mult_n.outputs["Color"]) # pass 3 node_tree.links.new(tint_val_sat_mult_n.inputs[0], tint_sat_subtract_n.outputs[0]) node_tree.links.new(tint_val_sat_mult_n.inputs[1], tint_col_hsv_n.outputs["V"]) # pass 4 node_tree.links.new(tint_diff_mult_n.inputs["Fac"], tint_val_sat_mult_n.outputs["Value"]) node_tree.links.new(tint_diff_mult_n.inputs["Color1"], tint_vcol_mult_n.outputs["Color"]) node_tree.links.new(tint_diff_mult_n.inputs["Color2"], diff_opacity_mult_n.outputs["Color"]) # pass 5 node_tree.links.new(out_mat_n.inputs["Spec"], spec_mult_n.outputs["Color"]) node_tree.links.new(tint_val_subtract_n.inputs[1], vcol_group_n.outputs["Vertex Color Alpha"]) # pass 6 node_tree.links.new(out_add_spec_n.inputs["Color1"], out_mat_n.outputs["Spec"]) node_tree.links.new(out_add_spec_n.inputs["Color2"], tint_diff_mult_n.outputs["Color"]) node_tree.links.new(out_add_spec_a_n.inputs[0], out_mat_n.outputs["Spec"]) node_tree.links.new(out_add_spec_a_n.inputs[1], add_env_gn.outputs["Environment Addition Color"]) node_tree.links.new(max_tint_n.inputs[0], tint_val_subtract_n.outputs[0]) node_tree.links.new(max_tint_n.inputs[1], tint_opacity_n.outputs[0]) # pass 7 node_tree.links.new(out_add_refl_n.inputs["Color1"], add_env_gn.outputs["Environment Addition Color"]) node_tree.links.new(out_add_refl_n.inputs["Color2"], out_add_spec_n.outputs["Color"]) node_tree.links.new(out_add_tint_max_a_n.inputs[0], out_add_spec_a_n.outputs[0]) node_tree.links.new(out_add_tint_max_a_n.inputs[1], max_tint_n.outputs[0]) # output node_tree.links.new(output_n.inputs["Color"], out_add_refl_n.outputs["Color"]) node_tree.links.new(output_n.inputs["Alpha"], out_add_tint_max_a_n.outputs[0])
def init(node_tree): """Initialize node tree with links for this shader. :param node_tree: node tree on which this shader should be created :type node_tree: bpy.types.NodeTree """ start_pos_x = 0 start_pos_y = 0 pos_x_shift = 185 # node creation vcol_group_n = node_tree.nodes.new("ShaderNodeGroup") vcol_group_n.name = Reflective.VCOL_GROUP_NODE vcol_group_n.label = Reflective.VCOL_GROUP_NODE vcol_group_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1650) vcol_group_n.node_tree = vcolor_input.get_node_group() geometry_n = node_tree.nodes.new("ShaderNodeGeometry") geometry_n.name = Reflective.GEOM_NODE geometry_n.label = Reflective.GEOM_NODE geometry_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1500) geometry_n.uv_layer = _MESH_consts.none_uv opacity_n = node_tree.nodes.new("ShaderNodeMath") opacity_n.name = Reflective.OPACITY_NODE opacity_n.label = Reflective.OPACITY_NODE opacity_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1300) opacity_n.operation = "MULTIPLY" vcol_scale_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_scale_n.name = Reflective.VCOLOR_SCALE_NODE vcol_scale_n.label = Reflective.VCOLOR_SCALE_NODE vcol_scale_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1750) vcol_scale_n.blend_type = "MULTIPLY" vcol_scale_n.inputs['Fac'].default_value = 1 vcol_scale_n.inputs['Color2'].default_value = (2, ) * 4 base_tex_n = node_tree.nodes.new("ShaderNodeTexture") base_tex_n.name = Reflective.BASE_TEX_NODE base_tex_n.label = Reflective.BASE_TEX_NODE base_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1500) vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_mult_n.name = Reflective.VCOLOR_MULT_NODE vcol_mult_n.label = Reflective.VCOLOR_MULT_NODE vcol_mult_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1700) vcol_mult_n.blend_type = "MULTIPLY" vcol_mult_n.inputs['Fac'].default_value = 1 out_mat_n = node_tree.nodes.new("ShaderNodeExtendedMaterial") out_mat_n.name = Reflective.OUT_MAT_NODE out_mat_n.label = Reflective.OUT_MAT_NODE if "SpecTra" in out_mat_n: out_mat_n.inputs['SpecTra'].default_value = 0.0 if "Refl" in out_mat_n: out_mat_n.inputs['Refl'].default_value = 1.0 elif "Reflectivity" in out_mat_n: out_mat_n.inputs['Reflectivity'].default_value = 1.0 out_mat_n.location = (start_pos_x + pos_x_shift * 7, start_pos_y + 1800) output_n = node_tree.nodes.new("ShaderNodeOutput") output_n.name = Reflective.OUTPUT_NODE output_n.label = Reflective.OUTPUT_NODE output_n.location = (start_pos_x + +pos_x_shift * 8, start_pos_y + 1800) # links creation node_tree.links.new(base_tex_n.inputs['Vector'], geometry_n.outputs['UV']) node_tree.links.new(vcol_scale_n.inputs['Color1'], vcol_group_n.outputs['Vertex Color']) node_tree.links.new(vcol_mult_n.inputs['Color1'], vcol_scale_n.outputs['Color']) node_tree.links.new(vcol_mult_n.inputs['Color2'], base_tex_n.outputs['Color']) node_tree.links.new(opacity_n.inputs[0], base_tex_n.outputs["Value"]) node_tree.links.new(opacity_n.inputs[1], vcol_group_n.outputs["Vertex Color Alpha"]) node_tree.links.new(out_mat_n.inputs['Color'], vcol_mult_n.outputs['Color']) node_tree.links.new(out_mat_n.inputs['Alpha'], opacity_n.outputs['Value']) node_tree.links.new(output_n.inputs['Color'], out_mat_n.outputs['Color']) node_tree.links.new(output_n.inputs['Alpha'], out_mat_n.outputs['Alpha'])
def init(node_tree): """Initialize node tree with links for this shader. :param node_tree: node tree on which this shader should be created :type node_tree: bpy.types.NodeTree """ start_pos_x = 0 start_pos_y = 0 pos_x_shift = 185 # node creation vcol_group_n = node_tree.nodes.new("ShaderNodeGroup") vcol_group_n.name = UnlitVcolTex.VCOL_GROUP_NODE vcol_group_n.label = UnlitVcolTex.VCOL_GROUP_NODE vcol_group_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1650) vcol_group_n.node_tree = vcolor_input.get_node_group() geometry_n = node_tree.nodes.new("ShaderNodeGeometry") geometry_n.name = UnlitVcolTex.GEOM_NODE geometry_n.label = UnlitVcolTex.GEOM_NODE geometry_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1500) geometry_n.uv_layer = _MESH_consts.none_uv diff_col_n = node_tree.nodes.new("ShaderNodeRGB") diff_col_n.name = UnlitVcolTex.DIFF_COL_NODE diff_col_n.label = UnlitVcolTex.DIFF_COL_NODE diff_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1700) vcol_scale_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_scale_n.name = UnlitVcolTex.VCOLOR_SCALE_NODE vcol_scale_n.label = UnlitVcolTex.VCOLOR_SCALE_NODE vcol_scale_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1600) vcol_scale_n.blend_type = "MULTIPLY" vcol_scale_n.inputs["Fac"].default_value = 1 vcol_scale_n.inputs["Color2"].default_value = (2,) * 4 opacity_n = node_tree.nodes.new("ShaderNodeMath") opacity_n.name = UnlitVcolTex.OPACITY_NODE opacity_n.label = UnlitVcolTex.OPACITY_NODE opacity_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1300) opacity_n.operation = "MULTIPLY" base_tex_n = node_tree.nodes.new("ShaderNodeTexture") base_tex_n.name = UnlitVcolTex.BASE_TEX_NODE base_tex_n.label = UnlitVcolTex.BASE_TEX_NODE base_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1500) diff_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_mult_n.name = UnlitVcolTex.DIFF_MULT_NODE diff_mult_n.label = UnlitVcolTex.DIFF_MULT_NODE diff_mult_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1700) diff_mult_n.blend_type = "MULTIPLY" diff_mult_n.inputs["Fac"].default_value = 1 diff_mult_n.inputs["Color2"].default_value = (0, 0, 0, 1) tex_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") tex_mult_n.name = UnlitVcolTex.TEX_MULT_NODE tex_mult_n.label = UnlitVcolTex.TEX_MULT_NODE tex_mult_n.location = (start_pos_x + pos_x_shift * 5, start_pos_y + 1500) tex_mult_n.blend_type = "MULTIPLY" tex_mult_n.inputs["Fac"].default_value = 1 output_n = node_tree.nodes.new("ShaderNodeOutput") output_n.name = UnlitVcolTex.OUTPUT_NODE output_n.label = UnlitVcolTex.OUTPUT_NODE output_n.location = (start_pos_x + +pos_x_shift * 7, start_pos_y + 1500) # links creation node_tree.links.new(base_tex_n.inputs["Vector"], geometry_n.outputs["UV"]) node_tree.links.new(vcol_scale_n.inputs["Color1"], vcol_group_n.outputs["Vertex Color"]) node_tree.links.new(diff_mult_n.inputs["Color1"], diff_col_n.outputs["Color"]) node_tree.links.new(diff_mult_n.inputs["Color2"], vcol_scale_n.outputs["Color"]) node_tree.links.new(opacity_n.inputs[0], base_tex_n.outputs["Value"]) node_tree.links.new(opacity_n.inputs[1], vcol_group_n.outputs["Vertex Color Alpha"]) node_tree.links.new(tex_mult_n.inputs["Color1"], diff_mult_n.outputs["Color"]) node_tree.links.new(tex_mult_n.inputs["Color2"], base_tex_n.outputs["Color"]) node_tree.links.new(output_n.inputs["Color"], tex_mult_n.outputs["Color"])
def init(node_tree): """Initialize node tree with links for this shader. :param node_tree: node tree on which this shader should be created :type node_tree: bpy.types.NodeTree """ start_pos_x = 0 start_pos_y = 0 pos_x_shift = 185 # node creation vcol_group_n = node_tree.nodes.new("ShaderNodeGroup") vcol_group_n.name = vcol_group_n.label = Sky.VCOL_GROUP_NODE vcol_group_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1650) vcol_group_n.node_tree = vcolor_input.get_node_group() geometry_n = node_tree.nodes.new("ShaderNodeGeometry") geometry_n.name = geometry_n.label = Sky.GEOM_NODE geometry_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1500) geometry_n.uv_layer = _MESH_consts.none_uv sec_geom_n = node_tree.nodes.new("ShaderNodeGeometry") sec_geom_n.name = sec_geom_n.label = Sky.SEC_GEOM_NODE sec_geom_n.location = (start_pos_x - pos_x_shift, start_pos_y + 900) sec_geom_n.uv_layer = _MESH_consts.none_uv diff_col_n = node_tree.nodes.new("ShaderNodeRGB") diff_col_n.name = diff_col_n.label = Sky.DIFF_COL_NODE diff_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1700) base_tex_n = node_tree.nodes.new("ShaderNodeTexture") base_tex_n.name = base_tex_n.label = Sky.BASE_TEX_NODE base_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1500) over_tex_n = node_tree.nodes.new("ShaderNodeTexture") over_tex_n.name = over_tex_n.label = Sky.OVER_TEX_NODE over_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1200) mask_tex_n = node_tree.nodes.new("ShaderNodeTexture") mask_tex_n.name = mask_tex_n.label = Sky.MASK_TEX_NODE mask_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 900) blend_input_n = node_tree.nodes.new("ShaderNodeValue") blend_input_n.name = blend_input_n.label = Sky.BLEND_VAL_NODE blend_input_n.location = (start_pos_x + pos_x_shift, start_pos_y + 600) vcol_scale_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_scale_n.name = vcol_scale_n.label = Sky.VCOLOR_SCALE_NODE vcol_scale_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1600) vcol_scale_n.blend_type = "MULTIPLY" vcol_scale_n.inputs['Fac'].default_value = 1 vcol_scale_n.inputs['Color2'].default_value = (2,) * 4 mask_tex_sep_n = node_tree.nodes.new("ShaderNodeSeparateRGB") mask_tex_sep_n.name = mask_tex_sep_n.label = Sky.MASK_TEX_SEP_NODE mask_tex_sep_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 900) mask_factor_mix_n = node_tree.nodes.new("ShaderNodeMixRGB") mask_factor_mix_n.name = mask_factor_mix_n.label = Sky.MASK_FACTOR_MIX_NODE mask_factor_mix_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 900) mask_factor_mix_n.blend_type = "MIX" mask_factor_mix_n.inputs['Color1'].default_value = (1,) * 4 mask_factor_mix_n.inputs['Color2'].default_value = (16,) * 4 mask_factor_blend_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") mask_factor_blend_mult_n.name = mask_factor_blend_mult_n.label = Sky.MASK_FACTOR_BLEND_MULT_NODE mask_factor_blend_mult_n.location = (start_pos_x + pos_x_shift * 5, start_pos_y + 900) mask_factor_blend_mult_n.blend_type = "MULTIPLY" mask_factor_blend_mult_n.inputs['Fac'].default_value = 1 mask_factor_blend_mult_n.use_clamp = True base_over_mix_n = node_tree.nodes.new("ShaderNodeMixRGB") base_over_mix_n.name = base_over_mix_n.label = Sky.BASE_OVER_MIX_NODE base_over_mix_n.location = (start_pos_x + pos_x_shift * 6, start_pos_y + 1400) base_over_mix_n.blend_type = "MIX" base_over_a_mix_n = node_tree.nodes.new("ShaderNodeMixRGB") base_over_a_mix_n.name = base_over_a_mix_n.label = Sky.BASE_OVER_A_MIX_NODE base_over_a_mix_n.location = (start_pos_x + pos_x_shift * 6, start_pos_y + 1200) base_over_a_mix_n.blend_type = "MIX" vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_mult_n.name = Sky.VCOLOR_MULT_NODE vcol_mult_n.label = Sky.VCOLOR_MULT_NODE vcol_mult_n.location = (start_pos_x + pos_x_shift * 7, start_pos_y + 1500) vcol_mult_n.blend_type = "MULTIPLY" vcol_mult_n.inputs['Fac'].default_value = 1 diff_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_mult_n.name = Sky.DIFF_MULT_NODE diff_mult_n.label = Sky.DIFF_MULT_NODE diff_mult_n.location = (start_pos_x + pos_x_shift * 8, start_pos_y + 1650) diff_mult_n.blend_type = "MULTIPLY" diff_mult_n.inputs['Fac'].default_value = 1 diff_mult_n.inputs['Color2'].default_value = (0, 0, 0, 1) output_n = node_tree.nodes.new("ShaderNodeOutput") output_n.name = Sky.OUTPUT_NODE output_n.label = Sky.OUTPUT_NODE output_n.location = (start_pos_x + + pos_x_shift * 10, start_pos_y + 1500) # links creation node_tree.links.new(base_tex_n.inputs['Vector'], geometry_n.outputs['UV']) node_tree.links.new(over_tex_n.inputs['Vector'], geometry_n.outputs['UV']) node_tree.links.new(mask_tex_n.inputs['Vector'], sec_geom_n.outputs['UV']) # pass 1 node_tree.links.new(vcol_scale_n.inputs['Color1'], vcol_group_n.outputs['Vertex Color']) node_tree.links.new(mask_tex_sep_n.inputs['Image'], mask_tex_n.outputs['Color']) # pass 2 node_tree.links.new(mask_factor_mix_n.inputs['Fac'], mask_tex_sep_n.outputs['R']) # pass 3 node_tree.links.new(mask_factor_blend_mult_n.inputs['Color1'], mask_factor_mix_n.outputs['Color']) node_tree.links.new(mask_factor_blend_mult_n.inputs['Color2'], blend_input_n.outputs['Value']) # pass 4 node_tree.links.new(base_over_mix_n.inputs['Fac'], mask_factor_blend_mult_n.outputs['Color']) node_tree.links.new(base_over_mix_n.inputs['Color1'], base_tex_n.outputs['Color']) node_tree.links.new(base_over_mix_n.inputs['Color2'], over_tex_n.outputs['Color']) node_tree.links.new(base_over_a_mix_n.inputs['Fac'], mask_factor_blend_mult_n.outputs['Color']) node_tree.links.new(base_over_a_mix_n.inputs['Color1'], base_tex_n.outputs['Value']) node_tree.links.new(base_over_a_mix_n.inputs['Color2'], over_tex_n.outputs['Value']) # pass 5 node_tree.links.new(vcol_mult_n.inputs['Color1'], vcol_scale_n.outputs['Color']) node_tree.links.new(vcol_mult_n.inputs['Color2'], base_over_mix_n.outputs['Color']) # pass 6 node_tree.links.new(diff_mult_n.inputs['Color1'], diff_col_n.outputs['Color']) node_tree.links.new(diff_mult_n.inputs['Color2'], vcol_mult_n.outputs['Color']) # output pass node_tree.links.new(output_n.inputs['Color'], diff_mult_n.outputs['Color'])
def init(node_tree): """Initialize node tree with links for this shader. :param node_tree: node tree on which this shader should be created :type node_tree: bpy.types.NodeTree """ start_pos_x = 0 start_pos_y = 0 pos_x_shift = 185 # node creation vcol_group_n = node_tree.nodes.new("ShaderNodeGroup") vcol_group_n.name = vcol_group_n.label = Sky.VCOL_GROUP_NODE vcol_group_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1650) vcol_group_n.node_tree = vcolor_input.get_node_group() geometry_n = node_tree.nodes.new("ShaderNodeGeometry") geometry_n.name = geometry_n.label = Sky.GEOM_NODE geometry_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1500) geometry_n.uv_layer = _MESH_consts.none_uv sec_geom_n = node_tree.nodes.new("ShaderNodeGeometry") sec_geom_n.name = sec_geom_n.label = Sky.SEC_GEOM_NODE sec_geom_n.location = (start_pos_x - pos_x_shift, start_pos_y + 900) sec_geom_n.uv_layer = _MESH_consts.none_uv diff_col_n = node_tree.nodes.new("ShaderNodeRGB") diff_col_n.name = diff_col_n.label = Sky.DIFF_COL_NODE diff_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1700) base_tex_n = node_tree.nodes.new("ShaderNodeTexture") base_tex_n.name = base_tex_n.label = Sky.BASE_TEX_NODE base_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1500) over_tex_n = node_tree.nodes.new("ShaderNodeTexture") over_tex_n.name = over_tex_n.label = Sky.OVER_TEX_NODE over_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1200) mask_tex_n = node_tree.nodes.new("ShaderNodeTexture") mask_tex_n.name = mask_tex_n.label = Sky.MASK_TEX_NODE mask_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 900) blend_input_n = node_tree.nodes.new("ShaderNodeValue") blend_input_n.name = blend_input_n.label = Sky.BLEND_VAL_NODE blend_input_n.location = (start_pos_x + pos_x_shift, start_pos_y + 600) vcol_scale_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_scale_n.name = vcol_scale_n.label = Sky.VCOLOR_SCALE_NODE vcol_scale_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1600) vcol_scale_n.blend_type = "MULTIPLY" vcol_scale_n.inputs['Fac'].default_value = 1 vcol_scale_n.inputs['Color2'].default_value = (2, ) * 4 mask_tex_sep_n = node_tree.nodes.new("ShaderNodeSeparateRGB") mask_tex_sep_n.name = mask_tex_sep_n.label = Sky.MASK_TEX_SEP_NODE mask_tex_sep_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 900) mask_factor_mix_n = node_tree.nodes.new("ShaderNodeMixRGB") mask_factor_mix_n.name = mask_factor_mix_n.label = Sky.MASK_FACTOR_MIX_NODE mask_factor_mix_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 900) mask_factor_mix_n.blend_type = "MIX" mask_factor_mix_n.inputs['Color1'].default_value = (1, ) * 4 mask_factor_mix_n.inputs['Color2'].default_value = (16, ) * 4 mask_factor_blend_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") mask_factor_blend_mult_n.name = mask_factor_blend_mult_n.label = Sky.MASK_FACTOR_BLEND_MULT_NODE mask_factor_blend_mult_n.location = (start_pos_x + pos_x_shift * 5, start_pos_y + 900) mask_factor_blend_mult_n.blend_type = "MULTIPLY" mask_factor_blend_mult_n.inputs['Fac'].default_value = 1 mask_factor_blend_mult_n.use_clamp = True base_over_mix_n = node_tree.nodes.new("ShaderNodeMixRGB") base_over_mix_n.name = base_over_mix_n.label = Sky.BASE_OVER_MIX_NODE base_over_mix_n.location = (start_pos_x + pos_x_shift * 6, start_pos_y + 1400) base_over_mix_n.blend_type = "MIX" base_over_a_mix_n = node_tree.nodes.new("ShaderNodeMixRGB") base_over_a_mix_n.name = base_over_a_mix_n.label = Sky.BASE_OVER_A_MIX_NODE base_over_a_mix_n.location = (start_pos_x + pos_x_shift * 6, start_pos_y + 1200) base_over_a_mix_n.blend_type = "MIX" vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_mult_n.name = Sky.VCOLOR_MULT_NODE vcol_mult_n.label = Sky.VCOLOR_MULT_NODE vcol_mult_n.location = (start_pos_x + pos_x_shift * 7, start_pos_y + 1500) vcol_mult_n.blend_type = "MULTIPLY" vcol_mult_n.inputs['Fac'].default_value = 1 diff_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_mult_n.name = Sky.DIFF_MULT_NODE diff_mult_n.label = Sky.DIFF_MULT_NODE diff_mult_n.location = (start_pos_x + pos_x_shift * 8, start_pos_y + 1650) diff_mult_n.blend_type = "MULTIPLY" diff_mult_n.inputs['Fac'].default_value = 1 diff_mult_n.inputs['Color2'].default_value = (0, 0, 0, 1) output_n = node_tree.nodes.new("ShaderNodeOutput") output_n.name = Sky.OUTPUT_NODE output_n.label = Sky.OUTPUT_NODE output_n.location = (start_pos_x + +pos_x_shift * 10, start_pos_y + 1500) # links creation node_tree.links.new(base_tex_n.inputs['Vector'], geometry_n.outputs['UV']) node_tree.links.new(over_tex_n.inputs['Vector'], geometry_n.outputs['UV']) node_tree.links.new(mask_tex_n.inputs['Vector'], sec_geom_n.outputs['UV']) # pass 1 node_tree.links.new(vcol_scale_n.inputs['Color1'], vcol_group_n.outputs['Vertex Color']) node_tree.links.new(mask_tex_sep_n.inputs['Image'], mask_tex_n.outputs['Color']) # pass 2 node_tree.links.new(mask_factor_mix_n.inputs['Fac'], mask_tex_sep_n.outputs['R']) # pass 3 node_tree.links.new(mask_factor_blend_mult_n.inputs['Color1'], mask_factor_mix_n.outputs['Color']) node_tree.links.new(mask_factor_blend_mult_n.inputs['Color2'], blend_input_n.outputs['Value']) # pass 4 node_tree.links.new(base_over_mix_n.inputs['Fac'], mask_factor_blend_mult_n.outputs['Color']) node_tree.links.new(base_over_mix_n.inputs['Color1'], base_tex_n.outputs['Color']) node_tree.links.new(base_over_mix_n.inputs['Color2'], over_tex_n.outputs['Color']) node_tree.links.new(base_over_a_mix_n.inputs['Fac'], mask_factor_blend_mult_n.outputs['Color']) node_tree.links.new(base_over_a_mix_n.inputs['Color1'], base_tex_n.outputs['Value']) node_tree.links.new(base_over_a_mix_n.inputs['Color2'], over_tex_n.outputs['Value']) # pass 5 node_tree.links.new(vcol_mult_n.inputs['Color1'], vcol_scale_n.outputs['Color']) node_tree.links.new(vcol_mult_n.inputs['Color2'], base_over_mix_n.outputs['Color']) # pass 6 node_tree.links.new(diff_mult_n.inputs['Color1'], diff_col_n.outputs['Color']) node_tree.links.new(diff_mult_n.inputs['Color2'], vcol_mult_n.outputs['Color']) # output pass node_tree.links.new(output_n.inputs['Color'], diff_mult_n.outputs['Color'])
def init(node_tree): """Initialize node tree with links for this shader. NOTE: this shader can not be fully implemented, because in game this shader works with frame buffer which already has color of underlying pixel. :param node_tree: node tree on which this shader should be created :type node_tree: bpy.types.NodeTree """ start_pos_x = 0 start_pos_y = 0 pos_x_shift = 185 # node creation # vertex colors vcol_group_n = node_tree.nodes.new("ShaderNodeGroup") vcol_group_n.name = Glass.VCOL_GROUP_NODE vcol_group_n.label = Glass.VCOL_GROUP_NODE vcol_group_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1650) vcol_group_n.node_tree = vcolor_input.get_node_group() # geometry geometry_n = node_tree.nodes.new("ShaderNodeGeometry") geometry_n.name = Glass.GEOM_NODE geometry_n.label = Glass.GEOM_NODE geometry_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1500) geometry_n.uv_layer = _MESH_consts.none_uv # inputs refl_tex_n = node_tree.nodes.new("ShaderNodeTexture") refl_tex_n.name = Glass.REFL_TEX_NODE refl_tex_n.label = Glass.REFL_TEX_NODE refl_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2700) env_col_n = node_tree.nodes.new("ShaderNodeRGB") env_col_n.name = Glass.ENV_COLOR_NODE env_col_n.label = Glass.ENV_COLOR_NODE env_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2400) tint_col_n = node_tree.nodes.new("ShaderNodeRGB") tint_col_n.name = Glass.TINT_COL_NODE tint_col_n.label = Glass.TINT_COL_NODE tint_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2200) tint_opacity_n = node_tree.nodes.new("ShaderNodeValue") tint_opacity_n.name = Glass.TINT_OPACITY_NODE tint_opacity_n.label = Glass.TINT_OPACITY_NODE tint_opacity_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2000) spec_col_n = node_tree.nodes.new("ShaderNodeRGB") spec_col_n.name = Glass.SPEC_COL_NODE spec_col_n.label = Glass.SPEC_COL_NODE spec_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1900) diff_col_n = node_tree.nodes.new("ShaderNodeRGB") diff_col_n.name = Glass.DIFF_COL_NODE diff_col_n.label = Glass.DIFF_COL_NODE diff_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1700) base_tex_n = node_tree.nodes.new("ShaderNodeTexture") base_tex_n.name = Glass.BASE_TEX_NODE base_tex_n.label = Glass.BASE_TEX_NODE base_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1500) # pass 1 add_env_gn = node_tree.nodes.new("ShaderNodeGroup") add_env_gn.name = Glass.ADD_ENV_GROUP_NODE add_env_gn.label = Glass.ADD_ENV_GROUP_NODE add_env_gn.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 2500) add_env_gn.node_tree = add_env.get_node_group() add_env_gn.inputs['Apply Fresnel'].default_value = 1.0 add_env_gn.inputs['Base Texture Alpha'].default_value = 1.0 add_env_gn.inputs['Fresnel Scale'].default_value = 2.0 add_env_gn.inputs['Fresnel Bias'].default_value = 1.0 tint_col_hsv_n = node_tree.nodes.new("ShaderNodeSeparateHSV") tint_col_hsv_n.name = Glass.TINT_HSV_NODE tint_col_hsv_n.label = Glass.TINT_HSV_NODE tint_col_hsv_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 2100) tint_opacity_combine_n = node_tree.nodes.new("ShaderNodeCombineRGB") tint_opacity_combine_n.name = Glass.TINT_OPACITY_COMBINE_NODE tint_opacity_combine_n.label = Glass.TINT_OPACITY_COMBINE_NODE tint_opacity_combine_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1800) diff_vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_vcol_mult_n.name = Glass.DIFF_VCOL_MULT_NODE diff_vcol_mult_n.label = Glass.DIFF_VCOL_MULT_NODE diff_vcol_mult_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1650) diff_vcol_mult_n.blend_type = "MULTIPLY" diff_vcol_mult_n.inputs['Fac'].default_value = 1 spec_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") spec_mult_n.name = Glass.SPEC_MULT_NODE spec_mult_n.label = Glass.SPEC_MULT_NODE spec_mult_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1450) spec_mult_n.blend_type = "MULTIPLY" spec_mult_n.inputs['Fac'].default_value = 1 # pass 2 tint_sat_subtract_n = node_tree.nodes.new("ShaderNodeMath") tint_sat_subtract_n.name = Glass.TINT_SAT_SUBTRACT_NODE tint_sat_subtract_n.label = Glass.TINT_SAT_SUBTRACT_NODE tint_sat_subtract_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 2200) tint_sat_subtract_n.operation = "SUBTRACT" tint_sat_subtract_n.inputs[0].default_value = 1.0 tint_vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") tint_vcol_mult_n.name = Glass.TINT_VCOL_MULT_NODE tint_vcol_mult_n.label = Glass.TINT_VCOL_MULT_NODE tint_vcol_mult_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1950) tint_vcol_mult_n.blend_type = "MULTIPLY" tint_vcol_mult_n.inputs['Fac'].default_value = 1 diff_opacity_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_opacity_mult_n.name = Glass.DIFF_OPACITY_MULT_NODE diff_opacity_mult_n.label = Glass.DIFF_OPACITY_MULT_NODE diff_opacity_mult_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1750) diff_opacity_mult_n.blend_type = "MULTIPLY" diff_opacity_mult_n.inputs['Fac'].default_value = 1 # pass 3 tint_val_sat_mult_n = node_tree.nodes.new("ShaderNodeMath") tint_val_sat_mult_n.name = Glass.TINT_VAL_SAT_MULT_NODE tint_val_sat_mult_n.label = Glass.TINT_VAL_SAT_MULT_NODE tint_val_sat_mult_n.location = (start_pos_x + pos_x_shift * 5, start_pos_y + 2150) tint_val_sat_mult_n.operation = "MULTIPLY" # pass 4 tint_diff_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") tint_diff_mult_n.name = Glass.TINT_DIFF_MULT_NODE tint_diff_mult_n.label = Glass.TINT_DIFF_MULT_NODE tint_diff_mult_n.location = (start_pos_x + pos_x_shift * 6, start_pos_y + 1900) tint_diff_mult_n.blend_type = "MULTIPLY" tint_diff_mult_n.inputs['Fac'].default_value = 1 # pass 5 out_mat_n = node_tree.nodes.new("ShaderNodeExtendedMaterial") out_mat_n.name = Glass.OUT_MAT_NODE out_mat_n.label = Glass.OUT_MAT_NODE if "SpecTra" in out_mat_n: out_mat_n.inputs['SpecTra'].default_value = 0.0 if "Refl" in out_mat_n: out_mat_n.inputs['Refl'].default_value = 1.0 elif "Reflectivity" in out_mat_n: out_mat_n.inputs['Reflectivity'].default_value = 1.0 out_mat_n.location = (start_pos_x + pos_x_shift * 7, start_pos_y + 2100) tint_val_subtract_n = node_tree.nodes.new("ShaderNodeMath") tint_val_subtract_n.name = Glass.TINT_VAL_SUBTRACT_NODE tint_val_subtract_n.label = Glass.TINT_VAL_SUBTRACT_NODE tint_val_subtract_n.location = (start_pos_x + pos_x_shift * 7, start_pos_y + 1400) tint_val_subtract_n.operation = "SUBTRACT" tint_val_subtract_n.inputs[0].default_value = 1.0 # pass 6 compose_lighting_n = node_tree.nodes.new("ShaderNodeGroup") compose_lighting_n.name = Glass.COMPOSE_LIGHTING_NODE compose_lighting_n.label = Glass.COMPOSE_LIGHTING_NODE compose_lighting_n.location = (start_pos_x + pos_x_shift * 8, start_pos_y + 2400) compose_lighting_n.node_tree = compose_lighting.get_node_group() out_add_spec_a_n = node_tree.nodes.new("ShaderNodeMath") out_add_spec_a_n.name = Glass.OUT_ADD_SPEC_A_NODE out_add_spec_a_n.label = Glass.OUT_ADD_SPEC_A_NODE out_add_spec_a_n.location = (start_pos_x + pos_x_shift * 8, start_pos_y + 1550) out_add_spec_a_n.operation = "ADD" max_tint_n = node_tree.nodes.new("ShaderNodeMath") max_tint_n.name = Glass.MAX_TINT_VAL_OR_OPACITY_NODE max_tint_n.label = Glass.MAX_TINT_VAL_OR_OPACITY_NODE max_tint_n.location = (start_pos_x + pos_x_shift * 8, start_pos_y + 1350) max_tint_n.operation = "MAXIMUM" # pass 7 out_add_spec_n = node_tree.nodes.new("ShaderNodeMixRGB") out_add_spec_n.name = Glass.OUT_ADD_SPEC_NODE out_add_spec_n.label = Glass.OUT_ADD_SPEC_NODE out_add_spec_n.location = (start_pos_x + pos_x_shift * 9, start_pos_y + 2200) out_add_spec_n.blend_type = "ADD" out_add_spec_n.inputs['Fac'].default_value = 1 out_add_tint_max_a_n = node_tree.nodes.new("ShaderNodeMath") out_add_tint_max_a_n.name = Glass.OUT_ADD_TINT_MAX_A_NODE out_add_tint_max_a_n.label = Glass.OUT_ADD_TINT_MAX_A_NODE out_add_tint_max_a_n.location = (start_pos_x + pos_x_shift * 9, start_pos_y + 1500) # output output_n = node_tree.nodes.new("ShaderNodeOutput") output_n.name = Glass.OUTPUT_NODE output_n.label = Glass.OUTPUT_NODE output_n.location = (start_pos_x + + pos_x_shift * 11, start_pos_y + 1900) # links creation # input node_tree.links.new(base_tex_n.inputs['Vector'], geometry_n.outputs['UV']) node_tree.links.new(refl_tex_n.inputs['Vector'], geometry_n.outputs['Normal']) # pass 1 node_tree.links.new(add_env_gn.inputs['Normal Vector'], geometry_n.outputs['Normal']) node_tree.links.new(add_env_gn.inputs['View Vector'], geometry_n.outputs['View']) node_tree.links.new(add_env_gn.inputs['Reflection Texture Color'], refl_tex_n.outputs['Color']) node_tree.links.new(add_env_gn.inputs['Env Factor Color'], env_col_n.outputs['Color']) node_tree.links.new(add_env_gn.inputs['Specular Color'], spec_col_n.outputs['Color']) node_tree.links.new(tint_col_hsv_n.inputs['Color'], tint_col_n.outputs['Color']) node_tree.links.new(tint_opacity_combine_n.inputs['R'], tint_opacity_n.outputs['Value']) node_tree.links.new(tint_opacity_combine_n.inputs['G'], tint_opacity_n.outputs['Value']) node_tree.links.new(tint_opacity_combine_n.inputs['B'], tint_opacity_n.outputs['Value']) node_tree.links.new(diff_vcol_mult_n.inputs['Color1'], diff_col_n.outputs['Color']) node_tree.links.new(diff_vcol_mult_n.inputs['Color2'], vcol_group_n.outputs['Vertex Color']) node_tree.links.new(spec_mult_n.inputs['Color1'], spec_col_n.outputs['Color']) node_tree.links.new(spec_mult_n.inputs['Color2'], base_tex_n.outputs['Value']) # pass 2 node_tree.links.new(tint_sat_subtract_n.inputs[1], tint_col_hsv_n.outputs['S']) node_tree.links.new(tint_vcol_mult_n.inputs['Color1'], tint_col_n.outputs['Color']) node_tree.links.new(tint_vcol_mult_n.inputs['Color2'], vcol_group_n.outputs['Vertex Color']) node_tree.links.new(diff_opacity_mult_n.inputs['Color1'], tint_opacity_combine_n.outputs['Image']) node_tree.links.new(diff_opacity_mult_n.inputs['Color2'], diff_vcol_mult_n.outputs['Color']) # pass 3 node_tree.links.new(tint_val_sat_mult_n.inputs[0], tint_sat_subtract_n.outputs[0]) node_tree.links.new(tint_val_sat_mult_n.inputs[1], tint_col_hsv_n.outputs['V']) # pass 4 node_tree.links.new(tint_diff_mult_n.inputs['Fac'], tint_val_sat_mult_n.outputs['Value']) node_tree.links.new(tint_diff_mult_n.inputs['Color1'], tint_vcol_mult_n.outputs['Color']) node_tree.links.new(tint_diff_mult_n.inputs['Color2'], diff_opacity_mult_n.outputs['Color']) # pass 5 node_tree.links.new(out_mat_n.inputs['Spec'], spec_mult_n.outputs['Color']) node_tree.links.new(tint_val_subtract_n.inputs[1], vcol_group_n.outputs['Vertex Color Alpha']) # pass 6 node_tree.links.new(compose_lighting_n.inputs['Diffuse Color'], tint_diff_mult_n.outputs['Color']) node_tree.links.new(compose_lighting_n.inputs['Material Color'], tint_diff_mult_n.outputs['Color']) node_tree.links.new(compose_lighting_n.inputs['Env Color'], add_env_gn.outputs['Environment Addition Color']) node_tree.links.new(out_add_spec_a_n.inputs[0], out_mat_n.outputs['Spec']) node_tree.links.new(out_add_spec_a_n.inputs[1], add_env_gn.outputs['Environment Addition Color']) node_tree.links.new(max_tint_n.inputs[0], tint_val_subtract_n.outputs[0]) node_tree.links.new(max_tint_n.inputs[1], tint_opacity_n.outputs[0]) # pass 7 node_tree.links.new(out_add_spec_n.inputs['Color1'], compose_lighting_n.outputs['Composed Color']) node_tree.links.new(out_add_spec_n.inputs['Color2'], out_mat_n.outputs['Spec']) node_tree.links.new(out_add_tint_max_a_n.inputs[0], out_add_spec_a_n.outputs[0]) node_tree.links.new(out_add_tint_max_a_n.inputs[1], max_tint_n.outputs[0]) # output node_tree.links.new(output_n.inputs['Color'], out_add_spec_n.outputs['Color']) node_tree.links.new(output_n.inputs['Alpha'], out_add_tint_max_a_n.outputs[0])
def init(node_tree): """Initialize node tree with links for this shader. :param node_tree: node tree on which this shader should be created :type node_tree: bpy.types.NodeTree """ start_pos_x = 0 start_pos_y = 0 pos_x_shift = 185 # node creation vcol_group_n = node_tree.nodes.new("ShaderNodeGroup") vcol_group_n.name = Dif.VCOL_GROUP_NODE vcol_group_n.label = Dif.VCOL_GROUP_NODE vcol_group_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1650) vcol_group_n.node_tree = vcolor_input.get_node_group() geometry_n = node_tree.nodes.new("ShaderNodeGeometry") geometry_n.name = Dif.GEOM_NODE geometry_n.label = Dif.GEOM_NODE geometry_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1500) geometry_n.uv_layer = _MESH_consts.none_uv diff_col_n = node_tree.nodes.new("ShaderNodeRGB") diff_col_n.name = Dif.DIFF_COL_NODE diff_col_n.label = Dif.DIFF_COL_NODE diff_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1700) spec_col_n = node_tree.nodes.new("ShaderNodeRGB") spec_col_n.name = Dif.SPEC_COL_NODE spec_col_n.label = Dif.SPEC_COL_NODE spec_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1900) vcol_scale_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_scale_n.name = Dif.VCOLOR_SCALE_NODE vcol_scale_n.label = Dif.VCOLOR_SCALE_NODE vcol_scale_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1550) vcol_scale_n.blend_type = "MULTIPLY" vcol_scale_n.inputs['Fac'].default_value = 1 vcol_scale_n.inputs['Color2'].default_value = (2, ) * 4 opacity_n = node_tree.nodes.new("ShaderNodeMath") opacity_n.name = Dif.OPACITY_NODE opacity_n.label = Dif.OPACITY_NODE opacity_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1300) opacity_n.operation = "MULTIPLY" base_tex_n = node_tree.nodes.new("ShaderNodeTexture") base_tex_n.name = Dif.BASE_TEX_NODE base_tex_n.label = Dif.BASE_TEX_NODE base_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1500) vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_mult_n.name = Dif.VCOLOR_MULT_NODE vcol_mult_n.label = Dif.VCOLOR_MULT_NODE vcol_mult_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1500) vcol_mult_n.blend_type = "MULTIPLY" vcol_mult_n.inputs['Fac'].default_value = 1 diff_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_mult_n.name = Dif.DIFF_MULT_NODE diff_mult_n.label = Dif.DIFF_MULT_NODE diff_mult_n.location = (start_pos_x + pos_x_shift * 5, start_pos_y + 1650) diff_mult_n.blend_type = "MULTIPLY" diff_mult_n.inputs['Fac'].default_value = 1 diff_mult_n.inputs['Color2'].default_value = (0, 0, 0, 1) out_mat_n = node_tree.nodes.new("ShaderNodeExtendedMaterial") out_mat_n.name = Dif.OUT_MAT_NODE out_mat_n.label = Dif.OUT_MAT_NODE if "Refl" in out_mat_n: out_mat_n.inputs['Refl'].default_value = 1.0 elif "Reflectivity" in out_mat_n: out_mat_n.inputs['Reflectivity'].default_value = 1.0 out_mat_n.location = (start_pos_x + pos_x_shift * 7, start_pos_y + 1800) compose_lighting_n = node_tree.nodes.new("ShaderNodeGroup") compose_lighting_n.name = Dif.COMPOSE_LIGHTING_NODE compose_lighting_n.label = Dif.COMPOSE_LIGHTING_NODE compose_lighting_n.location = (start_pos_x + pos_x_shift * 8, start_pos_y + 2000) compose_lighting_n.node_tree = compose_lighting.get_node_group() output_n = node_tree.nodes.new("ShaderNodeOutput") output_n.name = Dif.OUTPUT_NODE output_n.label = Dif.OUTPUT_NODE output_n.location = (start_pos_x + pos_x_shift * 9, start_pos_y + 1800) # links creation node_tree.links.new(base_tex_n.inputs['Vector'], geometry_n.outputs['UV']) node_tree.links.new(vcol_scale_n.inputs['Color1'], vcol_group_n.outputs['Vertex Color']) node_tree.links.new(vcol_mult_n.inputs['Color1'], vcol_scale_n.outputs['Color']) node_tree.links.new(vcol_mult_n.inputs['Color2'], base_tex_n.outputs['Color']) node_tree.links.new(diff_mult_n.inputs['Color1'], diff_col_n.outputs['Color']) node_tree.links.new(diff_mult_n.inputs['Color2'], vcol_mult_n.outputs['Color']) node_tree.links.new(opacity_n.inputs[0], base_tex_n.outputs["Value"]) node_tree.links.new(opacity_n.inputs[1], vcol_group_n.outputs["Vertex Color Alpha"]) node_tree.links.new(out_mat_n.inputs['Color'], diff_mult_n.outputs['Color']) node_tree.links.new(out_mat_n.inputs['Spec'], spec_col_n.outputs['Color']) node_tree.links.new(compose_lighting_n.inputs['Diffuse Color'], diff_mult_n.outputs['Color']) node_tree.links.new(compose_lighting_n.inputs['Material Color'], out_mat_n.outputs['Color']) node_tree.links.new(output_n.inputs['Color'], compose_lighting_n.outputs['Composed Color']) node_tree.links.new(output_n.inputs['Alpha'], out_mat_n.outputs['Alpha'])
def init(node_tree): """Initialize node tree with links for this shader. :param node_tree: node tree on which this shader should be created :type node_tree: bpy.types.NodeTree """ start_pos_x = 0 start_pos_y = 0 pos_x_shift = 185 # node creation vcol_group_n = node_tree.nodes.new("ShaderNodeGroup") vcol_group_n.name = Dif.VCOL_GROUP_NODE vcol_group_n.label = Dif.VCOL_GROUP_NODE vcol_group_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1650) vcol_group_n.node_tree = vcolor_input.get_node_group() geometry_n = node_tree.nodes.new("ShaderNodeGeometry") geometry_n.name = Dif.GEOM_NODE geometry_n.label = Dif.GEOM_NODE geometry_n.location = (start_pos_x - pos_x_shift, start_pos_y + 1500) geometry_n.uv_layer = _MESH_consts.none_uv diff_col_n = node_tree.nodes.new("ShaderNodeRGB") diff_col_n.name = Dif.DIFF_COL_NODE diff_col_n.label = Dif.DIFF_COL_NODE diff_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1700) spec_col_n = node_tree.nodes.new("ShaderNodeRGB") spec_col_n.name = Dif.SPEC_COL_NODE spec_col_n.label = Dif.SPEC_COL_NODE spec_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1900) vcol_scale_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_scale_n.name = Dif.VCOLOR_SCALE_NODE vcol_scale_n.label = Dif.VCOLOR_SCALE_NODE vcol_scale_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1550) vcol_scale_n.blend_type = "MULTIPLY" vcol_scale_n.inputs['Fac'].default_value = 1 vcol_scale_n.inputs['Color2'].default_value = (2,) * 4 opacity_n = node_tree.nodes.new("ShaderNodeMath") opacity_n.name = Dif.OPACITY_NODE opacity_n.label = Dif.OPACITY_NODE opacity_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1300) opacity_n.operation = "MULTIPLY" base_tex_n = node_tree.nodes.new("ShaderNodeTexture") base_tex_n.name = Dif.BASE_TEX_NODE base_tex_n.label = Dif.BASE_TEX_NODE base_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1500) vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") vcol_mult_n.name = Dif.VCOLOR_MULT_NODE vcol_mult_n.label = Dif.VCOLOR_MULT_NODE vcol_mult_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1500) vcol_mult_n.blend_type = "MULTIPLY" vcol_mult_n.inputs['Fac'].default_value = 1 diff_mult_n = node_tree.nodes.new("ShaderNodeMixRGB") diff_mult_n.name = Dif.DIFF_MULT_NODE diff_mult_n.label = Dif.DIFF_MULT_NODE diff_mult_n.location = (start_pos_x + pos_x_shift * 5, start_pos_y + 1650) diff_mult_n.blend_type = "MULTIPLY" diff_mult_n.inputs['Fac'].default_value = 1 diff_mult_n.inputs['Color2'].default_value = (0, 0, 0, 1) out_mat_n = node_tree.nodes.new("ShaderNodeExtendedMaterial") out_mat_n.name = Dif.OUT_MAT_NODE out_mat_n.label = Dif.OUT_MAT_NODE if "Refl" in out_mat_n: out_mat_n.inputs['Refl'].default_value = 1.0 elif "Reflectivity" in out_mat_n: out_mat_n.inputs['Reflectivity'].default_value = 1.0 out_mat_n.location = (start_pos_x + pos_x_shift * 7, start_pos_y + 1800) output_n = node_tree.nodes.new("ShaderNodeOutput") output_n.name = Dif.OUTPUT_NODE output_n.label = Dif.OUTPUT_NODE output_n.location = (start_pos_x + + pos_x_shift * 8, start_pos_y + 1800) # links creation node_tree.links.new(base_tex_n.inputs['Vector'], geometry_n.outputs['UV']) node_tree.links.new(vcol_scale_n.inputs['Color1'], vcol_group_n.outputs['Vertex Color']) node_tree.links.new(vcol_mult_n.inputs['Color1'], vcol_scale_n.outputs['Color']) node_tree.links.new(vcol_mult_n.inputs['Color2'], base_tex_n.outputs['Color']) node_tree.links.new(diff_mult_n.inputs['Color1'], diff_col_n.outputs['Color']) node_tree.links.new(diff_mult_n.inputs['Color2'], vcol_mult_n.outputs['Color']) node_tree.links.new(opacity_n.inputs[0], base_tex_n.outputs["Value"]) node_tree.links.new(opacity_n.inputs[1], vcol_group_n.outputs["Vertex Color Alpha"]) node_tree.links.new(out_mat_n.inputs['Color'], diff_mult_n.outputs['Color']) node_tree.links.new(out_mat_n.inputs['Spec'], spec_col_n.outputs['Color']) node_tree.links.new(output_n.inputs['Color'], out_mat_n.outputs['Color']) node_tree.links.new(output_n.inputs['Alpha'], out_mat_n.outputs['Alpha'])