The transition to Nanite means that “LOD popping” is technically a thing of the past. However, Nanite can be extremely VRAM-intensive in dense foliage areas. To maintain a stable 60 FPS on current-gen hardware, you must manage the Nanite Streaming Pool and Visible Pixel Edge limits.
File Path
- Navigate to:
%LocalAppData%\Polaris\Saved\Config\Windows\ - Open:
Engine.ini(This replaces the olduser.settingsfor engine-level Nanite tweaks). - Note: The game creates these files after the first launch.
Optimized “Witcher Polaris” Configuration Table
| Parameter | Recommended Value | Technical Purpose |
r.Nanite.MaxPixelsPerEdge | 4.0 | The Performance Sweet Spot. Increases the triangle size slightly to save GPU cycles. |
r.Nanite.Streaming.PoolSize | 2048 | Allocates 2GB of VRAM specifically for Nanite mesh data. |
r.Nanite.ViewMeshLODBias | 0.5 | Slightly reduces detail on distant meshes to prevent VRAM overflow. |
r.Nanite.AllowTessellation | 0 | Disables additional tessellation to save resources in high-density forests. |
[SystemSettings]
r.Nanite=1
r.Nanite.MaxPixelsPerEdge=4.0
r.Nanite.Streaming.PoolSize=2048
r.Nanite.Streaming.NumInitialPages=4096
r.Nanite.ViewMeshLODBias=0.5
r.Nanite.AllowTessellation=0
r.VT.MaxAnisotropy=8
r.Shadow.Virtual.MaxPhysicalPages=4096
HowTo: Engineering the Continent in UE5
Follow these GameEngineer.net technical steps to optimize the Polaris engine:
- Nanite Foliage Management: The Witcher 4 uses Nanite Foliage, which is different from standard static meshes. If you experience stutters while riding through woods, ensure
r.Nanite.MaxPixelsPerEdgeis set to4.0or higher. This tells the engine that individual triangles don’t need to be smaller than 4 pixels, significantly reducing the Vertex Count ($V_{count}$) without a noticeable loss in visual quality. - Virtual Shadow Maps (VSM): Nanite works best with VSM. In your config, ensure
r.Shadow.Virtual.MaxPhysicalPages=4096. This allows the engine to cache shadows for millions of Nanite-rendered leaves, preventing the CPU from choking on shadow draw calls. - The VRAM Buffer: Because Nanite “streams” geometry, it requires a fast NVMe SSD. If you are on a slower drive, increase
r.Nanite.Streaming.NumInitialPagesto8192to preload more geometry into your RAM, reducing “mesh pop-in” during high-speed travel on horseback. - Lumen and Nanite Sync: Nanite provides the “Proxy” meshes that Lumen uses for light bounces. Setting
r.Nanite.ViewMeshLODBias=0.5ensures that the lighting engine has enough geometric detail to calculate realistic “God Rays” through the trees without the $5\text{ms}$ frame-time penalty of full-detail proxies. - Shader Pre-Compilation: UE5 games often suffer from “Shader Stutter.” In 2026, Polaris includes a pre-compilation step, but adding
r.ShaderCompiler.JobPriority=1to yourEngine.iniensures the background compiler doesn’t steal cycles from your main game thread.
Technical Explanation: Raster Bins and Cluster Culling
In The Witcher 4, the engine uses Cluster-Based Culling. Traditional games would render an entire tree even if you could only see one branch. Nanite breaks that tree into “Clusters” of 128 triangles.
By adjusting r.Nanite.MaxPixelsPerEdge, you are modifying the Rasterization Bin threshold. When a cluster’s triangles are smaller than your setting, the engine uses a Software Rasterizer ($SW_{rast}$), which is highly efficient on modern GPUs. If they are larger, it uses the Hardware Rasterizer ($HW_{rast}$). Finding the balance where most foliage stays in the “Software Bin” is the key to achieving 60 FPS in a world as dense as The Witcher 4‘s Northern Kingdoms.