Help with tessellation

Ok,i finally decided to try that tessellation/displacement map feature, but i have a problem…lag.

I have a low poly(1800tris)mesh,the editor is in dx11 and i made in maya a displacement map and imported it as a png fille with compression displacement.Here is the shader set up(same as the one on udn)

It works but i think that the tessellation up close is too much and killing the framerate.

The displacement map is 512x512(ive tryed lower values with 0 effect).
Ive tryed to use a black and white,blurred ambient occlusion texture in order to hide most of the detail and place it instead of the displacement map.And the performance was still the same.
I have set the shader to have it fade the detail,but when im close to the mesh and the tesselation goes on it kills the framerate.

Since its my first time with this feature,i have a few things in mind but im not sure if im right…

A----my gpu hd5870 is too old for this thing(but it shoud be able to handle at least one mesh?)
B----im not doing something right with the shader

Can someone please share more knowledge?

Thanks guys.

tessellation in UDK doesn’t have an upper limit so the closer you are, the more dense it will go, without stopping
you’ll need to make your own distance-based upper limit in the shader via the tessellation multiplier, but it’s really tricky to keep the tessellation consistent. theory says you would only need to do the inverse of whatever the distance-based thing is doing, but in practice I never got that to work.

I was using this on a first person mesh which means the tessellation was getting super dense. last time I tried messing with it I got such horrible slowdown that my GPU crashed. while I can’t prove it was exactly this, shortly afterward ever since, every time I would play any game the computer would freeze and I so had to buy a new GPU.
besides this, DX11 might run fine in your PC but it has various problems depending on the PC configuration so if you plan on releasing your game publicly I would strongly suggest that you avoid UDK’s DX11 like the plague

Thanks Chosker.Atleast i now know im not going crazy and i can leave the conspiracy aside :confused:
Did more reading and found people with gtx 680/670 having the same poblem when close to the tessellated mesh, so i supose udk tessellation is not performance ready?

So i supose if i make my wall(from 1800 tris)to something like 5-6k+normal map+occlusion map+some bump offset i shoud get closer to the visual representation of tessellation and not lose performace under dx9?

Maybe even some parallax occlusion mapping?

But im not sure how expensive that one is, but i think the method doesnt create geometry.

parallax occlusion mapping is a bit expensive but not as much as tessellation.
the thing is tessellation is distance-based and POM isn’t, so if you just apply POM to an entire scene I think you’ll notice a bigger impact.

personally I just use iterative parallax mapping with selfshadowing, which gives great speed and quite believable visuals. iterative parallax mapping is basically just multiple bumpoffset nodes one after the next. the selfshadows part is just some offset trickery with the heightmap and the lightvector (which isn’t available in DX11 btw)

if you end up using POM try to find a better one than the UDN one, because that one has a fixed amount of samples so there’s no flexibility in the performance/quality tradeoff.

Will do :wink:

I have to resurrect this.Im not sure if ive found something that everyone know(will feel stupid), but yesterday ive found some tesselation tutorial and for the heck of it decided to do it.I know that this thing keeps on multiplying to infinity but after i finished and played on pc i saw only 2-4fps framedrop??(compared to last time).
Will leave the shader here (46mb upk).Can someone please try it in a empty level (dx11) and tell me if he has good performance too?Just throw it on the cube floor of the level start up.

By some chance if the tesselation is too much(doubt it will) in the shader> param tesselation ammount>change it from 1 to 0.5
Im puzzled if this thig is finally working as i dont see it to multiply to infinity.And since i changed my gpu to a quadro k4200(just a simple gtx760)I want to see if im not mislead by the quadro drivers.

sorry I’m not gonna risk overheating+killing another GPU with UDK’s tessellation :smiley:

what’s makes this tessellation tutorial different?

This was edited below.Still not usable

Here it is.

Whats different here is that I see he is using a scalar parameter for the tesselation multiplier(not what i saw on the udn page) and that, keeps the ammount from going to infinite.In my shader i have that value to 1 but with his version of 0.5 you will get even less tesselation.Still with both values i dont see performance drop.When you go further away it will decrease the tesselation and when you start moving towards the object it will increase it as usual but once you get at some distance I noticed that the thing doesnt multiply anymore which means its usable now.I doubt I am experiencing some advantage from the quadro drivers.Still if another gpu can confirm this,this will mean that we can use tesselation from now on.


I think i was mislead as I was trying the shader on a low poly mesh.If you use the shader on a high poly mesh it will subdivide the mesh times more as its higher poly one.
My bad.Going to pom again.

yep on low poly meshes the issue is not so big.
the worst case scenario is to use a relatively high poly mesh (i.e. a character) and show it in first person. it just destroys your framerate (and in my case overheated my GPU)

there was a time when tessellation was not distance-based in UDK. to get the distance-based effect you’d have to do it manually in the material, so you had quite better control and could set it up so wouldn’t scale up to infinity.

at least in UE4 there’s the option go use distance-based and manual, and there’s a hard limit of the amount of tessellation (apparently causes severe performance issues on AMD cards after 16 subdivisions IIRC)

theory says you could reduce the tessellation multiplier based on distance to invert the effect of the distance-based increase (i.e. after a certain threshold: the closer you get, the less tessellation you apply). I think I tried it at some point but couldn’t get it right.
and then I stopped caring about DX11 entirely because of the several issues and limitations it brings (the tessellation issues, dynamic shadows get slightly jagged edges, few glitches and crashes depending on the PC specs, and I get zero performance benefit because all my shaders use CustomLighting which makes them render in forward instead of deferred).

coming from the other thread…

did you ever play with the SystemSetting named TessellationAdaptivePixelsPerTriangle ?
in theory it should limit the max tessellation (if you use a lower value AFAIK), so it might be worth a shot for getting rid of the ‘subdivision to infinity’

edit: nvm.
tried setting it to 1.0 or 100000.0, and saw no difference in the way it tessellated a mesh
and I did manage to make my GPU crash once :frowning:

I think you and me shoud just let tesselation go,but thanks for trying :wink:
I think there was a reason why epic used 3xgtx 580 for that samarithan demo.I suspect they didnt managed to overcome the tesselation.(still in that expo years ago nvidia did say they used a gtx 680 on the same demo in another room.???).Bahhhh.Going with pom or use higher poly where is needed and thats it.Only usable thing in dx11 looks like to be the SSS and maybe the reflections.

If you like graphics, I recommend looking at the Outlast 2 demo(ue3).I managed to get some things aswered from one of the devs.

Here is what i got from them:

So looks like its still dx9.

yeah I thought to give it one last try (even though I probably wouldn’t benefit from it) when I saw that property, which I know is used in UE4
I don’t need the SSS (I have my own fake one) or the reflections (also have my own)

it’s good to get some insight on other games, but well for such changes you need engine access and people dedicated to overhauling the graphics. same for Batman Arkham Knight (UE3) which is even more heavily modified.

in my case I dont have the resources (engine source access) or the manpower. but my pseudo PBR implementation works good enough, especially in a game like mine where most environment things are made of stone and wood. I got away with using one generic cubemap for everything since most environment areas have similar colors and I dont have smooth surfaces (plate armor and swords are the least rough materials I have) :slight_smile: