Tessellation and performances

I have really bad performances while using tessellation.
Here is a test scene. The scene is really small (200*200 units).

I’m trying to use world displacement on tree barks (tessellation is turned off on every other mesh), Tessellation is only on LOD0 and here are my results with “stat gpu”:

No tessellation

  • Basepass : 7.50 ms
  • Shadow Depths : 4.80 ms

Flat tessellation - No crack free displacement

  • Basepass : 11.50 ms
  • Shadow Depths : 12.60 ms

Flat tessellation + crack free displacement

  • Basepass : 16.10 ms
  • Shadow Depths : 22.60 ms

PN triangles results are even worse
There is only one movable directional light in the scene, with 2 cascades set to 10000 units of distance.
I understand that tessellation is obviously more expensive than no tessellation but getting 3 to 5 times the shadow cost of not using tessellation makes tessallation absolutly unusable.
What am I doing wrong?

It is expensive to run. But, why agonize over it when it’s getting binned?

( great looking scene BTW )

Because it has been used for years in UE4 games and there’s actualy no other vertex displacement solution. Obviously, those games doesn’t have 90% of GPU time used by shadowing because of tessellation, so I’m guessing I’m doing something wrong.

Poor tessellation performance on landscape is most commonly caused by using distance based tess and not tweaking landscape LODing properly as well as over-expecting complexity of blending you can pull of with tess.

Firstly, make sure that you are not using distance based tessellation(There used to be an old wiki article and quite a lot of users fall into repeating it). Doing so, you will tessellate everything around, but you are only interested in whatever is in view, so always use adaptive tessellation. Besides, adaptive tess will maintain decent rasterization performance on your geo.

Secondly, your landscape LOD needs to be set up in a such way, that region of landscape where LOD0 is present is never larger than distance of your first shadow cascade. If you cannot achieve such distribution, very likely you have picked wrong landscape size/scale.

Lastly, don’t expect to have fancy shmancy material with 24 layers with autoblending, wetness and what not. Your realistic limit with tessellation is blending 4 texture sets.

There are few other minor things and mistakes users commit, such as channel-packing displacement and height/blend maps etc., but they are mostly minor contributions.