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

        # init parent
        DifSpec.init(node_tree)

        geom_n = node_tree.nodes[DifSpec.GEOM_NODE]
        base_tex_n = node_tree.nodes[DifSpec.BASE_TEX_NODE]
        spec_mult_n = node_tree.nodes[DifSpec.SPEC_MULT_NODE]
        vcol_scale_n = node_tree.nodes[DifSpec.VCOLOR_SCALE_NODE]
        vcol_mult_n = node_tree.nodes[DifSpec.VCOLOR_MULT_NODE]
        opacity_mult_n = node_tree.nodes[DifSpec.OPACITY_NODE]
        out_mat_n = node_tree.nodes[DifSpec.OUT_MAT_NODE]

        # move existing
        geom_n.location.x -= pos_x_shift * 2
        opacity_mult_n.location.y -= 100
        for node in node_tree.nodes:
            if node.location.x > start_pos_x + pos_x_shift:
                node.location.x += pos_x_shift

        # nodes creation
        uv_scale_n = node_tree.nodes.new("ShaderNodeMapping")
        uv_scale_n.name = uv_scale_n.label = DifSpecWeightMult2.UV_SCALE_NODE
        uv_scale_n.location = (start_pos_x - pos_x_shift * 2,
                               start_pos_y + 1200)
        uv_scale_n.vector_type = "POINT"
        uv_scale_n.translation = uv_scale_n.rotation = (0.0, ) * 3
        uv_scale_n.scale = (1.0, ) * 3
        uv_scale_n.use_min = uv_scale_n.use_max = False

        mult_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        mult_tex_n.name = mult_tex_n.label = DifSpecWeightMult2.MULT_TEX_NODE
        mult_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1200)

        mult2_mix_gn = node_tree.nodes.new("ShaderNodeGroup")
        mult2_mix_gn.name = mult2_mix_gn.label = DifSpecWeightMult2.MULT2_MIX_GROUP_NODE
        mult2_mix_gn.location = (start_pos_x + pos_x_shift * 3,
                                 start_pos_y + 1400)
        mult2_mix_gn.node_tree = mult2_mix.get_node_group()

        spec_vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB")
        spec_vcol_mult_n.name = spec_vcol_mult_n.label = DifSpecWeightMult2.SPEC_VCOL_MULT_NODE
        spec_vcol_mult_n.location = (start_pos_x + pos_x_shift * 5,
                                     start_pos_y + 1800)
        spec_vcol_mult_n.blend_type = "MULTIPLY"
        spec_vcol_mult_n.inputs["Fac"].default_value = 1.0

        # links creation
        node_tree.links.new(uv_scale_n.inputs["Vector"], geom_n.outputs["UV"])

        node_tree.links.new(mult_tex_n.inputs["Vector"],
                            uv_scale_n.outputs["Vector"])

        # pass 1
        node_tree.links.new(mult2_mix_gn.inputs["Base Alpha"],
                            base_tex_n.outputs["Value"])
        node_tree.links.new(mult2_mix_gn.inputs["Base Color"],
                            base_tex_n.outputs["Color"])
        node_tree.links.new(mult2_mix_gn.inputs["Mult Alpha"],
                            mult_tex_n.outputs["Value"])
        node_tree.links.new(mult2_mix_gn.inputs["Mult Color"],
                            mult_tex_n.outputs["Color"])

        # pass 2
        node_tree.links.new(spec_mult_n.inputs["Color2"],
                            mult2_mix_gn.outputs["Mix Alpha"])

        node_tree.links.new(opacity_mult_n.inputs[0],
                            mult2_mix_gn.outputs["Mix Alpha"])

        # pass 3
        node_tree.links.new(spec_vcol_mult_n.inputs["Color1"],
                            spec_mult_n.outputs["Color"])
        node_tree.links.new(spec_vcol_mult_n.inputs["Color2"],
                            vcol_scale_n.outputs["Color"])

        node_tree.links.new(vcol_mult_n.inputs["Color2"],
                            mult2_mix_gn.outputs["Mix Color"])

        # pass 4
        node_tree.links.new(out_mat_n.inputs["Spec"],
                            spec_vcol_mult_n.outputs["Color"])
