Key Points
- Optimizing Asset Size and Complexity:
- Optimize polygon count, texture resolution, and material complexity. Balance visual fidelity with real-time performance.
- Use Unreal Engine’s LOD (Level of Detail) system to reduce complexity based on camera distance.

- Dynamic vs. Static Lighting:
- Dynamic Lighting: Real-time lighting calculations can be resource-intensive, especially when using movable lights that cast dynamic shadows. Dynamic lights add flexibility but at the cost of performance. They are best suited for scenes with changing lighting conditions, such as day-night cycles.
- Static Lighting: Baked or precomputed lighting is much more efficient, especially for static environments. By baking lighting into textures (lightmaps), the performance overhead is reduced significantly. However, it lacks the flexibility of real-time lighting changes.
- Mixed Approaches: A combination of static and dynamic lighting can help balance quality and performance, such as using baked lighting for static elements while keeping dynamic lighting for moving characters or objects.
- Shadows and Their Impact:
- Shadows, especially from dynamic lights, are one of the most performance-expensive aspects of rendering. Optimizing shadow maps, lowering shadow resolution, and minimizing the number of shadow-casting lights can help reduce this overhead.
- Cascaded Shadow Maps are commonly used for directional lights (such as sunlight) but should be tuned for performance, especially in larger environments.
- Lighting Models and Rendering:
- Unreal Engine supports forward and deferred rendering pipelines. Deferred rendering allows for multiple dynamic lights but increases GPU load, while forward rendering can be more efficient in scenes with fewer dynamic lights.
- Lumen: Unreal’s new global illumination and reflections system can handle dynamic lighting in a much more performance-friendly way, providing real-time global illumination effects without pre-baking. It’s a significant addition for virtual production where lighting flexibility is key.
Nanite: Optimizing Geometry with Virtualized Micropolygon Rendering
- Nanite Overview:
- Nanite is Unreal Engine’s virtualized geometry system that enables incredibly detailed models to be rendered efficiently, handling billions of polygons in real-time. This allows artists to use film-quality assets without manually creating multiple LODs or worrying about poly count.
- Nanite automatically manages level of detail, reducing the complexity of assets as needed based on screen size and camera distance.
- Performance Implications:
- Optimized for High Detail: Nanite allows for the use of high-detail models without impacting performance significantly. It efficiently handles large-scale environments and dense models, especially important in virtual production where high fidelity is required.
- No Traditional LODs: Artists no longer need to manually create LODs, which saves production time. Nanite dynamically adjusts detail at the pixel level, which also reduces memory usage.
- GPU Performance: Nanite reduces the number of draw calls by batching geometry into clusters, which lightens the load on the GPU. This is particularly useful for scenes with lots of small details or complex environments.
- Using Nanite Effectively:
- While Nanite excels at handling static geometry, it doesn’t work with certain elements like dynamic or deformable objects (e.g., skeletal meshes). For such cases, traditional LOD methods or GPU optimization strategies must still be used.
- Nanite is great for environments, props, and large static elements, but careful planning is needed for characters and moving assets that aren’t Nanite-enabled.