Optimizing Assassin’s Creed Rogue for Intel HD Graphics
Assassin’s Creed* Rogue is the newly released game from Ubisoft, originally released on consoles and ported to the PC in March of 2015. The game’s story provides a “missing link” between several Assassin’s Creeds and is set in the mid-18th century. Much like Black Flag, it contains both naval and land exploration. The story follows Shay Patrick Cormac as he turns his back on the Assassin’s Creed to follow his own path.
From the beginning, the development team decided to target the game on a wide variety of hardware platforms, making sure that all the Assassin’s Creed fans will be able to experience one more great game in their beloved universe. Targeting the new graphically intensive game on all platforms brought new challenges for the rendering team.
One of the main goals was to enable solid 30 fps at 720p on Intel® HD Graphics 4000 equipped PCs. 3rd generation Intel® processor graphics is one of the most common graphics processors available today. The fact that you can play the newest and greatest games on these thin and light machines is exciting but also requires significant optimization and tradeoffs to make sure players get a solid 30 fps.
“Assassin’s Creed fans use a wide range of computer hardware, suited to their needs: some of them have big workstations while others chose lightweight portable solutions.
We will not force the users power profile on the laptop / Ultrabook, thus it will not be officially supported. This was a decision we had to make to ensure that our users don’t have unpleasant surprises.
We did however want to provide all of them with the possibility to enjoy the game.” said Corneliu Vasiliu, the Assassin’s Creed Rogue PC producer.
Heavy Start
First, tests showed that framerate was at 8-12 range, and the team started to look for optimization opportunities. After initial experiments and collaborative work with Intel engineers it was clear that optimization is not enough—some render pipeline stages and some post-effects have to be removed completely. We based the decision about which effect to remove based on its cost and visual influence to meet expectations of hardware owners.
Using the Intel® Graphics Frame Analyzer, which is a part of the Intel® GPA toolkit, we discovered most performance hungry effects and features.
Features we enabled are textures size (even reducing textures size by a factor of 4 gave almost no performance boost) and anisotropic filtering.
Features and effects which affect performance most:
- Number of draw calls (up to 3k draw calls per frame)
- Subpixel meshes (20k polygons produced 10 pixels)
- Pixel shaders complexity (simple full screen fill operation can take up to 500 microseconds)
Figure 1. Assassin's Creed* Rogue set to highest quality settings
Figure 2. Coloring and detail is lessened on medium settings
Figure 3. Less color, depth and detail show through on low settings
Simplifying Shadows
The first render pipeline stage was cascaded shadows generation. Due to restrictions imposed by the gaming engine, we could not reduce the number of cascades so we had only one option: give users the ability to turn off shadows completely. Tough testing discovered some problems with this approach—the level of design was dramatically changed with this optimization choice.
Figure 4. Lack of detail with shadows turned off
Figure 5. Original design with shadows on
By taking changes in detail into account we had to force shadows on problem levels even in lowest quality. We used single cascaded shadow maps technique with performance tolerant filter to enable them.
Figure 6. With use of simple shadow maps, details start to appear on lowest graphics quality
Detailization of the Ocean Mesh
The second largest optimization was fine tuning the level of detail of the ocean mesh.
The only issue in this part was to leave triangles’ proportions to avoid shivering artifacts at long distances.
Figure 7. Ocean viewed as high quality mesh
Figure 8. Ocean viewed as medium quality mesh
Figure 9. Low quality mesh view of ocean
Optimization of complex meshes
The third optimization was to simplify vertex calculations for big “fake” meshes (distant objects grouped in one mesh). The game did not use normal maps but had complex computation of inverse tangent space matrix. As a result we created new permutations of the shader that ignored normal maps and simplified calculation for distant objects.
Particles
For the lowest settings we cut the number of particles, while still keeping the game’s consistency and general mood of the scene.
If we cut too much, we would ruin the design of that level/effect; if we cut too little, we would not gain any performance.
Common optimizations
Some render effects and techniques were simplified on lowest graphics settings:
- Ambient lighting calculation is not affected by irradiance, world AO, and cloud shadows.
- Decals are off
- Refractions are off
- Screen-space reflections are off
- Some post-effects used high quality per-pixel access on downscale and Gaussian filtering. Low quality version uses fewer accesses.
- Some materials used alpha-test even when they did not have alpha-channel. New permutation fixed it.
- Two redundant full screen fills were removed.
Problems we faced
All these optimization led to some issues:
- Adding quality options greatly increased the number of shader permutations (from 24 to 192) so compiling them on the fly produced stuttering and glitches during background streaming. So we had to use all these optimized shader versions only for GBuffer pass (decreased shader amount from 192 to 52).
- We could not reach solid 30 FPS on Intel HD Graphics 4000 because some content in the game was way too heavy and couldn’t be simplified (it affects storyline). But the game is playable on this kind of hardware anyway.
- Discovered the specification strict behavior of sincos HLSL function on the Intel HD 4000 – function argument should be normalized around [-Pi; Pi] range, otherwise it produces incorrect results.
Moving Forward
3rd generation Intel Core processors where released in 2012. During the last 2 years Intel released 2 new generations of its Core processors with improved Processor Graphics, including the new Iris™ and Iris™ Pro graphics, which can provide more than 2.4x performance over Intel HD Graphics 4000 and provide better energy efficiency, letting gamers play longer when their laptops run on battery.
The improved performance helps game developers to enable better graphics quality and higher resolution. The Assassin’s Creed Rogue team targeted 1366×786 resolution with medium quality rendering for Intel® HD 4600 and Iris Graphics, and for Iris Pro graphics the resolution can be increased to 1600×900.
Test System Configuration
Intel® Core™ i5 processor 3570K CPU, 4GB RAM 1600 MHz, Intel® HD Graphics 4000, Windows* 8.1 64-bit
Conclusion
All these reductions were justified because they didn’t affect owners of high-end hardware and gave us the ability to run the game on almost all DirectX* 11-compatible hardware – install base rules 🙂
For more such intel resources and tools from Intel on Game, please visit the Intel® Game Developer Zone
Source: https://software.intel.com/en-us/articles/optimizing-assassin-s-creed-rogue-for-3rd-gen-intel-core-processor-graphics/