Cycles: normal maps are now backwards compatible again after recent fix, with

a separate Blender Object/World Space that is compatible with Blender render
baking and uses the YZ flipping convention.
This commit is contained in:
Brecht Van Lommel 2013-05-28 14:24:03 +00:00
parent ef4db04da8
commit 33d609144e
6 changed files with 24 additions and 8 deletions

@ -56,13 +56,19 @@ shader node_normal_map(
}
}
else if (space == "Object") {
Normal = normalize(transform("object", "world", vector(mcolor)));
}
else if (space == "World") {
Normal = normalize(vector(mcolor));
}
else if (space == "Blender Object") {
/* strange blender convention */
mcolor[1] = -mcolor[1];
mcolor[2] = -mcolor[2];
Normal = normalize(transform("object", "world", vector(mcolor)));
}
else if (space == "World") {
else if (space == "Blender World") {
/* strange blender convention */
mcolor[1] = -mcolor[1];
mcolor[2] = -mcolor[2];

@ -277,13 +277,15 @@ __device void svm_node_normal_map(KernelGlobals *kg, ShaderData *sd, float *stac
}
else {
/* strange blender convention */
if(space == NODE_NORMAL_MAP_BLENDER_OBJECT || space == NODE_NORMAL_MAP_BLENDER_WORLD) {
color.y = -color.y;
color.z = -color.z;
}
/* object, world space */
N = color;
if(space == NODE_NORMAL_MAP_OBJECT)
if(space == NODE_NORMAL_MAP_OBJECT || space == NODE_NORMAL_MAP_BLENDER_OBJECT)
object_normal_transform(kg, sd, &N);
else
N = normalize(N);

@ -309,7 +309,9 @@ typedef enum NodeTangentAxis {
typedef enum NodeNormalMapSpace {
NODE_NORMAL_MAP_TANGENT,
NODE_NORMAL_MAP_OBJECT,
NODE_NORMAL_MAP_WORLD
NODE_NORMAL_MAP_WORLD,
NODE_NORMAL_MAP_BLENDER_OBJECT,
NODE_NORMAL_MAP_BLENDER_WORLD,
} NodeNormalMapSpace;
typedef enum ShaderType {

@ -3344,6 +3344,8 @@ static ShaderEnum normal_map_space_init()
enm.insert("Tangent", NODE_NORMAL_MAP_TANGENT);
enm.insert("Object", NODE_NORMAL_MAP_OBJECT);
enm.insert("World", NODE_NORMAL_MAP_WORLD);
enm.insert("Blender Object", NODE_NORMAL_MAP_BLENDER_OBJECT);
enm.insert("Blender World", NODE_NORMAL_MAP_BLENDER_WORLD);
return enm;
}

@ -947,6 +947,8 @@ typedef struct NodeShaderNormalMap {
#define SHD_NORMAL_MAP_TANGENT 0
#define SHD_NORMAL_MAP_OBJECT 1
#define SHD_NORMAL_MAP_WORLD 2
#define SHD_NORMAL_MAP_BLENDER_OBJECT 3
#define SHD_NORMAL_MAP_BLENDER_WORLD 4
/* blur node */
#define CMP_NODE_BLUR_ASPECT_NONE 0

@ -3460,6 +3460,8 @@ static void def_sh_normal_map(StructRNA *srna)
{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"},
{SHD_NORMAL_MAP_BLENDER_OBJECT, "BLENDER_OBJECT", 0, "Blender Object Space", "Object space normal mapping, compatible with Blender render baking"},
{SHD_NORMAL_MAP_BLENDER_WORLD, "BLENDER_WORLD", 0, "Blender World Space", "World space normal mapping, compatible with Blender render baking"},
{0, NULL, 0, NULL, NULL}
};