indicatrix 0.9.0

A physically-based spectral gemstone renderer that turns GemCAD-style cutting instructions into rendered output.
Documentation
@compute @workgroup_size(64)
fn ew_generate(@builtin(global_invocation_id) gid: vec3<u32>) {
    let i = gid.x;
    if (i >= ew.chunk_rays) {
        return;
    }

    let gen = transport_generate_ray(i);

    var s: BounceRay;
    s.origin = gen.origin;
    s.dir = gen.dir;
    s.k = gen.dir;
    s.prev_plane_normal = vec3<f32>(0.0, 0.0, 0.0);
    s.pending_light_mis_dir = vec3<f32>(0.0, 0.0, 0.0);
    s.nee_xyz = vec3<f32>(0.0, 0.0, 0.0);
    s.pending_light_mis = 0.0;
    s.inside_gem = false;
    s.is_extraordinary = false;
    s.have_prev_plane_normal = false;
    s.path_escaped = false;
    for (var k: u32 = 0u; k < NUM_CHANNELS; k = k + 1u) {
        s.lambdas[k] = gen.lambdas[k];
        s.stokes[k] = vec4<f32>(1.0, 0.0, 0.0, 0.0);
        s.radiance[k] = 0.0;
        s.path_pdf[k] = 1.0;
        s.split_radiance[k] = 0.0;
        s.compat[k] = 0xFFu;
    }

    ew_store(i, s);

    ray_core[i].observer = vec4<f32>(-gen.dir, 0.0);
    ray_core[i].ray_meta.y = gen.seed0;
    ray_core[i].ray_meta.z = TAG_EXTEND;
    ray_core[i].ray_meta.w = i;
}