fixes
This commit is contained in:
68
shader.glsl
68
shader.glsl
@ -32,17 +32,16 @@ float noise(vec2 p, float scale )
|
||||
hash( i + vec2(1.0,1.0) ), u.x), u.y);
|
||||
}
|
||||
|
||||
float hash2( vec2 p ) {
|
||||
float h = dot(p,vec2(127.1,311.7));
|
||||
return fract(sin(h)*43758.5453123);
|
||||
}
|
||||
float noise2( in vec2 p ) {
|
||||
vec2 i = floor( p ), f = fract( p ), u = f*f*(3.0-2.0*f);
|
||||
return -1.0+2.0*mix( mix( hash( i + vec2(0.0,0.0) ),
|
||||
hash( i + vec2(1.0,0.0) ), u.x),
|
||||
mix( hash( i + vec2(0.0,1.0) ),
|
||||
hash( i + vec2(1.0,1.0) ), u.x), u.y);
|
||||
}
|
||||
|
||||
float displacement( vec3 p )
|
||||
{
|
||||
return noise(10.*p.xy+u_time+1e3, 0.2) + 0.5*noise(10.*(p.xy+2.0)-u_time+1e3, .2);
|
||||
return -1.0+2.0*mix( mix( hash2( i + vec2(0.0,0.0) ),
|
||||
hash2( i + vec2(1.0,0.0) ), u.x),
|
||||
mix( hash2( i + vec2(0.0,1.0) ),
|
||||
hash2( i + vec2(1.0,1.0) ), u.x), u.y);
|
||||
}
|
||||
|
||||
/////////////////
|
||||
@ -148,7 +147,7 @@ float sea_octave(vec2 uv, float choppy) {
|
||||
return pow(1.0-pow(wv.x * wv.y,0.65),choppy);
|
||||
}
|
||||
|
||||
vec2 map(vec3 p)
|
||||
vec2 map(vec3 p, int displace)
|
||||
{
|
||||
float mat = 0.,
|
||||
// Ring boxes
|
||||
@ -219,26 +218,35 @@ vec2 map(vec3 p)
|
||||
stepDist += .2;
|
||||
}
|
||||
if (d==d2) mat = 2.0;
|
||||
|
||||
d2 = (p.y + 4.25) + 1.5*noise((vec2((p.x*.04),(p.z-40.)*.04))+100., 15.);
|
||||
|
||||
// sand
|
||||
d2 = (p.y + 4.25) + noise((vec2((p.x*.04),(p.z-40.)*.04))+100., 15.)*1.5;
|
||||
d = min(d,d2);
|
||||
if (d==d2) mat = 3.0;
|
||||
|
||||
d2 = 1e3;
|
||||
float h = 0.0, d3, choppy=4., freq=0.6, amp=.2;
|
||||
vec2 uv = p.xy;
|
||||
for(int i = 0; i < 5; i++) {
|
||||
d3 = sea_octave((uv+u_time)*freq,choppy);
|
||||
d3 += sea_octave((uv-u_time)*freq,choppy);
|
||||
h += d3 * amp;
|
||||
uv *= mat2(1.6,1.2,-1.2,1.6); freq *= 1.9; amp *= 0.22;
|
||||
choppy = mix(choppy,1.0,0.4);
|
||||
}
|
||||
d2 = max(-sdCappedCylinder(p, 2.0, clamp((2.0 - (u_time*2.0 - 2.0*23.0)),0.,2.0)), sdCappedCylinder(p, .025, 1.6) - h*0.15);
|
||||
|
||||
d2 = max(d2, sdCappedCylinder ( p, 0.3, 1.6));
|
||||
if (displace == 1) {
|
||||
vec2 uv = p.xy;
|
||||
for(int i = 0; i < 4; i++) {
|
||||
d3 = sea_octave((uv+u_time)*freq,choppy);
|
||||
d3 += sea_octave((uv-u_time)*freq,choppy);
|
||||
h += d3 * amp;
|
||||
uv *= mat2(1.6,1.2,-1.2,1.6); freq *= 1.9; amp *= 0.22;
|
||||
choppy = mix(choppy,1.0,0.4);
|
||||
}
|
||||
}
|
||||
float cs = sdCappedCylinder(p, .025, 1.6) - h*0.15;
|
||||
if (u_time < 25.) {
|
||||
d2 = max(-sdCappedCylinder(p, 2.0, clamp((2.0 - (u_time*2.0 - 2.0*23.0)),0.,2.3)), cs);
|
||||
} else {
|
||||
d2 = cs;
|
||||
}
|
||||
d2 = max(d2, sdCappedCylinder ( p, 0.3, 1.7));
|
||||
d = min(d, d2);
|
||||
if (d==d2) mat = 1.0;
|
||||
if (d==d2) mat = 1.0;
|
||||
|
||||
return vec2( d, mat );
|
||||
}
|
||||
|
||||
@ -250,7 +258,7 @@ float rayMarch(vec3 ro, vec3 rd) {
|
||||
float d,t = 0.; // total distance travelled
|
||||
// Raymarching
|
||||
for (int i = 0; i < 90; i++) {
|
||||
d = map(ro + rd * t).x; // Get distance to objects
|
||||
d = map(ro + rd * t, 0).x; // Get distance to objects
|
||||
t += d; // "march" the ray
|
||||
if (abs(d) < .002 || t > 400.) break;
|
||||
}
|
||||
@ -258,10 +266,10 @@ float rayMarch(vec3 ro, vec3 rd) {
|
||||
}
|
||||
vec3 getNormal(vec3 p) {
|
||||
vec2 e = vec2(.01, 0.);
|
||||
vec3 n = map(p).x - vec3(
|
||||
map(p-e.xyy).x,
|
||||
map(p-e.yxy).x,
|
||||
map(p-e.yyx).x);
|
||||
vec3 n = map(p, 1).x - vec3(
|
||||
map(p-e.xyy,1).x,
|
||||
map(p-e.yxy,1).x,
|
||||
map(p-e.yyx,1).x);
|
||||
return normalize(n);
|
||||
}
|
||||
|
||||
@ -374,7 +382,7 @@ vec3 sceneGate(vec2 uv)
|
||||
// Lighting
|
||||
vec3 p = ro + rd * d,
|
||||
n = getNormal(p);
|
||||
float mat = map(p).y,
|
||||
float mat = map(p,0).y,
|
||||
|
||||
// Light 1 Arguments
|
||||
// 1: Ray starting point
|
||||
@ -390,7 +398,7 @@ vec3 sceneGate(vec2 uv)
|
||||
col += dif * light2Color;
|
||||
|
||||
// indirect lightning -> vec3 in normalize is light direction
|
||||
col += indirColor * clamp( dot( getNormal(p), normalize(vec3(0. , 1., 10.))), 0., 1.);
|
||||
col += indirColor * clamp( dot( n, normalize(vec3(0. , 1., 10.))), 0., 1.);
|
||||
|
||||
if(mat==0.)
|
||||
col *= vec3(.3);
|
||||
|
||||
Reference in New Issue
Block a user