[Feature Suggestion] Landscape Dynamic Material / Tessellation swtich

As per title. the idea is simple, We need a simple way to turn off Tessellation on a landscape material at run time via game settings.
Why?
Because apparently landscape tessellation is beyond broken. 110 FPS without tessellation, 60 FPS by just enabling tessellation with a multiplier of 0.

Unfortunately in BP (and in code from what I have tried) the Landscape cannot be used as a parameter for Set Material, and therefore it cannot take in a Dynamic Material which would allow us to change the tessellation on/off by switch the base material in use.

While I suppose I will remove any and all tessellation from my landscape materials to gain performance, I would prefer offering my users a way to enable/disable this option that adds a little extra graphical fidelity. I’m sure like me many other devs would welcome something like this.

Ofc, the other way would be figuring out why large landscape cause such a drop in performance when tessellation is enabled…

A less then desirable solution for this at the moment is to create 2 maps, and load the appropriate one. Unfortunately that precludes any and all ability to have it work dynamically like all the settings usually do.

Probably a very dumb question, but are there any practical examples of use cases where tessellation is really necessary over POM? Technically yes, sometimes for some things you just need proper geometry rather than somewhat limited POM effect. But practically, I’ve not yet came across a situation where I could not use POM and had to resort to actual tessellation.

Tessellation is not broken. It’s just really expensive thing to dynamically subdivide dense meshes at interactive framerates. I’d love to see a game engine which can do this without any significant performance hit, but I have yet to see one.

Oh no, its broken. Going from 110fps to 40fps by just enabling the setting within material without adding any subdivision means that something else in the engine isn’t right.
Granted, this is more noticable in a large map then a small one. There is still an issue of some sort as having tessellation enabled without any setting does not change or alter any geometry.

As far as use cases go, its helpful for overall aesthetics within map design.
A cobblestone pathway for instance just looks better with a slight amount of tessellation.

More so, it’s a necessity for any Snow or Ash system. Dynamic or otherwise.

Additionally, if you enable tessellation on a mesh that is LODd to match the way the landscape works, you don’t really get any drop in framerate…
In fact, I’m thinking of exporting the map in sections and re-importing it to just use the created meshes instead of the landscape system. I bet if I go that route I can get everything to work at around 60fps…

  1. Moving objects. When POM is used on a moving objects, the velocity data will be the one, supplied by velocity shader, rather than reconstructed from depth and two camera transforms. That will effectively interfere with motion blur, temporal AA, SSR and everything herewith.

  2. Resolution scaling. Tess really scales better.

  3. Shadows. Tessellation automatically works in any shadow depth pass. POM self shadowing can realistically work only for one light and at a cost of having one more channel allocated somewhere in gbuffer under deferred shading.

  4. Deforming objects and complex geometry with self intersects or nearly self intersects.

Tessellation itself is not exactly expensive. The way people try to use it, multiplied by inflexibility of the engine in respect to which pass you can exclude it from, makes it appear so.

Last but not least, tessellation is soon to be thing of the past.

Some of these make sense, but OP specifically talks tessellation in combination with landscape. Those don’t really move or deform much :slight_smile:

A thing of the past?
Why exaclty? Having an engine subdivide a mesh and apply a custom smoothing algorhytm is essentially the way to double up topology on the fly…
If you have ever played Thief Gold for instance, the mod released by one of the studio did just this. Make a 20 year old game look awsome 10 years down the line. Simply by adding geometry at a time when computers were actually able to handle it.

I’ll grant you the fact that adding geometry past a certainty point becomes useless, with a diminishing ROI, but I I don’t really see how this is something that won’t be used essentially forever.

What’s more, take into account systems like Snow Trails that rely on it entirely. What is this new “thing” that’s going to blast our projects out of the water and make them obsolete???
If there is a ‘better’ way, I’m all for it. I just don’t see a better way short of painting meshes onto the terrain to create tessellation on them… which actually is possible via the grass tool, but you would be doubling or tripling the base geometry for it…

Applicable to landscape, you can exclude moving and deforming objects, and add virtual texturing to the list, which favors tessellation by its nature and layer blending issues.

Conventional POM and layer blending inevitably ends up being a vomitron 3000.

To get pixel perfect blend, you need either expensive setup, where blend is evaluated at each POM step, OR a layering system where blend is performed through bi-linear weights of equidistant vertices, excluding any fancy blending, OR a barycentric POM. First is not usable at all, second looks 2006 and third option is too expensive to use on landscape. All options are inaccessible in stock UE4.

Tess just works. Tess is all round better for landscape detailing, apart from a fact that you can’t match POM detail frequency at the same cost.
Where otherwise practicable, I do prefer POM though.

Getting replaced by mesh shaders pipeline from the looks of it.

As to why landscape tess is slow and what to do, so it is not slow for you, there is an ancient forum thread and answerhub post from 4.11 ish era of the engine or so.

A bit out of the scope of the feature request here, but “reduce your map size” is not applicable in my case. I want a performant material - which I created and managed to gain 20FPS on a finished project with a smaller map. changing the map size shouldn’t really have anything to do with making the base cost of checking that tessellation box any more/less then it is… Or again, an in-game way to switch it off would be the best “solution” for people using older/lower end rigs.

This is the main issue though. Tessellation can’t match POM detail frequency, and in majority cases, what landscape needs to look real is sufficient detail/parallax frequency up close. At a human height level, everything beyond ~20 meters gets handled by normal maps quite well.

What people want, and need, mostly is just dirt/grass/gravel that does not look flat from up close. Tessellation generally fails at that during insufficient detail. It’s somewhat possible to go to the extreme with it, but then it ends up much slower than POM.

Pretty much, yeah.

I do hope that with switch over to mesh shaders, barycentric POM will become more viable for landscape.

Irrelevant to tessellation. Not sure where you brought up this one from.

There are no real barriers to it since 4.19, so could be useful to someone.