Search across packages, versions, files, declarations, and comments. Use multiple terms to narrow results (AND), and add @vertex, @fragment, or @compute to filter by shader stage.
1import package::{
2 meshlet::visibility_buffer_resolve::resolve_vertex_output,
3 prepass::io as prepass_io,
4 render::{
5 view_transformations::uv_to_ndc,
6 pbr_prepass_functions,
7 utils::rand_f,
8 },
9};
11@vertex
12fn vertex(@builtin(vertex_index) vertex_input: u32) -> @builtin(position) vec4<f32> {
13 let vertex_index = vertex_input % 3u;
14 let material_id = vertex_input / 3u;
15 let material_depth = f32(material_id) / 65535.0;
16 let uv = vec2<f32>(vec2(vertex_index >> 1u, vertex_index & 1u)) * 2.0;
17 return vec4(uv_to_ndc(uv), material_depth, 1.0);
20@fragment
21fn fragment(@builtin(position) frag_coord: vec4<f32>) -> @location(0) vec4<f32> {
22 let vertex_output = resolve_vertex_output(frag_coord);
23 var rng = vertex_output.cluster_id;
24 let color = vec3(rand_f(&rng), rand_f(&rng), rand_f(&rng));
25 return vec4(color, 1.0);
28@if(PREPASS_FRAGMENT)
29@fragment
30fn prepass_fragment(@builtin(position) frag_coord: vec4<f32>) -> prepass_io::FragmentOutput {
31 let vertex_output = resolve_vertex_output(frag_coord);
33 var out: prepass_io::FragmentOutput;
35 @if(NORMAL_PREPASS)
36 out.normal = vec4(vertex_output.world_normal * 0.5 + vec3(0.5), 1.0);
38 @if(MOTION_VECTOR_PREPASS)
39 out.motion_vector = vertex_output.motion_vector;
41 @if(DEFERRED_PREPASS)
42 // There isn't any material info available for this default prepass shader so we are just writing 
43 // emissive magenta out to the deferred gbuffer to be rendered by the first deferred lighting pass layer.
44 // This is here so if the default prepass fragment is used for deferred magenta will be rendered, and also
45 // as an example to show that a user could write to the deferred gbuffer if they were to start from this shader.
46 out.deferred = vec4(0u, package::render::rgb9e5::vec3_to_rgb9e5_(vec3(1.0, 0.0, 1.0)), 0u, 0u);
47 @if(DEFERRED_PREPASS)
48 out.deferred_lighting_pass_id = 1u;
50 return out;
Contents