material-maker/splash_screen/backgrounds/paulo_falcao_fractal_octahe...

395 lines
14 KiB
Plaintext

[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<sdfb) {
return vec2(sdfa,0.0);
} else {
return vec2(sdfb,1.0);
}
}
//tetrahedron normal by PauloFalcao
//https://www.shadertoy.com/view/XstGDS
vec3 normal_o453504933653(vec3 p, float _seed_variation_) {
const vec3 e=vec3(0.001,-0.001,0.0);
float v1=input_o453504933653(p+e.xyy, _seed_variation_).x;
float v2=input_o453504933653(p+e.yyx, _seed_variation_).x;
float v3=input_o453504933653(p+e.yxy, _seed_variation_).x;
float v4=input_o453504933653(p+e.xxx, _seed_variation_).x;
return normalize(vec3(v4+v1-v3-v2,v3+v4-v1-v2,v2+v4-v3-v1));
}
void march_o453504933653(inout float d,inout vec3 p,inout vec2 dS, vec3 ro, vec3 rd, float _seed_variation_) {
for (int i=0; i < 500; i++) {
p = ro + rd*d;
dS = input_o453504933653(p, _seed_variation_);
d += dS.x;
if (d > 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