mirror of
https://github.com/bevyengine/bevy
synced 2025-01-02 00:08:53 +00:00
53667dea56
![image](https://user-images.githubusercontent.com/47158642/214374911-412f0986-3927-4f7a-9a6c-413bdee6b389.png) # Objective - Implement an alternative antialias technique - TAA scales based off of view resolution, not geometry complexity - TAA filters textures, firefly pixels, and other aliasing not covered by MSAA - TAA additionally will reduce noise / increase quality in future stochastic rendering techniques - Closes https://github.com/bevyengine/bevy/issues/3663 ## Solution - Add a temporal jitter component - Add a motion vector prepass - Add a TemporalAntialias component and plugin - Combine existing MSAA and FXAA examples and add TAA ## Followup Work - Prepass motion vector support for skinned meshes - Move uniforms needed for motion vectors into a separate bind group, instead of using different bind group layouts - Reuse previous frame's GPU view buffer for motion vectors, instead of recomputing - Mip biasing for sharper textures, and or unjitter texture UVs https://github.com/bevyengine/bevy/issues/7323 - Compute shader for better performance - Investigate FSR techniques - Historical depth based disocclusion tests, for geometry disocclusion - Historical luminance/hue based tests, for shading disocclusion - Pixel "locks" to reduce blending rate / revamp history confidence mechanism - Orthographic camera support for TemporalJitter - Figure out COD's 1-tap bicubic filter --- ## Changelog - Added MotionVectorPrepass and TemporalJitter - Added TemporalAntialiasPlugin, TemporalAntialiasBundle, and TemporalAntialiasSettings --------- Co-authored-by: IceSentry <c.giguere42@gmail.com> Co-authored-by: IceSentry <IceSentry@users.noreply.github.com> Co-authored-by: Robert Swain <robert.swain@gmail.com> Co-authored-by: Daniel Chia <danstryder@gmail.com> Co-authored-by: robtfm <50659922+robtfm@users.noreply.github.com> Co-authored-by: Brandon Dyer <brandondyer64@gmail.com> Co-authored-by: Edgar Geier <geieredgar@gmail.com>
75 lines
2.1 KiB
WebGPU Shading Language
75 lines
2.1 KiB
WebGPU Shading Language
#define_import_path bevy_pbr::mesh_view_bindings
|
|
|
|
#import bevy_pbr::mesh_view_types
|
|
|
|
@group(0) @binding(0)
|
|
var<uniform> view: View;
|
|
@group(0) @binding(1)
|
|
var<uniform> lights: Lights;
|
|
#ifdef NO_ARRAY_TEXTURES_SUPPORT
|
|
@group(0) @binding(2)
|
|
var point_shadow_textures: texture_depth_cube;
|
|
#else
|
|
@group(0) @binding(2)
|
|
var point_shadow_textures: texture_depth_cube_array;
|
|
#endif
|
|
@group(0) @binding(3)
|
|
var point_shadow_textures_sampler: sampler_comparison;
|
|
#ifdef NO_ARRAY_TEXTURES_SUPPORT
|
|
@group(0) @binding(4)
|
|
var directional_shadow_textures: texture_depth_2d;
|
|
#else
|
|
@group(0) @binding(4)
|
|
var directional_shadow_textures: texture_depth_2d_array;
|
|
#endif
|
|
@group(0) @binding(5)
|
|
var directional_shadow_textures_sampler: sampler_comparison;
|
|
|
|
#if AVAILABLE_STORAGE_BUFFER_BINDINGS >= 3
|
|
@group(0) @binding(6)
|
|
var<storage> point_lights: PointLights;
|
|
@group(0) @binding(7)
|
|
var<storage> cluster_light_index_lists: ClusterLightIndexLists;
|
|
@group(0) @binding(8)
|
|
var<storage> cluster_offsets_and_counts: ClusterOffsetsAndCounts;
|
|
#else
|
|
@group(0) @binding(6)
|
|
var<uniform> point_lights: PointLights;
|
|
@group(0) @binding(7)
|
|
var<uniform> cluster_light_index_lists: ClusterLightIndexLists;
|
|
@group(0) @binding(8)
|
|
var<uniform> cluster_offsets_and_counts: ClusterOffsetsAndCounts;
|
|
#endif
|
|
|
|
@group(0) @binding(9)
|
|
var<uniform> globals: Globals;
|
|
@group(0) @binding(10)
|
|
var<uniform> fog: Fog;
|
|
|
|
@group(0) @binding(11)
|
|
var environment_map_diffuse: texture_cube<f32>;
|
|
@group(0) @binding(12)
|
|
var environment_map_specular: texture_cube<f32>;
|
|
@group(0) @binding(13)
|
|
var environment_map_sampler: sampler;
|
|
|
|
@group(0) @binding(14)
|
|
var dt_lut_texture: texture_3d<f32>;
|
|
@group(0) @binding(15)
|
|
var dt_lut_sampler: sampler;
|
|
|
|
#ifdef MULTISAMPLED
|
|
@group(0) @binding(16)
|
|
var depth_prepass_texture: texture_depth_multisampled_2d;
|
|
@group(0) @binding(17)
|
|
var normal_prepass_texture: texture_multisampled_2d<f32>;
|
|
@group(0) @binding(18)
|
|
var motion_vector_prepass_texture: texture_multisampled_2d<f32>;
|
|
#else
|
|
@group(0) @binding(16)
|
|
var depth_prepass_texture: texture_depth_2d;
|
|
@group(0) @binding(17)
|
|
var normal_prepass_texture: texture_2d<f32>;
|
|
@group(0) @binding(18)
|
|
var motion_vector_prepass_texture: texture_2d<f32>;
|
|
#endif
|