Hey guys!
I was wondering if anyone has had any success with the new DX11 tessellation features? I was playing around to try and turn a low res cylinder into a smooth beveled cylinder. The sides came out awesome but I was having some trouble getting the top and bottom edges to bevel.
I tried both methods of tessellation which yielded some pretty different results. I also tried epic's suggested shader hookup as well as an alternative I found.
http://udn.epicgames.com/Three/TessellationDX11.htmlhttp://www.mypicx.com/uploadimg/1396652404_03122011_1.png
Areas of note I found while experimenting:
how do soft/hard normals effect tessellation?
what is the "real" way to hook up maps so meshes tessellate correctly?
should meshes be more parametric so the tessellation is more evenly spread?
what are common ways to avoid seam displacement?
I'll continue to explore and post results -- community input would be awesome!
Replies
http://www.polycount.com/forum/showthread.php?t=82581
I gave myself a new personal project last night to try and go deeper. Your post looks super promising! Using the heights from a Normal Map seemed to produce better results for me as well. Thanks again!
So tonite's big question: are other people experiencing the weird Flat Tessellation problem? (the mesh gets tessellated, but fails to deform) Anyone have any ideas why this might be happening?
I also noticed that unless I use completely smooth edges my mesh will have nasty displaced seams. Thoughts? Is there a science to how much I should be cranking the negative and positive vectors? It has to be based on something ... just checking how the mesh looks by eye seems pretty hit or miss.
can u post a screenshot of your mesh(with wireframe before/after tessellation) and material setup?
(link may be broken right now but should be working shortly)
http://udn.epicgames.com/Three/TessellationDX11.html
k, here she blows.
Figure A shows my UV layout. I chose to detach the top and bottom of the cylinder for this test instead of attaching one of the edges.
Figure B shows the highres object on the left, and the lowres on the right. My goal was to displace the lowres object so I would have nice beveled edges and a smooth circular center.
Figure C shows the resulting normal map (generated from Xnormal) with smooth edges
Figure D shows the resulting map with smooth and hard normals. The UV edges are hard and all other edges are soft.
Figure E is my shader setup and the resulting displacement on the hard/soft combo. E.1 shows flat tessellation and E.2 shows PN. Notice how the bottom edges in E.1 do not seem to displace whereas the edges in E.2 seem to work fine (despite the bowing). I threw and edgeloop in the center of the cylinder in an attempt to get the bowing under control, but it turned into an hourglass.
Figure F is the same setup but with the completely smooth edged object. There is significantly less seam tearing and the bevel starts to take form (although not 100% successful).
Figure G shows an alternative method to the shader setup. I lose the ability to control push and pull but the resulting mesh looks nearly identical.
I experimented with a brick wall texture with much nicer results. Was a cylinder a poor choice for my experiment? It would be awesome to do away with low res cylindrical objects and achieve true form on hard surface models.
even sized tris will work just as good, since directx works olny in tris
Looks like tessellation and displacement mapping are not the "make it look pretty" buttons I thought they were going to be. You have to be extremely careful with texture stretching. Another huge pitfall are mesh seams. These will happen on UV shells when the displacement scale is too high or the bias is set incorrectly.
The general thought process for now is that displacement should be a cherry on top. The base form of the shape should be described as much as possible before applying displacement. It is extremely important to describe undercuts as they need UV space.
UDK's catmull clark tessellation method produces massive bowing. Although this may become the standard in the future I find it to be an overkill process that yields poor results.
The most important thing I found was to make sure the pixels on UV seams match on each side. If the pixels do not line up perfectly you will get a mesh seam. The easiest way to do this is to stay clear of UV shell borders in your texture map. Shell interiors are fair game to paint on, but mesh borders are hyper sensitive.