void background

inspired by Pink Void 🧼

Main image shader use this parameters

shader_parameter/center = Vector2(0.5, 0.5)
shader_parameter/speed = 0.2
shader_parameter/phase = 0.0
shader_parameter/size = 1.155
shader_parameter/background_color = Color(0.03529412, 0, 0.043137256, 1)
shader_parameter/inner_color = Color(0.15686275, 0, 1, 1)
shader_parameter/mid_color = Color(1, 0.32156864, 0.3529412, 1)
shader_parameter/outer_color = Color(0.51394886, 0.04124216, 0.32970935, 1)
shader_parameter/ring_shift = 0.0
shader_parameter/ring_sharpness = 1.0
shader_parameter/FALLOFF = 2.0
shader_parameter/noise_gain = 1.0
 

and this noise

[gd_resource type=“NoiseTexture3D” load_steps=2 format=3]

[sub_resource type=“FastNoiseLite” id=“FastNoiseLite”]
noise_type = 0
seed = 1337
frequency = 0.125
fractal_type = 0

[resource]
noise = SubResource(“FastNoiseLite”)
seamless = true
normalize = false
 

 

 

Shader code
shader_type canvas_item;

uniform vec2 center = vec2(0.5, 0.5);
uniform float speed : hint_range(0.0, 2.0, 0.01) = 0.2;
uniform float phase = 0.0;
uniform float size : hint_range(0.05, 5.0, 0.01) = 1.155;
uniform vec3 background_color : source_color = vec3(0.0, 0.0, 0.0);
uniform vec3 inner_color : source_color = vec3(0.0, 0.0, 1.0);
uniform vec3 mid_color : source_color = vec3(1.0, 0.0, 0.0);
uniform vec3 outer_color : source_color = vec3(0.0, 1.0, 0.0);
uniform float ring_shift : hint_range(-0.4, 0.4, 0.005) = 0.0;
uniform float ring_sharpness : hint_range(0.05, 3.0, 0.01) = 1.0;

uniform float FALLOFF : hint_range(-10.0, 10.0, 0.01) = 2.0;

const float TWIST = 1.4;
const float FIELD = 2.8;
const float WARP = 2.0;
const float BULGE = -0.4;

uniform sampler3D noise_tex : filter_linear, repeat_enable;

const float NOISE_PERIOD = 8.0;
uniform float noise_gain : hint_range(0.0, 2.0, 0.01) = 1.0;

float snoise(vec3 v) {
    return (texture(noise_tex, v * (1.0 / NOISE_PERIOD)).r * 2.0 - 1.0) * noise_gain;
}

float fbm3d(vec3 x, const in int it) {
    float v = 0.0;
    float a = 0.5;
    vec3 shift = vec3(100);

    
    for (int i = 0; i < 32; ++i) {
        if(i<it) {
            v += a * snoise(x);
            x = x * 2.0 + shift;
            a *= 0.5;
        }
    }
    return v;
}

vec2 rot(vec2 v, float a) {
	float c = cos(a);
	float s = sin(a);
	return mat2(vec2(c, s), vec2(-s, c)) * v;
}

void fragment()
{
	vec2 rect_px = 1.0 / fwidth(UV);
	float aspect = rect_px.x / rect_px.y;
	vec2 uv = ((UV - center) * vec2(aspect, 1.0)) / size;

	float rad = sqrt(dot(uv, uv) + 0.001);
	float lr = log(rad);
	vec2 p = rot(uv, -lr * TWIST) * FIELD;
			
	float x = fbm3d(
		vec3(
			p,
			lr * 0.3 + phase * .1
		),
		3
	);

	float y = fbm3d(
		vec3(
			p,
			lr * 0.5 + phase * .1
		),
		4
	);
	vec2 q = vec2(x, y);

	float r = fbm3d(
		vec3(
			p + q * WARP,
			lr * 0.4 + phase * .2
		),
		5
	);

	float rr = rad * (1.0 + r * BULGE);
	float c = 1.0 - exp(-rr * FALLOFF);
    
	vec3 band_mid = vec3(0.4, 0.5, 0.375) + ring_shift;
	vec3 band_half = vec3(0.1, 0.075, 0.175) * ring_sharpness;
	vec3 bands = smoothstep(band_mid - band_half, band_mid + band_half, vec3(c));
	vec3 swirl = bands.z * inner_color
			+ bands.x * mid_color
			+ bands.y * outer_color;

	float bg = min( bands.x, min( bands.y, bands.z ) );

	COLOR = vec4( mix( swirl, background_color, bg ), 1 );
}
Live Preview
Tags
background, void
The shader code and all code snippets in this post are under MIT license and can be used freely. Images and videos, and assets depicted in those, do not fall under this license. For more info, see our License terms.

Related shaders

guest

0 Comments
Oldest
Newest Most Voted