Fix #35306: cycles normal mapping not working with flat shading.

This commit is contained in:
Brecht Van Lommel
2013-05-11 09:31:58 +00:00
parent 18fda6d84c
commit 561cf26c2f
5 changed files with 33 additions and 11 deletions

View File

@@ -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)));