UE4 General AI questions

  • Navmesh:
    • Runtime navmesh generation.
      • What are the runtime limits to this system? It sounds like having a smaller tiles size helps. But I was wondering how far you have pushed the system
      • How do you handle offmesh link generation. I see you have “proxy links” (I think you call them that). Do you have a way to regenerate those?
        • I imagine this is game specific, so you might not tackle this problem. But do you have a hook for devs to do some work during or after the dynamic generation allow us to generate these links.
    • I’ve heard mention of a large-scale navmesh solution for very large environments. Where can I find some documentation on how that works or where should I look in the code?
  • What do you use for avoidance and navigation?
    • Do you use Detour for that? or have a home grown solution?
  • EQS - We have a very similar solution. Good to hear others have close to the same design.
    • Sounds like you can override the context, generators and scoring functions. Am I correct?
    • I think you mentioned EQS being shared across agents. Can you explain how these are shared across.
  • BT Can you explain what services are? Sounds like this is a like a sensor you can control in the BT?

Sorry for the formatting! Not sure how to indent with the bullet point thingy

-Troy

Hey Troy,

Thanks for posting this list of interesting questions! :smiley:

Navmesh

  • Runtime navmesh generation.
  • What are the runtime limits to this system? It sounds like having a smaller tiles size helps. But I was wondering how far you have pushed the system

The only generic limit of the system I can think of is the amount of CPU and memory you’re willing to give it. Have you played Fortnite? It rebuilds significant parts of navmesh all the time - with every wall, ramp, roof players build or gets destroyed. You’ll have to give it a try yourself, but it should work well with most crazy scenarios :smiley:

  • How do you handle offmesh link generation. I see you have “proxy links” (I think you call them that). Do you have a way to regenerate those?

NavLinkProxy actors are just a demonstration how one can supply navigation system with navigation links information. Fortnite for example does it a bit differently, we have custom StaticMesh derived class that implements INavLinkHostInterface interface and links are defined per static mesh asset in static mesh editor.

  • I imagine this is game specific, so you might not tackle this problem. But do you have a hook for devs to do some work during or after the dynamic generation allow us to generate these links.
    If you want your actor to have a custom control over it’s representation to navigation system implement INavRelevantInterface interface and override GetNavigationData. You can very precisely control what will get passed to navigation system then. ANavLinkProxy is a simple example of implementation of both interfaces I’ve mentioned so far.
  • I’ve heard mention of a large-scale navmesh solution for very large environments. Where can I find some documentation on how that works or where should I look in the code?
    Yeah, it’s the Navigation Invokers, and there’s no documentation on it at the moment.
  • What do you use for avoidance and navigation? Do you use Detour for that? or have a home grown solution?

We have both a wrapper for Detour crowds as well as a simple RVO implementation. To use detour you need to use UCrowdFollowingComponent for your AI (there’s already a class in the engine that does that, ADetourCrowdAIController). To enable RVO you need to set its flags on CharacterMovementComponent (that’s on the pawn). Needless to say both solutions do not cooperate.

EQS

  • We have a very similar solution. Good to hear others have close to the same design.

Glad you like it :slight_smile: It’s actually UE4’s reimplementation of the original solution I’ve created for Bulletstorm :smiley: I love when ideas live on even if the code is dead.

  • Sounds like you can override the context, generators and scoring functions. Am I correct?

Yes, you can create your own generators, contexts, and tests (that are being used both for scoring and/or filtering).

  • I think you mentioned EQS being shared across agents. Can you explain how these are shared across.
    Once you get query result from EQS manager you can reuse it :slight_smile: Also, EQS queries are defined as assets in the editor, and then at runtime some of the “query template”'s details get reused to save memory. Not sure if that’s what you’re asking though :slight_smile:

BT - Can you explain what services are? Sounds like this is a like a sensor you can control in the BT?

The services are our way of having “background tasks/behaviors/services” be controlled by BT. A service will be active only as long as it’s part of the active BT branch, and during that time will “tick” on a regular basis (controlled by exposed bt node parameters). Common use case it putting one on a root (or somewhere) that will re-evaluate enemy selection every .5 seconds or so.

Cheers,

–mieszko