Cycles: 4 new nodes.
* Tangent: generate a tangent direction for anisotropic shading. Can be either radial around X/Y/Z axis, or from a UV map. The default tangent for the anisotropic BSDF and geometry node is now always radial Z, for UV tangent use this node now. http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/More#Tangent * Normal Map: generate a perturbed normal from an RGB normal map image. This is usually chained with an Image Texture node in the color input, to specify the normal map image. For tangent space normal maps, the UV coordinates for the image must match, and the image texture should be set to Non-Color mode to give correct results. http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/More#Normal_Map * Refraction BSDF: for best results this node should be considered as a building block and not be used on its own, but rather mixed with a glossy node using a fresnel type factor. Otherwise it will give quite dark results at the edges for glossy refraction. http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/Shaders#Refraction * Ambient Occlusion: controls the amount of AO a surface receives, rather than having just a global factor in the world. Note that this outputs a shader and not a color, that's for another time. http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/Shaders#Ambient_Occlusion
This commit is contained in:
@@ -553,6 +553,10 @@ struct ShadeResult;
|
||||
#define SH_NODE_TEX_BRICK 169
|
||||
#define SH_NODE_BUMP 170
|
||||
#define SH_NODE_SCRIPT 171
|
||||
#define SH_NODE_AMBIENT_OCCLUSION 172
|
||||
#define SH_NODE_BSDF_REFRACTION 173
|
||||
#define SH_NODE_TANGENT 174
|
||||
#define SH_NODE_NORMAL_MAP 175
|
||||
|
||||
/* custom defines options for Material node */
|
||||
#define SH_NODE_MAT_DIFF 1
|
||||
|
||||
@@ -2293,17 +2293,21 @@ static void registerShaderNodes(bNodeTreeType *ttype)
|
||||
register_node_type_sh_particle_info(ttype);
|
||||
register_node_type_sh_bump(ttype);
|
||||
register_node_type_sh_script(ttype);
|
||||
register_node_type_sh_tangent(ttype);
|
||||
register_node_type_sh_normal_map(ttype);
|
||||
|
||||
register_node_type_sh_background(ttype);
|
||||
register_node_type_sh_bsdf_anisotropic(ttype);
|
||||
register_node_type_sh_bsdf_diffuse(ttype);
|
||||
register_node_type_sh_bsdf_glossy(ttype);
|
||||
register_node_type_sh_bsdf_glass(ttype);
|
||||
register_node_type_sh_bsdf_refraction(ttype);
|
||||
register_node_type_sh_bsdf_translucent(ttype);
|
||||
register_node_type_sh_bsdf_transparent(ttype);
|
||||
register_node_type_sh_bsdf_velvet(ttype);
|
||||
register_node_type_sh_emission(ttype);
|
||||
register_node_type_sh_holdout(ttype);
|
||||
register_node_type_sh_ambient_occlusion(ttype);
|
||||
//register_node_type_sh_volume_transparent(ttype);
|
||||
//register_node_type_sh_volume_isotropic(ttype);
|
||||
register_node_type_sh_mix_shader(ttype);
|
||||
|
||||
@@ -1379,6 +1379,30 @@ static void node_shader_buts_tex_coord(uiLayout *layout, bContext *UNUSED(C), Po
|
||||
uiItemR(layout, ptr, "from_dupli", 0, NULL, 0);
|
||||
}
|
||||
|
||||
static void node_shader_buts_normal_map(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
{
|
||||
uiItemR(layout, ptr, "space", 0, "", 0);
|
||||
|
||||
if(RNA_enum_get(ptr, "space") == SHD_NORMAL_MAP_TANGENT)
|
||||
uiItemR(layout, ptr, "uv_map", 0, NULL, 0);
|
||||
}
|
||||
|
||||
static void node_shader_buts_tangent(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
{
|
||||
uiLayout *split, *row;
|
||||
|
||||
split = uiLayoutSplit(layout, 0.0f, FALSE);
|
||||
|
||||
uiItemR(split, ptr, "direction_type", 0, "", 0);
|
||||
|
||||
row = uiLayoutRow(split, FALSE);
|
||||
|
||||
if(RNA_enum_get(ptr, "direction_type") == SHD_TANGENT_UVMAP)
|
||||
uiItemR(row, ptr, "uv_map", 0, "", 0);
|
||||
else
|
||||
uiItemR(row, ptr, "axis", UI_ITEM_R_EXPAND, NULL, 0);
|
||||
}
|
||||
|
||||
static void node_shader_buts_glossy(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
{
|
||||
uiItemR(layout, ptr, "distribution", 0, "", ICON_NONE);
|
||||
@@ -1491,8 +1515,15 @@ static void node_shader_set_butfunc(bNodeType *ntype)
|
||||
case SH_NODE_TEX_COORD:
|
||||
ntype->uifunc = node_shader_buts_tex_coord;
|
||||
break;
|
||||
case SH_NODE_NORMAL_MAP:
|
||||
ntype->uifunc = node_shader_buts_normal_map;
|
||||
break;
|
||||
case SH_NODE_TANGENT:
|
||||
ntype->uifunc = node_shader_buts_tangent;
|
||||
break;
|
||||
case SH_NODE_BSDF_GLOSSY:
|
||||
case SH_NODE_BSDF_GLASS:
|
||||
case SH_NODE_BSDF_REFRACTION:
|
||||
ntype->uifunc = node_shader_buts_glossy;
|
||||
break;
|
||||
case SH_NODE_SCRIPT:
|
||||
|
||||
@@ -716,6 +716,17 @@ typedef struct NodeShaderScript {
|
||||
IDProperty *prop;
|
||||
} NodeShaderScript;
|
||||
|
||||
typedef struct NodeShaderTangent {
|
||||
int direction_type;
|
||||
int axis;
|
||||
char uv_map[64];
|
||||
} NodeShaderTangent;
|
||||
|
||||
typedef struct NodeShaderNormalMap {
|
||||
int space;
|
||||
char uv_map[64];
|
||||
} NodeShaderNormalMap;
|
||||
|
||||
/* script node mode */
|
||||
#define NODE_SCRIPT_INTERNAL 0
|
||||
#define NODE_SCRIPT_EXTERNAL 1
|
||||
@@ -800,6 +811,20 @@ typedef struct NodeShaderScript {
|
||||
#define SHD_PROJ_FLAT 0
|
||||
#define SHD_PROJ_BOX 1
|
||||
|
||||
/* tangent */
|
||||
#define SHD_TANGENT_RADIAL 0
|
||||
#define SHD_TANGENT_UVMAP 1
|
||||
|
||||
/* tangent */
|
||||
#define SHD_TANGENT_AXIS_X 0
|
||||
#define SHD_TANGENT_AXIS_Y 1
|
||||
#define SHD_TANGENT_AXIS_Z 2
|
||||
|
||||
/* normal map space */
|
||||
#define SHD_NORMAL_MAP_TANGENT 0
|
||||
#define SHD_NORMAL_MAP_OBJECT 1
|
||||
#define SHD_NORMAL_MAP_WORLD 2
|
||||
|
||||
/* blur node */
|
||||
#define CMP_NODE_BLUR_ASPECT_NONE 0
|
||||
#define CMP_NODE_BLUR_ASPECT_Y 1
|
||||
|
||||
@@ -1850,6 +1850,67 @@ static void def_glossy(StructRNA *srna)
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
}
|
||||
|
||||
static void def_sh_normal_map(StructRNA *srna)
|
||||
{
|
||||
static EnumPropertyItem prop_space_items[] = {
|
||||
{SHD_NORMAL_MAP_TANGENT, "TANGENT", 0, "Tangent Space", "Tangent space normal mapping"},
|
||||
{SHD_NORMAL_MAP_OBJECT, "OBJECT", 0, "Object Space", "Object space normal mapping"},
|
||||
{SHD_NORMAL_MAP_WORLD, "WORLD", 0, "World Space", "World space normal mapping"},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
PropertyRNA *prop;
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "NodeShaderNormalMap", "storage");
|
||||
|
||||
prop = RNA_def_property(srna, "space", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_items(prop, prop_space_items);
|
||||
RNA_def_property_ui_text(prop, "Space", "Space of the input normal");
|
||||
RNA_def_property_update(prop, 0, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "uv_map", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_ui_text(prop, "UV Map", "Name of the UV Map for for tangent space maps");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNode", NULL);
|
||||
}
|
||||
|
||||
static void def_sh_tangent(StructRNA *srna)
|
||||
{
|
||||
static EnumPropertyItem prop_direction_type_items[] = {
|
||||
{SHD_TANGENT_RADIAL, "RADIAL", 0, "Radial", "Radial tangent around the X, Y or Z axis"},
|
||||
{SHD_TANGENT_UVMAP, "UV_MAP", 0, "UV Map", "Tangent from UV map"},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
static EnumPropertyItem prop_axis_items[] = {
|
||||
{SHD_TANGENT_AXIS_X, "X", 0, "X", "X axis"},
|
||||
{SHD_TANGENT_AXIS_Y, "Y", 0, "Y", "Y axis"},
|
||||
{SHD_TANGENT_AXIS_Z, "Z", 0, "Z", "Z axis"},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
PropertyRNA *prop;
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "NodeShaderTangent", "storage");
|
||||
|
||||
prop = RNA_def_property(srna, "direction_type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_items(prop, prop_direction_type_items);
|
||||
RNA_def_property_ui_text(prop, "Direction", "Method to use for the tangent");
|
||||
RNA_def_property_update(prop, 0, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_items(prop, prop_axis_items);
|
||||
RNA_def_property_ui_text(prop, "Axis", "Axis for radial tangents");
|
||||
RNA_def_property_update(prop, 0, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "uv_map", PROP_STRING, PROP_NONE);
|
||||
RNA_def_property_ui_text(prop, "UV Map", "Name of the UV Map for for tangent generated from UV");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNode", NULL);
|
||||
}
|
||||
|
||||
static void def_sh_script(StructRNA *srna)
|
||||
{
|
||||
FunctionRNA *func;
|
||||
|
||||
@@ -65,12 +65,14 @@ DefNode( ShaderNode, SH_NODE_LAYER_WEIGHT, 0, "LA
|
||||
DefNode( ShaderNode, SH_NODE_MIX_SHADER, 0, "MIX_SHADER", MixShader, "Mix Shader", "" )
|
||||
DefNode( ShaderNode, SH_NODE_ADD_SHADER, 0, "ADD_SHADER", AddShader, "Add Shader", "" )
|
||||
DefNode( ShaderNode, SH_NODE_ATTRIBUTE, def_sh_attribute, "ATTRIBUTE", Attribute, "Attribute", "" )
|
||||
DefNode( ShaderNode, SH_NODE_AMBIENT_OCCLUSION, 0, "AMBIENT_OCCLUSION", AmbientOcclusion, "Ambient Occlusion", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BACKGROUND, 0, "BACKGROUND", Background, "Background", "" )
|
||||
DefNode( ShaderNode, SH_NODE_HOLDOUT, 0, "HOLDOUT", Holdout, "Holdout", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BSDF_ANISOTROPIC, 0, "BSDF_ANISOTROPIC", BsdfAnisotropic, "Anisotropic Bsdf", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BSDF_DIFFUSE, 0, "BSDF_DIFFUSE", BsdfDiffuse, "Diffuse Bsdf", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BSDF_GLOSSY, def_glossy, "BSDF_GLOSSY", BsdfGlossy, "Glossy Bsdf", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BSDF_GLASS, def_glossy, "BSDF_GLASS", BsdfGlass, "Glass Bsdf", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BSDF_REFRACTION, def_glossy, "BSDF_REFRACTION", BsdfRefraction, "Refraction Bsdf", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BSDF_TRANSLUCENT, 0, "BSDF_TRANSLUCENT", BsdfTranslucent, "Translucent Bsdf", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BSDF_TRANSPARENT, 0, "BSDF_TRANSPARENT", BsdfTransparent, "Transparent Bsdf", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BSDF_VELVET, 0, "BSDF_VELVET", BsdfVelvet, "Velvet Bsdf", "" )
|
||||
@@ -82,7 +84,9 @@ DefNode( ShaderNode, SH_NODE_LIGHT_PATH, 0, "LI
|
||||
DefNode( ShaderNode, SH_NODE_LIGHT_FALLOFF, 0, "LIGHT_FALLOFF", LightFalloff, "Light Falloff", "" )
|
||||
DefNode( ShaderNode, SH_NODE_OBJECT_INFO, 0, "OBJECT_INFO", ObjectInfo, "Object Info", "" )
|
||||
DefNode( ShaderNode, SH_NODE_PARTICLE_INFO, 0, "PARTICLE_INFO", ParticleInfo, "Particle Info", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BUMP, 0, "BUMP", BumpNode, "Bump", "" )
|
||||
DefNode( ShaderNode, SH_NODE_BUMP, 0, "BUMP", Bump, "Bump", "" )
|
||||
DefNode( ShaderNode, SH_NODE_NORMAL_MAP, def_sh_normal_map, "NORMAL_MAP", NormalMap, "Normal Map", "" )
|
||||
DefNode( ShaderNode, SH_NODE_TANGENT, def_sh_tangent, "TANGENT", Tangent, "Tangent", "" )
|
||||
DefNode( ShaderNode, SH_NODE_SCRIPT, def_sh_script, "SCRIPT", Script, "Script", "" )
|
||||
DefNode( ShaderNode, SH_NODE_TEX_IMAGE, def_sh_tex_image, "TEX_IMAGE", TexImage, "Image Texture", "" )
|
||||
DefNode( ShaderNode, SH_NODE_TEX_ENVIRONMENT, def_sh_tex_environment, "TEX_ENVIRONMENT", TexEnvironment, "Environment Texture","" )
|
||||
|
||||
@@ -145,36 +145,40 @@ set(SRC
|
||||
shader/nodes/node_shader_valToRgb.c
|
||||
shader/nodes/node_shader_value.c
|
||||
shader/nodes/node_shader_vectMath.c
|
||||
shader/nodes/node_shader_add_shader.c
|
||||
shader/nodes/node_shader_ambient_occlusion.c
|
||||
shader/nodes/node_shader_attribute.c
|
||||
shader/nodes/node_shader_background.c
|
||||
shader/nodes/node_shader_bsdf_anisotropic.c
|
||||
shader/nodes/node_shader_bsdf_diffuse.c
|
||||
shader/nodes/node_shader_bsdf_glossy.c
|
||||
shader/nodes/node_shader_bsdf_glass.c
|
||||
shader/nodes/node_shader_bsdf_glossy.c
|
||||
shader/nodes/node_shader_bsdf_refraction.c
|
||||
shader/nodes/node_shader_bsdf_translucent.c
|
||||
shader/nodes/node_shader_bsdf_transparent.c
|
||||
shader/nodes/node_shader_bsdf_velvet.c
|
||||
shader/nodes/node_shader_bump.c
|
||||
shader/nodes/node_shader_emission.c
|
||||
shader/nodes/node_shader_fresnel.c
|
||||
shader/nodes/node_shader_layer_weight.c
|
||||
shader/nodes/node_shader_geometry.c
|
||||
shader/nodes/node_shader_holdout.c
|
||||
shader/nodes/node_shader_volume_transparent.c
|
||||
shader/nodes/node_shader_volume_isotropic.c
|
||||
shader/nodes/node_shader_light_path.c
|
||||
shader/nodes/node_shader_layer_weight.c
|
||||
shader/nodes/node_shader_light_falloff.c
|
||||
shader/nodes/node_shader_object_info.c
|
||||
shader/nodes/node_shader_script.c
|
||||
shader/nodes/node_shader_particle_info.c
|
||||
shader/nodes/node_shader_light_path.c
|
||||
shader/nodes/node_shader_mix_shader.c
|
||||
shader/nodes/node_shader_add_shader.c
|
||||
shader/nodes/node_shader_normal_map.c
|
||||
shader/nodes/node_shader_object_info.c
|
||||
shader/nodes/node_shader_output_lamp.c
|
||||
shader/nodes/node_shader_output_material.c
|
||||
shader/nodes/node_shader_output_world.c
|
||||
shader/nodes/node_shader_tex_gradient.c
|
||||
shader/nodes/node_shader_particle_info.c
|
||||
shader/nodes/node_shader_script.c
|
||||
shader/nodes/node_shader_tangent.c
|
||||
shader/nodes/node_shader_tex_brick.c
|
||||
shader/nodes/node_shader_tex_checker.c
|
||||
shader/nodes/node_shader_tex_coord.c
|
||||
shader/nodes/node_shader_tex_environment.c
|
||||
shader/nodes/node_shader_tex_gradient.c
|
||||
shader/nodes/node_shader_tex_image.c
|
||||
shader/nodes/node_shader_tex_magic.c
|
||||
shader/nodes/node_shader_tex_musgrave.c
|
||||
@@ -182,8 +186,8 @@ set(SRC
|
||||
shader/nodes/node_shader_tex_sky.c
|
||||
shader/nodes/node_shader_tex_voronoi.c
|
||||
shader/nodes/node_shader_tex_wave.c
|
||||
shader/nodes/node_shader_tex_checker.c
|
||||
shader/nodes/node_shader_tex_brick.c
|
||||
shader/nodes/node_shader_volume_isotropic.c
|
||||
shader/nodes/node_shader_volume_transparent.c
|
||||
shader/node_shader_tree.c
|
||||
shader/node_shader_util.c
|
||||
|
||||
|
||||
@@ -81,11 +81,15 @@ void register_node_type_sh_layer_weight(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_tex_coord(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_particle_info(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_script(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_normal_map(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_tangent(struct bNodeTreeType *ttype);
|
||||
|
||||
void register_node_type_sh_ambient_occlusion(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_background(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_bsdf_diffuse(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_bsdf_glossy(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_bsdf_glass(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_bsdf_refraction(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_bsdf_translucent(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_bsdf_transparent(struct bNodeTreeType *ttype);
|
||||
void register_node_type_sh_bsdf_velvet(struct bNodeTreeType *ttype);
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* ***** 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_ambient_occlusion_in[] = {
|
||||
{ SOCK_RGBA, 1, N_("Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static bNodeSocketTemplate sh_node_ambient_occlusion_out[] = {
|
||||
{ SOCK_SHADER, 0, N_("AO")},
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static int node_shader_gpu_ambient_occlusion(GPUMaterial *mat, bNode *UNUSED(node), GPUNodeStack *in, GPUNodeStack *out)
|
||||
{
|
||||
return GPU_stack_link(mat, "node_ambient_occlusion", in, out, GPU_builtin(GPU_VIEW_NORMAL));
|
||||
}
|
||||
|
||||
/* node type definition */
|
||||
void register_node_type_sh_ambient_occlusion(bNodeTreeType *ttype)
|
||||
{
|
||||
static bNodeType ntype;
|
||||
|
||||
node_type_base(ttype, &ntype, SH_NODE_AMBIENT_OCCLUSION, "Ambient Occlusion", NODE_CLASS_SHADER, 0);
|
||||
node_type_compatibility(&ntype, NODE_NEW_SHADING);
|
||||
node_type_socket_templates(&ntype, sh_node_ambient_occlusion_in, sh_node_ambient_occlusion_out);
|
||||
node_type_size(&ntype, 150, 60, 200);
|
||||
node_type_init(&ntype, NULL);
|
||||
node_type_storage(&ntype, "", NULL, NULL);
|
||||
node_type_exec(&ntype, NULL);
|
||||
node_type_gpu(&ntype, node_shader_gpu_ambient_occlusion);
|
||||
|
||||
nodeRegisterType(ttype, &ntype);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* ***** 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_bsdf_refraction_in[] = {
|
||||
{ SOCK_RGBA, 1, N_("Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
|
||||
{ SOCK_FLOAT, 1, N_("Roughness"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
|
||||
{ SOCK_FLOAT, 1, N_("IOR"), 1.45f, 0.0f, 0.0f, 0.0f, 1.0f, 1000.0f},
|
||||
{ SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE, SOCK_HIDE_VALUE},
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static bNodeSocketTemplate sh_node_bsdf_refraction_out[] = {
|
||||
{ SOCK_SHADER, 0, N_("BSDF")},
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static int node_shader_gpu_bsdf_refraction(GPUMaterial *mat, bNode *UNUSED(node), GPUNodeStack *in, GPUNodeStack *out)
|
||||
{
|
||||
if (!in[3].link)
|
||||
in[3].link = GPU_builtin(GPU_VIEW_NORMAL);
|
||||
|
||||
return GPU_stack_link(mat, "node_bsdf_refraction", in, out);
|
||||
}
|
||||
|
||||
/* node type definition */
|
||||
void register_node_type_sh_bsdf_refraction(bNodeTreeType *ttype)
|
||||
{
|
||||
static bNodeType ntype;
|
||||
|
||||
node_type_base(ttype, &ntype, SH_NODE_BSDF_REFRACTION, "Refraction BSDF", NODE_CLASS_SHADER, NODE_OPTIONS);
|
||||
node_type_compatibility(&ntype, NODE_NEW_SHADING);
|
||||
node_type_socket_templates(&ntype, sh_node_bsdf_refraction_in, sh_node_bsdf_refraction_out);
|
||||
node_type_size(&ntype, 150, 60, 200);
|
||||
node_type_init(&ntype, NULL);
|
||||
node_type_storage(&ntype, "", NULL, NULL);
|
||||
node_type_exec(&ntype, NULL);
|
||||
node_type_gpu(&ntype, node_shader_gpu_bsdf_refraction);
|
||||
|
||||
nodeRegisterType(ttype, &ntype);
|
||||
}
|
||||
69
source/blender/nodes/shader/nodes/node_shader_normal_map.c
Normal file
69
source/blender/nodes/shader/nodes/node_shader_normal_map.c
Normal file
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* ***** 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_normal_map_in[] = {
|
||||
{ SOCK_RGBA, 0, N_("Color"), 0.5f, 0.5f, 1.0f, 1.0f, 0.0f, 1.0f},
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static bNodeSocketTemplate sh_node_normal_map_out[] = {
|
||||
{ SOCK_VECTOR, 0, N_("Normal"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static void node_shader_init_normal_map(bNodeTree *UNUSED(ntree), bNode *node, bNodeTemplate *UNUSED(ntemp))
|
||||
{
|
||||
NodeShaderNormalMap *attr = MEM_callocN(sizeof(NodeShaderNormalMap), "NodeShaderNormalMap");
|
||||
node->storage = attr;
|
||||
}
|
||||
|
||||
static int gpu_shader_normal_map(GPUMaterial *mat, bNode *UNUSED(node), GPUNodeStack *in, GPUNodeStack *out)
|
||||
{
|
||||
return GPU_stack_link(mat, "node_normal_map", in, out, GPU_builtin(GPU_VIEW_NORMAL));
|
||||
}
|
||||
|
||||
/* node type definition */
|
||||
void register_node_type_sh_normal_map(bNodeTreeType *ttype)
|
||||
{
|
||||
static bNodeType ntype;
|
||||
|
||||
node_type_base(ttype, &ntype, SH_NODE_NORMAL_MAP, "Normal Map", NODE_CLASS_OP_VECTOR, NODE_OPTIONS);
|
||||
node_type_compatibility(&ntype, NODE_NEW_SHADING);
|
||||
node_type_socket_templates(&ntype, sh_node_normal_map_in, sh_node_normal_map_out);
|
||||
node_type_size(&ntype, 250, 60, 250);
|
||||
node_type_init(&ntype, node_shader_init_normal_map);
|
||||
node_type_storage(&ntype, "NodeShaderNormalMap", node_free_standard_storage, node_copy_standard_storage);
|
||||
node_type_exec(&ntype, NULL);
|
||||
node_type_gpu(&ntype, gpu_shader_normal_map);
|
||||
|
||||
nodeRegisterType(ttype, &ntype);
|
||||
}
|
||||
|
||||
60
source/blender/nodes/shader/nodes/node_shader_tangent.c
Normal file
60
source/blender/nodes/shader/nodes/node_shader_tangent.c
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* ***** 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_tangent_out[] = {
|
||||
{ SOCK_VECTOR, 0, N_("Tangent"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static void node_shader_init_tangent(bNodeTree *UNUSED(ntree), bNode *node, bNodeTemplate *UNUSED(ntemp))
|
||||
{
|
||||
NodeShaderTangent *attr = MEM_callocN(sizeof(NodeShaderTangent), "NodeShaderTangent");
|
||||
attr->axis = SHD_TANGENT_AXIS_Z;
|
||||
node->storage = attr;
|
||||
}
|
||||
|
||||
/* node type definition */
|
||||
void register_node_type_sh_tangent(bNodeTreeType *ttype)
|
||||
{
|
||||
static bNodeType ntype;
|
||||
|
||||
node_type_base(ttype, &ntype, SH_NODE_TANGENT, "Tangent", NODE_CLASS_INPUT, NODE_OPTIONS);
|
||||
node_type_compatibility(&ntype, NODE_NEW_SHADING);
|
||||
node_type_socket_templates(&ntype, NULL, sh_node_tangent_out);
|
||||
node_type_size(&ntype, 150, 60, 200);
|
||||
node_type_init(&ntype, node_shader_init_tangent);
|
||||
node_type_storage(&ntype, "NodeShaderTangent", node_free_standard_storage, node_copy_standard_storage);
|
||||
node_type_exec(&ntype, NULL);
|
||||
node_type_gpu(&ntype, NULL);
|
||||
|
||||
nodeRegisterType(ttype, &ntype);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user