Arkham Shadow Graphics Pipeline: Optimizing for VR on Quest Three

Published on May 21, 2026 | Translated from Spanish

The launch of Batman: Arkham Shadow for Meta Quest 3 marks a milestone in the saga, being the first title designed exclusively for first-person virtual reality. This paradigm shift forced developers to rethink their traditional workflow, prioritizing graphics pipeline efficiency over absolute detail. We analyze how Camouflaj managed to maintain the iconic gothic atmosphere of Gotham using Unreal Engine, Maya, and Substance 3D, adapting each asset to the limitations of standalone mobile hardware. 🦇

Graphics pipeline of Arkham Shadow for Quest 3, optimization in Unreal Engine and Substance 3D

Baked lighting and aggressive LODs in Unreal Engine 🔦

To achieve a stable 72 FPS on the Snapdragon XR2 Gen 2 GPU, the team implemented a drastic polygon reduction using levels of detail (LODs) generated directly in Maya. Character models, which in a desktop game could exceed 100,000 triangles, were optimized to under 15,000 for close-up shots and 1,000 for distant views. Dynamic lighting was almost entirely sacrificed: all shadows and reflections were baked into static light maps within Unreal Engine. Textures, created in Substance 3D, were compressed to ASTC 4x4 format, reducing asset weight from 2K to 512x512 pixels without losing the characteristic roughness of Gotham's wet asphalt.

The dilemma of realism on limited hardware 🎮

This approach reveals a key lesson for mobile VR development: visual fidelity depends not on polygon count, but on artistic coherence. By baking lighting and using smaller textures, Arkham Shadow sacrifices light interactivity but gains solid and consistent immersion. For developers, the real challenge is no longer rendering the most detailed world, but tricking the human eye into believing in the depth and weight of a virtual environment, even when every shadow is pre-calculated.

Considering that Arkham Shadow runs on mobile hardware like the Snapdragon XR2 Gen 2, what culling and dynamic LOD techniques were implemented to maintain stable 72 fps without sacrificing the volumetric lighting and real-time reflections characteristic of the Unreal Engine?

(PS: 90% of development time is polishing, the other 90% is fixing bugs)