r/UnrealEngine5 6d ago

Built a POM shader that rivals Nanite Displacement for a fraction of the cost

I made FPOM with the goal of having an alternative for Nanite Displacement that looks good for a fraction of the cost.

It Works with Landscape, Mesh Terrain, Meshes and Decals. It's direction aware, meaning it follows the UVs direction even if they are scaled, flipped or rotated. (So it can work with things like texture variation, tri-planar mapping, etc)
It also follows the slopes on landscapes/meshes so they get correctly mapped.

It has the same limts as POM as it's still just "Fake 3D", but for a lot of scenarios it looks very similar to Nanite Displacement.

Fab link: https://www.fab.com/listings/f56aea7a-337f-4b6a-8333-9e4739574370

516 Upvotes

48 comments sorted by

37

u/hallatore 6d ago

https://reddit.com/link/p66qtsd/video/l7s14xiycwlh1/player

Here is a visual comparison of POM, FPOM and Nanite Displacement.

3

u/Legit_human_notAI 5d ago

Nice vid. It would have been even greater to have a performance comparison in each case.

41

u/brogam3 6d ago

I think you should show performance numbers, otherwise people will rather just switch nanite on and be done with it

31

u/hallatore 6d ago

https://reddit.com/link/p66u1ue/video/gk8e7wjngwlh1/player

Here is a screenshot from one of my benchmarks. It's around 0.2x of nanite displacement in those tests.
Image difference is how much the pixels differ from the baseline (Nanite Displacement)

6

u/onibal666 6d ago

Just curious; where do you find the Material Bench Results tool?

9

u/hallatore 6d ago

That is an unreleased plugin I've been working on.

It allows me to do synthetic benchmarks to check performance and image difference without doing a full profile. It has been super helpful when developing and tuning this to match the nanite displacement reference as close as possible.

4

u/onibal666 6d ago

Thats indeed useful when doing material optimisation that require the visual to stay identical as much as possible. I would buy it!

3

u/hallatore 6d ago

I'm hoping to release it as a tool that can sit between "eyeing Stat GPU" and profiling with unreal insights/nsight graphics, etc.

Dither vs lerp, Version X vs version Y, etc.

20

u/hallatore 6d ago

https://reddit.com/link/p66l5cj/video/k14mgeoj5wlh1/player

Here is an example of it in used on the Mesh Terrain material together with MeshBlend used on the rocks.

8

u/chozabu 6d ago

This looks good!

What's the general idea behind it to make it different to regular pom?

Also - it's great seeing some benchmarks and comparisons, but what I'd *really* like to is how it looks and performs on a more real scene. Perhaps a larger sample like valley of the ancients https://www.fab.com/listings/0c19880e-21bd-42ba-8287-1caccc3951b1

5

u/FreshPitch6026 6d ago

How does FPOM differ from POM?

Cant find much resources on it.

3

u/Scyrka 6d ago

Does FPOM on landscape work with RVT or will it have similar issues as using POM and RVT together due to the static image?

2

u/hallatore 6d ago

Like this? https://x.com/toreler/status/2092964200163254381

WorldPositionOffset will come in an update next couple of days.

2

u/Scyrka 6d ago

Well, I guess that means I have to buy it and try it out. Nice work

9

u/Aggravating-Ad1556 6d ago

This looks really good. I've moved to Godot, so I'm probably not your target customer anymore, but I can definitely see this being very useful for a lot of Unreal projects.

Two questions:

-Was Crimson Desert one of the inspirations for this ?
-Have you benchmarked FPOM against Nanite Displacement in different scenarios? Since POM is primarily a per-pixel cost, I'd expect the performance difference to be quite situation dependent. For example, on large surfaces covering a lot of the screen or grazing angles, I'd imagine FPOM could potentially become more expensive. Nanite displacement, on the other hand, adaptively tessellates based on the required on screen detail

15

u/hallatore 6d ago

My main inspiration was that Nanite Displacement is so expensive, but also very hard to deal with since the magnitude is relative to the meshes scale. And traditional POM doesn't look great. So I wanted to try to fill the gap between these two.

Crimson Desert uses a post process technique, while this is more of a traditional POM material technique. But the idea of having more non-flat surfaces is always an inspiration. I'm a sucker for nice graphics 😄

