Finally, Parallax Occlusion Mapping!

Displacer Best 0.2 is now available!

Notable additions include:

  • Material Examples - For you to learn from or use in your own projects
  • Distortion Output - For seeing how much each pixel was shifted by in UV space
  • Separate Shadow Raymarcher Iteration Count Inputs - For finer-grained tweaking of look and performance
  • Backface Luminance Input - For cheap simulation of ambient light or shadow stylization
  • Artist-tweakable Soft Shadow Falloff - For a more aesthetically pleasing transition to the faces pointing away from the light
  • Backface Shadow Checks Now Heightmap Aware - Still in development, but makes deep features get dark sooner than the rest
  • And some small bugfixes and performance improvements

Here are the included material examples:

Bonus: Cube Sphere!

Looks great! Really looking forward to testing it as soon as it’s compatible with 4.8. :slight_smile:

oh this is awesome

I’m very tempted to buy it and use it, but before I do I’d like to ask a few questions:

  1. performance. you say it’s cheap compared to tessellation.
  • can you provide a performance comparison with numbers? how about a comparison with the regular parallax mapping (or iterative parallax mapping)
  • how much faster is it? is it still true if you stress it?
  • how much of that LOD are you forced to use on big/complex scenes?
  1. the usual limitation: lights.
  • how many simultaneous lights does it support?
  • do you have to do anything for it to use “the nearest lights” (usually can’t be done automatically on a deferred renderer, and Epic suggests tricks like material parameter collections)
  • is the self-shadowing happening for multiple lights?

I hope you’ve resolved / worked around the limitation of lighting. otherwise I think I’ll just resort to using iterative parallax mapping, which with the depth buffer altering of 4.8, should also produce self-shadowing if I’m not mistaken

I’m also just waiting for the 4.8 release…

For the performance, cryengine offers like two different POM sahders, POM and SPOM, the second one is of course a bit more performance hungry, using the POM shader for terrain gives me like no impact at all on my FPS.
I tested the free pom shader from the other thread on my whole terrain, on a GTX 780 Ti OC Verion, my FPS counter was still at 120 FPS. You wrote that you are using the same algorithm like they do, so
i guess the perfromance will be simillar?

It would be so nice to have a working pom with a low impact on the performance, the woodland level in cryengine is using POM for the landscape and all trees, the trees are looking so much better with POM! Just amazing.
I’m not a pro when it comes to work on shaders but isn’t it possible to use your pom shaders with a kind of radius, fo example all trees in my scenen are uisng POM but only the one in a radius of X are really uisng POM, the others are downgraded to the normal map?

http://fs2.directupload.net/images/150522/temp/b2gl2yvi.jpg

Why is everyone waiting for a 4.8 release when it’s still in preview? lol. Epic doesn’t even recommend using previews on your project because in possible instability or corruption.

We’re waiting for the non-preview release of 4.8 and the following update to this system.

We’ve had less issues with 4.8 than 4.7 so naturally we switched. Makes no sense to buy something that isn’t compatible with our project yet.

Hi,
The shader looks really great. I have one question though.
Will it be possible to use this with a triplanar setup?

Hello, I did buy it yesterday but it keeps crashing / reseting my Graphiccard (Unreal 4.7.6 - Windows 10 - AMD R9 290X - PC is otherwise Rockstable - Preview seems to work, but as soon I use the Material → crash)

Does this work in VR? And if so, how’s the performance hit there?

Also, does the effect look right?

I’m writing in this topic just to reserve for future this super parallax!

I’ve read all you have here and on your site, but there are still some things I don’t quite get. So, sorry if my questions sound dumb, but:

  1. Is this a material function that I can use inside of my own materials? Or is it some sort of hard-coded shader/material, akin to those in Cryengine?
  2. Can I simply use your POM without silhouette clipping and shadowing for best performance?
    I really want it, preferably on the Marketplace, since I have 30$ in store credit there. :slight_smile:

Hi all! Sorry for some reason I wasn’t getting notified of thread replies. Will get back to you all when I’m home this evening.

This will vary drastically depending on your settings and the detail of the assets you’re using. I’ll do a best case side-by-side comparison after a couple more optimization updates. Comparing the performance to simple parallax or iterative parallax is apples to oranges because this effect is much much more detailed and flexible.

Parallax Occlusion Mapping actually wins biggest against tessellation in the most stressful cases. It’s a lot easier to do some raytracing than to render at least 1 polygon per pixel!

