One of the main goals of this game is to have really nice modells. In that respect Tessellation is something we want to utilize.
What is tessellation?: Every 3D modell is made up of polygons. The more polygons you have the better resolution your model will have, and edges will be smoother. But this resolution comes at a computational cost.
When you view a modell from a distance, you can have less polygons (resolution) and you will not notice this. But when you get closer you will be able to see the polygons and lines clearly (see the main picture).
So what if we automatically could have less polygons at a distance and then subdivide them into more polygons as we get closer. That would be really nice, and this is exactly what UE4 tessellation does.
The image above illustrates how tessellation subdivides the polygons as we get closer.
But, off course, nothing should be straight forward and easy. As I implemented tessellation at an early development stage, I experienced tessellation tearing between different materials on the same modell:
The modell was initially divided into several sections with their own materials/textures. Seams between these sections got teared up when the tessellation kicked inn as you can see from the picture above.
There might be different solutions to this, but I chose to merge all of the modell into using one material, tough eliminating the problem completely. As a positive effect it also optimizes the modell. Every material requires the game engine to make a draw call, and such reducing the amount of materials will also reduce the amount of draw calls, and result in better performance.
This approach however added new challenges. Different parts of the body, as for example the head, genitalia and parts of those again, are made up of their own textures (images) and they also have different properties (as reflection, wetness, bump maps etc). A solution to this is to use a technique called atlasing. Unreal Engine 4 have a complex material system and it allows you to make one material with different properties for different parts of the model (in this case the human body). The human body is a complex model in it´ self, so the atlasing system also became quite complex. To be able to easy reuse this on several models, I created a reusable and efficient atlasing system for the Daz3D modells I’m using for Unreal Engine 4.