From d6ee9002cef4f2eaf1e2ebe0b6f5a4dae7b3a354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petri=20J=C3=A4rvisalo?= Date: Fri, 24 May 2024 02:02:26 +0300 Subject: [PATCH] add readme and music originals (you'll need renoise for developing) + remove shader backup --- README.md | 12 ++ _shader.glsl | 272 --------------------------------------------- music/4k_ver1.xrns | Bin 0 -> 10864 bytes music/sounds.4kp | Bin 0 -> 18440 bytes 4 files changed, 12 insertions(+), 272 deletions(-) create mode 100644 README.md delete mode 100644 _shader.glsl create mode 100644 music/4k_ver1.xrns create mode 100644 music/sounds.4kp diff --git a/README.md b/README.md new file mode 100644 index 0000000..f71b055 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# 4k intro + +# Build + +1. Configiksi minified.config +2. klikkaa minify shaders +3. klikkaa build exe +4. profit. + +Huomattua: final.config yrittää pakata shaderit 2x, tämä ei hyvä siksi se näytti tyhjää kuvaa. +2 skenellä ja musalla buildatun intron koko nyt 3.457 kb +eli sinne mahtuu vaikka ja mitä vielä! diff --git a/_shader.glsl b/_shader.glsl deleted file mode 100644 index ab6f27a..0000000 --- a/_shader.glsl +++ /dev/null @@ -1,272 +0,0 @@ -// Compofiller Studio by Yzi 2018 -// -// Default template shader - -// This shader program is executed in the GPU (or a CPU-based emulation) for -// every pixel (i.e. "fragment" in OpenGL jargon) of every frame. - -// The "uniforms" are the same (i.e. uniform) for all pixels/fragments of the frame, -// and they come from the main program. -uniform float time; -uniform vec2 resolution; - -// If you choose to save some bytes and not use either of these uniforms, you have to -// do some additional tricks. -// * time : if you uncheck "[ ] Use time uniform" checkbox, time is in gl_Color.y (green component) -// * resolution : if you uncheck "[ ] Use resolution uniform" checkbox, you'll have to hard-code the resolution manually - -// The uniform-less version could look like this, 88200.0 being the time divider -//float time = gl_Color.y * 256.0 * (65536.0 / 88200.0); -//vec2 resolution = vec2(1280.0, 720.0); - -// Uncomment this to use the texture-based features -uniform sampler2D texture_sampler; - -// Uncomment this to use the texture-based features -uniform sampler2D texts; - -// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. -// Created by S. Guillitte 2015 - -float zoom=1.; - -vec2 cmul( vec2 a, vec2 b ) { return vec2( a.x*b.x - a.y*b.y, a.x*b.y + a.y*b.x ); } -vec2 csqr( vec2 a ) { return vec2( a.x*a.x - a.y*a.y, 2.*a.x*a.y ); } - - -mat2 rot(float a) { - return mat2(cos(a),sin(a),-sin(a),cos(a)); -} - -vec2 iSphere( in vec3 ro, in vec3 rd, in vec4 sph )//from iq -{ - vec3 oc = ro - sph.xyz; - float b = dot( oc, rd ); - float c = dot( oc, oc ) - sph.w*sph.w; - float h = b*b - c; - if( h<0.0 ) return vec2(-1.0); - h = sqrt(h); - return vec2(-b-h, -b+h ); -} - -float map(in vec3 p) { - - float res = 0.; - - vec3 c = p; - for (int i = 0; i < 10; ++i) { - p =.7*abs(p)/dot(p,p) -.7; - p.yz= csqr(p.yz); - p=p.zxy; - res += exp(-19. * abs(dot(p,c))); - - } - return res/2.; -} - - - -vec3 raymarch( in vec3 ro, vec3 rd, vec2 tminmax ) -{ - float t = tminmax.x; - float dt = .02; - //float dt = .2 - .195*cos(iTime*.05);//animated - vec3 col= vec3(0.); - float c = 0.; - for( int i=0; i<64; i++ ) - { - t+=dt*exp(-2.*c); - if(t>tminmax.y)break; - - c = map(ro+t*rd); - - col = .99*col+ .08*vec3(c*c, c, c*c*c);//green - //col = .99*col+ .08*vec3(c*c*c, c*c, c);//blue - } - return col; -} - - -void CoolSphere( out vec4 fragColor, in vec2 fragCoord ) -{ - float time = time; - vec2 q = fragCoord.xy / resolution.xy; - vec2 p = -1.0 + 2.0 * q; - p.x *= resolution.x/resolution.y; - vec2 m = vec2(0.); - m-=.5; - - // camera - - vec3 ro = zoom*vec3(4.); - ro.yz*=rot(m.y); - ro.xz*=rot(m.x+ 0.1*time); - vec3 ta = vec3( 0.0 , 0.0, 0.0 ); - vec3 ww = normalize( ta - ro ); - vec3 uu = normalize( cross(ww,vec3(0.0,1.0,0.0) ) ); - vec3 vv = normalize( cross(uu,ww)); - vec3 rd = normalize( p.x*uu + p.y*vv + 4.0*ww ); - - - vec2 tmm = iSphere( ro, rd, vec4(0.,0.,0.,2.) ); - - // raymarch - vec3 col = raymarch(ro,rd,tmm); - if (tmm.x<0.)col = texture2D(texture_sampler, rd).rgb; - else { - vec3 nor=(ro+tmm.x*rd)/2.; - nor = reflect(rd, nor); - float fre = pow(.5+ clamp(dot(nor,rd),0.0,1.0), 3. )*1.3; - col += texture2D(texture_sampler, nor).rgb * fre; - - } - - // shade - - col = .5 *(log(1.+col)); - col = clamp(col,0.,1.); - fragColor = vec4( col, 1.0 ); - -} - - -float bar = time; // this is just a coding nicety to highlight that in some calculations we want musical time ... you wouldn't want to have this in a real prod's final version -// --- noise from procedural pseudo-Perlin (better but not so nice derivatives) --------- - // ( adapted from IQ ) - -float gTime = 0.; - -float sdBox( vec3 p, vec3 b ) -{ - vec3 q = abs(p) - b; - return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0); -} - -float box(vec3 pos, float scale) { - pos *= scale; - float base = sdBox(pos, vec3(.4,.4,.1)) /1.5; - pos.xy *= 5.; - pos.y -= 3.5; - pos.xy *= rot(.75); - float result = -base; - return result; -} - -float box_set(vec3 pos, float time) { - vec3 pos_origin = pos; - pos = pos_origin; - pos .y += sin(gTime * 0.4) * 2.5; - pos.xy *= rot(.8); - float box1 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); - pos = pos_origin; - pos .y -=sin(gTime * 0.4) * 2.5; - pos.xy *= rot(.8); - float box2 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); - pos = pos_origin; - pos .x +=sin(gTime * 0.4) * 2.5; - pos.xy *= rot(.8); - float box3 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); - pos = pos_origin; - pos .x -=sin(gTime * 0.4) * 2.5; - pos.xy *= rot(.8); - float box4 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5); - pos = pos_origin; - pos.xy *= rot(.8); - float box5 = box(pos,.5) * 6.; - pos = pos_origin; - float box6 = box(pos,.5) * 6.; - float result = max(max(max(max(max(box1,box2),box3),box4),box5),box6); - return result; -} - -float map(vec3 pos, float time) { - vec3 pos_origin = pos; - float box_set1 = box_set(pos, time); - - return box_set1; -} - - -void mainImage2( out vec4 fragColor, in vec2 fragCoord ) { - vec2 p = (fragCoord.xy * 2. - resolution.xy) / min(resolution.x, resolution.y); - vec3 ro = vec3(0., -0.2 ,time * 4.); - vec3 ray = normalize(vec3(p, 1.5)); - ray.xy = ray.xy * rot(sin(time * .03) * 5.); - ray.yz = ray.yz * rot(sin(time * .05) * .2); - float t = 0.1; - vec3 col = vec3(0.); - float ac = 0.0; - - - for (int i = 0; i < 99; i++){ - vec3 pos = ro + ray * t; - pos = mod(pos-2., 4.) -2.; - gTime = time -float(i) * 0.01; - - float d = map(pos, time); - - d = max(abs(d), 0.01); - ac += exp(-d*23.); - - t += d* 0.55; - } - - col = vec3(ac * 0.02); - - col +=vec3(0.,0.2 * abs(sin(time)),0.5 + sin(time) * 0.2); - - - fragColor = vec4(col ,1.0 - t * (0.02 + 0.02 * sin (time))); -} - -float noise3( vec3 x ) { - vec3 p = floor(x),f = fract(x); - - f = f*f*(3.-2.*f); // or smoothstep // to make derivative continuous at borders - -#define hash3(p) fract(sin(1e3*dot(p,vec3(1,57,-13.7)))*4375.5453) // rand - - return mix( mix(mix( hash3(p+vec3(0,0,0)), hash3(p+vec3(1,0,0)),f.x), // triilinear interp - mix( hash3(p+vec3(0,1,0)), hash3(p+vec3(1,1,0)),f.x),f.y), - mix(mix( hash3(p+vec3(0,0,1)), hash3(p+vec3(1,0,1)),f.x), - mix( hash3(p+vec3(0,1,1)), hash3(p+vec3(1,1,1)),f.x),f.y), f.z); -} - -#define noise(x) (noise3(x)+noise3(x+11.5)) / 2. // pseudoperlin improvement from foxes idea - -void mainImage3( out vec4 O, vec2 U ) // ------------ draw isovalues -{ - vec2 R = resolution.xy; - float n = noise(vec3(U*8./R.y, .1*time)), - v = sin(6.28*10.*n), - t = time; - - v = smoothstep(1.,0., .5*abs(v)/fwidth(v)); - - O = mix( exp(-33./R.y )* texture2D( texture_sampler, (U+vec2(1,sin(t)))/R), // .97 - .5+.5*sin(12.*n+vec4(0,2.1,-2.1,0)), - v ); - -} - -void main(void) -{ - vec3 l; - - float abstime = abs(time); - if (abstime < 10.0) - CoolSphere(gl_FragColor, gl_FragCoord.xy); - else if (abstime < 15.0) - { - mainImage2(gl_FragColor, gl_FragCoord.xy); - } - else - { - mainImage3(gl_FragColor, gl_FragCoord.xy); - } - - vec2 texttop = vec2(0., -.35), pt = (gl_FragCoord.xy / resolution) - texttop; - if (pt.y > 0.) l = gl_FragColor + texture2D(texts, pt); - gl_FragColor = vec4(l * (1.0), 1.0); - -} diff --git a/music/4k_ver1.xrns b/music/4k_ver1.xrns new file mode 100644 index 0000000000000000000000000000000000000000..afd8632829be1fe292bc276c77411052fe3d751b GIT binary patch literal 10864 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 b@W+Zz|N70Smg)s!TooaJyTFy53s?Gofr}mj literal 0 HcmV?d00001 diff --git a/music/sounds.4kp b/music/sounds.4kp new file mode 100644 index 0000000000000000000000000000000000000000..a80ff9994cb392e793f1bfbdd8881b857faa2a0c GIT binary patch literal 18440 zcmeHOTTj$L6h1Sh+bt>yh^TjJxH<`i=O+2X-@pI8T9Adb6-K&sjNf!yiDP3W|4fJevmN>upBe;E z>MxpH0II*q1*rNz>#+V(hyErPuv-6=L4M+TzefH_N6Hv@obkT+lv4u#I;Ay(T+lR> zgN}_)ds7wO8=rIDfqz4>cgjMxoA|Fp`D*@);P)v0dOjs}IHYWKzyrpU43xe69Mmu6 zApTdLl$}cyaUfmR<6C?)DJ@jxEZw5HoUb(3yWEKO&4Z#A5jZCTgo%SooaPWa9><1vQ48WznYe*5qY3CF8 zIU;YW`u&lP@P3bNY$X=DUPiu{BfY=rRk~b1gEAs;c@QA50Cjf9D1Gt|GTwzgNWioSm-c<3x0>+~cv$`J@BU1)(2*-IMeWYrnQM2|e`ndxNa4 zU-aK&4O~k?>#8$ly&t#}!)MyzNkrf>AV5Cs?yPZHsk2aj|EH`BUWxIp*o3Y!=2cIB zB&4B*==r_2U+@ZiN)xSEA5_4%6j|>Ft@vsUK1^CeSb_ENanc$>x$DrA#fy>7PkZU# zme^P76VEGSfnmn}A}|~x zkO2aQ{J(?z&tS4JB_fbA0*3s*i~LV{A}|~xkO2aQ{2xUAXE0fq5)nul0Ym-|A^%gJ z2n>e^WPpGn|A&$P8B7+YLxp80K%l$s?Ro(F(bo2y`0Ot~N=WeHtNuQ`J;t}i7elVli*ExP_1)TU V$Z7F4^_3Uh`6~|r0+1mB{{i6(+6Vvu literal 0 HcmV?d00001