Search code examples
openglgraphicsdirectxglsltessellation

How does tessellation increase performance?


It seems counter intuitive that calculating more vertices instead of just reading more from vram would be faster. But if memory bandwidth is the issue that makes tessellation worth it, then why do things like displacement mapping exist? In the tessellation shader, if you read from a texture, you accessing vram more anyway. Are texture look ups less expensive than more original vertices? Why is tessellation fast?

Say you had an vertex amplification of 32 with a very low polygon model. Would this be faster than say a higher polygon model with only a tessellation vertex amplification of 8 or something. Or in other words, do you linearly gain performance with the more you tessellate?


Solution

  • There is no single point that gives tessellation better performance in every possible instance. Different benefits and trade offs apply in every use case. Some things that might contribute to making tessellation faster than alternatives:

    • Memory Bandwidth: Modern computers are largely limited by memory speeds. Even if you use textures, a single read could be as low as 4 bytes instead of the 32+ bytes typically required to store vertex data.
    • Level of Detail (LOD): With tessellation shaders you can avoid having areas that too detailed while still insuring that the rest of the scene has sufficient detail.
    • Fewer Verticies: Means fewer executions of the vertex shader and every stage of the pipeline before that.
    • Less CPU Overhead: Potentially requires fewer draw calls, especially if you no longer have to do LOD on the CPU.

    There are probably other factors that I have missed...