
- Copy module docs so that they show up in the re-export - Change meshlet_id to cluster_id in the debug visualization - Small doc tweaks
53 lines
1.8 KiB
WebGPU Shading Language
53 lines
1.8 KiB
WebGPU Shading Language
#import bevy_pbr::{
|
||
meshlet_visibility_buffer_resolve::resolve_vertex_output,
|
||
view_transformations::uv_to_ndc,
|
||
prepass_io,
|
||
pbr_prepass_functions,
|
||
utils::rand_f,
|
||
}
|
||
|
||
@vertex
|
||
fn vertex(@builtin(vertex_index) vertex_input: u32) -> @builtin(position) vec4<f32> {
|
||
let vertex_index = vertex_input % 3u;
|
||
let material_id = vertex_input / 3u;
|
||
let material_depth = f32(material_id) / 65535.0;
|
||
let uv = vec2<f32>(vec2(vertex_index >> 1u, vertex_index & 1u)) * 2.0;
|
||
return vec4(uv_to_ndc(uv), material_depth, 1.0);
|
||
}
|
||
|
||
@fragment
|
||
fn fragment(@builtin(position) frag_coord: vec4<f32>) -> @location(0) vec4<f32> {
|
||
let vertex_output = resolve_vertex_output(frag_coord);
|
||
var rng = vertex_output.cluster_id;
|
||
let color = vec3(rand_f(&rng), rand_f(&rng), rand_f(&rng));
|
||
return vec4(color, 1.0);
|
||
}
|
||
|
||
#ifdef PREPASS_FRAGMENT
|
||
@fragment
|
||
fn prepass_fragment(@builtin(position) frag_coord: vec4<f32>) -> prepass_io::FragmentOutput {
|
||
let vertex_output = resolve_vertex_output(frag_coord);
|
||
|
||
var out: prepass_io::FragmentOutput;
|
||
|
||
#ifdef NORMAL_PREPASS
|
||
out.normal = vec4(vertex_output.world_normal * 0.5 + vec3(0.5), 1.0);
|
||
#endif
|
||
|
||
#ifdef MOTION_VECTOR_PREPASS
|
||
out.motion_vector = vertex_output.motion_vector;
|
||
#endif
|
||
|
||
#ifdef DEFERRED_PREPASS
|
||
// There isn't any material info available for this default prepass shader so we are just writing
|
||
// emissive magenta out to the deferred gbuffer to be rendered by the first deferred lighting pass layer.
|
||
// This is here so if the default prepass fragment is used for deferred magenta will be rendered, and also
|
||
// as an example to show that a user could write to the deferred gbuffer if they were to start from this shader.
|
||
out.deferred = vec4(0u, bevy_pbr::rgb9e5::vec3_to_rgb9e5_(vec3(1.0, 0.0, 1.0)), 0u, 0u);
|
||
out.deferred_lighting_pass_id = 1u;
|
||
#endif
|
||
|
||
return out;
|
||
}
|
||
#endif
|