forked from bartvdbraak/blender
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:
parent
ef4db04da8
commit
33d609144e
@ -56,13 +56,19 @@ shader node_normal_map(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (space == "Object") {
|
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 */
|
/* strange blender convention */
|
||||||
mcolor[1] = -mcolor[1];
|
mcolor[1] = -mcolor[1];
|
||||||
mcolor[2] = -mcolor[2];
|
mcolor[2] = -mcolor[2];
|
||||||
|
|
||||||
Normal = normalize(transform("object", "world", vector(mcolor)));
|
Normal = normalize(transform("object", "world", vector(mcolor)));
|
||||||
}
|
}
|
||||||
else if (space == "World") {
|
else if (space == "Blender World") {
|
||||||
/* strange blender convention */
|
/* strange blender convention */
|
||||||
mcolor[1] = -mcolor[1];
|
mcolor[1] = -mcolor[1];
|
||||||
mcolor[2] = -mcolor[2];
|
mcolor[2] = -mcolor[2];
|
||||||
|
@ -277,13 +277,15 @@ __device void svm_node_normal_map(KernelGlobals *kg, ShaderData *sd, float *stac
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* strange blender convention */
|
/* strange blender convention */
|
||||||
|
if(space == NODE_NORMAL_MAP_BLENDER_OBJECT || space == NODE_NORMAL_MAP_BLENDER_WORLD) {
|
||||||
color.y = -color.y;
|
color.y = -color.y;
|
||||||
color.z = -color.z;
|
color.z = -color.z;
|
||||||
|
}
|
||||||
|
|
||||||
/* object, world space */
|
/* object, world space */
|
||||||
N = color;
|
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);
|
object_normal_transform(kg, sd, &N);
|
||||||
else
|
else
|
||||||
N = normalize(N);
|
N = normalize(N);
|
||||||
|
@ -309,7 +309,9 @@ typedef enum NodeTangentAxis {
|
|||||||
typedef enum NodeNormalMapSpace {
|
typedef enum NodeNormalMapSpace {
|
||||||
NODE_NORMAL_MAP_TANGENT,
|
NODE_NORMAL_MAP_TANGENT,
|
||||||
NODE_NORMAL_MAP_OBJECT,
|
NODE_NORMAL_MAP_OBJECT,
|
||||||
NODE_NORMAL_MAP_WORLD
|
NODE_NORMAL_MAP_WORLD,
|
||||||
|
NODE_NORMAL_MAP_BLENDER_OBJECT,
|
||||||
|
NODE_NORMAL_MAP_BLENDER_WORLD,
|
||||||
} NodeNormalMapSpace;
|
} NodeNormalMapSpace;
|
||||||
|
|
||||||
typedef enum ShaderType {
|
typedef enum ShaderType {
|
||||||
|
@ -3344,6 +3344,8 @@ static ShaderEnum normal_map_space_init()
|
|||||||
enm.insert("Tangent", NODE_NORMAL_MAP_TANGENT);
|
enm.insert("Tangent", NODE_NORMAL_MAP_TANGENT);
|
||||||
enm.insert("Object", NODE_NORMAL_MAP_OBJECT);
|
enm.insert("Object", NODE_NORMAL_MAP_OBJECT);
|
||||||
enm.insert("World", NODE_NORMAL_MAP_WORLD);
|
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;
|
return enm;
|
||||||
}
|
}
|
||||||
|
@ -947,6 +947,8 @@ typedef struct NodeShaderNormalMap {
|
|||||||
#define SHD_NORMAL_MAP_TANGENT 0
|
#define SHD_NORMAL_MAP_TANGENT 0
|
||||||
#define SHD_NORMAL_MAP_OBJECT 1
|
#define SHD_NORMAL_MAP_OBJECT 1
|
||||||
#define SHD_NORMAL_MAP_WORLD 2
|
#define SHD_NORMAL_MAP_WORLD 2
|
||||||
|
#define SHD_NORMAL_MAP_BLENDER_OBJECT 3
|
||||||
|
#define SHD_NORMAL_MAP_BLENDER_WORLD 4
|
||||||
|
|
||||||
/* blur node */
|
/* blur node */
|
||||||
#define CMP_NODE_BLUR_ASPECT_NONE 0
|
#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_TANGENT, "TANGENT", 0, "Tangent Space", "Tangent space normal mapping"},
|
||||||
{SHD_NORMAL_MAP_OBJECT, "OBJECT", 0, "Object Space", "Object 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_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}
|
{0, NULL, 0, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user