 979c4094d4
			
		
	
	
		979c4094d4
		
			
		
	
	
	
	
		
			
			# 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`
		
			
				
	
	
		
			17 lines
		
	
	
		
			534 B
		
	
	
	
		
			WebGPU Shading Language
		
	
	
	
	
	
			
		
		
	
	
			17 lines
		
	
	
		
			534 B
		
	
	
	
		
			WebGPU Shading Language
		
	
	
	
	
	
| #define_import_path bevy_sprite::mesh2d_vertex_output
 | |
| 
 | |
| struct VertexOutput {
 | |
|     // this is `clip position` when the struct is used as a vertex stage output 
 | |
|     // and `frag coord` when used as a fragment stage input
 | |
|     @builtin(position) position: vec4<f32>,
 | |
|     @location(0) world_position: vec4<f32>,
 | |
|     @location(1) world_normal: vec3<f32>,
 | |
|     @location(2) uv: vec2<f32>,
 | |
|     #ifdef VERTEX_TANGENTS
 | |
|     @location(3) world_tangent: vec4<f32>,
 | |
|     #endif
 | |
|     #ifdef VERTEX_COLORS
 | |
|     @location(4) color: vec4<f32>,
 | |
|     #endif
 | |
| }
 |