diff options
Diffstat (limited to 'doc/shaders')
| -rw-r--r-- | doc/shaders/brush.txt | 126 | ||||
| -rw-r--r-- | doc/shaders/canvas.txt | 226 | ||||
| -rw-r--r-- | doc/shaders/util.txt | 25 |
3 files changed, 377 insertions, 0 deletions
diff --git a/doc/shaders/brush.txt b/doc/shaders/brush.txt new file mode 100644 index 0000000..8a5f672 --- /dev/null +++ b/doc/shaders/brush.txt @@ -0,0 +1,126 @@ +BRUSH SHADERS +============= + +Unless noted, these shaders were written to work on the brush itself. +Make sure "brush" is selected and "animate" is checked. + + +>> distressed texture brush + +Sample use of the "choice" function to get a random color. + +var char = choice(" abcdef ") +lex.bg = +choice("0124") +lex.fg = +choice("01234") +lex.char = char +lex.opacity = char == " " ? 0 : 1 + + + +>> foggy terrain brush + +var char = choice(" abcdef ") +lex.bg = choice([14,15]) +lex.fg = choice("367") +lex.char = char +lex.opacity = char == " " ? 0 : 1 + + + +>> mirror brush (left-right) + +NOTE: Animate this on the canvas, then draw: + +if (x > w/2) { + lex.assign( canvas.aa[y][w-x] ) +} + + + +>> mirror brush (up-down) + +NOTE: Animate this on the canvas, then draw: + +if (x > h/2) { + lex.assign( canvas.aa[h-y][x] ) +} + + + +>> rainbow stardust brush + +Uncheck BG and animate this to brush: + +lex.fg = hue(t) +lex.char = choice(" ,'.,.','****** ") + + + +>> noise brushes, works on a black background: + +lex.bg = max(5, yellow(randint(t))) +lex.opacity = lex.bg == colors.black ? 0 : 1 + + + +>> simple rainbow: + +if (lex.bg != 1) lex.bg = randint(t) +lex.opacity = lex.bg == colors.black ? 0 : 1 + + + +>> self-erasing: + +if (lex.bg != 1) lex.bg = yellow(randint(t)) +lex.opacity = lex.bg == colors.black ? 0 : 1 + + + +>> cycling rainbow brush + +if (lex.bg != 1) lex.bg = hue( all_color_hue_order.indexOf( color_names[ lex.bg ] ) + 1 ) +lex.opacity = lex.bg == colors.black ? 0 : 1 + + + +>> "stars" brush.. set your brush to paint just the character "#" + +if (lex.char == "#") { + lex.fg = hue(randint(15)) + lex.char = random() > 0.1 ? " " : "+@*.,\"+'*-"[randint(10)] +} + + + +>> use fg char to mask mask what you're drawing on the bg + +if (lex.char != "/") { lex.bg = 1 } + + + +>> sharded glitch brush + +Example: http://asdf.us/z/kksnvs.png + +Use on a brush: + +lex.bg = t/y/x +lex.opacity = lex.bg % 1 ? 0 : 1 + + + +>> incremental brush + +Set your brush to be the ^ character, square, about 10x10 +Draw "char" only +Then animate this shader on the canvas: + +if (lex.char=="^") { + lex.bg += 1 + lex.char = " " +} +lex.bg += 1 + + + diff --git a/doc/shaders/canvas.txt b/doc/shaders/canvas.txt new file mode 100644 index 0000000..d33f93b --- /dev/null +++ b/doc/shaders/canvas.txt @@ -0,0 +1,226 @@ +CANVAS SHADERS +============== + +These shaders were written to work on areas of canvas. +Make sure "canvas" is selected and "animate" is checked. + + +>> original shader.. + +lex.bg = hue((x+y*y+t/10)/20) +lex.fg = (x+y)%16 +lex.char = (y%2) ? ":" : "%" + + + +>> energy ball ascii shader + +d = dist(x/2+w/4, y, w/2, h/2) +an = angle(x/2+w/4, y, w/2,h/2)+t/4200 +r=10.2 + +if (d < r) lex.bg = randint(r) + +ll=abs(an|0)+"" +lex.char=ll[ll.length-1] + +if (d > r) { + lex.bg = randint(d) + lex.fg = randint(d) + lex.char = ll[ll.length-2] +} + + + +>> drifting fire + +t += sin(x/1000)*100000 +pos = y/h*6 + sin(x*3) - cos(y*t/10000-10) +pos = clamp(pos, 0, 6) +lex.bg = hue(pos) + + + +>> the "bJoel56" shader + +yy=y +x-=w/2 +y-=h/2 + +lex.bg = blue(yy/h+random()) +lex.fg = green(yy/h*4 + sin(x/100+random()/2)) // hue(t/1000)|0; + +var abcd=".'~:;!>+=icjtJYSGSXDQKHNWM"; +function chara (aa,n) { return aa[clamp(n*aa.length, 0, aa.length)|0] } +lex.char = chara(abcd, y/h*(5/3 + tan(x/100)+random()/1)) + + + +>> frog shader v2 + +t/=-100 +d = sinp( (dist(x/2+w/4, y, w/2, h/2) + t)/2 ) * 10 + +lex.char=',./>"ASE$#'[(floor(d))] +lex.fg = [1,3,9][floor(d*3)%3] +lex.bg=1 + + + +>> frog shader v3 + +// set period to like 0.2 for a normal circle +period = y/10 + +t/=-100 +d = sinp( (dist(x/2+w/4, y, w/2, h/2) + t) * period ) +dd = d * 10.5 +d3 = dd < 8 ? 0 : 1 + +lex.char=' .,"+/>OXEN'[(floor(dd))] +lex.fg = [3,9][floor(d3)] +lex.bg=1 + + + +>> spaceships + +many cool shaders are possible with this technique.. changing the char +gradient (lex.char=...) etc. i love how the dots move on v4. + +this is a variation that looks like a bunch of ships flying across the screen. +has a really cool 3d look to it cuz the rows move at different speeds. + +period = sin(y) + +t/=-100 +d = sinp( (dist(x/2+w/4, y, w/2, h/2) + t) * period ) +dd = d * 10.5 +d3 = dd < 8 ? 0 : 1 + +lex.char=' .,"+/>\^+'[(floor(dd))] +lex.fg = [3,9][floor(d3)] +lex.bg=1 + + + +>> concentric circles with a wavy "sunburst" pattern going around them + +x -= w/2 +y -= h/2 + +x /= h +y /= h/2 + 2 + +r = dist(x,y,0,0) +ang = angle(x,y,0,0) + +if (r < 0.6) { + if (abs(mod(sin((r*t)/100000000000) + ang*18,TWO_PI)) < 2) + lex.bg = 12 + else + lex.bg = 5 +} +else if (r < 0.65) + lex.bg = 4 +else if (abs(mod(sin((r*t)/100000000000) + ang*18,TWO_PI)) < 2) + lex.bg = 7 +else + lex.bg = 8 + + + +>> slash-based interference patterns + +if (x > h*2) x=h-x +y-=h/2 +t/=2000 + +if (sin(x-y*t) > 0) { + lex.bg=1 + lex.fg=4 + lex.char= Math.floor(x-y*10001+t)%2 ? '\/' : '\\' +} +else { + lex.bg=1 + lex.fg=9 + lex.char= Math.floor(3*x+y+t)%2 ? '\\' : ' ' +} + + + +>> sparkling stars + +if (lex.char != " ") { + lex.fg =floor( Math.random()*10 ) + var az="Xx+*" + lex.char=az[floor(az.indexOf(lex.char)+ t/10000000 +Math.random())%az.length] +} + + + +>> coogi x/y doodle + +xx=x +t/=1000 +x/=w/2 +y/=h/2 +y-=1 +x-=1 +x*=x-sin(y/t) +y*=1 + +lex.bg = 1 // gray( sin(x/(y/3-1)+t) + sin(y/4+t) ) +lex.fg = hue( sin((y/5)+t) - cos(x*t) *5 ) +lex.char = " _.,:;\"~| "[Math.round(xx*(y+1+(x+t/102)/4)*13)%13] + + + +>> glitch shader - produces odd combinations of fg/bg + +lex.char=String.fromCharCode(lex.char.charCodeAt(0)+1) +lex.bg+=7 +lex.fg+=5 + + + +>> dots / lines shader + +xx = ((t/10*x)*y/10)%8 +lex.bg = colors.black +lex.fg = green(x*3+y*5) +lex.char = ((xx%1) !== 0) ? " " : " .,;=+!@"[xx] + + + +>> munching squares horizon + +t/=100 +y+=10 +x-=w/2 +x/=y/10 +lex.bg=hue((x^y)+t) + + + +>> grayscale vertical interlacing + +First, make a canvas that's totally white. + +Run this shader: + +if (lex.bg == 0) { + lex.bg = ((x)%2) ? 15 : 14 +} + +Then set your brush to a white square. + +Run this shader w/ animate: + +if (lex.bg == 0) { + lex.bg = ((x)%2) ? 0 : 1 +} + + + + diff --git a/doc/shaders/util.txt b/doc/shaders/util.txt new file mode 100644 index 0000000..d192652 --- /dev/null +++ b/doc/shaders/util.txt @@ -0,0 +1,25 @@ +SHADER UTILITIES +================ + +These are little snippets which may be useful in writing your own shaders. + + + +>> basic way to slow the frame rate of a shader. + +window.zz=window.zz||0 +if(!(x+y)) zz++ +if (lex.bg != 1 && !(zz % 4)) { + ... +} + + +>> handy for brushes - use color to mask brush shape + +lex.opacity = lex.bg == colors.black ? 0 : 1 + + +Tip: Set to "animate brush", then use option+shift (alt+shift) to +copy color from the canvas. Brush will have the "shape" of the +copied color only. Can be a cool effect when used with fg/bg only. + |
