During this year’s SIGGRAPH, Ulrich Haar and Sebastian Aaltonen talked about the latest iteration of the AnvilNext Engine that was powering Assassin’s Creed: Unity. According to the devs, AnvilNext was able to push 10X more objects/instances than previous Assassin’s Creed games.
In addition, AnvilNext was able to offer 1-2 orders of magnitude less drawcalls, something essential for an open-world game. For the time being, let’s overlook the fact that the game was a mess on the PC. Since its time of release, Ubisoft worked on improving it and apart from its ridiculous VRAM requirements, Unity runs okay on the PC platform.
Assassin’s Creed: Unity also offered 20-40% triangles culled (backface + cluster bounds) and there was only a small overall gain geometry rendering (around 10%). Also, 30-80% of its shadow triangles were culled.
As Ubisoft’s Ulrich Haar noted:
“We achieved the main goal, which was to reduce the CPU cost per object compared to previous ACs even though we would have liked to do even better, but due to some legacy features like CPU driven LOD transitions, even completely static geometry still needed more CPU work than necessary.
On the GPU we achieved significantly more effective culling, but this translates to only a small gain overall for the geometry rendering. We also had to move the gpu pipeline to async compute to remove the cost from the many stalls required for dependent compute jobs and compute jobs. For many passes the compute jobs of the gpu pipeline also do not completely fill the gpu, wasting time if not done in parallel with rendering.
Shadow occlusion culling saves a significant amount of shadow rendering time.”
For the future, Ubisoft aims to offer more GPU-driven for static objects and more batch friendly data. Not only that, but the French company is currently experimenting with DX12.
“In the future use of bindless textures will allow us to further reduce the number of drawcalls significantly. Apart from the CPU benefits this will also help with the problem of increased GPU overdraw due to the unpredictable drawing order of batched meshes. As the number of drawcalls becomes very low, the drawing order will once again approach the order sorted by object center camera distance.”