Asset ProductionPerformance Optimization

Asset Performance Optimization Guide

When FPS drops occur while loading a room, optimization of placed assets (furniture and plants) is required. This guide explains how to identify and fix problematic assets using the editor’s debug mode.

Overview

There are many meshes which do not have Nanite enabled, although they could be. These issues mainly appear in assets which are using masked materials, although these materials are actually using only solid geometry. So we need to verify:

  1. Nanite is enabled where possible
  2. Masked materials are minimized (they are not efficient with Nanite)
  3. World Position Offset (WPO) is disabled when not needed
  4. Overdraw is kept minimal

1. Verify Nanite Application

The most basic optimization is to enable Nanite for static meshes.

How to Check

  1. Enter editor mode
  2. Switch to Nanite Visualization mode (select “Masks” from the viewport options)
  3. Look for meshes that show Nanite Enabled = No
📷
Image Placeholder
Nanite Visualization mode
nanite-visualization-example.png

:::danger Issue: If many meshes show Nanite Enabled = No, it negatively impacts performance. This is especially problematic for furniture and decorative objects with high vertex counts. :::

Solution

  • Enable Nanite for all Static Meshes in asset properties
  • This is especially essential for assets with high vertex counts
  • After enabling, verify the change in Nanite Visualization mode

2. Reduce Masked Materials (Transparent Materials)

“Masked Materials” used for plant leaves and fences have very high rendering costs. These are many times heavier than solid materials and should be avoided when possible.

How to Check

  1. Switch to Shader Complexity (Pixel Programmable) mode in the viewport
  2. Observe the color coding:
    • Purple: Very expensive (high load) - Major performance concern
    • Red: High load - Needs attention
    • Green: Low load - Acceptable performance
📷
Image Placeholder
Shader Complexity (red/purple)
shader-complexity-red-purple.png

:::warning Red Flag: If plants or pendant lights are glowing entirely purple or red, they need immediate optimization. These are likely using masked materials inefficiently. :::

Example: Good Performance

After optimization, most meshes should show as green in Shader Complexity mode, indicating acceptable performance.

📷
Image Placeholder
Shader Complexity (green/optimized)
shader-complexity-green.png

Solution

  • Avoid using Masked Materials: If possible, change to Opaque materials and represent shapes with geometry, which is often faster in Nanite environments
  • Replace masked foliage: For plants, consider using solid geometry with opaque materials instead of masked transparent textures
  • Use LODs: Switch to simpler meshes when far away
  • Limit use to essential cases: Only use masked materials when absolutely necessary (e.g., chain-link fences where geometry replacement is not practical)

3. Check World Position Offset (WPO)

WPO (World Position Offset) is used for wind-blown curtains and plants, but it has computational costs. Many assets have WPO enabled in their materials at runtime even when they don’t need it.

How to Check

  1. Switch to Evaluate WPO mode in the viewport
  2. Check the color coding:
    • Red: WPO is active (computational cost present)
    • Green: WPO is disabled (fast, no extra calculations)
📷
Image Placeholder
Evaluate WPO mode
wpo-evaluation.png

:::danger Common Mistake: Static furniture and objects that don’t move appearing red in WPO mode. This means they’re doing unnecessary vertex calculations every frame. :::

Solution

  • Disable unnecessary WPO: If static furniture or non-animated objects appear red, the WPO is mistakenly enabled in the material settings
  • Keep WPO only for animated elements: Only curtains, flags, plants that sway in the wind should have WPO enabled
  • Verify in material editor: Open the material and check if World Position Offset node is connected when it shouldn’t be

4. Check Overdraw

When translucent objects overlap, pixel redrawing (Overdraw) occurs, increasing GPU load. In pathtracing mode, the brighter the colors, the sillier they are (stacked together). If it’s completely opaque white, that means there are stacked inside each other or too close.

How to Check

  1. Switch to Quad Overdraw mode in the viewport
  2. Observe the color intensity:
    • White/very bright colors: Extreme overdraw (critical performance issue)
    • Bright colors: High overdraw (needs attention)
    • Dark colors: Minimal overdraw (acceptable)
📷
Image Placeholder
Quad Overdraw mode
quad-overdraw.png

:::warning Critical Issue: Completely opaque white areas indicate objects are stacked inside each other or placed too close together, causing massive pixel recalculation. :::

Solution

  • Separate overlapping objects: Adjust placement to avoid overlapping translucent elements
  • Limit particle effects: Don’t stack too many translucent particles (smoke, fire effects)
  • Review glass placement: Multiple glass panes in close proximity can cause overdraw
  • Check for hidden geometry: Objects placed inside each other by mistake need to be repositioned

Performance Verification After Fixes

After applying optimizations, verify the improvements:

  1. Reload the room and check FPS in real-time walkthrough mode
  2. Re-run all visualization modes to confirm fixes:
    • Nanite Visualization: All eligible meshes should show “Enabled”
    • Shader Complexity: Should be predominantly green, minimal purple/red
    • Evaluate WPO: Only intentionally animated objects should be red
    • Quad Overdraw: No bright white areas
📷
Image Placeholder
Performance before/after
performance-before-after.png

:::tip Success Indicator: FPS should improve noticeably, and the room should feel smoother during walkthrough. If issues persist, review assets one by one to identify remaining problems. :::


Workflow Summary

When creating or reviewing assets, always check in the following order by switching viewport visualization modes:

  1. Lit (normal display): Visual confirmation - does it look correct?
  2. Nanite Visualization (Masks): Check for Nanite omissions on static meshes
  3. Evaluate WPO: Check for unnecessary animation calculations on static objects
  4. Shader Complexity (Pixel Programmable): Check for overly heavy materials (avoid purple!)
  5. Quad Overdraw: Verify no extreme overlapping of translucent objects

Quick Checklist

  • ✅ All static meshes have Nanite enabled
  • ✅ Masked materials replaced with opaque where possible
  • ✅ WPO only on objects that actually animate
  • ✅ No extreme overdraw (white areas in Quad Overdraw mode)
  • ✅ FPS remains stable when loading and walking through the room

This systematic approach allows you to eliminate the main causes of FPS drops before assets are used in production rooms.


Troubleshooting Tips

Issue: “I enabled Nanite but performance didn’t improve”

  • Check if masked materials are still used - Nanite efficiency is reduced with masked materials
  • Verify WPO is disabled - WPO prevents full Nanite optimization

Issue: “Everything is green in Shader Complexity but still slow”

  • Check Quad Overdraw - translucent overlapping might be the culprit
  • Profile actual FPS drop timing - the issue might be in a specific area

Issue: “How do I know about it?”

  • The Shader Complexity visualization mode is your best friend for initial diagnosis
  • Apart from that, if you did not do the other Nanite/WPO/LOD stuff, it doesn’t work properly in 3-4 links