The whole-file #import "file.wgsl" form (without ::) does not reliably bring functions into scope in naga_oil/Bevy 0.19 — the renderer was failing at runtime with 'no definition in scope for identifier: ray_direction' (and rot_x, deriv, etc.), producing a blank screen despite 'cargo build' passing (shaders aren't compile-checked at build time). Fix: add #define_import_path to each module file and import symbols explicitly via namespace::name (the canonical Bevy pattern from the shader_material_2d example). Verified the full shader pipeline compiles and runs at runtime with zero WGSL errors. This was a pre-existing bug masked by incomplete runtime verification in earlier tasks; it is NOT specific to Task 15's grid work. All earlier visual features (shadow, Doppler disk, Einstein halo, stars, planets, grid) now actually render.
30 lines
1.1 KiB
WebGPU Shading Language
30 lines
1.1 KiB
WebGPU Shading Language
// Hash-based procedural stars on the unit sphere. Returns RGB radiance.
|
|
#define_import_path singularity::stars
|
|
|
|
fn hash13(p: vec3<f32>) -> f32 {
|
|
var q = vec3<f32>(dot(p, vec3<f32>(127.1, 311.7, 74.7)),
|
|
dot(p, vec3<f32>(269.5, 183.3, 246.1)),
|
|
dot(p, vec3<f32>(113.5, 271.9, 124.6)));
|
|
let h = fract(sin(q) * 43758.5453);
|
|
return h.x;
|
|
}
|
|
|
|
fn star_color(dir: vec3<f32>, intensity: f32) -> vec3<f32> {
|
|
// Divide the sphere into cells; a cell gets a star if its hash passes a threshold.
|
|
let scale = 80.0;
|
|
let cell = floor(dir * scale);
|
|
let h = hash13(cell);
|
|
let threshold = 0.985; // ~1.5% of cells hold a star
|
|
if (h > threshold) {
|
|
// Brightness from the hash remainder.
|
|
let b = (h - threshold) / (1.0 - threshold);
|
|
let col = mix(vec3<f32>(0.6, 0.7, 1.0), vec3<f32>(1.0, 0.9, 0.7), b);
|
|
// Soften the star with the fractional position inside the cell.
|
|
let f = abs(dir * scale - cell);
|
|
let d = max(f.x, max(f.y, f.z));
|
|
let falloff = smoothstep(0.5, 0.0, d);
|
|
return col * b * falloff * 3.0 * intensity;
|
|
}
|
|
return vec3<f32>(0.0);
|
|
}
|