runnable fragment
code snippet
precision mediump float;
uniform vec2 resolution;
uniform float time;
float hash(vec2 p){return fract(sin(dot(p,vec2(19.19,73.17)))*43758.5453);}
float noise(vec2 p){vec2 i=floor(p),f=fract(p);f=f*f*(3.0-2.0*f);return mix(mix(hash(i),hash(i+vec2(1,0)),f.x),mix(hash(i+vec2(0,1)),hash(i+1.0),f.x),f.y);}
float fbm(vec2 p){float v=0.0,a=0.5;for(int i=0;i<5;i++){v+=a*noise(p);p*=2.1;a*=0.5;}return v;}
void main(){
vec2 uv=(gl_FragCoord.xy*2.0-resolution.xy)/min(resolution.x,resolution.y);
float r=length(uv);
float n=fbm(uv*4.0+time*0.22);
float disk=smoothstep(0.72,0.66,r+n*0.05);
float flare=pow(max(0.0,1.0-r),2.0)*0.7;
vec3 col=mix(vec3(0.1,0.0,0.0), vec3(1.0,0.25,0.02), disk);
col+=vec3(1.0,0.75,0.18)*(n*disk+flare);