kamera ajotukset + valo

This commit is contained in:
2024-08-02 16:29:20 +03:00
parent 68820b5366
commit 405f72dce6
3 changed files with 74 additions and 65 deletions

View File

@ -112,7 +112,7 @@ float calcFactor (float startTime)
// Animate ring movements
vec3 ringAnim(vec3 p) {
for (float i = 0.; i < 7.; i++) {
float rotateDelay = STARTDELAY + (i * 2.), o=1.;
float rotateDelay = STARTDELAY + (i * 3.), o=1.;
if(u_time > rotateDelay) {
if(mod(i,2.) >= 1.) o = -1.;
p.xy *= rot2D(calcFactor(rotateDelay)*o);
@ -191,7 +191,7 @@ vec3 map(vec3 p, int displace)
choppy = mix(choppy,1.0,0.4);
}
}
d2 = max(-sdCappedCylinder(p, 2.0, min((2.0 - (u_time - 23.0)*3.),2.3)), sdCappedCylinder(p, .025, 1.6) - h*0.15);
d2 = max(-sdCappedCylinder(p, 2.0, min((1.7 - (u_time - 28.9)*2.5),2.3)), sdCappedCylinder(p, .025, 1.6) - h*0.15);
d2 = max(d2, sdCappedCylinder ( p, 0.3, 1.7));
d = min(d, d2);
if (d==d2) {
@ -216,7 +216,7 @@ vec3 map(vec3 p, int displace)
if (i == 1.) anRot += .2;
if (i == 7.) anRot -= .2;
q.xy = rot2D(anRot) * q.xy;
float rotateDelay = STARTDELAY + (i - 1.) * 2. + 1.5;
float rotateDelay = STARTDELAY + (i - 1.) * 3. + 1.5;
// We can now call each prism by it's index
// draw all except the middle bottom prism
if (i > 0.) {
@ -266,9 +266,10 @@ vec3 getNormal(vec3 p) {
return no(n);
}
float getLight(vec3 p, vec3 lightPos, float intensity, float shadow, vec3 n) {
float getLight(vec3 p, vec3 lightPos, float intensity, float shadow, vec3 n, float atte) {
vec3 l = no(lightPos - p);
float dif = cl(dot(n, l), 0., intensity),
float len = length( lightPos - p ); // Distance from the light to the surface point.
float dif = cl(dot(n, l)*intensity, 0., intensity) * 1.0 / (1.0 + atte*len),
d = rayMarch(p+n*.0025, l, 1);
if(d<length(lightPos-p)) dif *= shadow;
return dif;
@ -322,7 +323,7 @@ vec3 postProcess(vec3 col) {
col = smoothstep(0., 1., col);
// fade out at the end
col += 1.0 - vec3(cl((31. - u_time)*.5, 0., 1.0));
col += 1.0 - vec3(cl((46. - u_time)*.5, 0., 1.0));
return col;
}
@ -335,18 +336,23 @@ vec3 cameraPos()
if (u_time > 10.5) cPos = vec3(2.,-1.,1.);
// zoom away for 2nd glyph animation
if (u_time > 12.) cPos = vec3(-1., -.7, 4.);
if (u_time > 13.5) {
if (u_time > 14.5) {
cPos = vec3(0., 0., 4.);
cPos.yz *= rot2D(-0.6-(cos(u_time-15.))*0.2);
cPos.xz *= rot2D(sin((u_time-16.5)*0.3));
cPos.yz *= rot2D(-0.6-(cos(u_time-15.))*0.05);
cPos.xz *= rot2D(sin((u_time-16.5)*0.1));
}
if (u_time > 19.5)
if (u_time > 23.5)
{
cPos = vec3(3., -.7, 4.);
}
if (u_time > 21.8) {
cPos.yz *= rot2D(((1.-cos(u_time-21.8))*-0.025));
cPos.xz *= rot2D(sin((u_time-21.8)*0.07));
if (u_time > 32.5)
{
cPos = vec3(-20.,10.,50.);
}
if (u_time > 36.5) {
cPos = vec3(3., -.7, 4.);
cPos.yz *= rot2D(((1.-cos(u_time-36.5))*-0.025));
cPos.xz *= rot2D(sin((u_time-36.5)*0.07));
}
return cPos;
@ -358,8 +364,8 @@ vec3 cameraPointAt() {
if (u_time > 10.5) p = vec3(1.7,-1.1,0.);
// look gate at distance
if(u_time > 12.) p = vec3(0.);
if(u_time > 13.5) p = mix(vec3(1.5,1.4,0.0),vec3(-1.5,1.4,0.0), (u_time-13.5)*0.13);
if(u_time > 19.5) p = vec3(0.);
if(u_time > 14.5) p = mix(vec3(1.5,1.4,0.0),vec3(-1.5,1.4,0.0), (u_time-16.5)*0.13);
if(u_time > 23.5) p = vec3(0.);
return p;
}
@ -381,7 +387,7 @@ vec3 sceneGate(vec2 uv)
{
// Initialization
vec3 ro = cameraPos(),
rd = getCameraRayDir(uv, ro, cameraPointAt(), cl((28.-u_time)*-2.,2.,25.)),
rd = getCameraRayDir(uv, ro, cameraPointAt(), cl((43.-u_time)*-2.,2.,25.)),
col = vec3(0.);
float d = rayMarch(ro, rd,0), mat = 0.;
@ -397,15 +403,16 @@ vec3 sceneGate(vec2 uv)
// 4: Shadow intensity
// Lights
col += vec3(0.82, 0.5, 0.9) * getLight(p, vec3( 10., 15., 25.), 1., .2,n);
col += vec3(0.79, 0.66, 0.43) * getLight(p, vec3( 4., 2., -15.), 1., 1.,n);
col += vec3(0.82, 0.5, 0.9) * getLight(p, vec3( 10., 15., 25.), 1., .2,n,1e-10);
col += vec3(0.79, 0.66, 0.43) * getLight(p, vec3( 4., 2., -15.), 1., 1.,n,1e-10);
col += vec3(0.0, 0.06, 0.7) * getLight(p, vec3( 0., 0., 5.),cl((u_time-29.0)*100.,0.,50.), 0.0,n,3.1);
// indirect lightning -> vec3 in normalize is light direction
col += vec3(0.29, 0.28, 0.33) * cl( dot( n, no(vec3(0. , 1., 10.))), 0., 1.);
if(mat==0.)
col *= vec3(0.2, 0.3, 0.3) + addSpecular(n,rd,.5, 2.);
if(mat==1.)
col = getSeaColor(p, n, no(vec3(0.0,0.3,0.8)),no(rd));
col *= getSeaColor(p, n, no(vec3(0.0,0.3,0.8)),no(rd));
if(mat==2.)
col *= vec3(0.7, 0.7, 0.4) + noise (p.xz*3.+1.5, 0.1,0);
if(mat==3.)