Kinematic and 3D navigation

We’re currently investigating solutions to have the features listed bellow in our game. These topic are fairly complex and we’re considering solutions like Mercuna and Havok pathfinding, which of course come at a price. Before we make any decision, I wanted to ask if there was any plan for these features to arrive in the engine. What I have in mind is:

  • octree generation with world partition support + 3d pathfinding (flying AIs)
  • path smoothing
  • ability to have agents of different shapes and to discriminate them explicitely, not by the capsule properties.
  • ability to restrict rotations based on the agent shape (prevent rectangular agents from clipping through walls)
  • kinematic pathfinding (minimum turning radius considered during the pathfinding, not during smoothing)
  • navmesh pruning

I hope this is the right place to ask this question, thank you for your help

Steps to Reproduce

We have tasks for some of these features in our backlog. Many times it is that higher priority items have pushed them down the list. Here is bit more detail on the individual pieces.

  • octree generation with world partition support + 3d pathfinding (flying AIs)
    • What do you mean by WP support for the octree? Elements should be added/removed in the octree as the level streams them in/out
    • 3D pathfinding is something that we want to add to the engine. There have been some prototypes made in the past, and I know this is a request we get internally from our FN and Lego FN teams.
  • path smoothing
    • There is initial work that has been done and is included in the NavCorridor plugin. It is certainly experimental and has not had many changes lately. It is an item that got bumped down our list as other high priority items were identified. No ETA on when we will return to this work currently.
  • ability to have agents of different shapes and to discriminate them explicitely, not by the capsule properties.
    • I know we implemented varying collision support for The Witcher 4 demo at UnrealFest. That was done in Mass, but I believe most of those tweaks were project-specific and have not been merged back into the engine.
    • In general, I do not see this support being added in the near future.
  • ability to restrict rotations based on the agent shape (prevent rectangular agents from clipping through walls)
    • I am assuming this is while pathfollowing and not during the find. I believe things such as the Unreal Animation Framework and Mover 2.0 will help with this. If during a pathfind, there are not any current plans.
  • kinematic pathfinding (minimum turning radius considered during the pathfinding, not during smoothing)
    • No plans on this specifically currently, but you may be able to do something similar using virtual navigation query filters. The main concern there would be keeping calculations as fast as possible since it would run on every poly in the pathfind.
  • navmesh pruning
    • This has been talked about many times. Do you have any more details to share on what you would like to see? A manual pruning tool for removing polys? Ability to seed navmesh at certain locations to remove all non-reachable navmesh islands? Is this mainly for offline (editor-time) pruning or dynamic pruning during runtime?

Thank you for your answer, it has a lot of interesting infos. I can add some details:

  • Octree: What do you mean by WP support for the octree?

I mean being able to generate an octree in a level that is using WP. If I remember correctly the static navmeshes were not compatible with WP for a while and we were using dynamic navmesh generation on agent.

It is interesting to know tha 3D navigation is part of the plans. Do you have an ETA? Even a rough estimate, even if it might shift, would be really helpful.

  • Agent shapes: I am assuming this is while pathfollowing and not during the find

I think you’re right and we can get away with a pathfollowing solution. I can see benefit to have it during pathfind, but it may also lead to the agent being stuck a lot. Unfortunately we decided that mover was too risky for us at the time and we’re going to do our own solution for the ongoing project.

  • Kinematic pathfinding: you may be able to do something similar using virtual navigation query filters

I’m not very familiar with Query Filters so I’m not sure how that would help. What I’m sure of is that setting up area modifiers throughout all the level manually is not an option for us.

  • Pruning: Do you have any more details to share on what you would like to see?

I was thinking about offline pruning using seeds as it seems to be the most convenient method to lighten the navmesh.

You can use regular navmesh in a WP level. I think if you have dynamic modifiers only, it will include more things in the octree. For example, we use a regular dynamic navmesh in FNBR even though the map is using WP. Lego FN also uses regular navmesh and WP levels, but it utilizes navigation invokers.

3D navigation does not have an ETA. It is on our radar and something we want to tackle. I will push for its prioritization as multiple licensees have requested it.

In virtual query filters, you can override getVirtualCost to add more logic into scoring individual polys while pathfinding. It would not require any areas to be set up. You may need to track more data (which is possible in query filters to host other configurable variables) to check the direction from the previous poly to ensure it is within the tolerance of your turning radius. There are other threads on here with some setup for that. The main concern is perf as it runs on every poly of any pathfind using the filter. For example, we have used similar filters for setting things up with leashes in FNBR to keep them within a certain distance from their anchor point.

Pruning by using seeds offline has been discussed. I certainly see the use of the tool for removing unreached polys automatically.

Thank you for the additional info. It does help us as we discuss and prioritize features for the future.

I am always glad to let people know what is on the roadmap ahead. Questions and inquiries like this help the team see how our users are using the tools and what features or functionality may be missing in the engine currently.

Thank you James for your answer again, I really appreciate you sharing these informations.