Tessellation above 64

Hello everyone!

  1. It is my understanding that Unreal Material tessellation factor is maxed out at value of 64, being a HLSL “branch” from DX11 Shader Model.
  2. In the Shader Model 5 this value is the same:

“The maxTessFactor is a float32 value in the range {1.0 … 64.0}.”

  1. OPENGL operates tessellation differently (using patches?), the documentation states:

“Tessallation levels.
… In the below discussion, max​ is the maximum allowed tessellation level, as defined by the GL_MAX_TESS_GEN_LEVEL. It must be at least 64, so you have some room to play with.”

https://www.khronos.org/opengl/wiki/Tessellation

QUESTION:

Is it possible to overstep the 64 “magic number” for tessellation factor by implementing some kind of OPEGL function?
The usage is for the landscape material with high quality displacement.
Performance is semi-factor (for now).

Maybe where are some other methods (voxels?)

Suggestions welcome!

@hometask why would you want to go that high? Firstly, tessellation already looks ridiculous with values as low as 5, and it’s gonna eat all your frame time…

If it is for landscape purposes it won’t matter because landscape materials behave a little different and they implement an automatic LoD system, that no matter how big is the tessalation adopted, at distance it will not show. I doubt that close detail it will be great, but for practical purposes, any value higher than 8 will mostly look the same (at least for landscape materials)

No. It is hardware limit.

UE4 is limited to 15 by default, not 64.

Hello everyone!

Thank you for your initial input. Just so we are on the same page:

  1. Tessellation value on 15 is UE4’s default value, which can be overriten with shaders recompile, following these threads:

https://answers.unrealengine.com/que…n-limit-1.html
https://forums.unrealengine.com/deve…ellation-limit

  1. As I messed with the values, it seems that 64 is maximum value, as this magic number comes from Shader Model.
    As I mention in initial post, Shader Model is a DX11 derivative (and comes as float32).

Same (?) maximum value is mentioned in NVIDIA terrain-tessellation demo (but as OPENGL hardware tessellation).
https://docs.nvidia.com/gameworks/co…tionsample.htm

  1. The magic number of 64 is just not enough for displacement as I intend, so the purpose of the thread is to find the way to overcome this limitation with code injection. Probably, Vulkan based shader or software tessellation.

Again, performance is semi-factor for now. Such as distance-based LOD.

@hometask when I mentioned distance-based LOD was to say that it is automatic, meaning you can’t overcome the fact that at distance it won’t use whatever value you decide for tessellation.

What do you intend on using this? Why just a nicely baked high resolution normal map with some displacement isn’t enough?

Hello Nilson!

More tessellation means more details on displacement’s height.

Courtesy of Lincoln Hughes:

Tess value of 15 (left) and 64 (right)

I’ve highlighted the contrasts.

HighRes screenshots (11 mb each)

https://drive.google.com/drive/folders/163eTtd7Dwmlo2v4_urnoLEIwjpty72u5

Indeed, the difference is there, but you got the camera very close to the ground for that detail to be relevant, how does it behave with the camera at regular height from the ground, lets say 1.75m ?

Use higher base vertex density. If 64 is not enough for you, likely you are doing something wrong.