message: don't approximate sin(x) by sin(x)^2
  This is optimization is not worth it in the
  vertex shader, and the error is quite large
  for some angles, resulting in harder to control
  acne.
diff: */
  vec4 getLightSpacePosition(const vec3 p, const vec3 n) {
  float NoL = saturate(dot(n, frameUniforms.lightDirection));
  + float sinTheta = sqrt(1.0 - NoL * NoL);
  -#ifdef TARGET_MOBILE
  - float normalBias = 1.0 - NoL * NoL;
  -#else
  - float normalBias = sqrt(1.0 - NoL * NoL);
  -#endif
  -
  - vec3 offsetPosition = p + n * (normalBias * frameUniforms.shadowBias.y);
  + vec3 offsetPosition = p + n * (sinTheta * frameUniforms.shadowBias.y);
  vec4 lightSpacePosition = (getLightFromWorldMatrix() * vec4(offsetPosition, 1.0));
  lightSpacePosition.z -= frameUniforms.shadowBias.x;
  