#import bevy_pbr::{ mesh_view_bindings::globals, forward_io::VertexOutput, } @group(2) @binding(0) var ring_radius: f32; @group(2) @binding(1) var jupiter_radius: f32; @fragment fn fragment(in: VertexOutput) -> @location(0) vec4 { let jupiter_percent = jupiter_radius / ring_radius; let color = vec3(0.3, 0.3, 0.3); var alpha = 0.01; let r = distance(in.uv, vec2(0.5)); alpha *= (sin(11*r / 0.71 * 3.1415) + 1) / 2; alpha *= (cos(r / 0.72 * 3.1415) + 1) / 2; if in.uv[0] < 0.5 { let dist = (0.5 - in.uv[0]) * 2.0; // 0.0=jupiter's center, 1.0=edge of the ring let side_dist = abs(in.uv[1] - 0.5); let cutoff = 0.5 * jupiter_percent * cos(dist); if side_dist < cutoff { return vec4(color, 0.0); } let fuzzy_boundary = 0.01; if side_dist < cutoff + fuzzy_boundary { return vec4(color, alpha * (side_dist - cutoff) / fuzzy_boundary); } } return vec4(color, alpha); }