@Rei: You can create hard normals directly in the pixel shader like so: float3 hard_normal = normalize(cross(ddx(wPos),ddy(wPos))); You only need to pass the world position in the pixel shader. This should work fine for your case. wink