コード例 #1
0
ファイル: __init__.py プロジェクト: rridhan/BlenderTools
    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])
コード例 #2
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)

        geometry_n = node_tree.nodes[DifSpec.GEOM_NODE]
        spec_col_n = node_tree.nodes[DifSpec.SPEC_COL_NODE]
        base_tex_n = node_tree.nodes[DifSpec.BASE_TEX_NODE]
        out_mat_n = node_tree.nodes[DifSpec.OUT_MAT_NODE]
        output_n = node_tree.nodes[DifSpec.OUTPUT_NODE]

        # move existing
        output_n.location.x += pos_x_shift

        # node creation
        refl_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        refl_tex_n.name = DifSpecAddEnv.REFL_TEX_NODE
        refl_tex_n.label = DifSpecAddEnv.REFL_TEX_NODE
        refl_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2500)

        env_col_n = node_tree.nodes.new("ShaderNodeRGB")
        env_col_n.name = DifSpecAddEnv.ENV_COLOR_NODE
        env_col_n.label = DifSpecAddEnv.ENV_COLOR_NODE
        env_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2200)

        add_env_gn = node_tree.nodes.new("ShaderNodeGroup")
        add_env_gn.name = DifSpecAddEnv.ADD_ENV_GROUP_NODE
        add_env_gn.label = DifSpecAddEnv.ADD_ENV_GROUP_NODE
        add_env_gn.location = (start_pos_x + pos_x_shift * 3,
                               start_pos_y + 2300)
        add_env_gn.node_tree = add_env.get_node_group()
        add_env_gn.inputs['Apply Fresnel'].default_value = 1.0
        add_env_gn.inputs['Fresnel Scale'].default_value = 0.9
        add_env_gn.inputs['Fresnel Bias'].default_value = 0.2

        out_add_refl_n = node_tree.nodes.new("ShaderNodeMixRGB")
        out_add_refl_n.name = DifSpecAddEnv.OUT_ADD_REFL_NODE
        out_add_refl_n.label = DifSpecAddEnv.OUT_ADD_REFL_NODE
        out_add_refl_n.location = (output_n.location.x - pos_x_shift,
                                   start_pos_y + 1950)
        out_add_refl_n.blend_type = "ADD"
        out_add_refl_n.inputs['Fac'].default_value = 1

        # geometry links
        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(refl_tex_n.inputs['Vector'],
                            geometry_n.outputs['Normal'])

        node_tree.links.new(add_env_gn.inputs['Env Factor Color'],
                            env_col_n.outputs['Color'])
        node_tree.links.new(add_env_gn.inputs['Reflection Texture Color'],
                            refl_tex_n.outputs['Color'])

        node_tree.links.new(add_env_gn.inputs['Specular Color'],
                            spec_col_n.outputs['Color'])
        node_tree.links.new(add_env_gn.inputs['Base Texture Alpha'],
                            base_tex_n.outputs['Value'])

        # output pass
        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_mat_n.outputs['Color'])

        node_tree.links.new(output_n.inputs['Color'],
                            out_add_refl_n.outputs['Color'])
