bevy_lit 0.9.1

A lighting 2d library for Bevy
Documentation
#import bevy_lit::{
    view_transformations::frag_to_world,
    light2d_common::{
        VertexOutput,
        settings,
        view,
        get_sdf,
        attenuation,
        raymarch
    },
}

struct TextureLight2d {
    color: vec4<f32>,
    cast_shadows: u32,
}

@group(1) @binding(0) var<uniform> light: TextureLight2d;
@group(1) @binding(1) var light_texture: texture_2d<f32>;
@group(1) @binding(2) var light_sampler: sampler;

@fragment
fn fragment(in: VertexOutput) -> @location(0) vec4<f32> {
    let light_sample = textureSample(light_texture, light_sampler, in.uv);

    if light_sample.a <= 0.0 {
        discard;
    }

    var light_contrib = light.color.rgb * light_sample.rgb * light_sample.a;

    let pos = frag_to_world(in.clip_position / settings.scale, view).xy;
    let light_center = in.translation_rotation.xy;
    let sdf = get_sdf(pos);

    // inside occluder
    if sdf <= 0.0 {
        light_contrib *= select(0.0, 1.0, bool(settings.tint_occluders));
    } else {
        if bool(light.cast_shadows) {
            light_contrib *= raymarch(pos, light_center);
        }
    }

    if settings.edge_intensity > 0.0 && sdf > 0.0 {
        let edge_intensity = 1.0 / sdf * settings.edge_intensity;
        light_contrib += light_contrib * edge_intensity * 1.0;
    }

    return vec4<f32>(light_contrib, 1.0);
}