Added new Output Line Style shader node for defining a node-based line material.

This commit is contained in:
2014-07-14 16:20:40 +09:00
parent 60cdf97c3d
commit 846ec6e00c
8 changed files with 65 additions and 5 deletions

View File

@@ -175,6 +175,7 @@ shader_node_categories = [
NodeItem("ShaderNodeOutputMaterial"), NodeItem("ShaderNodeOutputMaterial"),
NodeItem("ShaderNodeOutputLamp"), NodeItem("ShaderNodeOutputLamp"),
NodeItem("ShaderNodeOutputWorld"), NodeItem("ShaderNodeOutputWorld"),
NodeItem("ShaderNodeOutputLineStyle"),
NodeItem("NodeGroupOutput", poll=group_input_output_item_poll), NodeItem("NodeGroupOutput", poll=group_input_output_item_poll),
]), ]),
ShaderNewNodeCategory("SH_NEW_SHADER", "Shader", items=[ ShaderNewNodeCategory("SH_NEW_SHADER", "Shader", items=[

View File

@@ -752,6 +752,7 @@ struct ShadeResult;
#define SH_NODE_UVMAP 187 #define SH_NODE_UVMAP 187
#define SH_NODE_SEPXYZ 188 #define SH_NODE_SEPXYZ 188
#define SH_NODE_COMBXYZ 189 #define SH_NODE_COMBXYZ 189
#define SH_NODE_OUTPUT_LINESTYLE 190
/* custom defines options for Material node */ /* custom defines options for Material node */
#define SH_NODE_MAT_DIFF 1 #define SH_NODE_MAT_DIFF 1

View File

@@ -3533,6 +3533,7 @@ static void registerShaderNodes(void)
register_node_type_sh_output_lamp(); register_node_type_sh_output_lamp();
register_node_type_sh_output_material(); register_node_type_sh_output_material();
register_node_type_sh_output_world(); register_node_type_sh_output_world();
register_node_type_sh_output_linestyle();
register_node_type_sh_tex_image(); register_node_type_sh_tex_image();
register_node_type_sh_tex_environment(); register_node_type_sh_tex_environment();

View File

@@ -439,9 +439,8 @@ void ED_node_shader_default(const bContext *C, ID *id)
FreestyleLineStyle *linestyle = (FreestyleLineStyle *)id; FreestyleLineStyle *linestyle = (FreestyleLineStyle *)id;
linestyle->nodetree = ntree; linestyle->nodetree = ntree;
/* TODO use appropriate output_type & shader_type */ output_type = SH_NODE_OUTPUT_LINESTYLE;
output_type = SH_NODE_OUTPUT_MATERIAL; shader_type = SH_NODE_TEX_IMAGE;
shader_type = SH_NODE_BSDF_DIFFUSE;
copy_v3_v3(color, &linestyle->r); copy_v3_v3(color, &linestyle->r);
strength = 1.0f; strength = 1.0f;
@@ -656,8 +655,8 @@ void ED_node_set_active(Main *bmain, bNodeTree *ntree, bNode *node)
if (node->id && ELEM(GS(node->id->name), ID_MA, ID_LA, ID_WO)) if (node->id && ELEM(GS(node->id->name), ID_MA, ID_LA, ID_WO))
nodeClearActiveID(ntree, ID_TE); nodeClearActiveID(ntree, ID_TE);
if (ELEM(node->type, SH_NODE_OUTPUT, SH_NODE_OUTPUT_MATERIAL, if (ELEM5(node->type, SH_NODE_OUTPUT, SH_NODE_OUTPUT_MATERIAL,
SH_NODE_OUTPUT_WORLD, SH_NODE_OUTPUT_LAMP)) SH_NODE_OUTPUT_WORLD, SH_NODE_OUTPUT_LAMP, SH_NODE_OUTPUT_LINESTYLE))
{ {
bNode *tnode; bNode *tnode;

View File

@@ -184,6 +184,7 @@ set(SRC
shader/nodes/node_shader_output_lamp.c shader/nodes/node_shader_output_lamp.c
shader/nodes/node_shader_output_material.c shader/nodes/node_shader_output_material.c
shader/nodes/node_shader_output_world.c shader/nodes/node_shader_output_world.c
shader/nodes/node_shader_output_linestyle.c
shader/nodes/node_shader_particle_info.c shader/nodes/node_shader_particle_info.c
shader/nodes/node_shader_script.c shader/nodes/node_shader_script.c
shader/nodes/node_shader_subsurface_scattering.c shader/nodes/node_shader_subsurface_scattering.c

View File

@@ -118,6 +118,7 @@ void register_node_type_sh_uvmap(void);
void register_node_type_sh_output_lamp(void); void register_node_type_sh_output_lamp(void);
void register_node_type_sh_output_material(void); void register_node_type_sh_output_material(void);
void register_node_type_sh_output_world(void); void register_node_type_sh_output_world(void);
void register_node_type_sh_output_linestyle(void);
void register_node_type_sh_tex_image(void); void register_node_type_sh_tex_image(void);
void register_node_type_sh_tex_environment(void); void register_node_type_sh_tex_environment(void);

View File

@@ -69,6 +69,7 @@ DefNode( ShaderNode, SH_NODE_HUE_SAT, 0, "HUE_S
DefNode( ShaderNode, SH_NODE_OUTPUT_MATERIAL, def_sh_output, "OUTPUT_MATERIAL", OutputMaterial, "Material Output", "" ) DefNode( ShaderNode, SH_NODE_OUTPUT_MATERIAL, def_sh_output, "OUTPUT_MATERIAL", OutputMaterial, "Material Output", "" )
DefNode( ShaderNode, SH_NODE_OUTPUT_LAMP, def_sh_output, "OUTPUT_LAMP", OutputLamp, "Lamp Output", "" ) DefNode( ShaderNode, SH_NODE_OUTPUT_LAMP, def_sh_output, "OUTPUT_LAMP", OutputLamp, "Lamp Output", "" )
DefNode( ShaderNode, SH_NODE_OUTPUT_WORLD, def_sh_output, "OUTPUT_WORLD", OutputWorld, "World Output", "" ) DefNode( ShaderNode, SH_NODE_OUTPUT_WORLD, def_sh_output, "OUTPUT_WORLD", OutputWorld, "World Output", "" )
DefNode( ShaderNode, SH_NODE_OUTPUT_LINESTYLE, def_sh_output, "OUTPUT_LINESTYLE", OutputLineStyle, "Line Style Output", "" )
DefNode( ShaderNode, SH_NODE_FRESNEL, 0, "FRESNEL", Fresnel, "Fresnel", "" ) DefNode( ShaderNode, SH_NODE_FRESNEL, 0, "FRESNEL", Fresnel, "Fresnel", "" )
DefNode( ShaderNode, SH_NODE_LAYER_WEIGHT, 0, "LAYER_WEIGHT", LayerWeight, "Layer Weight", "" ) DefNode( ShaderNode, SH_NODE_LAYER_WEIGHT, 0, "LAYER_WEIGHT", LayerWeight, "Layer Weight", "" )
DefNode( ShaderNode, SH_NODE_MIX_SHADER, 0, "MIX_SHADER", MixShader, "Mix Shader", "" ) DefNode( ShaderNode, SH_NODE_MIX_SHADER, 0, "MIX_SHADER", MixShader, "Mix Shader", "" )

View File

@@ -0,0 +1,55 @@
/*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2005 Blender Foundation.
* All rights reserved.
*
* The Original Code is: all of this file.
*
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
*/
#include "../node_shader_util.h"
/* **************** OUTPUT ******************** */
static bNodeSocketTemplate sh_node_output_linestyle_in[] = {
{ SOCK_RGBA, 1, N_("Color"), 1.0f, 1.0f, 1.0f, 1.0f },
{ SOCK_FLOAT, 1, N_("Color Fac"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR },
{ SOCK_FLOAT, 1, N_("Alpha"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR },
{ SOCK_FLOAT, 1, N_("Alpha Fac"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR },
{ -1, 0, "" }
};
/* node type definition */
void register_node_type_sh_output_linestyle(void)
{
static bNodeType ntype;
sh_node_type_base(&ntype, SH_NODE_OUTPUT_LINESTYLE, "Line Style Output", NODE_CLASS_OUTPUT, 0);
node_type_compatibility(&ntype, NODE_NEW_SHADING);
node_type_socket_templates(&ntype, sh_node_output_linestyle_in, NULL);
node_type_init(&ntype, NULL);
node_type_storage(&ntype, "", NULL, NULL);
/* Do not allow muting output node. */
node_type_internal_links(&ntype, NULL);
nodeRegisterType(&ntype);
}