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:
Kévin Dietrich 2014-04-21 13:15:45 +02:00 committed by Brecht Van Lommel
parent f55ca54be1
commit 83988b6cdd
Notes: blender-bot 2023-02-14 10:47:13 +01:00
Referenced by issue #39808, UV Map node not fully working
2 changed files with 33 additions and 6 deletions

View File

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

View File

@ -2360,6 +2360,15 @@ void UVMapNode::compile(SVMCompiler& compiler)
NodeType attr_node = NODE_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(from_dupli) {
compiler.stack_assign(out);
@ -2379,6 +2388,13 @@ void UVMapNode::compile(SVMCompiler& 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("name", attribute.c_str());
compiler.add(this, "node_uv_map");