Fix #35306: cycles normal mapping not working with flat shading.
This commit is contained in:
@@ -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)));
|
||||
|
Reference in New Issue
Block a user