A magical anomaly

The shader is designed to conjure an aura of magic, a sprinkle of sorcery, or a malevolent anomaly—radiation itself.
It includes two ready-to-use shaders: one for the artifact and one for the shell that envelops it.

For the artifact, copy the code below:

shader_type spatial;

render_mode cull_disabled;

 

uniform sampler2D albedo_tex : source_color, filter_linear_mipmap;

uniform vec2 uv_scale  = vec2(3.0);

uniform vec2 uv_offset = vec2(0.0);

 

uniform float time_speed    = 1.0;

uniform float wave_strength = 0.5;

uniform float noise_scale   = 2.0;

 

float hash(vec3 p) {

    return fract(sin(dot(p, vec3(12.9898, 78.233, 45.164))) * 43758.5453);

}

 

void vertex() {

    float t = TIME * time_speed;

    vec3 seed = VERTEX * noise_scale + vec3(0.0, 0.0, t);

    float dx = hash(seed + vec3(0.0)) * 2.0 – 1.0;

    float dy = hash(seed + vec3(1.0)) * 2.0 – 1.0;

    float dz = hash(seed + vec3(2.0)) * 2.0 – 1.0;

    vec3 offset = vec3(dx, dy, dz) * wave_strength;

    VERTEX += offset;

}

 

void fragment() {

    vec2 uv = UV * uv_scale + uv_offset;

    ALBEDO = texture(albedo_tex, uv).rgb;

 

}

Copy the main shell code below!

To avoid any extra questions on how to apply the shader, here’s the quick guide:

  1. Add a MeshInstance3D.
  2. Create a new ShaderMaterial.
  3. Paste the code.
  • Customize to taste.

    Note: Add lighting and any item to the shell! This should be clear to any fool… 💞 I love you! 💞

    By: WhyNilliana ( P.S.: She tried so hard 😘 )

Shader code
shader_type spatial;
render_mode blend_add, cull_disabled, unshaded;

uniform sampler2D albedo_tex : source_color, filter_linear_mipmap;
uniform sampler2D noise_tex : hint_normal;
uniform sampler2D screen_tex : hint_screen_texture, filter_linear_mipmap;

uniform vec2 uv_scale = vec2(3.0);
uniform vec2 uv_offset = vec2(0.0);

uniform float mesh_time_speed = 1.2;
uniform float mesh_wave_strength = 0.3;
uniform float mesh_noise_scale = 1.5;

uniform float distort_strength = 0.08;
uniform float distort_scale = 2.0;

uniform vec4 glow_color : source_color = vec4(0.1, 1.0, 0.3, 1.0);
uniform float pulse_speed = 2.0;
uniform float pulse_strength = 0.7;
uniform float emission_power = 3.0;
uniform float alpha_base = 0.7;

void vertex() {
    float t = TIME * mesh_time_speed;
    vec3 noise_pos = VERTEX * mesh_noise_scale + vec3(0.0, 0.0, t);
    vec3 noise_vec = (texture(noise_tex, noise_pos.xz).rgb - 0.5) * 2.0;
    float pulse = sin(t * pulse_speed) * 0.5 + 0.5;
    VERTEX += NORMAL * mesh_wave_strength * (pulse + 0.5);
    VERTEX += noise_vec * mesh_wave_strength * 0.4;
}

void fragment() {
    float t = TIME * mesh_time_speed;
    vec2 uv = UV * uv_scale + uv_offset + vec2(t * 0.02, t * 0.01);
    float pulse = sin(t * pulse_speed) * 0.5 + 0.5;
    vec2 noise_uv = UV * distort_scale + t * 0.1;
    vec2 distort = (texture(noise_tex, noise_uv).rg - 0.5) * 2.0 * distort_strength;
    vec3 bg = texture(screen_tex, SCREEN_UV + distort).rgb;
    vec4 tex = texture(albedo_tex, uv);
    vec3 col = tex.rgb * glow_color.rgb * (pulse * pulse_strength + 0.4);
    float alpha = alpha_base * (pulse * 0.3 + 0.7);
    ALBEDO = mix(bg, col, alpha);
    ALPHA = alpha;
    EMISSION = col * emission_power * pulse;
}
Live Preview
Tags
shader
The shader code and all code snippets in this post are under CC0 license and can be used freely without the author's permission. Images and videos, and assets depicted in those, do not fall under this license. For more info, see our License terms.

More from WhyNilliana

Related shaders

guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments