We’re encountering non-deterministic behavior during NavMesh generation on a World Partition map with the following setup:
- Engine ~5.5.4
- Map type: world partition, Runtime generation: dynamic modifiers only
- Navigation built via commandlet or editor with ai.nav.bNavmeshAllowPartitionedBuildingFromEditor 1
Our map contains several types of static objects that act as obstacles. These are duplicated many times across the level, and we expect them to cut off navigation underneath. The two main object types currently under test are:
- Static Mesh Actor
- Blueprint-based actors with multiple components, including a Static Mesh Component
We’ve observed several inconsistent behaviors:
- When building navigation in the editor using the old method for testing only, all objects in the loaded world partition area correctly cut off navigation.
- When building via commandlet or with partitioned editor build (ai.nav.bNavmeshAllowPartitionedBuildingFromEditor=1), only some object instances cut off navigation - others do not.
- InPIE, all tested instances currently cut off navigation correctly, but this wasn’t always the case - and the failing instances didn’t match those in the editor.
- In cooked builds, only a few object copies cut off navigation, the rest do not.
- When experimenting with various settings, navigation sometimes appeared current - but reverted to incorrect behavior after 1-3 builds
- When navigation fails to cut properly, it doesn’t appear to be caused by missing collision data - I was able to log and debug-draw valid geometry for both working and non-working instances.
- I’ve tested multiple settings across Static Mesh assets, blueprints, actor instances and project settings - but haven’t found a way to make the behavior deterministic.
- In a quick test on a clean World Partition map, placing several copies of these objects resulted in correct navigation behavior across editor, PIE and cooked builds.
Questions:
1) What is the recommended way to set up a static obstacle that reliably cuts off navigation underneath (and ideally above, to prevent NPCs walking on it), in a World Partition map with partitioned nav build and Runtime Generation set to Dynamic Modifiers Only ? Ideally with minimal memory and performance impact.
2) Is it correct to disable “Gather Convex” in Static Mesh assets and use simple shapes (eg. box collisions) for navigation purposes ? (screen_00_A)
3) What may cause this non-deterministic behavior and how can it be prevented?
4) Are there any recommended cleanup steps before running the build commandlet - such as P4 revert, reconcile, clearing DDC, clearing saved or other ?
I was able to reproduce only part of the problem on clean 5.5.4 engine (project included).
There are multiple object copies with various setups. In general, Static Mesh Actor instances seem to consistently cut off navigation (but in our project this is not so obvious), while blueprint-based actors only do it sometimes. In our project, converting blueprint actors to static meshes didn’t fully resolve the issue.
Any insights or recommendations would be greatly appreciated.
Our build command:
%ENGINE_BIN_DIR%UnrealEditor.exe %UPROJECT% -run=WorldPartitionBuilderCommandlet "%MAP%" -AllowCommandletRendering -BaseDir="%ENGINE_BIN_DIR%" -Builder=WorldPartitionNavigationDataBuilder -log=WPNavigationBuilderLog.txt -SCCProvider=%SCCPRIVIDER% -ddc=noshared %OPTIONS%
Some values from nav setup:
Filed Tile Pool Size = 1
Tile Pool Size = 32769
Tile Size UU = 2584
Mav Mesh Resolution: Cell Size = 19, Cell Height = 32, Agent Max Step Height = 5
Agent Radius = 35
Agent Height = 144
Agent Max Slope = 55
Min Region Area = 0
Merge Region Size = 400
Max Simplification Error = 1,3
Simplification Elevation Ratio = 0
Force Rebuild on Load = false;
Runtime Generation = Dynamic Modifiers Only
Data Gathering Mode = Lazy
Supported Agents: 1 - Radius = 35, Height = 144, Step Height = -1