run method
Returns linear RGBA for attachment zero. Null discards the fragment.
Implementation
@override
Vector4? run(Float32List v, ShaderBindings bindings, FragmentContext c) {
if (!_maskPasses(bindings, v)) return null;
final light = bindings.vec4('ShadowLight', 'light', Vector4.zero());
final range = math.max(light.w, 1e-4);
final world = Vector3(v[kVWorld], v[kVWorld + 1], v[kVWorld + 2]);
final distance = (world - Vector3(light.x, light.y, light.z)).length;
return Vector4((distance / range).clamp(0.0, 1.0), 0.0, 0.0, 1.0);
}