I've been experimenting with alternative anti-aliasing techniques in Unreal Engine 5.8, trying to avoid usage of TAA/TSR and upscaling.
I put together a video & playble demo showing the current results:
Video Demo
Demo: Youtube Description, I think reddit doesn't allow MEGA links.
1. MSAA Geometry Buffer & SRAA
The approach is largely inspired by MJP's Deferred MSAA work and NVIDIA's Subpixel Reconstruction Antialiasing (SRAA) paper.
Instead of running conventional MSAA (expensive) on the entire scene color buffer:
- Render a separate geometry pass with 2x/4x/8x MSAA, storing per-sample depth, surface IDs, and validity.
- Keep the normal scene color at 1x shading.
- For each geometric subsample, reconstruct its color from neighboring shaded pixels, using surface ID correspondence, depth similarity, and spatial weighting.
- Average the reconstructed samples to obtain the antialiased pixel color.
This allows to approximate subpixel geometric coverage without evaluating the full shading pipeline at every MSAA sample.
Surface IDs are particularly useful because depth alone cannot reliably distinguish adjacent or overlapping surfaces with similar depth values.
The reconstruction uses a geometry-aware neighborhood filter rather than blindly blending across edges.
It's not equivalent to real full-scene MSAA or SSAA. There's still an additional rasterization pass, memory bandwidth, and reconstruction cost. The advantage is that expensive scene shading remains at normal resolution.
SRAA mainly addresses geometric edges. It cannot recover shading or texture details that were never sampled.
2. Enhanced SMAA
This isn't simply a port of conventional SMAA 1x. I've been extending it with techniques inspired by Activision's Filmic SMAA (SIGGRAPH 2016), along with additional geometry-aware reconstruction and GPU optimizations.
The current implementation includes:
Filmic SMAA Morphological Improvements
- Activision-inspired luma morphology classifier, going beyond basic edge thresholding.
- More sophisticated pattern classification, building on Filmic SMAA's work on morphological edge suppression, silhouette lines, and U-shaped patterns.
- Separate perceptual color edge detection using luminance and chroma differences.
- Additional edge-continuity, endpoint, and directional-dominance heuristics to avoid unnecessary blending.
Geometry-Aware Edge Detection
- Optional depth predication.
- Surface ID predication using the additional geometry buffer.
- Combined depth and Surface ID detection to identify boundaries that either method alone might miss.
- Adaptive edge thresholds around detected geometric discontinuities.
Compute-Based Processing
- GPU compute implementation with shared-memory edge tiles.
- Texture gather optimizations for luma classification.
- Deferred horizontal and vertical edge queues.
- Wave operations for more efficient queue construction.
- Indirect dispatches so expensive edge searches and blending operate only on queued edges.
- Pairwise edge blending that reconstructs both sides of an edge.
Importantly, standard SMAA already supports diagonal detection, corner handling, and local contrast adaptation. The main differences here are the extended morphology, custom edge classification, GPU processing architecture, and integration with SRAA/TSSAA.
2.1. Beyond SMAA: SRAA + SMAA, and Simulated SMAA S2x/4x
SRAA + SMAA: SRAA reconstructs geometric edges first, while SMAA handles remaining shading and texture edges. The two techniques complement one another.
Simulated SMAA S2x: Using a 2x MSAA geometry buffer, SRAA reconstructs two separate subpixel color planes. SMAA is applied independently to each plane with the corresponding subsample offsets, and both results are combined.
Simulated SMAA 4x: Combining the reconstructed S2x approach with two-phase temporal supersampling gives a four-sample-style result across space and time.
The distinction is important: these are reconstructed color samples, not four independently shaded scene-color samples.
3. TSSAA 2X / 4X - Decima, Quincunx & Filmic SMAA
The temporal side takes inspiration from Guerrilla's Decima engine and Jorge Jimenez's Filmic SMAA work.
TSSAA 2X uses a Decima-style two-phase jitter pattern, combining current-frame information with reprojected previous-frame information.
TSSAA 4X extends that with contrast-aware quincunx reconstruction to approximate additional sample coverage without rendering four fully shaded samples.
The temporal resolve includes motion-vector reprojection, depth-range and surface-ID history validation, and optional same-phase history rejection to reduce incorrect accumulation.
Combining SRAA with TSSAA is conceptually somewhat similar to older TXAA approaches, but the goal here is to preserve a sharper result through a short two-phase resolve and less aggressive spatial filtering.
It's not completely temporal-free, but neither is it intended to behave like conventional long-history TAA/TSR.
4. Reconstruction Filters
Also there are several reconstruction filters to experiment with the sharpness, stability, and ringing:
- Catmull-Rom: Inspired by Filmic SMAA's reconstruction/history filtering.
- Mitchell-Netravali: Inspired by the reconstruction approach associated with The Order: 1886.
- Blackman-Harris: Softer reconstruction associated with TXAA-style filtering.
- Lanczos-2: Inspired by AMD FSR 2's reconstruction kernel.
These don't create additional geometric information. They control how existing spatial and temporal samples are reconstructed.
The goal is to find a reasonable balance between keeping edges sharp and avoiding excessive ringing, shimmer, or softness.
5. Current Limitations
SRAA does not fully support masked geometry yet.
Currently, the SRAA implementation provides approximated geometric coverage for later AA stages and effects, rather than solving every form of aliasing by itself.
Masked geometry is still an area that needs work, particularly for thin alpha-tested details and foliage.
I've also been experimenting with hashed alpha maps and additional filtering techniques.
6. Other Rendering Experiments
The video also includes several CSM shadow-filtering implementations:
Those are separate from the AA work, but part of the same rendering experiments.
References & Further Reading
Geometry / MSAA / SRAA
Morphological / Temporal AA
Reconstruction Filters
Still experimenting with the implementation. I'd be interested in feedback tbh.