
# Objective cleanup some pbr shader code. improve shader stage io consistency and make pbr.wgsl (probably many people's first foray into bevy shader code) a little more human-readable. also fix a couple of small issues with deferred rendering. ## Solution mesh_vertex_output: - rename to forward_io (to align with prepass_io) - rename `MeshVertexOutput` to `VertexOutput` (to align with prepass_io) - move `Vertex` from mesh.wgsl into here (to align with prepass_io) prepass_io: - remove `FragmentInput`, use `VertexOutput` directly (to align with forward_io) - rename `VertexOutput::clip_position` to `position` (to align with forward_io) pbr.wgsl: - restructure so we don't need `#ifdefs` on the actual entrypoint, use VertexOutput and FragmentOutput in all cases and use #ifdefs to import the right struct definitions. - rearrange to make the flow clearer - move alpha_discard up from `pbr_functions::pbr` to avoid needing to call it on some branches and not others - add a bunch of comments deferred_lighting: - move ssao into the `!unlit` block to reflect forward behaviour correctly - fix compile error with deferred + premultiply_alpha ## Migration Guide in custom material shaders: - `pbr_functions::pbr` no longer calls to `pbr_functions::alpha_discard`. if you were using the `pbr` function in a custom shader with alpha mask mode you now also need to call alpha_discard manually - rename imports of `bevy_pbr::mesh_vertex_output` to `bevy_pbr::forward_io` - rename instances of `MeshVertexOutput` to `VertexOutput` in custom material prepass shaders: - rename instances of `VertexOutput::clip_position` to `VertexOutput::position`
25 lines
931 B
WebGPU Shading Language
25 lines
931 B
WebGPU Shading Language
#import bevy_pbr::mesh_view_bindings
|
|
#import bevy_pbr::mesh_bindings
|
|
#import bevy_pbr::forward_io VertexOutput
|
|
|
|
@group(1) @binding(0) var test_texture_1d: texture_1d<f32>;
|
|
@group(1) @binding(1) var test_texture_1d_sampler: sampler;
|
|
|
|
@group(1) @binding(2) var test_texture_2d: texture_2d<f32>;
|
|
@group(1) @binding(3) var test_texture_2d_sampler: sampler;
|
|
|
|
@group(1) @binding(4) var test_texture_2d_array: texture_2d_array<f32>;
|
|
@group(1) @binding(5) var test_texture_2d_array_sampler: sampler;
|
|
|
|
@group(1) @binding(6) var test_texture_cube: texture_cube<f32>;
|
|
@group(1) @binding(7) var test_texture_cube_sampler: sampler;
|
|
|
|
@group(1) @binding(8) var test_texture_cube_array: texture_cube_array<f32>;
|
|
@group(1) @binding(9) var test_texture_cube_array_sampler: sampler;
|
|
|
|
@group(1) @binding(10) var test_texture_3d: texture_3d<f32>;
|
|
@group(1) @binding(11) var test_texture_3d_sampler: sampler;
|
|
|
|
@fragment
|
|
fn fragment(in: VertexOutput) {}
|