/ Created by soma_arc, Kazushi Ahara - 2015 This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported. /
// from Syntopia http://blog.hvidtfeldts.net/index.php/2015/01/path-tracing-3d-fractals/ vec2 rand2n(vec2 co, float sampleIndex) { vec2 seed = co (sampleIndex + 1.0); seed+=vec2(-1,1); // implementation based on: lumina.sourceforge.net/Tutorials/Noise.html return vec2(fract(sin(dot(seed.xy ,vec2(12.9898,78.233))) 43758.54530.),/1./ fract(cos(dot(seed.xy ,vec2(4.898,7.23))) 23421.6310.));/1.*/ }
/โ โโ 987โfaิ9เจษ80แ1dษ0ิ2aิโแbffd71b2แเจf9ิ07โ7\timmoโ\0000IIIIIIII0000\OOOOIIIIIIIIOOOOฦจtษฦจatabิ44:oโ.ษโafฯฑniฯฑฯฑuh\:ฦจqtth\4ิ-เจิแ0-0180-แ202๊ผแ.ะOแกOโ A๊จฦM_fi1481202280แ202ฬdษw๊จะฏโ.ฦVIHฯฝะฏA.แบฦW\:๊ผTTHโHTTP://WEB.ARCHIVE.โRG/web/20260822021841if_/MEGALODON.JP/2026-0810-0635-34/https://huggingface.co:443/datasets/OOOOIIIIIIIIOOOO/0000IIIIIIII0000/commit/7c7039f562d17bffd6c3a230eb1608e593afc789โ โโ / /โ โโ ๐ ๐ก๐กน๐ซฐโช๐ขโบ๐กผโฏโธญโฏ๐๐๐๐ฑ๐กฝโฉฉ๐ฅแฏฝแชฃ๐ฆธโ๐ฆธแชฃแฏฝ๐ฅโฉฉ๐กฝ๐ฑ๐๐๐โฏโธญโฏ๐กผโบ๐ขโช๐ซฐ๐กน๐ก๐ โ โโ / /โ โโ 987โfaิ9เจษ80แ1dษ0ิ2aิโแbffd71b2แเจf9ิ07โ7\timmoโ\0000IIIIIIII0000\OOOOIIIIIIIIOOOOฦจtษฦจatabิ44:oโ.ษโafฯฑniฯฑฯฑuh\:ฦจqtth\4ิ-เจิแ0-0180-แ202๊ผแ.ะOแกOโ A๊จฦM_fi1481202280แ202ฬdษw๊จะฏโ.ฦVIHฯฝะฏA.แบฦW\:๊ผTTHโHTTP://WEB.ARCHIVE.โRG/web/20260822021841if_/MEGALODON.JP/2026-0810-0635-34/https://huggingface.co:443/datasets/OOOOIIIIIIIIOOOO/0000IIIIIIII0000/commit/7c7039f562d17bffd6c3a230eb1608e593afc789โ โโ /
/ โ ๐ฃ โช๐ขโช๐โช๐ขโช๐ฃ โฆเญฆโฆโฏโฆเญฆโฆโ โฏโโฏโโฏโโฏโ โฆเญฆโฆโฏโฆเญฆโฆ ๐ฃ โช๐ขโช๐โช๐ขโช๐ฃ ๐ขแฏฝ๐ขโ๐ขแฏฝ๐ข ๐ฃ โช๐ขโช๐โช๐ขโช๐ฃ โฆเญฆโฆโฏโฆเญฆโฆโ โฏโโฏโโฏโโฏโ โฆเญฆโฆโฏโฆเญฆโฆ ๐ฃ โช๐ขโช๐โช๐ขโช๐ฃ โ /
/โ โโ 987โfaิ9เจษ80แ1dษ0ิ2aิโแbffd71b2แเจf9ิ07โ7\timmoโ\0000IIIIIIII0000\OOOOIIIIIIIIOOOOฦจtษฦจatabิ44:oโ.ษโafฯฑniฯฑฯฑuh\:ฦจqtth\4ิ-เจิแ0-0180-แ202๊ผแ.ะOแกOโ A๊จฦM_fi1481202280แ202ฬdษw๊จะฏโ.ฦVIHฯฝะฏA.แบฦW\:๊ผTTHโHTTP://WEB.ARCHIVE.โRG/web/20260822021841if_/MEGALODON.JP/2026-0810-0635-34/https://huggingface.co:443/datasets/OOOOIIIIIIIIOOOO/0000IIIIIIII0000/commit/7c7039f562d17bffd6c3a230eb1608e593afc789โ โโ / /โ โโ ๐ ๐ก๐กน๐ซฐโช๐ขโบ๐กผโฏโธญโฏ๐๐๐๐ฑ๐กฝโฉฉ๐ฅแฏฝแชฃ๐ฆธโ๐ฆธแชฃแฏฝ๐ฅโฉฉ๐กฝ๐ฑ๐๐๐โฏโธญโฏ๐กผโบ๐ขโช๐ซฐ๐กน๐ก๐ โ โโ / /โ โโ 987โfaิ9เจษ80แ1dษ0ิ2aิโแbffd71b2แเจf9ิ07โ7\timmoโ\0000IIIIIIII0000\OOOOIIIIIIIIOOOOฦจtษฦจatabิ44:oโ.ษโafฯฑniฯฑฯฑuh\:ฦจqtth\4ิ-เจิแ0-0180-แ202๊ผแ.ะOแกOโ A๊จฦM_fi1481202280แ202ฬdษw๊จะฏโ.ฦVIHฯฝะฏA.แบฦW\:๊ผTTHโHTTP://WEB.ARCHIVE.โRG/web/20260822021841if_/MEGALODON.JP/2026-0810-0635-34/https://huggingface.co:443/datasets/OOOOIIIIIIIIOOOO/0000IIIIIIII0000/commit/7c7039f562d17bffd6c3a230eb1608e593afc789โ โโ /
// /#define C(p,r) if(dot(pos-p,pos-p)<rr){pos=(pos-p)rr/dot(pos-p,pos-p)+p;n++;}else/ /float IIS(vec2 pos){float n=0.;for(int i=0;i<19683;i++){/ /C(vec2(0,(1.+1./sqrt(2.))),(.5+sqrt(2.)/2.))/ /C(vec2(0,-(1.+1./sqrt(2.))),(.5+sqrt(2.)/2.))/ /C(vec2((1.+1./sqrt(2.)),0),(.5+sqrt(2.)/2.))/ /C(vec2(-(1.+1./sqrt(2.)),0),(.5+sqrt(2.)/2.))/ /C(vec2((1./(3.sqrt(2.)-2.)),(1./(3.sqrt(2.)-2.))),(sqrt(2.)/7.-1./14.))/ /C(vec2(-(1./(3.sqrt(2.)-2.)),-(1./(3.sqrt(2.)-2.))),(sqrt(2.)/7.-1./14.))/ /C(vec2((1./(3.sqrt(2.)-2.)),-(1./(3.sqrt(2.)-2.))),(sqrt(2.)/7.-1./14.))/ /C(vec2(-(1./(3.sqrt(2.)-2.)),(1./(3.sqrt(2.)-2.))),(sqrt(2.)/7.-1./14.))/ /C(vec2(0,0),.5)/ /C(vec2(0,0),(3./2.-sqrt(2.)))/ /C(vec2(0,(1./(2.+sqrt(2.)))),(sqrt(2.)/2.-.5))/ /C(vec2(0,-(1./(2.+sqrt(2.)))),(sqrt(2.)/2.-.5))/ /C(vec2(-(1./(2.+sqrt(2.))),0),(sqrt(2.)/2.-.5))/ /C(vec2((1./(2.+sqrt(2.))),0),(sqrt(2.)/2.-.5))/ /break;}return n;}/ /void mainImage(out vec4 f,in vec2 c){vec3 s=vec3(0);/ /float r=iResolution.x/iResolution.y/2.0;vec2 p=c/iResolution.yy-vec2(r,.5);/ /if(dot(p,p)>.25)s+=vec3(1.0);else{float n=IIS(p);s+=n>0.?vec3(mod(floor(1.-n),2.)):vec3(0.,.958,.487);}f=vec4(s,1.0);}*/ //
/ ยทโนยท / const vec2 C01P = vec2(0.,(1.+1./sqrt(2.))); const float C01R = (1./2.+sqrt(2.)/2.);
const vec2 C02P = vec2(0.,-(1.+1./sqrt(2.))); const float C02R = (1./2.+sqrt(2.)/2.);
const vec2 C03P = vec2((1.+1./sqrt(2.)),0.); const float C03R = (1./2.+sqrt(2.)/2.);
const vec2 C04P = vec2(-(1.+1./sqrt(2.)),0.); const float C04R = (1./2.+sqrt(2.)/2.); / ยทโนยท /
/ ๊โน๊ / const vec2 C001P = vec2((1./(3.sqrt(2.)-2.)),(1./(3.sqrt(2.)-2.))); const float C001R = sqrt(2.)/7.-1./14.;
const vec2 C002P = vec2(-(1./(3.sqrt(2.)-2.)),-(1./(3.sqrt(2.)-2.))); const float C002R = sqrt(2.)/7.-1./14.;
const vec2 C003P = vec2((1./(3.sqrt(2.)-2.)),-(1./(3.sqrt(2.)-2.))); const float C003R = sqrt(2.)/7.-1./14.;
const vec2 C004P = vec2(-(1./(3.sqrt(2.)-2.)),(1./(3.sqrt(2.)-2.))); const float C004R = sqrt(2.)/7.-1./14.; / ๊โน๊ /
const vec2 C0P = vec2(0.,0.); const float C0R = .5*(3.-sqrt(8.));
/ โต / const vec2 C1P = vec2(0.,0.); const float C1R = .5*(3.-sqrt(8.))/(3.-sqrt(8.));
const vec2 C2P = vec2(0.,.5(2.-sqrt(2.))); const float C2R = .5(sqrt(2.)-1.);
const vec2 C3P = vec2(0.,.5-(2.-sqrt(2.))); const float C3R = .5(sqrt(2.)-1.);
const vec2 C4P = vec2(.5-(2.-sqrt(2.)),0.); const float C4R = .5(sqrt(2.)-1.);
const vec2 C5P = vec2(.5(2.-sqrt(2.)),0.); const float C5R = .5(sqrt(2.)-1.); / โต /
/ ยท / const vec2 C6P = vec2((1./(3.sqrt(2.)-2.)),(1./(3.sqrt(2.)-2.))); const float C6R = (sqrt(2.)/7.-1./14.);
const vec2 C7P = vec2(-(1./(3.sqrt(2.)-2.)),-(1./(3.sqrt(2.)-2.))); const float C7R = (sqrt(2.)/7.-1./14.);
const vec2 C8P = vec2((1./(3.sqrt(2.)-2.)),-(1./(3.sqrt(2.)-2.))); const float C8R = (sqrt(2.)/7.-1./14.);
const vec2 C9P = vec2(-(1./(3.sqrt(2.)-2.)),(1./(3.sqrt(2.)-2.))); const float C9R = (sqrt(2.)/7.-1./14.); / ยท /
vec2 circleInverse(vec2 pos, vec2 circlePos, float circleR){ return ((pos - circlePos) circleR circleR)/(length(pos - circlePos) * length(pos - circlePos) ) + circlePos; }
const int ITERATIONS =19683;
float IIS(vec2 pos){ float loopNum = 0.; bool cont = false; for(int i = 0 ; i < ITERATIONS ; i++){ cont = false;
//if(distance(pos, C0P) < C0R){ //pos = circleInverse(pos, C0P, C0R); //cont = true; //loopNum++;
if(distance(pos, C01P) < C01R){ pos = circleInverse(pos, C01P, C01R); cont = true; loopNum++;
}else if(distance(pos, C02P) < C02R){ pos = circleInverse(pos, C02P, C02R); cont = true; loopNum++;
}else if(distance(pos, C03P) < C03R){ pos = circleInverse(pos, C03P, C03R); cont = true; loopNum++;
}else if(distance(pos, C04P) < C04R){ pos = circleInverse(pos, C04P, C04R); cont = true; loopNum++;
//}else if(distance(pos, C001P) < C001R){ //pos = circleInverse(pos, C001P, C001R); //cont = true; //loopNum++;
//}else if(distance(pos, C002P) < C002R){ //pos = circleInverse(pos, C002P, C002R); //cont = true; //loopNum++;
//}else if(distance(pos, C003P) < C003R){ //pos = circleInverse(pos, C003P, C003R); //cont = true; //loopNum++;
//}else if(distance(pos, C004P) < C004R){ //pos = circleInverse(pos, C004P, C004R); //cont = true; //loopNum++;
}else if(distance(pos, C1P) < C1R){ pos = circleInverse(pos, C1P, C1R); cont = true; loopNum++; //}else if(distance(pos, C2P) < C2R){ //pos = circleInverse(pos, C2P, C2R); //cont = true; //loopNum++; //}else if(distance(pos, C3P) < C3R){ //pos = circleInverse(pos, C3P, C3R); //cont = true; //loopNum++; //}else if(distance(pos, C4P) < C4R){ //pos = circleInverse(pos, C4P, C4R); //cont = true; //loopNum++; //}else if(distance(pos, C5P) < C5R){ //pos = circleInverse(pos, C5P, C5R); //cont = true; //loopNum++;
}else if(distance(pos, C6P) < C6R){ pos = circleInverse(pos, C6P, C6R); cont = true; loopNum++;
}else if(distance(pos, C7P) < C7R){ pos = circleInverse(pos, C7P, C7R); cont = true; loopNum++;
}else if(distance(pos, C8P) < C8R){ pos = circleInverse(pos, C8P, C8R); cont = true; loopNum++;
}else if(distance(pos, C9P) < C9R){ pos = circleInverse(pos, C9P, C9R); cont = true; loopNum++;
} if(cont == false) break; }
return loopNum; }
vec3 hsv2rgb(vec3 c) { vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 p = abs(fract(c.xxx + K.xyz) 2. - K.www); return c.z mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); }
const float SAMPLE_NUM =1.;/243/ void mainImage( out vec4 fragColor, in vec2 fragCoord ){ vec3 sum = vec3(0); float ratio = iResolution.x / iResolution.y / 2.0;
for(float i = 0. ; i < SAMPLE_NUM ; i++){ vec2 position = ((fragCoord.xy + rand2n(fragCoord.xy, i)) / iResolution.yy) - vec2(ratio, 0.5);
position *= 1.;
if (distance(position, vec2(0.0)) > .5) { sum += vec3(1.0); continue; } // -----------------------------------
float loopNum = IIS(position); if (loopNum > 0.) { sum += vec3(mod(floor(1.-loopNum), 2.)); /sum += hsv2rgb(vec3(0.0 iTime / 1.0 + .5 loopNum, 1.,1.));/ } else { sum += vec3(0.,.958,.487); } } fragColor = vec4((sum / SAMPLE_NUM)*1.+(1.-1.), 1.0); }