Here is a few pictures:
Wow! Excellent! Can you show DE() for these samples?
My script for the above pictures is a *terrible* mess, but the basic loop is:
while (r<10 && n < 14) {
if (n==iter)break;
if (n<6) {
boxFold(z,dz);
sphereFold(z,dz);
z = Scale*z;
dz*=abs(Scale);
} else {
octo(z,dz);
r = length(z);
powN2(z,r,dz);
}
r = length(z);
n++;
}
If you want to see the whole script, it is here:
#include "DE-Raytracer.frag"
#include "MathUtils.frag"
#group Hybrid
// Inspired by the Spudsville systems
uniform float Scale; slider[-5.00,2.0,4.00]
// Scaling center
uniform vec3 Offset; slider[(0,0,0),(1,1,1),(5,5,5)]
mat3 rot;
void init() {
}
uniform float fixedRadius2; slider[0.1,1.0,2.3]
uniform float minRadius2; slider[0.0,0.25,2.3]
void sphereFold(inout vec3 z, inout float dz) {
float r2 = dot(z,z);
if (r2< minRadius2) {
float temp = (fixedRadius2/minRadius2);
z*= temp;
dz*=temp;
} else if (r2<fixedRadius2) {
float temp =(fixedRadius2/r2);
z*=temp;
dz*=temp;
}
}
uniform float foldingValue; slider[0.0,2.0,5.0]
uniform float foldingLimit; slider[0.0,1.0,5.0]
void boxFold2(inout vec3 z, inout float dz) {
if (z.x>foldingLimit) { z.x = foldingValue-z.x; } else if (z.x<-foldingLimit) z.x = -foldingValue-z.x;
if (z.y>foldingLimit) { z.y = foldingValue-z.y; } else if (z.y<-foldingLimit) z.y = -foldingValue-z.y;
if (z.z>foldingLimit) { z.z = foldingValue-z.z ; } else if (z.z<-foldingLimit) z.z = -foldingValue-z.z;
}
uniform float foldingLimit2; slider[0.0,1.0,5.0]
void boxFold(inout vec3 z, inout float dz) {
z = clamp(z, -foldingLimit, foldingLimit) * 2.0 - z;
}
void boxFold3(inout vec3 z, inout float dz) {
z = clamp(z, -foldingLimit2,foldingLimit2) * 2.0 - z;
}
void mengerFold(inout vec3 z, inout float dz) {
z = abs(z);
if (z.x<z.y){ z.xy = z.yx;}
if (z.x< z.z){ z.xz = z.zx;}
if (z.y<z.z){ z.yz = z.zy;}
z = Scale*z-Offset*(Scale-1.0);
if( z.z<-0.5*Offset.z*(Scale-1.0)) z.z+=Offset.z*(Scale-1.0);
dz*=Scale;
}
uniform float Scale2; slider[0.00,2,4.00]
uniform vec3 Offset2; slider[(0,0,0),(1,0,0),(1,1,1)]
void octo(inout vec3 z, inout float dz) {
if (z.x+z.y<0.0) z.xy = -z.yx;
if (z.x+z.z<0.0) z.xz = -z.zx;
if (z.x-z.y<0.0) z.xy = z.yx;
if (z.x-z.z<0.0) z.xz = z.zx;
z = z*Scale2 - Offset2*(Scale2-1.0);
dz*= Scale2;
}
uniform float Power; slider[0.1,8.0,12.3]
uniform float ZMUL; slider[-140.0,1,10]
void powN2(inout vec3 z, float zr0, inout float dr) {
float zo0 = asin( z.z/zr0 );
float zi0 = atan( z.y,z.x );
float zr = pow( zr0, Power-1.0 );
float zo = zo0 * Power;
float zi = zi0 * Power;
dr = zr*dr*Power*abs(length(vec3(1.0,1.0,ZMUL)/sqrt(3.0))) + 1.0;
zr *= zr0;
z = zr*vec3( cos(zo)*cos(zi), cos(zo)*sin(zi), ZMUL*sin(zo) );
}
float DE2(vec3 pos) {
vec3 z=pos;
float r;
float dr=1.0;
int i=0;
r=length(z);
while(r<100 && (i<8)) {
powN2(z,r,dr);
z+=pos;
r=length(z);
z*=rot;
if (i<5) orbitTrap = min(orbitTrap, abs(vec4(z.x,z.y,z.z,r*r)));
i++;
}
return 0.5*log(r)*r/dr;
}
uniform int MN; slider[0,5,50]
float DE(vec3 z, inout float dz, inout int iter)
{
vec3 c = z;
// z = vec3(0.0);
int n = 0;
//float dz = 1.0;
float r = length(z);
while (r<10 && n < 14) {
if (n==iter)break;
if (n<MN) {
boxFold(z,dz);
sphereFold(z,dz);
z = Scale*z; //+c;//+c*Offset;
dz*=abs(Scale);
} else {
octo(z,dz);
r = length(z);
powN2(z,r,dz);
}
r = length(z);
if (n<2 && iter<0) orbitTrap = min(orbitTrap, (vec4(abs(4.0*z),dot(z,z))));
n++;
}
if (iter<0) iter = n;
return r;
}
uniform bool Analytic; checkbox[true]
uniform float DetailGrad;slider[-7,-2.8,7];
float gradEPS = pow(10.0,DetailGrad);
float DE(vec3 pos) {
int iter = -1;
float dz = 1.0;
if (Analytic) {
float r = DE(pos, dz, iter);
return (r*log(r) / dz);
} else {
vec3 e = vec3(0.0,gradEPS,0.0);
float r = abs(DE(pos, dz, iter));
vec3 grad =vec3( DE(pos+e.yxx, dz, iter), DE(pos+e.xyx, dz, iter), DE(pos+e.xxy,dz, iter) )-vec3(r);
return r*log(r)*0.5/ length( grad/gradEPS);
}
}
float DED(vec3 pos, vec3 dir) {
int iter = -1;
float dz = 1.0;
vec3 e = -dir*gradEPS;
float r = abs(DE(pos, dz, iter));
float grad =DE(pos+e, dz, iter)-r;
return r*log(r)*0.5/ abs( grad/gradEPS);
}
#preset Great
FOV = 0.62536
Eye = 2.01082,2.74166,3.98073
Target = 2.33583,-4.84236,4.31657
Up = -9.898e-06,-0.0442387,-0.999018
AntiAlias = 1
AntiAliasBlur = 1
Detail = -3.99665
DetailNormal = -5.99039
DetailAO = 0
FudgeFactor = 0.01573
MaxRaySteps = 530
MaxRayStepsDiv = 3.5
BoundingSphere = 10
Dither = 0.5
AO = 0,0,0,1
Specular = 0
SpecularExp = 16
SpotLight = 1,1,1,0.68478
SpotLightDir = -0.82858,0.1
CamLight = 1,1,1,0.77273
CamLightMin = 0.36449
Glow = 1,1,1,0
Fog = 2
HardShadow = 0
BaseColor = 1,1,1
OrbitStrength = 0.13861
X = 0.498039,0.262745,0.6,0.41732
Y = 1,1,1,0.11812
Z = 0.333333,1,0.258824,0.2756
R = 0.4,0.7,1,0.5873
BackgroundColor = 0.6,0.6,0.45
GradientBackground = 0.3
CycleColors = true
Cycles = 4.06318
Scale = -2.07185
Offset = 1.25,0.8456,0.9191
fixedRadius2 = 1.10571
minRadius2 = 0.03871
foldingValue = 2
foldingLimit = 2.01755
foldingLimit2 = 1
Scale2 = 0.79884
Offset2 = 1,1,0
Power = 1.81825
ZMUL = -140
MN = 6
Analytic = true
DetailGrad = -2.8
#endpreset
#preset Futura
FOV = 0.62536
Eye = 2.01619,2.75179,3.99268
Target = 2.20567,-4.85338,3.42426
Up = -0.0125349,0.0742175,-0.99716
AntiAlias = 1
AntiAliasBlur = 1
Detail = -3.99665
DetailNormal = -5.99039
DetailAO = 0
FudgeFactor = 0.01573
MaxRaySteps = 530
MaxRayStepsDiv = 3.5
BoundingSphere = 10
Dither = 0.5
AO = 0,0,0,1
Specular = 0
SpecularExp = 16
SpotLight = 1,1,1,0.68478
SpotLightDir = -0.82858,0.1
CamLight = 1,1,1,0.77273
CamLightMin = 0.36449
Glow = 1,1,1,0
Fog = 1.91946
HardShadow = 0
BaseColor = 1,1,1
OrbitStrength = 0.13861
X = 0.498039,0.262745,0.6,0.41732
Y = 1,1,1,0.11812
Z = 0.333333,1,0.258824,0.2756
R = 0.4,0.7,1,0.5873
BackgroundColor = 0.6,0.6,0.45
GradientBackground = 0.3
CycleColors = false
Cycles = 4.06318
Scale = -2.07185
Offset = 1.25,0.8456,0.9191
fixedRadius2 = 1.10571
minRadius2 = 0.03871
foldingValue = 2
foldingLimit = 2.01755
foldingLimit2 = 1
Scale2 = 0.79884
Offset2 = 1,1,0
Power = 1.81825
ZMUL = -140
MN = 6
Analytic = true
DetailGrad = -2.8
#endpreset
#preset p1
FOV = 0.595581
Eye = 1.25125,-0.200486,1.00756
Target = -6.83342,0.316279,4.0991
Up = 0.328927,-0.0522827,0.868915
AntiAlias = 1
AntiAliasBlur = 1
Detail = -2.60582
DetailNormal = -2.42305
DetailAO = 0
AOSpread = 1
FudgeFactor = 0.26168
MaxRaySteps = 652
MaxRayStepsDiv = 2
BoundingSphere = 2
Dither = 0.5
AO = 0,0,0,0.81967
Specular = 0.4167
SpecularExp = 16
SpotLight = 1,1,1,0.72826
SpotLightDir = 0.54286,0.1
CamLight = 1,1,1,0.23656
Glow = 0.356863,1,0.12549,0.50876
Fog = 0.10738
HardShadow = 1
BaseColor = 1,1,1
OrbitStrength = 0.42574
X = 0.411765,0.6,0.560784,0.88976
Y = 0.666667,0.666667,0.498039,0.1496
Z = 1,0,0,0.46456
R = 1,0.666667,0,0.60318
BackgroundColor = 0.203922,0.227451,0.368627
GradientBackground = 0.5
CycleColors = true
Cycles = 6.78762
Scale = 2
RotVector = 1,1,1
RotAngle = 0
Offset = 1,1,1
fixedRadius2 = 1
minRadius2 = 0.25
foldingValue = 2
foldingLimit = 2.10525
ZMUL = -0.229
Analytic = false
DetailGrad = -3.56146
#endpreset
#preset F
FOV = 0.62536
Eye = 2.56637,3.86792,-0.754746
Target = 0.509966,0.674452,1.10844
Up = -0.191611,-0.396206,-0.890571
AntiAlias = 1
AntiAliasBlur = 1
Detail = -3.06572
DetailNormal = -4.03844
DetailAO = 0
FudgeFactor = 0.04673
MaxRaySteps = 583
MaxRayStepsDiv = 1.8
BoundingSphere = 10
Dither = 0.5
AO = 0,0,0,0.7
Specular = 2.4348
SpecularExp = 16
SpotLight = 1,1,1,0.73563
SpotLightDir = -0.52,0.1
CamLight = 1,1,1,0.77273
CamLightMin = 0.18692
Glow = 0,0.666667,0,1
Fog = 1.44966
HardShadow = 1
BaseColor = 1,1,1
OrbitStrength = 0.18812
X = 0.411765,0.6,0.560784,0.30708
Y = 0.666667,0.666667,0.498039,0.40158
Z = 0.666667,0.333333,1,0.02362
R = 0.4,0.7,1,-0.96832
BackgroundColor = 0.6,0.6,0.45
GradientBackground = 0.3
CycleColors = true
Cycles = 4.80603
Scale = -2
Offset = 1.25,0.8456,0.9191
fixedRadius2 = 0.5609
minRadius2 = 0.0625
foldingValue = 2
foldingLimit = 1.44735
foldingLimit2 = 1
Scale2 = 2.61764
Offset2 = 1,0,0
Power = 1.03135
ZMUL = -140
MN = 7
Analytic = true
DetailGrad = -2.8
#endpreset
#preset Ville
FOV = 0.62536
Eye = 4.36274,2.40381,0.932371
Target = -2.8913,-0.351315,0.36855
Up = 0.0793765,-0.00854807,-0.979476
AntiAlias = 1
AntiAliasBlur = 1
Detail = -3.06572
DetailNormal = -4.03844
DetailAO = 0
FudgeFactor = 0.04673
MaxRaySteps = 583
MaxRayStepsDiv = 1.8
BoundingSphere = 10
Dither = 0.5
AO = 0,0,0,0.7
Specular = 2.4348
SpecularExp = 16
SpotLight = 1,1,1,0.73563
SpotLightDir = -0.52,0.1
CamLight = 1,1,1,0.77273
CamLightMin = 0.18692
Glow = 1,1,1,0
Fog = 0.24162
HardShadow = 1
BaseColor = 1,1,1
OrbitStrength = 0.16832
X = 0.411765,0.6,0.560784,0.30708
Y = 0.666667,0.666667,0.498039,0.40158
Z = 0.666667,0.333333,1,0.02362
R = 0.4,0.7,1,-0.96832
BackgroundColor = 0.6,0.6,0.45
GradientBackground = 0.3
CycleColors = false
Cycles = 18.1816
Scale = -2
RotVector = 1,1,1
RotAngle = 0
Offset = 1.25,0.8456,0.9191
fixedRadius2 = 1
minRadius2 = 0.0625
foldingValue = 2
foldingLimit = 2.01755
Scale2 = 2
Offset2 = 1,0,0
Power = 2.05554
ZMUL = -9.084
Analytic = true
DetailGrad = -2.8
#endpreset
#preset MN
FOV = 0.62536
Eye = 1.82748,2.819,3.89641
Target = -0.157115,10.1441,5.24904
Up = -0.230691,-0.235678,0.937828
AntiAlias = 1
AntiAliasBlur = 1
Detail = -3.57665
DetailNormal = -4.03844
DetailAO = 0
FudgeFactor = 0.04673
MaxRaySteps = 843
MaxRayStepsDiv = 1.8
BoundingSphere = 10
Dither = 0.5
AO = 0,0,0,0.7
Specular = 2.4348
SpecularExp = 16
SpotLight = 1,1,1,0.73563
SpotLightDir = -0.52,0.1
CamLight = 1,1,1,0.77273
CamLightMin = 0.18692
Glow = 1,1,1,0
Fog = 0.24162
HardShadow = 1
BaseColor = 1,1,1
OrbitStrength = 0.16832
X = 0.498039,0.262745,0.6,0.30708
Y = 0.666667,0.121569,0.121569,0.25984
Z = 0.333333,1,0.258824,0.38582
R = 0.4,0.7,1,-0.96832
BackgroundColor = 0.6,0.6,0.45
GradientBackground = 0.3
CycleColors = true
Cycles = 8.27397
Scale = -2.25185
Offset = 1.25,0.8456,0.9191
fixedRadius2 = 1.08472
minRadius2 = 0.1832
foldingValue = 2
foldingLimit = 2.01755
foldingLimit2 = 1
Scale2 = 1.55884
Offset2 = 1,1,0
Power = 2.42825
ZMUL = -140
MN = 6
Analytic = true
DetailGrad = -2.8
#endpreset
#preset Abstraction
FOV = 0.62536
Eye = 2.03979,2.41975,3.79673
Target = 0.259702,-1.54583,-2.44596
Up = 0.835361,0.323895,-0.443951
AntiAlias = 1
AntiAliasBlur = 1
Detail = -4.08758
DetailNormal = -3.63461
DetailAO = 0
FudgeFactor = 0.01573
MaxRaySteps = 357
MaxRayStepsDiv = 3.5
BoundingSphere = 10
Dither = 0.5
AO = 0,0,0,1
Specular = 9.25
SpecularExp = 32.292
SpotLight = 1,1,1,0.68478
SpotLightDir = -0.82858,0.1
CamLight = 1,1,1,0.51612
CamLightMin = 1
Glow = 1,0.85098,0,0.21053
Fog = 0.79194
HardShadow = 0
BaseColor = 1,1,1
OrbitStrength = 0.13861
X = 0.498039,0.262745,0.6,0.41732
Y = 1,1,1,0.11812
Z = 0.333333,1,0.258824,0.2756
R = 0.4,0.7,1,0.5873
BackgroundColor = 0.6,0.6,0.45
GradientBackground = 0.3
CycleColors = true
Cycles = 4.06318
Scale = -2.07185
Offset = 1.25,0.8456,0.9191
fixedRadius2 = 1.10571
minRadius2 = 0.03871
foldingValue = 2
foldingLimit = 2.01755
foldingLimit2 = 1
Scale2 = 0.35296
Offset2 = 0,0.72308,0.26154
Power = 1.81825
ZMUL = -140
MN = 8
Analytic = true
DetailGrad = -2.8
#endpreset
I'll include the script in a clean version in next release of Fragmentarium.