cool blackhole shader

https://www.shadertoy.com/view/Xtcczs

 

a shader that i ported from shadertoy

Shader code
shader_type canvas_item;

uniform sampler2D iChannel0;
uniform sampler2D iChannel1;
uniform sampler2D iChannel2;

uniform float screen_resolution = 1;

mat2 rot_dist(float s, float d)
{
    float angularspeed = s * pow(d, 8.0);
    float cas = cos(angularspeed);
    float sas = sin(angularspeed);
    return mat2(vec2(cas, -sas), vec2(sas, cas));
}

void fragment()
{
	
	
    vec3 ring_color = vec3(0.976, 0.447, 0.023);
    
    vec2 uv = FRAGCOORD.xy/(1.0 / SCREEN_PIXEL_SIZE);
    float ratio = (1.0 / SCREEN_PIXEL_SIZE).y/(1.0 / SCREEN_PIXEL_SIZE).x;
    uv.y *= ratio;
    
    vec2 center = ((1.0 / SCREEN_PIXEL_SIZE).xy * .5f) / (1.0 / SCREEN_PIXEL_SIZE).xy;
    //center = iMouse.xy / iResolution.xy;
    center.y *= ratio;
    
    float _dist = distance(uv, center);
    float _s = .15;
    float _a = .005;
    vec2 uvp = uv + min(texture(iChannel2, _s * vec2(uv.x + TIME * .1, uv.y + TIME * -.3)).r,
                        texture(iChannel2, _s * vec2(uv.x + TIME * -.3, uv.y + TIME * .2)).r) * _a * pow(1. - _dist, 5.);
    
    float dist = distance(uvp, center);
    float idist = 1.0 - dist;
    vec2 dir = normalize(uv - center);
    
    // Mask
    float m = step(.06, dist);
    m *= smoothstep(.065, .08, dist);
    m = (1.0 - dist * 1.6) * 2. * m;
	float mask = m;
    
    // Phases
    float speed = -0.06;
    float phase1 = fract(TIME * speed + .5);
    float phase2 = fract(TIME * speed);
    
    float pidist = pow(idist, 2.3);
    vec2 uv1 = (dir * pidist * .2) + phase1 * dir;
    vec2 uv2 = (dir * pidist * .2) + phase2 * dir;
    
    // Samplings
    float lerp = abs((.5 - phase1) / .5);
    float sampling1 = texture(iChannel0, uv1 * rot_dist(2.4, idist)).r;
    float sampling2 = texture(iChannel0, uv2 * rot_dist(2.4, idist)).r;
    
    float sampling3 = texture(iChannel0, uv1 * 2. * rot_dist(2.6, idist)).g;
    float sampling4 = texture(iChannel0, uv2 * 2. * rot_dist(2.6, idist)).g;
    
    float sampling5 = texture(iChannel1, uv1 * rot_dist(4.6, idist) * .4).r;
    float sampling6 = texture(iChannel1, uv2 * rot_dist(4.6, idist) * .6).r;
    
    float stars = (1. - smoothstep(0.22, 0.34, mix(sampling3, sampling4, lerp))) * 0.4;
    
    vec3 sp = mix(sampling1, sampling2, lerp) * vec3(1.);
    sp *= 0.2;
   	sp += stars * vec3(0.13, 0.31, 0.46);
    sp += smoothstep(0.26, 0.14, mix(sampling5, sampling6, lerp)) * vec3(0.7) * pow(idist, 8.) * ring_color;
    
    vec3 finalSamp = sp;
    vec3 col = ring_color * pow(1.0 - dist, 7.);
    float ring = pow(smoothstep(.32, .08, dist * 1.5) * 3.5, 2.8) + 1.;

    
    
    COLOR = vec4(finalSamp * mask + 1.2 * ring * mask * finalSamp * col, 1.);
}
Live Preview
Tags
#shadertoy
This shader is a port from an existing Shadertoy project. Shadertoy shaders are by default protected under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) license unless anything else has been stated by the author. For more info, see our License terms.

More from snesmocha

Related shaders

guest

3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
kago
kago
1 year ago

how use it?

paul
paul
6 months ago
Reply to  kago

You need to make a shader material, then a new shader script and copy past the script. Then go to shader parameters and add a noise texture with a FastNoiseLite noise for each parameter. The resolution parameter is useless, you can delete it.

paul
paul
6 months ago

Ok so I really want to use this shader for my game but it’s not a free game so I guess it falls under commercial use. I wanted to talk directly with the owner of the shader but the link you gave didn’t work.

https://www.shadertoy.com/view/Xtcczs