Phantom Star for Godot 4.2
JUST A COPY OF Phantom Star for CineShader
https://www.shadertoy.com/view/ttKGDt
Shader code
shader_type canvas_item;
uniform float alpha : hint_range(0.0, 2.0, 0.2) = 1.0 ;
mat2 rot(float a) {
float c = cos(a), s = sin(a);
return mat2(vec2(c,s), vec2(-s,c));
}
const float pi = acos(-1.0);
const float pi2 = pi*2.0;
vec2 pmod(vec2 p, float r) {
float a = atan(p.x, p.y) + pi/r;
float n = pi2 / r;
a = floor(a/n)*n;
return p*rot(-a);
}
float box( vec3 p, vec3 b ) {
vec3 d = abs(p) - b;
return min(max(d.x,max(d.y,d.z)),0.0) + length(max(d,0.0));
}
float ifsBox(vec3 p, float iTime) {
for (int i=0; i<5; i++) {
p = abs(p) - 1.0;
p.xy *= rot(iTime*0.3);
p.xz *= rot(iTime*0.1);
}
p.xz *= rot(iTime);
return box(p, vec3(0.4,0.8,0.3));
}
float map(vec3 p, vec3 cPos, float time) {
vec3 p1 = p;
p1.x = mod(p1.x-5., 10.) - 5.;
p1.y = mod(p1.y-5., 10.) - 5.;
p1.z = mod(p1.z, 16.)-8.;
p1.xy = pmod(p1.xy, 5.0);
return ifsBox(p1, time);
}
void vertex() {
// Called for every vertex the material is visible on.
}
void fragment() {
// Called for every pixel the material is visible on.
vec2 iResolution = 1.0 / SCREEN_PIXEL_SIZE;
vec2 p = (FRAGCOORD.xy * 2.0 - iResolution.xy) / min(iResolution.x, iResolution.y);
vec3 cPos = vec3(0.0,0.0, -3.0 * TIME);
// vec3 cPos = vec3(0.3*sin(iTime*0.8), 0.4*cos(iTime*0.3), -6.0 * iTime);
vec3 cDir = normalize(vec3(0.0, 0.0, -1.0));
vec3 cUp = vec3(sin(TIME), 1.0, 0.0);
vec3 cSide = cross(cDir, cUp);
vec3 ray = normalize(cSide * p.x + cUp * p.y + cDir);
// Phantom Mode https://www.shadertoy.com/view/MtScWW by aiekick
float acc = 0.0;
float acc2 = 0.0;
float t = 0.0;
for (int i = 0; i < 99; i++) {
vec3 pos = cPos + ray * t;
float dist = map(pos, cPos, TIME);
dist = max(abs(dist), 0.02);
float a = exp(-dist*3.0);
if (mod(length(pos)+24.0*TIME, 30.0) < 3.0) {
a *= 2.0;
acc2 += a;
}
acc += a;
t += dist * 0.5;
}
vec3 col = vec3(acc * 0.01, acc * 0.011 + acc2*0.002, acc * 0.012+ acc2*0.005);
COLOR = vec4(col, (1.0 - t * 0.03) * alpha);
}
//void light() {
// Called for every pixel for every light affecting the CanvasItem.
// Uncomment to replace the default light processing function with this one.
//}