DX11 Hardware Tessellation
DX11 Hardware Tessellation
Let me start off by saying that I am visiting our forums often and have seen the way you guys react to Tessellation, like it is a non-feature. And with the current games and titles out there, sure I'd even agree on that. That doesn't mean that it isn't a huge step forward with games to come though, as you can add object complexity in a fairly cheap series of compute cycles over the GPU -- game developers want this as it saves them time creating complex geometry and objects. So in the future what you will see in games is a much more complex and better looking environment. Detailed terrain, complex characters... Tessellation can be applied on numerous objects in a 3D scene.
DX 11 pipeline - from input assembly:
- Patch assembly
- Primitive assembly
So the biggest DirectX 11 feature that I am excited about personally is that we'll finally have a hardware tessellation unit inside the GPU that DirectX can utilize. We are going to spend an entire page on this feature that both DX11 class graphics cards from NVIDIA and ATI have embedded.
What is hardware tessellation? Simply put, it's adding more detail to 3D objects, real-time on the fly at low cost. With the arrival of DX11 class graphics cards ATI and NVIDIA now include hardware tessellation units inside the GPUs, fully programmable.
Tessellation simply means increasing your polygon count to get more detail. Look at the image below.
Tessellation is the process of subdividing a surface into smaller shapes. To describe object surface patterns, tessellation breaks down the surface of an object into manageable polygons. Triangles or quadrilaterals are two commonly used polygons in drawing graphical objects because computer hardware can easy manipulate and calculate these two simple polygons. An object divided into quads and subdivided into triangles for convenient calculation.
Now at the first frame you can see a face. There's a small number of polygons in there. It's anno 2010, and we demand more detailed objects in our 3D scene. So by recursively applying a subdivision rule we can increase the number of polygons. Now look at the second and third faces. There's so much more detail. This process can now be done 100% at GPU level in hardware without a significant impact on performance.
For DirectX 11 the tessellation portion of the pipeline has been wrapped with two new shader types that can be used, the Hull Shader and the Domain Shader.
Now some of you might have noticed it already from previous reviews. Tessellation isn't something new, ATI already had a hardware tessellation unit in their GPUs for years. But the older units could not be addressed whatsoever in DirectX as the API did not support it.
Another good example for the usage of tessellation would be terrain building. This technique is especially useful for creating complex-looking terrain using a combination of very simple base geometry with a height map, and a texture map. And perhaps more interesting is that this generated terrain can be deformed dynamically by manipulating the height map.
NVIDIA has been showing examples with a new water demo and a real-time rendered hair demo. In the water demo the amount of detail increases with a magnitude of 3 (5000 times more detail) while performance goes down by only a factor of two compared to the same scene without Tessellation. Check out some screenshots I made:
This above scene looks quite good right? Nice water, mountains in the background. Fact is, it could have much more polygonal complexity closer to the viewer or camera, and fewer polygons as distance from the camera increases. So let's do that.
There you go, tessellated complex rocks and yes, the water is tessellated as well. Mind you that this demo is rendering real-time, at 2560x1600 with large amounts of tessellation and we still had very acceptable frame rates. And that water... man, just look at that and imagine it in real-time.
Tessellation will allow much higher quality rendering and animation at fairly low GPU compute cost. The generic rule here is the more tessellation, the slower the GPU gets, yet since there's now dedicated core logic for it on the GPU, it's fast and can boost your detail massively, thus giving an impression of sharpness and much finer quality.
The new DX 11 tessellation unit is programmable though two new shaders, the Domain and Hull shader. The higher the level of tessellation, the closer to realism the sharpness of the surface approaches. NVIDIA's HW Tessellation is implemented extremely well.