surface
cloudBaker(string bakename = "")
{
normal Nn = normalize(N);
  
// micropolygon area
float a = area(P, "dicing");
  
// average opacity
float opacity = 0.333333 * (Os[0] + Os[1] + Os[2]);
  
/*reduce area if non-opaque;
artifically reduces the area of
micropolys covering any given
point by its opacity to fake in
less occlusion*/
a *= opacity;
  
if(a > 0)
    /*file location, name of information(s) to be output,
    position in space, the normal of that position, not sure
    about interpolate, pair(s) of data name and type for output*/
    bake3d(bakename, "_area", P, Nn,
        "interpolate", 1,
        "_area", a);
  
Ci = Cs * Os;
Oi = Os;
}