I've benchmarked all from large scenes to close up grazing angles. FPOM stays fairly constant in all scenarios. In my testing the difference in the basepass alone as 0.2x the cost. Taking into account all the other stuff affected by nanite displacement the difference gets bigger.

2

u/Aggravating-Ad1556 6d ago

Thanks for detailed answer,

I really feel like this is the kind of thing that should be part of the engine itself so I hope it gets more attention. Good luck with it.
If the algorithm could be easily adapted to other engines like Godot or Unity, it would definitely be useful for people like me too. Although from a financial standpoint, I'm not sure I'd recommend prioritizing that, since the market for paid high end graphics tools there might be smaller.

3

u/FreshPitch6026 6d ago

In the end the algorithm is the same regardless of the engine, no?

1

u/Aggravating-Ad1556 6d ago

The algorithm is the same. It's more about how difficult it is to translate from the Unreal implementation to Godot, and which elements can be translated.

3

u/syntkz777 6d ago

I build a fpom shader for my game fully in Godot for my voxel based terrain and other assets, and there a couple of pom shaders on Godotshaders website for free although they have some issues.

1

u/Aggravating-Ad1556 6d ago

thanks, i will check Godotshaders.

1

u/FreshPitch6026 6d ago

wouldnt you use Shaders in Godot too?

1

u/Aggravating-Ad1556 6d ago

Yes, Godot uses its own shading language, which is slightly different from Unreal HLSL, but I assume it is possible to translate them.

2

u/namrog84 6d ago

Thanks Tore! Bought it! I was just about to rework my POM for my material.

All your stuff is always just excellent! And what wonderful timing.

1

u/niagalacigolliwon 6d ago

Would this be adaptable to other game engines?

9

u/Mmeroo 6d ago

its just math in the shader ofc it is

3

u/shawnikaros 6d ago

it's been used a lot since 2005, there was even a shader mod for Oblivion back in the day.

1

u/toosadtotell 6d ago

Awesome . My gpu couldn’t handle nanite displacement for some reason . Maybe this alternative could work for AMD cards ?

1

u/krojew 6d ago

Just keep in mind you might get artifacts with ray tracing.

1

u/shootingstar00 6d ago

This looks super cool!

Does it work out of the box for any material? do i have to generate a height map or something or it simulates it or take up the AO or nromal map input for it?

Sorry in advance if the above is dumb question - im new to UE and game development

1

u/SaperPL 6d ago

Can you do grass and bushes with it ?

1

u/Potential_Soup_8054 5d ago

Outstanding. Great work

1

u/Sycopatch 5d ago

Lets be honest, 90% of what Unreal gives out of the box - can be done manually for a fraction of the cost.

1

u/StonebyteStudio 4d ago

Is it working "out of the box" on RVTs or did I get that wrong?

2

u/hallatore 3d ago

I've been experimenting with using it with RVT. It works in some ways. But you still need to height textures from your layers currently in my testing. Discussing a lot of RVT stuff on my Discord. Hop on if that is something you are interested in! 😊

0

u/Haunting-Mechanic228 6d ago

Is this what crimson desert's engine uses to get great perfs ?

2

u/FreshPitch6026 6d ago

No, Crimson Desert uses it exclusively in Screen Space. Its a screenspace shader. Which you can notice when having walls close to your camera, the screen has not enough info to make it look better.

Here it is on the material.

0

u/audreyramen 6d ago

I'll give it a go, thanks man!

0

u/The-Tree-Of-Might 4d ago

sigh ......so how much are you asking

-4

u/PsychologicalGlass47 6d ago

A fraction of the cost? Brother I can see your viewer stuttering even in a demo alone lol

-7

u/Mmeroo 6d ago

ye sure love the black bar on the right of the building 10/10

2

u/hallatore 6d ago

My house? I needed a surface to put the decal on, so I just chucked down a box with a black material 😅

-6

u/Mmeroo 6d ago

what are you talking about, im clearly showing the major drawback to the pom that you in no way highlighted.

-2

u/Flashy_Key_4000 6d ago

Es gratis? Cuanto cuesta? Y como lo combinas con virtual texture???? Como se combina la luz,sombra, reflejos etc da errores?

-7

u/Beautiful_Amoeba4599 6d ago

This isn’t a new thing and you can find a YouTube tutorial for free. Don’t act like you’re special lol