mirror of
https://github.com/bevyengine/bevy
synced 2024-11-22 20:53:53 +00:00
c7eaedd6a1
# Objective - The old post processing example doesn't use the actual post processing features of bevy. It also has some issues with resizing. It's also causing some confusion for people because accessing the prepass textures from it is not easy. - There's already a render to texture example - At this point, it's mostly obsolete since the post_process_pass example is more complete and shows the recommended way to do post processing in bevy. It's a bit more complicated, but it's well documented and I'm working on simplifying it even more ## Solution - Remove the old post_processing example - Rename post_process_pass to post_processing ## Reviewer Notes The diff is really noisy because of the rename, but I didn't change any code in the example. --------- Co-authored-by: James Liu <contact@jamessliu.com>
48 lines
1.6 KiB
WebGPU Shading Language
48 lines
1.6 KiB
WebGPU Shading Language
// This shader computes the chromatic aberration effect
|
||
|
||
#import bevy_pbr::utils
|
||
|
||
// Since post processing is a fullscreen effect, we use the fullscreen vertex shader provided by bevy.
|
||
// This will import a vertex shader that renders a single fullscreen triangle.
|
||
//
|
||
// A fullscreen triangle is a single triangle that covers the entire screen.
|
||
// The box in the top left in that diagram is the screen. The 4 x are the corner of the screen
|
||
//
|
||
// Y axis
|
||
// 1 | x-----x......
|
||
// 0 | | s | . ´
|
||
// -1 | x_____x´
|
||
// -2 | : .´
|
||
// -3 | :´
|
||
// +--------------- X axis
|
||
// -1 0 1 2 3
|
||
//
|
||
// As you can see, the triangle ends up bigger than the screen.
|
||
//
|
||
// You don't need to worry about this too much since bevy will compute the correct UVs for you.
|
||
#import bevy_core_pipeline::fullscreen_vertex_shader
|
||
|
||
@group(0) @binding(0)
|
||
var screen_texture: texture_2d<f32>;
|
||
@group(0) @binding(1)
|
||
var texture_sampler: sampler;
|
||
struct PostProcessSettings {
|
||
intensity: f32,
|
||
}
|
||
@group(0) @binding(2)
|
||
var<uniform> settings: PostProcessSettings;
|
||
|
||
@fragment
|
||
fn fragment(in: FullscreenVertexOutput) -> @location(0) vec4<f32> {
|
||
// Chromatic aberration strength
|
||
let offset_strength = settings.intensity;
|
||
|
||
// Sample each color channel with an arbitrary shift
|
||
return vec4<f32>(
|
||
textureSample(screen_texture, texture_sampler, in.uv + vec2<f32>(offset_strength, -offset_strength)).r,
|
||
textureSample(screen_texture, texture_sampler, in.uv + vec2<f32>(-offset_strength, 0.0)).g,
|
||
textureSample(screen_texture, texture_sampler, in.uv + vec2<f32>(0.0, offset_strength)).b,
|
||
1.0
|
||
);
|
||
}
|
||
|