diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-05-11 13:31:58 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-05-11 13:31:58 +0400 |
commit | 561cf26c2f92a11c8f2fa2da79bcaebf2647fc76 (patch) | |
tree | 31b680b7aa9e21d230128dc9db9836aa5df27574 /intern/cycles/kernel/shaders/node_normal_map.osl | |
parent | 18fda6d84c139d1e105dc58796f37effc31f35d5 (diff) |
Fix #35306: cycles normal mapping not working with flat shading.
Diffstat (limited to 'intern/cycles/kernel/shaders/node_normal_map.osl')
-rw-r--r-- | intern/cycles/kernel/shaders/node_normal_map.osl | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/intern/cycles/kernel/shaders/node_normal_map.osl b/intern/cycles/kernel/shaders/node_normal_map.osl index 4428a12ac41..c3d6e7bd391 100644 --- a/intern/cycles/kernel/shaders/node_normal_map.osl +++ b/intern/cycles/kernel/shaders/node_normal_map.osl @@ -33,15 +33,17 @@ shader node_normal_map( vector tangent; vector ninterp; float tangent_sign; + float is_smooth; + + getattribute("geom:is_smooth", is_smooth); + if (!is_smooth) + ninterp = Ng; // get _unnormalized_ interpolated normal and tangent - if (!getattribute(attr_name, tangent) || - !getattribute(attr_sign_name, tangent_sign) || - !getattribute("geom:N", ninterp)) + if (getattribute(attr_name, tangent) && + getattribute(attr_sign_name, tangent_sign) && + (!is_smooth || getattribute("geom:N", ninterp))) { - Normal = normal(0, 0, 0); - } - else { // apply normal map vector B = tangent_sign * cross(ninterp, tangent); Normal = normalize(mcolor[0] * tangent + mcolor[1] * B + mcolor[2] * ninterp); @@ -49,6 +51,9 @@ shader node_normal_map( // transform to world space Normal = normalize(transform("object", "world", Normal)); } + else { + Normal = normal(0, 0, 0); + } } else if (space == "Object") Normal = normalize(transform("object", "world", vector(mcolor))); |