mirror of
https://github.com/bevyengine/bevy
synced 2024-11-29 08:00:20 +00:00
4bf20e7d27
# Objective - Materials should be a more frequent rebind then meshes (due to being able to use a single vertex buffer, such as in #10164) and therefore should be in a higher bind group. --- ## Changelog - For 2d and 3d mesh/material setups (but not UI materials, or other rendering setups such as gizmos, sprites, or text), mesh data is now in bind group 1, and material data is now in bind group 2, which is swapped from how they were before. ## Migration Guide - Custom 2d and 3d mesh/material shaders should now use bind group 2 `@group(2) @binding(x)` for their bound resources, instead of bind group 1. - Many internal pieces of rendering code have changed so that mesh data is now in bind group 1, and material data is now in bind group 2. Semi-custom rendering setups (that don't use the Material or Material2d APIs) should adapt to these changes.
38 lines
1.1 KiB
WebGPU Shading Language
38 lines
1.1 KiB
WebGPU Shading Language
#import bevy_pbr::{
|
|
mesh_view_bindings::globals,
|
|
prepass_utils,
|
|
forward_io::VertexOutput,
|
|
}
|
|
|
|
struct ShowPrepassSettings {
|
|
show_depth: u32,
|
|
show_normals: u32,
|
|
show_motion_vectors: u32,
|
|
padding_1: u32,
|
|
padding_2: u32,
|
|
}
|
|
@group(2) @binding(0) var<uniform> settings: ShowPrepassSettings;
|
|
|
|
@fragment
|
|
fn fragment(
|
|
#ifdef MULTISAMPLED
|
|
@builtin(sample_index) sample_index: u32,
|
|
#endif
|
|
mesh: VertexOutput,
|
|
) -> @location(0) vec4<f32> {
|
|
#ifndef MULTISAMPLED
|
|
let sample_index = 0u;
|
|
#endif
|
|
if settings.show_depth == 1u {
|
|
let depth = bevy_pbr::prepass_utils::prepass_depth(mesh.position, sample_index);
|
|
return vec4(depth, depth, depth, 1.0);
|
|
} else if settings.show_normals == 1u {
|
|
let normal = bevy_pbr::prepass_utils::prepass_normal(mesh.position, sample_index);
|
|
return vec4(normal, 1.0);
|
|
} else if settings.show_motion_vectors == 1u {
|
|
let motion_vector = bevy_pbr::prepass_utils::prepass_motion_vector(mesh.position, sample_index);
|
|
return vec4(motion_vector / globals.delta_time, 0.0, 1.0);
|
|
}
|
|
|
|
return vec4(0.0);
|
|
}
|