[Tutorial] Anamorphic Bloom

I wanted to have anamorphic bloom for quite a long time now and I finally found a way to do it natively, without cheating with particles.
I detailed my findings in an articles on my personal blog :

It seems that the engine already support it since a few versions, but I didn’t find any documentation for it. I simply discovered it by looking in the source code this week. However the default effect wasn’t enough for me so I went further and tweaked the engine source code to enhance the effect. I only tested it with the Unreal Engine 4.15, I did not yet tested the 4.16 version and the new Convolution Bloom. However the advantage of my modification is that I don’t change performances (unless I’m mistaken).

I would love to hear some feedback from a Rendering dev about it. I’m sure it is possible to do better but the engine code is a bit too complex for me unfortunately. Some hints could help. :slight_smile:

This is actually very interesting. I imagine those controls to be natively supported in 4.17. Thanks for sharing!

No way! Did you notice any performance loss when you cranked it up to 11?
there’s also r.bloomQuality which could solve some of the artifacts you experienced

Really great timing, been working out anamorphic lens flares myself over the weekend

I used a Post Process for mine,
Just used a HLSL directional blur shader on the bright parts of the scene and layered it back on
however it’s really resource intensive, needs about 100 samples for it to look smooth

The performances shouldn’t change from the default bloom that much (I guess the pixel coverage is a bit bigger but the whole system is identical). So it should be stable. The thing is, I have a very good rig so I don’t experience performances issues really often. I need to do some profiling. As for the BloomQuality, I’m always on “Epic” in the editor, but again I have to try it to see how it will behave.

Nice example in your case ! That’s the goal i was looking for ! :slight_smile:
100 iterations is indeed very expensive, using a downscaled intermediate render-target should be much more interesting is this case. This is basically how the default bloom works.

Well I have to give a try to this solution aswell. Anyway would like a native support for customs lens like UDK or so on, to fake aswell the far away lights.

One day, we’ll be able to do that as a plugin.

I would love to do is as a plugin too, hacking the engine each time a new version comes out is annoying.

This is a nifty little engine modification, thanks for sharing. As far as dealing with engine changes, tis the life of a developer with an evolving platform! That’s why you need to version lock for your projects, rather than update every time a new version comes out :wink:

I’ve tried a few methods of getting a hook into the post-processing stack for external modification (like adding a delegate in PostProcessing.cpp that could be used outside the engine module) but it’s always been a bit of a rabbithole that eventually results in abandoning that and just directly adding code to the engine itself again. But, usually that always comes as a result of time constraints, so I’m hoping to figure out a decent and as unobtrusive a workaround as possible eventually.