Navmesh is extremely important for game. It defines where an NPC can go and how will it get there. It can only move on navmesh so any hole will become an impassable obstacle.
1. Put 3DDebug pannel onto your toolbar.
2. Hit the first button to show navmesh and generate it in your vicinity.
3. Hit the second button to hide navmesh.
You can visualize the navmesh to check if it's alright. You can choose from two options.
- Make sure layer "_test_nav_area" is loaded.
- Find a tag point named RecastDebugLocator and move it to the position you want to debug.
- Use wh_ai_RebuildDebugTile x command where x is a grid size around the navmesh tile that contains RecastDebugLocator.
- 0 = only that tile
- 1 = that and neighbouring tiles (9 in total)
- 2 = 25 tiles
- Visualise the navmesh by pressing NavMesh button in 3DArt utitlity panel.
1. Make sure layer "_test_nav_area" is not loaded (if it is be it will take a looooooong time to generate the navmesh)
2. In case you don't have navmesh from packs you need to build it first:
- Check if you have a navigation area encompassing the area you want to debug. If not go to AI/NavigationArea and create it so everything is in (Z-axis matter in this case, you have to intersect the terrain and have it high enough so all the surfaces you want navmesh on are within its volume). Make sure MediumSizedCharacter is checked.
- Hit menu AI/Request a full MNM rebuild. The navmesh will be build in all the navigation areas that are currently loaded. This may take a long time so better make sure you have only those you want to check.
3. If you right-click any empty space on Toolbar you'll be able to turn on 3DArt utility panel. There's a Navmesh button on it that will display the nevmesh.
4. In case it's poorly visible because of it being partialy under the terrain, you can offset it with Zoffset button on the panel.
For in depth information you can visit AI part of the navmesh wiki here
The navmesh will be generated only if some conditions are met, of course. We can't have NPCs running through walls and stuff.
- Width – if the space is at least wide enough for a character's capsule. That should be about 70 cm, but please don't do the bare minimum. The more space NPCs have the less likely they are to get stuck.
- Height – if the vertical space is at least 200 cm. This gives enough room for their helmets with feathers This problem can occur specificaly under the door frames, horizontal beams etc.
- Slope – the slope cannot be steeper than 60 degrees.
- Step – step cannot be higher than 25 cm.
Be aware that navmesh is only generated from the physics.
Common problems and troubleshooting
The little fence here is creating a high step and thus blocking the navmesh generation. For the player however this is no obstacle, he would be able to jump over it easily and get inside to the small garden. But NPCs wouldn't be able to get to him.
Easiest solution here is to get rid of the little fence completely. Notice how the navmesh of the garden is now connected to the navmesh of the surroundings.
The 1st floor is too close to the ground so the navmesh leading to inside won't be generated.
Solution is to move the whole structure up a bit.
Terrain height mismatch
The navmesh is generated in simplified polygons, which can cause some troubles. If the steepness of a small hill or depression is not enough to disrupt the navmesh, it can create local maximul (respective minimum) which is too far from navmesh. This happens only in the middle of navmesh tiles but it can cause troubles during combat, teleportation, LOD movement, save/load, etc. We created a test that checks for these places and allows the terrain to be altered so the navmesh generates correctly. To run the test use command:
This command checks the whole navmesh and draws red cylinder for each invalid place. It takes around 40 s on whole Rataje level to execute it, for which the game is frozen. Different aruments are:
- 0 – clears the generated results
- 2 – runs the test and prints the list of invalid coordinates into log
The debug draw itself can be controlled without the need of re-running the test. Use cvar wh_ai_NavmeshHeightTestDebugDraw with argument:
- 1 – draws red cylinders (easy location of spots from distance)
- 2 – draws blue spheres at points where navmesh is (for height check)
- 3 – draws both
Example of a problematic depression:
The test discovered few other issues, although it doesn't find all of their occurances, since it was not designed for it.
Sometimes vegetation cone is too flat that it is walkable and navmesh gets generated on top of it. The test finds some of these cases, which need to be fixed, since we don't want walkable bushes (nor by player neither by NPC):
It can also find invisible floor in mines which looks weird, when someone is standing on top of it: