#define saturate( a ) clamp( a, 0.0, 1.0 ) // comments
#define EPSILON 1e-6
#define INVERSE_MAT(mat) inverseMat(mat)
#define Kzo 0.416666666667 // 1/2-1/6*2
#define jitter 1.0 // smaller jitter gives more regular pattern
#define jitter1 0.8 // smaller jitter gives less errors in F1 F2
#define RAYLEIGH (mix(0.0, 0.0025, pow(material_AtmosphereThickness,2.5)))
#define COLOR_2_LINEAR(color) color*color

#define RECURSIVE_MACRO(mat) (COLOR_2_LINEAR(vec3(1.0)); INVERSE_MAT(mat));
#define HAS_TEXTURE

void function() {
  saturate(9.9999 + EPSILON);
  mat4 m;
  INVERSE_MAT(mat);
  float t = Kzo + jitter * jitter1 / RAYLEIGH ; 
  float t2 = Kzo + jitter *jitter1 /RAYLEIGH; 

  return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );

  float t3 = RAYLEIGH;
  RECURSIVE_MACRO(m);
}