Metaball

This example is for Processing (BETA) version 154+. If you have a previous version, use the examples included with your software. If you see any errors or have comments, please let us know.

Plasma Demo Effect by luis2048.

Cycles of changing colours warped to give an illusion of liquid, organic movement.Colors are the sum of sine functions and various formulas. Based on formula by Robert Klep.


int pixelSize=2;
PGraphics pg;

void setup(){
  size(640, 360);
  // Create buffered image for plasma effect
  pg = createGraphics(160, 90, P2D);
  colorMode(HSB);
  noSmooth();
}

void draw()
{
  float  xc = 25;

  // Enable this to control the speed of animation regardless of CPU power
  // int timeDisplacement = millis()/30;

  // This runs plasma as fast as your computer can handle
  int timeDisplacement = frameCount;

  // No need to do this math for every pixel
  float calculation1 = sin( radians(timeDisplacement * 0.61655617));
  float calculation2 = sin( radians(timeDisplacement * -3.6352262));
  
  // Output into a buffered image for reuse
  pg.beginDraw();
  pg.loadPixels();

  // Plasma algorithm
  for (int x = 0; x < pg.width; x++, xc += pixelSize)
  {
    float  yc    = 25;
    float s1 = 128 + 128 * sin(radians(xc) * calculation1 );

    for (int y = 0; y < pg.height; y++, yc += pixelSize)
    {
      float s2 = 128 + 128 * sin(radians(yc) * calculation2 );
      float s3 = 128 + 128 * sin(radians((xc + yc + timeDisplacement * 5) / 2));  
      float s  = (s1+ s2 + s3) / 3;
      pg.pixels[x+y*pg.width] = color(s, 255 - s / 2.0, 255);
    }
  }   
  pg.updatePixels();
  pg.endDraw();

  // display the results
  image(pg,0,0,width,height); 

}