diff --git a/src/shaders/fragment.frag b/src/shaders/fragment.frag index e4810ef..21af4e1 100644 --- a/src/shaders/fragment.frag +++ b/src/shaders/fragment.frag @@ -6,18 +6,16 @@ const float TAU = (2. * PI); const float PHI = sqrt(5.) * 0.5 + 0.5; layout(location = 0) uniform float syncs[11]; layout(location = 20) uniform float fft_output[512]; // FFT_SIZE / 4 -layout(binding = 0) uniform sampler2D u_ShapesTex; // uniform sampler2D shapes texture // float u_time = syncs[0]; -vec3 palette(float t){ - vec3 a=vec3(0.46,0.2,0.94); - vec3 b=vec3(0.66,0.64,0.77); - vec3 c=vec3(0.91,0.62,0.97); - vec3 d=vec3(0.26,0.2,0.84); - return a+b*cos(6.28318*(c*t+d)); +vec3 palette(float t) { + vec3 a = vec3(0.46, 0.2, 0.94); + vec3 b = vec3(0.66, 0.64, 0.77); + vec3 c = vec3(0.91, 0.62, 0.97); + vec3 d = vec3(0.26, 0.2, 0.84); + return a + b * cos(6.28318 * (c * t + d)); } - vec2 getUV() { const vec2 scale = vec2(0.00104166667, 0.00185185185); return gl_FragCoord.xy * scale - 1.0; @@ -106,7 +104,12 @@ vec2 opU(vec2 d1, vec2 d2) { return (d1.x < d2.x) ? d1 : d2; } -// float opU( float d1, float d2 ) { return -max( -d1, -d2 ); } +float noyce(vec2 axial) { + if(mod(floor(syncs[0]), 2.) == 0.) { + return mix(noise(axial, 0.1), noise(axial, 0.2), sin(syncs[0] * 2.)); + } + return mix(noise(axial, 0.2), noise(axial, 0.1), sin(syncs[0] * 2.)); +} vec2 mapScene(in vec3 p) { @@ -120,7 +123,10 @@ vec2 mapScene(in vec3 p) { float distFromCenter = hexDistance(hex.axial); int fftIndex = int(clamp(distFromCenter + 1.0, 0.0, 511.0)); float fftVal = fft_output[fftIndex]; - float hexHeight = 1.0 + fftVal * 4.0; + float noise = noyce(hex.axial); + + // float hexHeight = 1.0 + fftVal * 5.0 + noise; + float hexHeight = 1.0 + noise; // Rotate individual hex tiles if needed vec3 r = hex.local; @@ -221,18 +227,6 @@ vec3 addPointLight(vec3 lightPos, vec3 lightColor, float intensity, vec3 worldPo return (diffuse + specular * fresnel) * shadow; } -float getAmbientOcc(vec3 p, vec3 n) { - float occ = 0.; - float weight = 1.; - for(int i = 0; i < 8; i++) { - float len = 0.01 + 0.02 * float(i * i); - float dist = mapScene(p + n * len).x; - occ += (len - dist) * weight; - weight *= 0.85; - } - return 1.0 - clamp(0.6 * occ, 0., 1.); -} - vec3 applyFog(vec3 col, float t, vec3 rd, vec3 lightDir, float fogAmount) { float syncsBass = clamp((syncs[1] + syncs[2] + syncs[3]), 0., 1.); @@ -245,82 +239,22 @@ vec3 applyFog(vec3 col, float t, vec3 rd, vec3 lightDir, float fogAmount) { return mix(col, fogColor, fogAmount2); } -// Point light with no shadow and radius based falloff -vec3 addPointLightNoShadow(vec3 lightPos, vec3 lightColor, float intensity, float radius, vec3 worldPos, vec3 viewDir, vec3 normal, float roughness) { - // Light vector from surface to light - vec3 lightDir = lightPos - worldPos; - float lightDistance = length(lightDir); - lightDir = normalize(lightDir); - - // Attenuation (radius based falloff) - float attenuation = clamp(intensity - lightDistance * lightDistance / (radius * radius), 0.0, 1.0); - - // Diffuse lighting (Lambert) - float NdotL = max(dot(normal, lightDir), 0.0); - vec3 diffuse = lightColor * NdotL * attenuation; - - // Specular lighting (Blinn-Phong) - vec3 halfDir = normalize(lightDir + (-viewDir)); - float NdotH = max(dot(normal, halfDir), 0.0); - float shininess = mix(128.0, 8.0, roughness); // Convert roughness to shininess - vec3 specular = lightColor * pow(NdotH, shininess) * attenuation; - - // Fresnel effect - vec3 F0 = vec3(0.04); // Base reflectance for dielectrics - vec3 fresnel = F0 + (1.0 - F0) * pow(clamp(1.0 - max(dot(halfDir, lightDir), 0.0), 0.0, 1.0), 5.0); - - // Soft shadows - //float shadow = softshadow(worldPos + normal * 0.01, lightDir, 0.02, lightDistance, 4.0); - - // Combine diffuse and specular with shadow - return diffuse + specular * fresnel; -} - -/*vec3 addPointLight(vec3 lightPos, vec3 lightColor, float intensity, vec3 worldPos, vec3 viewDir, vec3 normal) { - vec3 lightDir = normalize(lightPos - worldPos); - float lightDistance = length(lightPos - worldPos); - - // Attenuation - float attenuation = intensity / (1.0 + 0.1 * lightDistance + 0.01 * lightDistance * lightDistance); - - // Diffuse - float NdotL = max(dot(normal, lightDir), 0.0); - - // Specular (Blinn-Phong) - vec3 halfDir = normalize(lightDir - viewDir); - float NdotH = max(dot(normal, halfDir), 0.0); - float specular = pow(NdotH, 32.0); - - // Shadow - float shadow = softshadow(worldPos + normal * 0.01, lightDir, 0.01, lightDistance, 8.0); - - return lightColor * (NdotL + specular * 0.5) * attenuation * shadow; -} -*/ - vec3 shading(vec3 p, vec3 n, vec3 dir, float material) { - float shininess = 0.01; - + float shininess = 0.0; vec3 outMaterial = vec3(0.); if(material == 0.) { - outMaterial = vec3(0.4941, 0.4941, 0.4941); + outMaterial = palette(p.y * 0.1); + if(syncs[0] > 5.) { + outMaterial = vec3(0.5); + } + outMaterial = mix(palette(p.y * 0.1), vec3(0.5), abs(sin(syncs[0] * 0.2))); + shininess = 0.6; + } + + if(material == 1.) { + outMaterial = vec3(0.5); shininess = 0.6; - } else if(material == 1.) { - outMaterial = vec3(0.6196, 0.6118, 0.6118); - shininess = .7; - } else if(material == 2.) { - outMaterial = vec3(0.3255, 0.4784, 0.3255); - shininess = .2; - } else if(material == 3.) { - outMaterial = vec3(0.2471, 0.3059, 0.6314); - shininess = 1.0; - } else if(material == 4.) { - outMaterial = vec3(0.9961, 1.0, 0.9922); - shininess = .1; - } else if(material == 5.) { - outMaterial = vec3(0.9961, 1.0, 0.9922); - shininess = .3; } vec3 lights = vec3(0.); @@ -385,7 +319,7 @@ vec3 render(vec2 uv) { } //glow from the bottom - vec3 bGlowColor = palette(syncs[0] * .5); // color change + vec3 bGlowColor = palette(syncs[0] * .075); // color change float bGlowDistance = 0.3; vec3 p = camPos + t.x * rayDir; @@ -404,31 +338,4 @@ void main() { vec3 finalColor = render(getUV()); finalColor = postProcess(finalColor); o = vec4(finalColor, 1.); -} - -/* -vec3 render2(vec2 uv, float time) { - - vec3 res = vec3(.0); - - float pos = syncs[5]; - if (uv.x >= pos && uv.x <= pos+0.01 ) { - res += vec3(1.); - } - - //if (uv.x >= 0.0 && uv.x <= 0.01 ) { - // res += vec3(abs(syncs[4]*2)); - //} - - //res += vec3(0.1, 0.2, 0.3) * abs(syncs[2]*1.2); - - return res; -} - - -void main() { - vec2 uv = gl_FragCoord.xy * 2. / vec2(1920,1080); - vec3 col = render2(uv, u_time); - o = vec4(col,1.0); -} -*/ \ No newline at end of file +} \ No newline at end of file