Exemplo n.º 1
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 = 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'])
Exemplo n.º 2
0
    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])
Exemplo n.º 3
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'])
Exemplo n.º 4
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 = 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"])
Exemplo n.º 5
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 = 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'])
Exemplo n.º 6
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 = 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'])
Exemplo n.º 7
0
    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])
Exemplo n.º 8
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'])
Exemplo n.º 9
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)

        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'])