#vertex
#group Camera
// Use this to adjust clipping planes
uniform vec2 Center; slider[(-10,-10),(0,0),(10,10)] NotLockable
uniform float Zoom; slider[0,1,100] NotLockable
uniform float AntiAliasScale; slider[0,1,5]
uniform vec2 pixelSize;
varying vec2 coord;
varying vec2 aaScale;
varying vec2 viewCoord;
void main(void)
{
float ar = pixelSize.y/pixelSize.x;
gl_Position = gl_Vertex;
viewCoord = (gl_ProjectionMatrix*gl_Vertex).xy;
coord = (((gl_ProjectionMatrix*gl_Vertex).xy*vec2(ar,1.0))/Zoom+ Center);
aaScale = vec2(gl_ProjectionMatrix[0][0],gl_ProjectionMatrix[1][1])*pixelSize*AntiAliasScale/Zoom;
}
#endvertex
uniform float Zoom;
uniform vec2 globalPixelSize;
in vec2 coord;
in vec2 aaScale;
//orbit traps from julia version of fractal formula z=(z+1/z+c)*-scale;
uniform int iterations; slider[1,10,300]
uniform float scale; slider[-1.,-.2,1.]
uniform vec2 julia; slider[(0.,0.),(1.5,.65),(2.,2.)]
uniform vec3 orbittraps; slider[(0.,0.,0.),(.5,.55,0.),(5.,5.,5.)]
uniform vec3 trapswidths; slider[(0.,0.,0.),(.1,.3,2.),(2.,2.,2.)]
uniform vec3 trapsbright; slider[(0.,0.,0.),(1.2,.4,.8),(2.,2.,2.)]
uniform vec3 trapscontrast; slider[(0.,0.,0.),(5.,10.,30.),(30.,30.,30.)]
uniform vec3 trap1color; color[1.0,0.4,0.1]
uniform vec3 trap2color; color[0.35,0.25,1.0]
uniform vec3 trap3color; color[0.1,1.0,0.05]
uniform vec4 averagecoloring; color[0.0,0.0,1.0,1.0,1.0,1.0]
uniform float averagetreshold; slider[0.,1.,10.]
uniform float averagepow; slider[0.,3.,10.]
uniform float averagemix; slider[0.,0.,1.]
uniform float saturation; slider[0.,.5,1.]
uniform float brightness; slider[0.,1.,2.]
uniform float contrast; slider[0.,1.4,5.]
uniform float minbright; slider[0.,.5,1.]
uniform float antialias; slider[1.,4.,8.]
vec2 rotate(vec2 p, float angle) {
return p*mat2(cos(angle),sin(angle),-sin(angle),cos(angle));
}
void main(void)
{
vec3 aacolor=vec3(0.);
vec2 uv=coord;
vec2 pos=uv;
float t=0.;
float zoo=.005+pow(abs(sin(t*.5+1.4)),5.)*Zoom;
float d=1./antialias;
float a=0.;
vec3 its=vec3(0.);
for (float aa=0.; aa<64.; aa++) {
vec3 otrap=vec3(1000.);
if (aa<antialias*antialias) {
vec2 aacoord=floor(vec2(aa/antialias,mod(aa,antialias)));
vec2 z=pos+aacoord*d*aaScale;
for (int i=0; i<iterations; i++) {
vec2 cz=vec2(z.x,-z.y);
z=z+cz/dot(z,z)+julia;
z=z*scale;
float l=length(z);
a+=max(0.,averagetreshold-l)/averagetreshold;
vec3 ot=abs(vec3(l)-orbittraps);
if (ot.x<otrap.x) {
otrap.x=ot.x;
its.x=float(iterations-i);
}
if (ot.y<otrap.y) {
otrap.y=ot.y;
its.y=float(iterations-i);
}
if (ot.z<otrap.z) {
otrap.z=ot.z;
its.z=float(iterations-i);
}
}
}
a=pow(a/iterations,averagepow)*10.;
otrap=pow(max(vec3(0.),trapswidths-otrap)/trapswidths,trapscontrast);
its=its/float(iterations);
vec3 otcol1=otrap.x*pow(trap1color,3.5-vec3(its.x*3.))*max(minbright,its.x)*trapsbright.x;
vec3 otcol2=otrap.y*pow(trap2color,3.5-vec3(its.y*3.))*max(minbright,its.y)*trapsbright.y;
vec3 otcol3=otrap.z*pow(trap3color,3.5-vec3(its.z*3.))*max(minbright,its.z)*trapsbright.z;
aacolor+=mix(mix(mix(otcol1,otcol2,.5),otcol3,.5)*3.,a*averagecoloring.xyz*averagecoloring.w,averagemix);
}
aacolor=aacolor/(antialias*antialias);
vec3 color=mix(vec3(length(aacolor)),aacolor,saturation)*brightness;
color=pow(color,vec3(contrast));
gl_FragColor = vec4(color,1.0);
}
#preset default
Center = 7.29362e+37,2.60172e+37
Zoom = 6.81037e-38
AntiAliasScale = 2
iterations = 273
scale = -0.31898
julia = 1.83686,0.25982
orbittraps = 0.13735,0.12365,0
trapswidths = 0.01126,0.02254,0.11564
trapsbright = 2,1.20548,0.54774
trapscontrast = 0.3,1,0.5
trap1color = 1,0.14902,0.0392157
trap2color = 0.494118,0.494118,1
trap3color = 1,1,1
averagecoloring = 1,1,1,1
averagetreshold = 4.9387
averagepow = 2.3768
averagemix = 0
saturation = 0.37662
brightness = 0.8421
contrast = 4.01165
minbright = 0.35366
antialias = 4
#endpreset