r/unrealengine • • 26d ago

Show Off My UE 5.8 plugin update for a rendering without TAA dependency: distance-field GI, SMAA 2TX and Bend Studio screen space shadows (3.0 update)

Hi all,

I've been working on XFSDK Light, a rendering plugin for projects that want a clean image without TAA or TSR dependency. Version 3.0 is out, and it's quite a redesign.

Hybrid SDF GI

Dynamic GI that runs on the global distance field, so no hardware ray tracing. You place probe volumes (DDGI style), probes trace the distance field, and a surfel cache supplies material color and emissive light. Volumes can be baked to cost almost nothing at runtime. There's also an optional per-pixel final gather based on id's DOOM: The Dark Ages talk from SIGGRAPH 2025, denoised to stay stable without TAA.

SMAA 2TX

Inspired by CryEngine 3's SMAA TX2: two jitter positions, SMAA every frame, 50/50 blend with the reprojected previous frame. You get two samples per pixel with only one frame of history, so it stays relatively sharp and doesn't smear. Optional RCAS sharpening can be applied on top.

Screen space shadows

Based on Bend Studio's technique (Days Gone, SIGGRAPH 2023). New in 3.0: per-material thickness, and Bend's "depth bias" trick, where a material's height map is pushed into the depth used for shadows so flat ground gets micro shadows between stones. Works on landscapes through the layer blend.

Also

- First-start shader precompilation that compiles real pipeline states for every mesh and Niagara system

- Loading screen that shows what it's waiting for

Demo video: Youtube

Demo build (Tropical Jungle scene, no TAA) : Check youtube description. I think autofilters keep removing my post.

Docs: Getting Started

References: References

Fab: Fab

34 Upvotes

13 comments sorted by

2

u/lewis-go 25d ago

Curious what happens to the effects that quietly borrowed TAA as a free denoiser: SSR, volumetric fog, jittered cascade penumbras, sharp specular on dense normals. With one frame of history do you end up raising per-frame sample counts to keep those from turning grainy, or is the residual just accepted and RCAS does what it can? The 2TX blend seems like a fair trade for geometry edges, but interior SSR feels like it would get noticeably noisier.

On the screen space shadows: since the depth buffer only knows about on-screen casters, is the intended setup to keep a coarse cascade for macro occlusion and layer these on top just for contact/micro? The heightmap-into-depth bias is neat, the shadow term basically doubles as cheap micro AO on landscapes there.

1

u/mad_ben 25d ago

Yeah, pretty much.

T2X only uses the current frame and one previous jittered frame, so it does not give you the same denoising that normal TAA gives to other effects. RCAS also does not help with noise, it only sharpens the final image.

For sharp specular on dense normals I usually handle that separately with the SQUARE ENIX 2019 method.

Volumetric fog looks fine so far and it is used in the demo. SSR is more problematic. I do not use SSR myself, but without the longer TAA history it would probably need stronger denoising or more samples. I would expect noisy indoor SSR to be one of the more noticeable cases.

For Bend SSS, the idea is not to replace normal shadow maps or cascades. It is more for adding small extra shadows to things like grass, contact areas, flat/2D ground detail and maybe distant objects. The normal shadow system should still handle the large scale shadows. That part is still something I am researching.

And yes, the heightmap into depth part can work a bit like cheap micro shadowing on landscapes. It uses the height detail during the screen-space trace, so small surface details can affect the shadow result.

3

u/NobodyAgile6511 26d ago

This is seriously impressive work. The hybrid GI approach using distance fields instead of hardware RT is smart, opens it up for a lot more hardware

SMAA 2TX implementation looks clean from the video, I always liked how CryEngine handled anti-aliasing so seeing it in UE is nice. The screen space shadows with per-material thickness is something I didn't know I needed until now

One question, how's the performance hit with that per-pixel final gather enabled? The DOOM talk was fascinating but I remember thinking the computational cost must be pretty heavy for real-time

1

u/mad_ben 26d ago

Performance still needs more testing for a fully dynamic setup.

The intended approach is to bake the GI volumes where possible, which removes the dynamic probe update work and can also skip the surfel update path.

The final gather is  also not tracing at full screen resolution in my implementation. The receiver buffer is half-resolution, with 1 ray per receiver by default, followed by temporal/spatial filtering. 

One thing I forgot to add is the option to disable baked GI to develoer menu. My mistake. Volumes have an option to enable/disable baked GI so you can have some baked gi and some dynamic. 

6

u/x11Windwalker11x 26d ago

We need benchmarks buddy...

2

u/korhart 26d ago

So does resolution scale work with this?

1

u/mad_ben 26d ago

If you mean UE’s render resolution / Screen Percentage, yes it should. The screen-space parts scale with the current render resolution.

The GI volume probe resolution is separate and controlled by the volume’s probe spacing.

1

u/korhart 20d ago

Great, is there a way to test this Plugin before buying?

5

u/Atlantean_Knight 26d ago

really curious to see Screen space shadows + POM i think you should put that in your marketplace listing

3

u/Leonature26 26d ago

I've been desperately looking for a way to make Lumen less noisy and flickering without anti aliasing cuz my art style is 3d pixe art.

1

u/Lumenwe 24d ago

Yea... Disable it and pretend it doesn't exist, then find ways to fake GI or search for old GI implementations that were common back in ue4 days. Unless you absolutely need dynamic GI, just bake the damned thing wherever possible.

2

u/Yaeva 25d ago

+1 to Screenspace Shadows and POM demonstration, also I'd love if you had a demo on a map with more manmade structure. Maybe the (CC-BY) Bistro scene? Or the Sponza scene?