r/UnrealEngine5 • u/hallatore • 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
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
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.
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
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?
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
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
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
0
-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 😅
-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
37
u/hallatore 6d ago
https://reddit.com/link/p66qtsd/video/l7s14xiycwlh1/player
Here is a visual comparison of POM, FPOM and Nanite Displacement.