Skip to content

Instantly share code, notes, and snippets.

@cmarangu
Last active April 23, 2020 23:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cmarangu/36ce0fe4332072e3da05f57696ad5bd2 to your computer and use it in GitHub Desktop.
Save cmarangu/36ce0fe4332072e3da05f57696ad5bd2 to your computer and use it in GitHub Desktop.
// Frames to Rolling Shutter
// Chase Marangu aka C010011012 aka cmarangu
// 2020 4/22
// SET NUMBER OF FRAMES HERE
int FRAMES = 75;
// optional multisampling - 1 is grainy, 10 is blurry and lags when generating
// u find the balance
int SAMPLES = 1;
int C = 0;
int index = 0;
PImage[] original;
PImage[] imgs;
void setup () {
// SET BELOW TO WIDTH AND HEIGHT OF YOUR VIDEO FRAMES (in pixels)
// SET BELOW TO WIDTH AND HEIGHT OF YOUR VIDEO FRAMES (in pixels)
// SET BELOW TO WIDTH AND HEIGHT OF YOUR VIDEO FRAMES (in pixels)
// SET BELOW TO WIDTH AND HEIGHT OF YOUR VIDEO FRAMES (in pixels)
// SET BELOW TO WIDTH AND HEIGHT OF YOUR VIDEO FRAMES (in pixels)
// SET BELOW TO WIDTH AND HEIGHT OF YOUR VIDEO FRAMES (in pixels)
// SET BELOW TO WIDTH AND HEIGHT OF YOUR VIDEO FRAMES (in pixels)
// SET BELOW TO WIDTH AND HEIGHT OF YOUR VIDEO FRAMES (in pixels)
size(500, 500);
original = new PImage[FRAMES];
imgs = new PImage[FRAMES];
for (int i=0; i<75; ++i) {
String nm = ""+i;
while (nm.length() < 5) { nm = "0"+nm; }
original[i] = loadImage("theinput/c"+nm+".png");
original[i].loadPixels();
}
}
void draw () {
if (C < FRAMES) {
imgs[C] = createImage(width, height, RGB);
if (index == 0) { imgs[C].loadPixels(); }
//imgs[C].loadPixels();
float x1, y1;
int index1;
float C1;
float C2;
int col2;
for (int jndex=0; jndex<width*height/1*SAMPLES; ++jndex) {
index1 = index%(width*height);
// add random(1) to distribute in the
// pixelx/pixely/framet cube of positions
// like distributed raytracing
// advanced - instead of blur, we are probability-multisampling
// to handle antialiasing in an "unbiased" manner
x1 = (float)index1 %width +random(1);
y1 = (float) floor(index1/width) +random(1);
C1 = (float)C +random(1);
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// CUSTOM SHUTTER FILTER EXAMPLES HERE
// C2 is warped time, x1 and y1 is pixel coords
// C1 is frame index,
// C1/FRAMES is percentage from 0 to 1 of how far thru the animation
// 0% = 100% for loop gifs
// "C2 -= blah" filters can stack
C2 = C1;
// classic
C2 -= y1/height*FRAMES*2;
// wavy
//C2 -= sin(x1/width*TAU*13-200+C1/FRAMES*TAU*2)*FRAMES/24;
// logarithmic circle rings
//C2 -= log(sqrt(sq(x1-width/2)+sq(y1-height/2)))/TAU*FRAMES*2;
// pinwheel
//C2 -= atan2(y1-height/2, x1-width/2)/TAU*FRAMES*2;
// checkerboard
//C2 -= sin(x1/19)*sin(y1/19)*FRAMES/13*y1/height*4;
// set the new pixel color and some other gibberish
col2 = original[
int(C2+floor(abs(C2/FRAMES)+9)*FRAMES)%FRAMES
].pixels[(int(y1)*width+int(x1))%(width*height)];
if (floor(index/width/height) < 1) {
imgs[C].pixels[index1] = color(
red(col2)/SAMPLES, green(col2)/SAMPLES, blue(col2)/SAMPLES
);
}
else {
imgs[C].pixels[index1] = color(
red(imgs[C].pixels[index1]) + red(col2)/SAMPLES,
green(imgs[C].pixels[index1]) + green(col2)/SAMPLES,
blue(imgs[C].pixels[index1]) + blue(col2)/SAMPLES
);
}
++index;
if (index >= width*height*SAMPLES) {
break;
}
}
imgs[C].updatePixels();
image(imgs[C], 0, 0);
if (index >= width*height) {
//imgs[C].updatePixels();
// filename - 5 digits excluding leading "c" and extension
String nym = ""+C;
while (nym.length() < 5) {
nym = "0"+nym;
}
nym = "c"+nym;
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
// UNCOMMENT BELOW LINE TO SAVE FRAMES (in png or other)
//imgs[C].save("theoutput/"+nym+".png");
C++;
index = 0;
}
}
else {
image(imgs[C%FRAMES], 0, 0);
C++;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment