Fix new Cycles UV Map node not working correct for bump mapping.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D475
This commit is contained in:
Kevin Dietrich 2014-04-21 13:15:45 +02:00 committed by Brecht Van Lommel
parent f55ca54be1
commit 83988b6cdd
2 changed files with 33 additions and 6 deletions

@ -17,18 +17,29 @@
#include "stdosl.h" #include "stdosl.h"
shader node_uv_map( shader node_uv_map(
string name = "",
int from_dupli = 0, int from_dupli = 0,
string name = "",
string bump_offset = "center",
output point UV = point(0.0, 0.0, 0.0)) output point UV = point(0.0, 0.0, 0.0))
{ {
if (from_dupli) { if (from_dupli) {
getattribute("geom:dupli_uv", UV); getattribute("geom:dupli_uv", UV);
} }
else { else {
if (name == "") if (name == "")
getattribute("geom:uv", UV); getattribute("geom:uv", UV);
else else
getattribute(name, UV); getattribute(name, UV);
}
if (bump_offset == "dx") {
if (!from_dupli) {
UV += Dx(UV);
}
}
else if (bump_offset == "dy") {
if (!from_dupli) {
UV += Dy(UV);
}
} }
} }

@ -2360,6 +2360,15 @@ void UVMapNode::compile(SVMCompiler& compiler)
NodeType attr_node = NODE_ATTR; NodeType attr_node = NODE_ATTR;
int attr; int attr;
if(bump == SHADER_BUMP_DX) {
texco_node = NODE_TEX_COORD_BUMP_DX;
attr_node = NODE_ATTR_BUMP_DX;
}
else if(bump == SHADER_BUMP_DY) {
texco_node = NODE_TEX_COORD_BUMP_DY;
attr_node = NODE_ATTR_BUMP_DY;
}
if(!out->links.empty()) { if(!out->links.empty()) {
if(from_dupli) { if(from_dupli) {
compiler.stack_assign(out); compiler.stack_assign(out);
@ -2379,6 +2388,13 @@ void UVMapNode::compile(SVMCompiler& compiler)
void UVMapNode::compile(OSLCompiler& compiler) void UVMapNode::compile(OSLCompiler& compiler)
{ {
if(bump == SHADER_BUMP_DX)
compiler.parameter("bump_offset", "dx");
else if(bump == SHADER_BUMP_DY)
compiler.parameter("bump_offset", "dy");
else
compiler.parameter("bump_offset", "center");
compiler.parameter("from_dupli", from_dupli); compiler.parameter("from_dupli", from_dupli);
compiler.parameter("name", attribute.c_str()); compiler.parameter("name", attribute.c_str());
compiler.add(this, "node_uv_map"); compiler.add(this, "node_uv_map");