This will depend entirely on the scene and a lot of subjective elements, which is why I try to keep things artist tweakable.

The material itself goes through the usual PBR pipeline and is unlimited. The self-shadowing effect is limited to 1 light. Outside tech demos you honestly probably wouldn’t notice the subtle shadowing from a second light let alone any further ones.

Material parameter collections are the way to go here. You can select the shadowing light however you like via Blueprints.

Epic’s promised some forward rendering features which I plan to incorporate as they become available. Predicated on that: Yes!

I’d be surprised if it did, but either way support for 4.8’s pixel depth offset is definitely on the list.

I suspect what that really means is your framerate was very high and being capped at 120FPS, and enabling POM wasn’t taxing enough to bring it below that cap.

That feature is already included! And yes it makes a huge difference. You can tweak this via the “Mip Threshold” parameter. Higher values mean you can get farther away before the effect fades out.

Should work! I plan add a triplanar example material soon in fact. You’ll have to carefully align things so as to not break the illusion of course.

Strange, send me an email with details of how you’re using the material and I’ll help you out there.

Just had a customer tell me all the included sample materials look fine on their Rift DK2! I assume the performance hit is roughly doubled like with most things rendered in stereo.

Everything is done in the Material Editor and all the guts are provided, though the loops needed to be implemented via HLSL in the Custom code nodes.

In the 0.3 update coming this week you’ll be able to toggle these features. Though you may be surprised to know that activating silhouette clipping actually makes it run faster! I specifically coded in early exits so it doesn’t waste time calculating pixels that are just going to be clipped.

Working hard to get it Marketplace ready! The $30 introductory price wasn’t an accident :wink:

The 4.8 pixel depth value allows actual altering of the depth buffer, so you get self shadowing as per the standard deferred rendering, from multiple light sources, also get proper shadows cast onto parallaxed surfaces, so no floating shadows. The main issue is preventing depth value swimming as the camera moves around. Causing shadows and such to move. Im sure someone with more math knowledge than me can resolve this.

Wow that’s fantastic to hear! I’m kind of sorry I spent so much time perfecting the shadows now, hah.

Hm, so I tried this in 4.8 preview and the depth offset works for shadow receiving but not for shadow casting, whether on other objects or the occluder itself. It always casts shadows in the shape of the original mesh, and from the original position. For example: This flat square surface will a flat square shadow on itself, shadowing the entire object sans the edges, since its pixels are effectively behind its occluding surface:


Sphere set to cast shadows / Big cube set to not cast shadows


Sphere set to cast shadows / Big cube set to cast shadows

Looks like I’ll need to keep the old parameter-driven self-shadowing system in place until this engine limitation is lifted.

In the meanwhile, have some eye candy showing off how great the pixel depth offset support works in 0.3!


0.2, no pixel depth offset.


0.3, with pixel depth offset.


Check out those accurate intersections! These shots are all with self-shadowing off, so it has the potential to look even better!!

As pointed out, you do run the risk of shadows swimming at oblique angles, but this can be avoided with artist tweaks, and will probably also get improved in future updates.

Yeah ends up being you do need an engine change to make self shadowing work without it casting a shadow of the original object as pointed out by RyanB in the other Parallax thread. So I think your self shadowing code will remain for a while. I have been trying to figure out the engine changes, but so far no luck.

Oh, SF hey mate.

When you think you will be able to put this up on Marketplace ?

Thanks and keep up the good work.

So yeah about that other thread.

There’s been rather terrible news this week (for me, not for you). RyanB just pushed a parallax occlusion mapping solution that does everything mine does (at least) into the main engine. It’s going to be a built in node.

As such I have no viable option but to cancel Displacer Best.

I can’t compete with the resources Epic can throw at this. I knew there was going to be an open source alternative, but it was going to be a 3rd party install with a much smaller featureset and limited support. No one is going to choose to pay for mine when a 1st party equivalent is automatically included in everyone’s installation.

I honestly feel really, really burned by this. I asked Epic specifically if such a feature was in the pipeline for the express purpose of avoiding this exact situation and I never got an answer. I invested an enormous amount of time into this project and my work has been rendered materially worthless with very little warning, which stings as a solo indie dev struggling to get any income at all.

Anyone who emails asking for a refund will get one. I can’t in good conscience keep your money after promising updates.

Thanks for the support everyone.