コード例 #3
0
ファイル: add_env.py プロジェクト: miranbox/BlenderTools
    def add(node_tree, geom_n_name, spec_col_n_name, base_tex_n_name, out_mat_n_name, output_n_name):
        """Add add env pass to node tree with links.

        :param node_tree: node tree on which this shader should be created
        :type node_tree: bpy.types.NodeTree
        :param geom_n_name: name of geometry node from which normal will be taken
        :type geom_n_name: str
        :param spec_col_n_name: name of specular color node from which specular color will be taken
        :type spec_col_n_name: str
        :param base_tex_n_name: name of base texture node from which alpha will be taken (if empty string it won't be used)
        :type base_tex_n_name: str
        :param out_mat_n_name: name of output material node from which output color will be taken
        :type out_mat_n_name: str
        :param output_n_name: name of output node with color input node to which result will be given
        :type output_n_name: str
        """

        start_pos_x = 0
        start_pos_y = 0

        pos_x_shift = 185

        geometry_n = node_tree.nodes[geom_n_name]
        spec_col_n = node_tree.nodes[spec_col_n_name]
        base_tex_n = node_tree.nodes[base_tex_n_name] if base_tex_n_name in node_tree.nodes else None
        out_mat_n = node_tree.nodes[out_mat_n_name]
        output_n = node_tree.nodes[output_n_name]

        # move existing
        output_n.location.x += pos_x_shift

        # node creation
        refl_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        refl_tex_n.name = refl_tex_n.label = StdAddEnv.REFL_TEX_NODE
        refl_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2500)

        env_col_n = node_tree.nodes.new("ShaderNodeRGB")
        env_col_n.name = env_col_n.label = StdAddEnv.ENV_COLOR_NODE
        env_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2200)

        add_env_gn = node_tree.nodes.new("ShaderNodeGroup")
        add_env_gn.name = add_env_gn.label = StdAddEnv.ADD_ENV_GROUP_NODE
        add_env_gn.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 2300)
        add_env_gn.node_tree = add_env.get_node_group()
        add_env_gn.inputs['Apply Fresnel'].default_value = 1.0
        add_env_gn.inputs['Fresnel Scale'].default_value = 0.9
        add_env_gn.inputs['Fresnel Bias'].default_value = 0.2
        add_env_gn.inputs['Base Texture Alpha'].default_value = 0.5

        out_add_refl_n = node_tree.nodes.new("ShaderNodeMixRGB")
        out_add_refl_n.name = out_add_refl_n.label = StdAddEnv.OUT_ADD_REFL_NODE
        out_add_refl_n.location = (output_n.location.x - pos_x_shift, start_pos_y + 1950)
        out_add_refl_n.blend_type = "ADD"
        out_add_refl_n.inputs['Fac'].default_value = 1

        # geometry links
        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(refl_tex_n.inputs['Vector'], geometry_n.outputs['Normal'])

        # if out material node is really material node and has normal output,
        # use it as this normal might include normal maps
        if "Normal" in out_mat_n.outputs:
            node_tree.links.new(refl_tex_n.inputs['Vector'], out_mat_n.outputs['Normal'])

        node_tree.links.new(add_env_gn.inputs['Env Factor Color'], env_col_n.outputs['Color'])
        node_tree.links.new(add_env_gn.inputs['Reflection Texture Color'], refl_tex_n.outputs['Color'])

        node_tree.links.new(add_env_gn.inputs['Specular Color'], spec_col_n.outputs['Color'])
        if add_env_gn and base_tex_n:
            node_tree.links.new(add_env_gn.inputs['Base Texture Alpha'], base_tex_n.outputs['Value'])

        # output pass
        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_mat_n.outputs['Color'])

        # try to find first color in output node
        if "Color" in output_n.inputs:
            node_tree.links.new(output_n.inputs['Color'], out_add_refl_n.outputs['Color'])
        elif "Color1" in output_n.inputs:
            node_tree.links.new(output_n.inputs['Color1'], out_add_refl_n.outputs['Color'])
コード例 #4
0
    def add(node_tree,
            geom_n_name,
            spec_col_n_name,
            base_tex_n_name,
            out_mat_n_name,
            output_n_name,
            output_n_socket_name="Env Color"):
        """Add add env pass to node tree with links.

        :param node_tree: node tree on which this shader should be created
        :type node_tree: bpy.types.NodeTree
        :param geom_n_name: name of geometry node from which normal will be taken
        :type geom_n_name: str
        :param spec_col_n_name: name of specular color node from which specular color will be taken
        :type spec_col_n_name: str
        :param base_tex_n_name: name of base texture node from which alpha will be taken (if empty string it won't be used)
        :type base_tex_n_name: str
        :param out_mat_n_name: name of output material node from which output color will be taken
        :type out_mat_n_name: str
        :param output_n_name: name of output node with color input node to which result will be given
        :type output_n_name: str
        """

        start_pos_x = 0
        start_pos_y = 0

        pos_x_shift = 185

        geometry_n = node_tree.nodes[geom_n_name]
        spec_col_n = node_tree.nodes[spec_col_n_name]
        base_tex_n = node_tree.nodes[
            base_tex_n_name] if base_tex_n_name in node_tree.nodes else None
        out_mat_n = node_tree.nodes[out_mat_n_name]
        output_n = node_tree.nodes[output_n_name]

        # node creation
        refl_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        refl_tex_n.name = refl_tex_n.label = StdAddEnv.REFL_TEX_NODE
        refl_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2500)

        env_col_n = node_tree.nodes.new("ShaderNodeRGB")
        env_col_n.name = env_col_n.label = StdAddEnv.ENV_COLOR_NODE
        env_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2200)

        add_env_gn = node_tree.nodes.new("ShaderNodeGroup")
        add_env_gn.name = add_env_gn.label = StdAddEnv.ADD_ENV_GROUP_NODE
        add_env_gn.location = (start_pos_x + pos_x_shift * 3,
                               start_pos_y + 2300)
        add_env_gn.node_tree = add_env.get_node_group()
        add_env_gn.inputs['Apply Fresnel'].default_value = 1.0
        add_env_gn.inputs['Fresnel Scale'].default_value = 0.9
        add_env_gn.inputs['Fresnel Bias'].default_value = 0.2
        add_env_gn.inputs['Base Texture Alpha'].default_value = 0.5

        # geometry links
        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(refl_tex_n.inputs['Vector'],
                            geometry_n.outputs['Normal'])

        # if out material node is really material node and has normal output,
        # use it as this normal might include normal maps
        if "Normal" in out_mat_n.outputs:
            node_tree.links.new(refl_tex_n.inputs['Vector'],
                                out_mat_n.outputs['Normal'])

        node_tree.links.new(add_env_gn.inputs['Env Factor Color'],
                            env_col_n.outputs['Color'])
        node_tree.links.new(add_env_gn.inputs['Reflection Texture Color'],
                            refl_tex_n.outputs['Color'])

        node_tree.links.new(add_env_gn.inputs['Specular Color'],
                            spec_col_n.outputs['Color'])
        if add_env_gn and base_tex_n:
            node_tree.links.new(add_env_gn.inputs['Base Texture Alpha'],
                                base_tex_n.outputs['Value'])

        node_tree.links.new(output_n.inputs[output_n_socket_name],
                            add_env_gn.outputs['Environment Addition Color'])
