[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://fxbxr6856n68"] [sub_resource type="Shader" id="Shader_igemj"] code = "shader_type canvas_item; const float seed_variation = 0.0; varying float elapsed_time; void vertex() { UV *= vec2(0.76, 0.43); elapsed_time = TIME; } float dot2(vec2 x) { return dot(x, x); } highp float rand(vec2 x) { highp float ax = 13.9898; highp float ay = 8.141; highp float ad = dot(x, vec2(ax, ay)); highp float m = 3.14; highp float f = 43758.5453; return fract(cos(ad)*f); } highp vec2 rand2(vec2 x) { highp float ax = 13.9898; highp float ay = 8.141; highp float ad = dot(x, vec2(ax, ay)); highp float bx = 3.4562; highp float by = 17.398; highp float bd = dot(x, vec2(bx, by)); highp float m = 3.14; highp float f = 43758.5453; return fract(cos(vec2(ad,bd)) * f); } highp vec3 rand3(vec2 x) { highp float ax = 13.9898; highp float ay = 8.141; highp float ad = dot(x, vec2(ax, ay)); highp float bx = 3.4562; highp float by = 17.398; highp float bd = dot(x, vec2(bx, by)); highp float cx = 13.254; highp float cy = 5.867; highp float cd = dot(x, vec2(cx, cy)); highp float m = 3.14; highp float f = 43758.5453; return fract(cos(vec3(ad,bd,cd)) * f); } vec3 rgb2hsv(vec3 c) { vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec4 p = c.g < c.b ? vec4(c.bg, K.wz) : vec4(c.gb, K.xy); vec4 q = c.r < p.x ? vec4(p.xyw, c.r) : vec4(c.r, p.yzx); float d = q.x - min(q.w, q.y); float e = 1.0e-10; return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); } 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) * 6.0 - K.www); return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); } float param_rnd(float minimum, float maximum, float seed) { return minimum+(maximum-minimum)*rand(vec2(seed)); } uniform float p_o453504933653_CamY = 2.000000000; uniform float p_o453504933653_LookAtX = 0.000000000; uniform float p_o453504933653_LookAtY = 0.000000000; uniform float p_o453504933653_LookAtZ = 0.000000000; uniform float p_o453504933653_CamD = 1.500000000; uniform float p_o453504933653_CamZoom = 1.972000000; const float p_o453504933653_Reflection = 0.200000000; const float p_o453504933653_Specular = 0.000000000; const float p_o453504933653_Pow = 64.000000000; const float p_o453504933653_SunX = 2.500000000; const float p_o453504933653_SunY = 2.500000000; const float p_o453504933653_SunZ = 1.000000000; const float p_o453504933653_AmbLight = 0.250000000; const float p_o453504933653_AmbOcclusion = 0.502000000; const float p_o453504933653_Shadow = 1.000000000; const float p_o453840477979_r = 2.514000000; const float p_o453840477979_x = 0.024000000; const float p_o453823700761_smooth = 0.000000000; const float p_o453790146313_x = 1.000000000; const float p_o453790146313_y = 1.000000000; const float p_o453790146313_z = 1.000000000; const float p_o453806923526_xyz = 0.452000000; const float p_o453806923526_x = 1.000000000; const float p_o453806923526_y = 1.000000000; const float p_o453806923526_z = 1.000000000; vec3 rotate3d(vec3 p, vec3 a) { vec3 rv; float c; float s; c = cos(a.x); s = sin(a.x); rv.x = p.x; rv.y = p.y*c+p.z*s; rv.z = -p.y*s+p.z*c; c = cos(a.y); s = sin(a.y); p.x = rv.x*c+rv.z*s; p.y = rv.y; p.z = -rv.x*s+rv.z*c; c = cos(a.z); s = sin(a.z); rv.x = p.x*c+p.y*s; rv.y = -p.x*s+p.y*c; rv.z = p.z; return rv; } float iq_sdOctahedron( vec3 p, float s){ p = abs(p); float m = p.x+p.y+p.z-s; vec3 q; if( 3.0*p.x < m ) q = p.xyz; else if( 3.0*p.y < m ) q = p.yzx; else if( 3.0*p.z < m ) q = p.zxy; else return m*0.57735027; float k = clamp(0.5*(q.z-q.y+s),0.0,s); return length(vec3(q.x,q.y-s+k,q.z-k)); }vec3 v4v4_rotate(vec3 p, vec3 a) { vec3 rv; float c; float s; c = cos(a.x); s = sin(a.x); rv.x = p.x; rv.y = p.y*c+p.z*s; rv.z = -p.y*s+p.z*c; c = cos(a.y); s = sin(a.y); p.x = rv.x*c+rv.z*s; p.y = rv.y; p.z = -rv.x*s+rv.z*c; c = cos(a.z); s = sin(a.z); rv.x = p.x*c+p.y*s; rv.y = -p.x*s+p.y*c; rv.z = p.z; return rv; } vec2 equirectangularMap(vec3 dir) { vec2 longlat = vec2(atan(dir.y,dir.x),acos(dir.z)); return longlat/vec2(2.0*PI,PI); } //Simple HDRI START //Hash without Sine Dave_Hoskins //https://www.shadertoy.com/view/4djSRW float Simple360HDR_hash12(vec2 p) { vec3 p3 = fract(vec3(p.xyx) * .1031); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.x + p3.y) * p3.z); } float Simple360HDR_noise(vec2 v){ vec2 v1=floor(v); vec2 v2=smoothstep(0.0,1.0,fract(v)); float n00=Simple360HDR_hash12(v1); float n01=Simple360HDR_hash12(v1+vec2(0,1)); float n10=Simple360HDR_hash12(v1+vec2(1,0)); float n11=Simple360HDR_hash12(v1+vec2(1,1)); return mix(mix(n00,n01,v2.y),mix(n10,n11,v2.y),v2.x); } float Simple360HDR_noiseOct(vec2 p){ return Simple360HDR_noise(p)*0.5+ Simple360HDR_noise(p*2.0+13.0)*0.25+ Simple360HDR_noise(p*4.0+23.0)*0.15+ Simple360HDR_noise(p*8.0+33.0)*0.10+ Simple360HDR_noise(p*16.0+43.0)*0.05; } vec3 Simple360HDR_skyColor(vec3 p){ vec3 s1=vec3(0.2,0.5,1.0); vec3 s2=vec3(0.1,0.2,0.4)*1.5; vec3 v=(Simple360HDR_noiseOct(p.xz*0.1)-0.5)*vec3(1.0); float d=length(p); return mix(s2+v,s1+v*(12.0/max(d,20.0)),clamp(d*0.1,0.0,1.0)); } vec3 Simple360HDR_floorColor(vec3 p){ vec3 v=(Simple360HDR_noiseOct(p.xz*0.1)*0.5+0.25)*vec3(0.7,0.5,0.4); return v; } vec3 Simple360HDR_renderHDR360(vec3 rd, vec3 sun){ vec3 col; vec3 p; vec3 c; if (rd.y>0.0) { p=rd*(5.0/rd.y); c=Simple360HDR_skyColor(p); } else { p=rd*(-10.0/rd.y); c=Simple360HDR_floorColor(p); c=mix(c,vec3(0.5,0.7,1.0),clamp(1.0-sqrt(-rd.y)*3.0,0.0,1.0)); } vec3 skycolor=vec3(0.1,0.45,0.68); float d=length(p); float ds=clamp(dot(sun,rd),0.0,1.0); vec3 sunc=(ds>0.9997?vec3(2.0):vec3(0.0))+pow(ds,512.0)*4.0+pow(ds,128.0)*vec3(0.5)+pow(ds,4.0)*vec3(0.5); if (rd.y>0.0){ c+=vec3(0.3)*pow(1.0-abs(rd.y),3.0)*0.7; } return c+sunc; } vec3 Simple360HDR_make360hdri(vec2 p, vec3 sun){ float xPI=3.14159265359; vec2 thetaphi = ((p * 2.0) - vec2(1.0)) * vec2(xPI,xPI/2.0); vec3 rayDirection = vec3(cos(thetaphi.y) * cos(thetaphi.x), sin(thetaphi.y), cos(thetaphi.y) * sin(thetaphi.x)); return Simple360HDR_renderHDR360(rayDirection,sun); } //Simple HDRI END float o453655928605_input_obj3d(vec3 p, float _seed_variation_) { float o453840477979_0_1_sdf3d = iq_sdOctahedron(p,p_o453840477979_r)-p_o453840477979_x; return o453840477979_0_1_sdf3d; } vec4 o453655928605_input_trans3d(vec4 p, float _seed_variation_) { vec4 o453756591886_0_1_v4v4 = (vec4(v4v4_rotate((vec4((vec4((vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).xyz-vec3(p_o453790146313_x, p_o453790146313_y, p_o453790146313_z),(vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).w)).xyz/vec3(p_o453806923526_x, p_o453806923526_y, p_o453806923526_z)/p_o453806923526_xyz,(vec4((vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).xyz-vec3(p_o453790146313_x, p_o453790146313_y, p_o453790146313_z),(vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).w)).w)).xyz, -vec3((sin(elapsed_time*0.05)*360.0), (sin(elapsed_time*0.07)*360.0), (sin(elapsed_time*0.03)*360.0))*0.01745329251), (vec4((vec4((vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).xyz-vec3(p_o453790146313_x, p_o453790146313_y, p_o453790146313_z),(vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).w)).xyz/vec3(p_o453806923526_x, p_o453806923526_y, p_o453806923526_z)/p_o453806923526_xyz,(vec4((vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).xyz-vec3(p_o453790146313_x, p_o453790146313_y, p_o453790146313_z),(vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).w)).w)).w)); vec4 o453773369100_0_1_v4v4 = o453756591886_0_1_v4v4; vec4 o_o453806923526_0=o453773369100_0_1_v4v4;vec4 o453806923526_0_1_v4v4 = vec4(o_o453806923526_0.xyz,(vec4((vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).xyz-vec3(p_o453790146313_x, p_o453790146313_y, p_o453790146313_z),(vec4(vec3(sqrt(p.xyz*p.xyz+p_o453823700761_smooth)),p.w)).w)).w/min(min(p_o453806923526_x, p_o453806923526_y), p_o453806923526_z)/p_o453806923526_xyz); vec4 o453790146313_0_1_v4v4 = o453806923526_0_1_v4v4; vec4 o453823700761_0_1_v4v4 = o453790146313_0_1_v4v4; return o453823700761_0_1_v4v4; } float for_fold_o453655928605(vec4 p, float _seed_variation_) { for(int i=0;i<6;i++){ p=o453655928605_input_trans3d((p), 0.0); } return o453655928605_input_obj3d((p.xyz), 0.0)/p.w; } float for_min_o453655928605(vec4 p, float _seed_variation_) { float d=o453655928605_input_obj3d((p.xyz), 0.0); float m=min(999999.0,d); for(int i=0;i<6;i++){ p=o453655928605_input_trans3d((p), 0.0); d=o453655928605_input_obj3d((p.xyz), 0.0); m=min(m,d/p.w); } return m; } float for_custom_o453655928605(vec4 p, float _seed_variation_) { float d=o453655928605_input_obj3d((p.xyz), 0.0); float m=min((vec2(999999.0,d)).x,(vec2(999999.0,d)).y); for(int i=0;i<6;i++){ p=o453655928605_input_trans3d((p), 0.0); d=o453655928605_input_obj3d((p.xyz), 0.0); m=min((vec2(m,d/p.w)).x,(vec2(m,d/p.w)).y); } return m; }float o453504933653_input_sdf_a(vec3 p, float _seed_variation_) { float o453655928605_0_1_sdf3d = for_min_o453655928605(vec4((rotate3d(p, -vec3((elapsed_time*21.0), (elapsed_time*27.0), (elapsed_time*23.0))*0.01745329251)),1.0), _seed_variation_); vec2 o453857255178_0_1_sdf3dc = vec2(o453655928605_0_1_sdf3d, 0.0); return (o453857255178_0_1_sdf3dc).x; } vec2 input_o453504933653(vec3 p, float _seed_variation_) { float sdfa=o453504933653_input_sdf_a((p), 0.0); float sdfb=max((p).y+1.0,length(vec3((p).x,(p).y+1.0,(p).z))-10.0); if (sdfa 50.0 || abs(dS.x) < 0.0001) break; } } //from https://www.shadertoy.com/view/lsKcDD float calcAO_o453504933653( in vec3 pos, in vec3 nor , float _seed_variation_) { float occ = 0.0; float sca = 1.0; for( int i=0; i<5; i++ ){ float h = 0.001 + 0.25*float(i)/4.0; float d = input_o453504933653( pos + h*nor , _seed_variation_).x; occ += (h-d)*sca; sca *= 0.98; } return clamp( 1.0 - 1.6*occ, 0.0, 1.0 ); } //from https://www.shadertoy.com/view/lsKcDD float calcSoftshadow_o453504933653( in vec3 ro, in vec3 rd, in float mint, in float tmax, float _seed_variation_) { float res = 1.0; float t = mint; float ph = 1e10; // big, such that y = 0 on the first iteration for( int i=0; i<32; i++ ){ float h = input_o453504933653( ro + rd*t , _seed_variation_).x; res = min( res, 10.0*h/t ); t += h; if( res<0.0001 || t>tmax ) break; } return clamp( res, 0.0, 1.0 ); } vec3 raymarch_o453504933653(vec2 uv, float _seed_variation_) { uv-=0.5; vec3 cam=vec3((sin(sin(elapsed_time*0.2)*0.5+0.5)*4.0),p_o453504933653_CamY,(sin(sin(elapsed_time*0.3)*0.5+0.5)*4.0))*p_o453504933653_CamZoom; vec3 lookat=vec3(p_o453504933653_LookAtX,p_o453504933653_LookAtY,p_o453504933653_LookAtZ); vec3 ray=normalize(lookat-cam); vec3 cX=normalize(cross(vec3(0.0,1.0,0.0),ray)); vec3 cY=normalize(cross(cX,ray)); vec3 rd = normalize(ray*p_o453504933653_CamD+cX*uv.x+cY*uv.y); vec3 ro = cam; float d=0.; vec3 p=vec3(0); vec2 dS=vec2(0); march_o453504933653(d,p,dS,ro,rd, _seed_variation_); vec3 color=vec3(0.0); vec3 objColor=(dS.y<0.5)?vec3(1.0,0.1,0.1):vec3(mod(floor((vec4(p,1.0)).x*2.0)+floor((vec4(p,1.0)).z*2.0),2.0))*0.9+0.1; vec3 light=normalize(vec3(p_o453504933653_SunX,p_o453504933653_SunY,p_o453504933653_SunZ)); if (d<50.0) { vec3 n=normal_o453504933653(p, _seed_variation_); float l=clamp(dot(-light,-n),0.0,1.0); vec3 ref=normalize(reflect(rd,-n)); float r=clamp(dot(ref,light),0.0,1.0); float cAO=mix(1.0,calcAO_o453504933653(p,n, _seed_variation_),p_o453504933653_AmbOcclusion); float shadow=mix(1.0,calcSoftshadow_o453504933653(p,light,0.05,5.0, _seed_variation_),p_o453504933653_Shadow); color=min(vec3(max(shadow,p_o453504933653_AmbLight)),max(l,p_o453504933653_AmbLight))*max(cAO,p_o453504933653_AmbLight)*objColor+pow(r,p_o453504933653_Pow)*p_o453504933653_Specular; //reflection d=0.01; march_o453504933653(d,p,dS,p,ref, _seed_variation_); vec3 objColorRef=vec3(0); if (d<50.0) { objColorRef=(dS.y<0.5)?vec3(1.0,0.1,0.1):vec3(mod(floor((vec4(p,1.0)).x*2.0)+floor((vec4(p,1.0)).z*2.0),2.0))*0.9+0.1; n=normal_o453504933653(p, _seed_variation_); l=clamp(dot(-light,-n),0.0,1.0); objColorRef=max(l,p_o453504933653_AmbLight)*objColorRef; } else { objColorRef=Simple360HDR_make360hdri(vec2((equirectangularMap(ref.xzy)).x,-(equirectangularMap(ref.xzy)).y+1.0),normalize(vec3(-p_o453504933653_SunX,p_o453504933653_SunY,-p_o453504933653_SunZ))).xyz; } color=mix(color,objColorRef,p_o453504933653_Reflection); } else { color=Simple360HDR_make360hdri(vec2((equirectangularMap(rd.xzy)).x,-(equirectangularMap(rd.xzy)).y+1.0),normalize(vec3(-p_o453504933653_SunX,p_o453504933653_SunY,-p_o453504933653_SunZ))).xyz; } return color; } void fragment() { float _seed_variation_ = seed_variation; vec3 o453504933653_0_1_rgb = raymarch_o453504933653(UV, _seed_variation_); COLOR = vec4(o453504933653_0_1_rgb, 1.0); } " [resource] shader = SubResource("Shader_igemj") shader_parameter/p_o453504933653_CamY = 0.525 shader_parameter/p_o453504933653_LookAtX = 0.0 shader_parameter/p_o453504933653_LookAtY = -3.85 shader_parameter/p_o453504933653_LookAtZ = 0.0 shader_parameter/p_o453504933653_CamD = 1.09 shader_parameter/p_o453504933653_CamZoom = 3.862