POV-Ray has: Agate, Bozo, Bumps, Checker, Crackle, Dents, Granite, Gradient, Hexagon, Leopard, Mandel, Marble, Onion, Quilted, Ripples, Spotted, Spiral, Radial, Waves, Wood, Wrinkles and image file mapping.


float grayNoise (float x, float y, float total, int seed, int scale) {

  float p1, p2, p3, p4;
  int myseed = 0;

  if (x > .5) {
    myseed ++;
  }
  if (y > .5) {
    myseed += 2;
  }

  //seed = (seed << 2) + myseed;

  srand (seed);
  p1 = (rand () / (float) RAND_MAX);
  p2 = (rand () / (float) RAND_MAX);
  p3 = (rand () / (float) RAND_MAX);
  p4 = (rand () / (float) RAND_MAX);

  total += ((x * p1 + (1 - x) * p2) * (1 - y) + (x * p3 + (1 - x) * p4) * y) / (1 << scale);

  scale ++;


  x = fmod (x, 0.5) * 2;
  y = fmod (y, 0.5) * 2;

  if (scale < 8) {
    return grayNoise (x, y, total, seed, scale);
  } else {
    return total;
  }

}



  int i;
  int p1, p2, p3, p4;
  float v1, v2, v3, v4;
  int seed;

  case BASIC_CLOUD:

    x = fmod (x, 1);
    y = fmod (y, 1);
    srand (0);

    //r = grayNoise (x, y, 0, 0, 0);
    //printf ("%f\n", r);

    for (i = 0; i < 8; i++) {

      p1 = (x * 256.0) / (float) (1 << i);
      p2 = (p1 + 1) & (1 << (7 - i));
      p3 = (y * 256.0) / (float) (1 << i);
      p4 = (p3 + 1) & (1 << (7 - i));

      p1 = p1 + (i << 9);
      p2 = p2 + (i << 9);
      p3 = p3 + (i << 9);
      p4 = p4 + (i << 9);

      srand (p2 | (p3 << 16));
      v1 = rand () / ((float) RAND_MAX);
      srand (p1 | (p3 << 16));
      v2 = rand () / ((float) RAND_MAX);
      srand (p2 | (p4 << 16));
      v3 = rand () / ((float) RAND_MAX);
      srand (p1 | (p4 << 16));
      v4 = rand () / ((float) RAND_MAX);

      printf ("%i %i %i %i %f %f %f %f \n", p1, p2, p3, p4, v1, v2, v3, v4);
      
      r += ((x * v1 + (1 - x) * v2) * (1 - y) + (x * v3 + (1 - x) * v4) * y) / (1 << (7 - i));

    }

    temp_color = new Color (r / 2, 0, 0);

    break;