Example #2
0
    def init(node_tree):
        """Initialize node tree with links for this shader.

        NOTE: shininess is not set properly as we can't set shininess on material
        via node system. So currently only primary shininess is taken into account,
        but should be: lerp(shininnes, aux3[3], v_color_alpha)

        :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

        # init parent
        DifSpecWeightMult2.init(node_tree)

        base_tex_n = node_tree.nodes[DifSpecWeightMult2.BASE_TEX_NODE]
        geom_n = node_tree.nodes[DifSpecWeightMult2.GEOM_NODE]
        spec_col_n = node_tree.nodes[DifSpecWeightMult2.SPEC_COL_NODE]
        vcol_group_n = node_tree.nodes[DifSpecWeightMult2.VCOL_GROUP_NODE]
        mult2_mix_gn = node_tree.nodes[DifSpecWeightMult2.MULT2_MIX_GROUP_NODE]
        spec_mult_n = node_tree.nodes[DifSpecWeightMult2.SPEC_MULT_NODE]
        vcol_mult_n = node_tree.nodes[DifSpecWeightMult2.VCOLOR_MULT_NODE]
        opacity_mult_n = node_tree.nodes[DifSpecWeightMult2.OPACITY_NODE]

        # delete existing
        node_tree.nodes.remove(opacity_mult_n)

        # move existing
        for node in node_tree.nodes:
            if node.location.x > start_pos_x + pos_x_shift * 3:
                node.location.x += pos_x_shift

        # nodes creation
        thrd_geom_n = node_tree.nodes.new("ShaderNodeGeometry")
        thrd_geom_n.name = thrd_geom_n.label = DifSpecWeightMult2Weight2.THRD_GEOM_NODE
        thrd_geom_n.location = (start_pos_x - pos_x_shift * 3,
                                start_pos_y + 600)
        thrd_geom_n.uv_layer = _MESH_consts.none_uv

        sec_uv_scale_n = node_tree.nodes.new("ShaderNodeMapping")
        sec_uv_scale_n.name = sec_uv_scale_n.label = DifSpecWeightMult2Weight2.SEC_UV_SCALE_NODE
        sec_uv_scale_n.location = (start_pos_x - pos_x_shift * 2,
                                   start_pos_y + 600)
        sec_uv_scale_n.vector_type = "POINT"
        sec_uv_scale_n.translation = sec_uv_scale_n.rotation = (0.0, ) * 3
        sec_uv_scale_n.scale = (1.0, ) * 3
        sec_uv_scale_n.use_min = sec_uv_scale_n.use_max = False

        sec_spec_col_n = node_tree.nodes.new("ShaderNodeRGB")
        sec_spec_col_n.name = sec_spec_col_n.label = DifSpecWeightMult2Weight2.SEC_SPEC_COLOR_NODE
        sec_spec_col_n.location = (start_pos_x + pos_x_shift,
                                   start_pos_y + 2100)

        base_1_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        base_1_tex_n.name = base_1_tex_n.label = DifSpecWeightMult2Weight2.BASE_1_TEX_NODE
        base_1_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 900)

        mult_1_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        mult_1_tex_n.name = mult_1_tex_n.label = DifSpecWeightMult2Weight2.MULT_1_TEX_NODE
        mult_1_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 600)

        spec_col_mix_n = node_tree.nodes.new("ShaderNodeMixRGB")
        spec_col_mix_n.name = spec_col_mix_n.label = DifSpecWeightMult2Weight2.SPEC_COLOR_MIX_NODE
        spec_col_mix_n.location = (start_pos_x + pos_x_shift * 3,
                                   start_pos_y + 2000)
        spec_col_mix_n.blend_type = "MIX"

        sec_mult2_mix_gn = node_tree.nodes.new("ShaderNodeGroup")
        sec_mult2_mix_gn.name = sec_mult2_mix_gn.label = DifSpecWeightMult2Weight2.SEC_MULT2_MIX_GROUP_NODE
        sec_mult2_mix_gn.location = (start_pos_x + pos_x_shift * 3,
                                     start_pos_y + 800)
        sec_mult2_mix_gn.node_tree = mult2_mix.get_node_group()

        combined_a_mix_n = node_tree.nodes.new("ShaderNodeMixRGB")
        combined_a_mix_n.name = combined_a_mix_n.label = DifSpecWeightMult2Weight2.COMBINED_ALPHA_MIX_NODE
        combined_a_mix_n.location = (start_pos_x + pos_x_shift * 4,
                                     start_pos_y + 1200)
        combined_a_mix_n.blend_type = "MIX"

        combined_mix_n = node_tree.nodes.new("ShaderNodeMixRGB")
        combined_mix_n.name = combined_mix_n.label = DifSpecWeightMult2Weight2.COMBINED_MIX_NODE
        combined_mix_n.location = (start_pos_x + pos_x_shift * 4,
                                   start_pos_y + 1000)
        combined_mix_n.blend_type = "MIX"

        # links creation
        node_tree.links.new(sec_uv_scale_n.inputs["Vector"],
                            thrd_geom_n.outputs["UV"])
        node_tree.links.new(base_tex_n.inputs["Vector"], geom_n.outputs["UV"])

        node_tree.links.new(mult_1_tex_n.inputs["Vector"],
                            sec_uv_scale_n.outputs["Vector"])
        node_tree.links.new(base_1_tex_n.inputs["Vector"],
                            thrd_geom_n.outputs["UV"])

        # pass 1
        node_tree.links.new(spec_col_mix_n.inputs["Fac"],
                            vcol_group_n.outputs["Vertex Color Alpha"])
        node_tree.links.new(spec_col_mix_n.inputs["Color1"],
                            spec_col_n.outputs["Color"])
        node_tree.links.new(spec_col_mix_n.inputs["Color2"],
                            sec_spec_col_n.outputs["Color"])

        node_tree.links.new(sec_mult2_mix_gn.inputs["Base Alpha"],
                            base_1_tex_n.outputs["Value"])
        node_tree.links.new(sec_mult2_mix_gn.inputs["Base Color"],
                            base_1_tex_n.outputs["Color"])
        node_tree.links.new(sec_mult2_mix_gn.inputs["Mult Alpha"],
                            mult_1_tex_n.outputs["Value"])
        node_tree.links.new(sec_mult2_mix_gn.inputs["Mult Color"],
                            mult_1_tex_n.outputs["Color"])

        # pass 2
        node_tree.links.new(combined_a_mix_n.inputs["Fac"],
                            vcol_group_n.outputs["Vertex Color Alpha"])
        node_tree.links.new(combined_a_mix_n.inputs["Color1"],
                            mult2_mix_gn.outputs["Mix Alpha"])
        node_tree.links.new(combined_a_mix_n.inputs["Color2"],
                            sec_mult2_mix_gn.outputs["Mix Alpha"])

        node_tree.links.new(combined_mix_n.inputs["Fac"],
                            vcol_group_n.outputs["Vertex Color Alpha"])
        node_tree.links.new(combined_mix_n.inputs["Color1"],
                            mult2_mix_gn.outputs["Mix Color"])
        node_tree.links.new(combined_mix_n.inputs["Color2"],
                            sec_mult2_mix_gn.outputs["Mix Color"])

        # pass 3
        node_tree.links.new(spec_mult_n.inputs["Color1"],
                            spec_col_mix_n.outputs["Color"])
        node_tree.links.new(spec_mult_n.inputs["Color2"],
                            combined_a_mix_n.outputs["Color"])

        node_tree.links.new(vcol_mult_n.inputs["Color2"],
                            combined_mix_n.outputs["Color"])
Example #3
0
    def init(node_tree):
        """Initialize node tree with links for this shader.

        NOTE: shininess is not set properly as we can't set shininess on material
        via node system. So currently only primary shininess is taken into account,
        but should be: lerp(shininnes, aux3[3], v_color_alpha)

        :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

        # init parent
        DifSpecWeightMult2.init(node_tree)

        base_tex_n = node_tree.nodes[DifSpecWeightMult2.BASE_TEX_NODE]
        geom_n = node_tree.nodes[DifSpecWeightMult2.GEOM_NODE]
        spec_col_n = node_tree.nodes[DifSpecWeightMult2.SPEC_COL_NODE]
        vcol_group_n = node_tree.nodes[DifSpecWeightMult2.VCOL_GROUP_NODE]
        mult2_mix_gn = node_tree.nodes[DifSpecWeightMult2.MULT2_MIX_GROUP_NODE]
        spec_mult_n = node_tree.nodes[DifSpecWeightMult2.SPEC_MULT_NODE]
        vcol_mult_n = node_tree.nodes[DifSpecWeightMult2.VCOLOR_MULT_NODE]
        opacity_mult_n = node_tree.nodes[DifSpecWeightMult2.OPACITY_NODE]

        # delete existing
        node_tree.nodes.remove(opacity_mult_n)

        # move existing
        for node in node_tree.nodes:
            if node.location.x > start_pos_x + pos_x_shift * 3:
                node.location.x += pos_x_shift

        # nodes creation
        thrd_geom_n = node_tree.nodes.new("ShaderNodeGeometry")
        thrd_geom_n.name = thrd_geom_n.label = DifSpecWeightMult2Weight2.THRD_GEOM_NODE
        thrd_geom_n.location = (start_pos_x - pos_x_shift * 3, start_pos_y + 600)
        thrd_geom_n.uv_layer = _MESH_consts.none_uv

        sec_uv_scale_n = node_tree.nodes.new("ShaderNodeMapping")
        sec_uv_scale_n.name = sec_uv_scale_n.label = DifSpecWeightMult2Weight2.SEC_UV_SCALE_NODE
        sec_uv_scale_n.location = (start_pos_x - pos_x_shift * 2, start_pos_y + 600)
        sec_uv_scale_n.vector_type = "POINT"
        sec_uv_scale_n.translation = sec_uv_scale_n.rotation = (0.0,) * 3
        sec_uv_scale_n.scale = (1.0,) * 3
        sec_uv_scale_n.use_min = sec_uv_scale_n.use_max = False

        sec_spec_col_n = node_tree.nodes.new("ShaderNodeRGB")
        sec_spec_col_n.name = sec_spec_col_n.label = DifSpecWeightMult2Weight2.SEC_SPEC_COLOR_NODE
        sec_spec_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2100)

        base_1_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        base_1_tex_n.name = base_1_tex_n.label = DifSpecWeightMult2Weight2.BASE_1_TEX_NODE
        base_1_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 900)

        mult_1_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        mult_1_tex_n.name = mult_1_tex_n.label = DifSpecWeightMult2Weight2.MULT_1_TEX_NODE
        mult_1_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 600)

        spec_col_mix_n = node_tree.nodes.new("ShaderNodeMixRGB")
        spec_col_mix_n.name = spec_col_mix_n.label = DifSpecWeightMult2Weight2.SPEC_COLOR_MIX_NODE
        spec_col_mix_n.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 2000)
        spec_col_mix_n.blend_type = "MIX"

        sec_mult2_mix_gn = node_tree.nodes.new("ShaderNodeGroup")
        sec_mult2_mix_gn.name = sec_mult2_mix_gn.label = DifSpecWeightMult2Weight2.SEC_MULT2_MIX_GROUP_NODE
        sec_mult2_mix_gn.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 800)
        sec_mult2_mix_gn.node_tree = mult2_mix.get_node_group()

        combined_a_mix_n = node_tree.nodes.new("ShaderNodeMixRGB")
        combined_a_mix_n.name = combined_a_mix_n.label = DifSpecWeightMult2Weight2.COMBINED_ALPHA_MIX_NODE
        combined_a_mix_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1200)
        combined_a_mix_n.blend_type = "MIX"

        combined_mix_n = node_tree.nodes.new("ShaderNodeMixRGB")
        combined_mix_n.name = combined_mix_n.label = DifSpecWeightMult2Weight2.COMBINED_MIX_NODE
        combined_mix_n.location = (start_pos_x + pos_x_shift * 4, start_pos_y + 1000)
        combined_mix_n.blend_type = "MIX"

        # links creation
        node_tree.links.new(sec_uv_scale_n.inputs["Vector"], thrd_geom_n.outputs["UV"])
        node_tree.links.new(base_tex_n.inputs["Vector"], geom_n.outputs["UV"])

        node_tree.links.new(mult_1_tex_n.inputs["Vector"], sec_uv_scale_n.outputs["Vector"])
        node_tree.links.new(base_1_tex_n.inputs["Vector"], thrd_geom_n.outputs["UV"])

        # pass 1
        node_tree.links.new(spec_col_mix_n.inputs["Fac"], vcol_group_n.outputs["Vertex Color Alpha"])
        node_tree.links.new(spec_col_mix_n.inputs["Color1"], spec_col_n.outputs["Color"])
        node_tree.links.new(spec_col_mix_n.inputs["Color2"], sec_spec_col_n.outputs["Color"])

        node_tree.links.new(sec_mult2_mix_gn.inputs["Base Alpha"], base_1_tex_n.outputs["Value"])
        node_tree.links.new(sec_mult2_mix_gn.inputs["Base Color"], base_1_tex_n.outputs["Color"])
        node_tree.links.new(sec_mult2_mix_gn.inputs["Mult Alpha"], mult_1_tex_n.outputs["Value"])
        node_tree.links.new(sec_mult2_mix_gn.inputs["Mult Color"], mult_1_tex_n.outputs["Color"])

        # pass 2
        node_tree.links.new(combined_a_mix_n.inputs["Fac"], vcol_group_n.outputs["Vertex Color Alpha"])
        node_tree.links.new(combined_a_mix_n.inputs["Color1"], mult2_mix_gn.outputs["Mix Alpha"])
        node_tree.links.new(combined_a_mix_n.inputs["Color2"], sec_mult2_mix_gn.outputs["Mix Alpha"])

        node_tree.links.new(combined_mix_n.inputs["Fac"], vcol_group_n.outputs["Vertex Color Alpha"])
        node_tree.links.new(combined_mix_n.inputs["Color1"], mult2_mix_gn.outputs["Mix Color"])
        node_tree.links.new(combined_mix_n.inputs["Color2"], sec_mult2_mix_gn.outputs["Mix Color"])

        # pass 3
        node_tree.links.new(spec_mult_n.inputs["Color1"], spec_col_mix_n.outputs["Color"])
        node_tree.links.new(spec_mult_n.inputs["Color2"], combined_a_mix_n.outputs["Color"])

        node_tree.links.new(vcol_mult_n.inputs["Color2"], combined_mix_n.outputs["Color"])
Example #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

        # init parent
        DifSpec.init(node_tree)

        geom_n = node_tree.nodes[DifSpec.GEOM_NODE]
        base_tex_n = node_tree.nodes[DifSpec.BASE_TEX_NODE]
        spec_mult_n = node_tree.nodes[DifSpec.SPEC_MULT_NODE]
        vcol_scale_n = node_tree.nodes[DifSpec.VCOLOR_SCALE_NODE]
        vcol_mult_n = node_tree.nodes[DifSpec.VCOLOR_MULT_NODE]
        opacity_mult_n = node_tree.nodes[DifSpec.OPACITY_NODE]
        out_mat_n = node_tree.nodes[DifSpec.OUT_MAT_NODE]

        # move existing
        geom_n.location.x -= pos_x_shift * 2
        opacity_mult_n.location.y -= 100
        for node in node_tree.nodes:
            if node.location.x > start_pos_x + pos_x_shift:
                node.location.x += pos_x_shift

        # nodes creation
        uv_scale_n = node_tree.nodes.new("ShaderNodeMapping")
        uv_scale_n.name = uv_scale_n.label = DifSpecWeightMult2.UV_SCALE_NODE
        uv_scale_n.location = (start_pos_x - pos_x_shift * 2, start_pos_y + 1200)
        uv_scale_n.vector_type = "POINT"
        uv_scale_n.translation = uv_scale_n.rotation = (0.0,) * 3
        uv_scale_n.scale = (1.0,) * 3
        uv_scale_n.use_min = uv_scale_n.use_max = False

        mult_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        mult_tex_n.name = mult_tex_n.label = DifSpecWeightMult2.MULT_TEX_NODE
        mult_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 1200)

        mult2_mix_gn = node_tree.nodes.new("ShaderNodeGroup")
        mult2_mix_gn.name = mult2_mix_gn.label = DifSpecWeightMult2.MULT2_MIX_GROUP_NODE
        mult2_mix_gn.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 1400)
        mult2_mix_gn.node_tree = mult2_mix.get_node_group()

        spec_vcol_mult_n = node_tree.nodes.new("ShaderNodeMixRGB")
        spec_vcol_mult_n.name = spec_vcol_mult_n.label = DifSpecWeightMult2.SPEC_VCOL_MULT_NODE
        spec_vcol_mult_n.location = (start_pos_x + pos_x_shift * 5, start_pos_y + 1800)
        spec_vcol_mult_n.blend_type = "MULTIPLY"
        spec_vcol_mult_n.inputs["Fac"].default_value = 1.0

        # links creation
        node_tree.links.new(uv_scale_n.inputs["Vector"], geom_n.outputs["UV"])

        node_tree.links.new(mult_tex_n.inputs["Vector"], uv_scale_n.outputs["Vector"])

        # pass 1
        node_tree.links.new(mult2_mix_gn.inputs["Base Alpha"], base_tex_n.outputs["Value"])
        node_tree.links.new(mult2_mix_gn.inputs["Base Color"], base_tex_n.outputs["Color"])
        node_tree.links.new(mult2_mix_gn.inputs["Mult Alpha"], mult_tex_n.outputs["Value"])
        node_tree.links.new(mult2_mix_gn.inputs["Mult Color"], mult_tex_n.outputs["Color"])

        # pass 2
        node_tree.links.new(spec_mult_n.inputs["Color2"], mult2_mix_gn.outputs["Mix Alpha"])

        node_tree.links.new(opacity_mult_n.inputs[0], mult2_mix_gn.outputs["Mix Alpha"])

        # pass 3
        node_tree.links.new(spec_vcol_mult_n.inputs["Color1"], spec_mult_n.outputs["Color"])
        node_tree.links.new(spec_vcol_mult_n.inputs["Color2"], vcol_scale_n.outputs["Color"])

        node_tree.links.new(vcol_mult_n.inputs["Color2"], mult2_mix_gn.outputs["Mix Color"])

        # pass 4
        node_tree.links.new(out_mat_n.inputs["Spec"], spec_vcol_mult_n.outputs["Color"])