James Baxter Profile picture
Nov 15, 2022 3 tweets 1 min read Read on X
The magic of compute shaders.. ~0.6ms to handle damage map rendering for a 1024x1024 render target!

Hits are buffered on game-thread before being sent to GPU to do work. Super happy with this!

Gotta make it look good now... #UE5
If you're interested in following this project:
discord.gg/rrMzug9J2n

I'll try to find some time to do a write-up on this once it looks a bit better. Still some parts to smooth out, and I'm afraid the final version does require engine modifications. *sad developer noises*
Hello to any graphics programmers laughing at my "optimised" 0.6ms :D

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with James Baxter

James Baxter Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @_Jambax

Nov 28, 2022
More work on the @UnrealEngine Niagara Damage Renderer!

Added a subsystem for automatic prioritisation. Factors distance, gameplay priority and starvation rules to determine which targets to update first.

You can fix a per-frame budget, and system will adjust accordingly. 1/#
The system also supports Render Target Arrays now, via a simple layer system. Acceleration data is still baked offline with an editor tool.

Adding an early-out branch for blank pixels bumped base performance too, so this test scene went from 0.7ms to 0.4ms for a 1K target.
This scales with UV coverage though, since more coverage = more pixels shaded.

Still bound by skinned triangle reading currently. Not sure if a lightweght skeletal data interface might reduce it a bit...
Read 4 tweets
Nov 24, 2022
Using Niagara to draw damage masks with only a single 8-bit render target in @UnrealEngine

Works on skinned meshes and no positional map required, just a single-channel acceleration map baked offline with a custom editor tool. #UE5

Project Discord:
discord.gg/rrMzug9J2n
@UnrealEngine Hits are buffered on CPU and sent to Niagara in batches (up to 64 each-frame), so you can absolutely hammer it with hits.

Takes ~0.6ms for a 1K render target on GTX 980. Next improvement is to prioritise updating within camera view, and atlas targets for different mesh sections.
A custom in-editor tool is used to bake the acceleration data from the content browser.

Specify the mesh, choose the sampling regions abnd UV set, and it packs accordingly. Even shows a preview now :)
Read 6 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(