X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=sdr%2Fraydungeon.p.glsl;h=d6d84425c753c35467ee69e05963bfc0e20fa4db;hb=HEAD;hp=c10be1810c7d5902a6f94526e46a663549bc535c;hpb=1486aefc491239e021ce872818149364585a4bf5;p=raydungeon diff --git a/sdr/raydungeon.p.glsl b/sdr/raydungeon.p.glsl index c10be18..d6d8442 100644 --- a/sdr/raydungeon.p.glsl +++ b/sdr/raydungeon.p.glsl @@ -3,8 +3,8 @@ uniform mat4 matrix; uniform mat3 dirmatrix; #define DIST_THRES 1e-3 -#define MAX_ITER 250 -#define MAX_STEP 1.0 +#define MAX_ITER 128 +#define MAX_STEP 0.5 vec3 raymarch(inout vec3 p, in vec3 dir, out float depth); vec3 shade(in vec3 p, in vec3 dir, in float dist, in float total_dist); @@ -16,6 +16,12 @@ vec3 primray(in vec2 uv, out vec3 org); float boxdist(in vec3 p, in vec3 b); float sphdist(in vec3 p, in vec3 sp, in float srad); +float fbm(vec3 v, int noct); +float snoise(vec3 v); + +float eval_sdf_gen(in vec3 p); + + void main() { vec2 uv = gl_TexCoord[0].st; @@ -82,6 +88,11 @@ vec3 backdrop(in vec3 dir) return vec3(0.1, 0.1, 0.1); } +float eval_sdf(in vec3 p) +{ + return eval_sdf_gen(p) + fbm(p, 4) * 0.05; +} + #define DELTA 1e-4 vec3 eval_grad(in vec3 p, float dist) { @@ -115,3 +126,124 @@ float sphdist(in vec3 p, in vec3 sp, in float srad) { return length(p - sp) - srad; } + +#ifdef TEST_SDF +float eval_sdf_gen(in vec3 p) +{ + return boxdist(p - vec3(14.000000, 0.0, 14.000000), vec3(0.550000, 1.0, 4.550000)); +} +#endif + +float fbm(vec3 v, int noct) +{ + float val = 0.0; + float f = 1.0; + for(int i=0; i