Last active
April 23, 2020 23:40
-
-
Save chasemarangu/36ce0fe4332072e3da05f57696ad5bd2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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