コード例 #5
0
ファイル: __init__.py プロジェクト: hanshuogang/Learnbgame
    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])
コード例 #6
0
ファイル: __init__.py プロジェクト: bkamber/BlenderTools
    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
        DifSpecWeight.init(node_tree)

        geometry_n = node_tree.nodes[DifSpecWeight.GEOM_NODE]
        spec_col_n = node_tree.nodes[DifSpecWeight.SPEC_COL_NODE]
        base_tex_n = node_tree.nodes[DifSpecWeight.BASE_TEX_NODE]
        out_mat_n = node_tree.nodes[DifSpecWeight.OUT_MAT_NODE]
        output_n = node_tree.nodes[DifSpecWeight.OUTPUT_NODE]

        # move existing
        output_n.location.x += pos_x_shift

        # node creation
        refl_tex_n = node_tree.nodes.new("ShaderNodeTexture")
        refl_tex_n.name = DifSpecWeightAddEnv.REFL_TEX_NODE
        refl_tex_n.label = DifSpecWeightAddEnv.REFL_TEX_NODE
        refl_tex_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2500)

        env_col_n = node_tree.nodes.new("ShaderNodeRGB")
        env_col_n.name = DifSpecWeightAddEnv.ENV_COLOR_NODE
        env_col_n.label = DifSpecWeightAddEnv.ENV_COLOR_NODE
        env_col_n.location = (start_pos_x + pos_x_shift, start_pos_y + 2200)

        add_env_gn = node_tree.nodes.new("ShaderNodeGroup")
        add_env_gn.name = DifSpecWeightAddEnv.ADD_ENV_GROUP_NODE
        add_env_gn.label = DifSpecWeightAddEnv.ADD_ENV_GROUP_NODE
        add_env_gn.location = (start_pos_x + pos_x_shift * 3, start_pos_y + 2300)
        add_env_gn.node_tree = add_env.get_node_group()
        add_env_gn.inputs["Apply Fresnel"].default_value = 1.0
        add_env_gn.inputs["Fresnel Scale"].default_value = 0.9
        add_env_gn.inputs["Fresnel Bias"].default_value = 0.2

        out_add_refl_n = node_tree.nodes.new("ShaderNodeMixRGB")
        out_add_refl_n.name = DifSpecWeightAddEnv.OUT_ADD_REFL_NODE
        out_add_refl_n.label = DifSpecWeightAddEnv.OUT_ADD_REFL_NODE
        out_add_refl_n.location = (output_n.location.x - pos_x_shift, start_pos_y + 1950)
        out_add_refl_n.blend_type = "ADD"
        out_add_refl_n.inputs["Fac"].default_value = 1

        # geometry links
        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(refl_tex_n.inputs["Vector"], geometry_n.outputs["Normal"])

        node_tree.links.new(add_env_gn.inputs["Env Factor Color"], env_col_n.outputs["Color"])
        node_tree.links.new(add_env_gn.inputs["Reflection Texture Color"], refl_tex_n.outputs["Color"])

        node_tree.links.new(add_env_gn.inputs["Specular Color"], spec_col_n.outputs["Color"])
        node_tree.links.new(add_env_gn.inputs["Base Texture Alpha"], base_tex_n.outputs["Value"])

        # output pass
        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_mat_n.outputs["Color"])

        node_tree.links.new(output_n.inputs["Color"], out_add_refl_n.outputs["Color"])