In this tutorial we're going to take a look at how to setup custom AI perceptions with some basic level markup and Flow Graph.
Before we begin, it's worth clarifying that CRYENGINE's AI system has two main perceptions: Audio, being what the AI can hear and Visual, being what the AI can see.
There are additional auxiliary systems such as 'bullet rain' which is the perception of bullets passing the AI nearby, these add to the AI's behavior, interests and overall believability.
There are numerous AI nodes available in Flow Graph to tweak AI's behavior. The one we're going to look at now is AI:PerceptionScale.
This is a basic per-entity node which you can control the perception of an individual AI, both Audio and Visual. If you want to control the perception of all AI in the level, you can use AI:AIGlobalPerceptionScale, which can also be filtered down by Factions.
For now we'll stick with the first node as we're just going to deal with one AI character. Go ahead and setup your level ready for AI and drop an AI character into the level.
Add your AI as the node input and add a basic input key trigger as follows:
Here's what the graph is doing step by step:
You can now jump in game and the AI character will not be able to see or hear you, unless you shoot near them, then their perception will be overridden by the aforementioned 'bullet rain' system.
For 100% oblivious AI, use the ai_ignorePlayer CVar.
Go ahead and try setting the AI perception to 0.5 and see how the AI reacts differently compared to the full '1' value.
By using more gameplay applicable logic, such as Area/Proximity Triggers, you can use this to fine-tune stealth gameplay areas and obtain more control over AI where you want them to be more or less aware of the player.
Depending on your scene, you'd probably need to Logic:Gate some of those conditions
Another method of controlling AI perception is by the use of AI Anchors. Unlike the above Flow Graph method which relies on logic, this method relies on object placement and level markup.
Add an AI Anchor into your level via RollupBar -> Objects -> AI -> AIAnchor then click on the '...' for the AnchorType parameter.
Built into the default available list are 4 "LightSpot" anchor types:
LIGHTSPOT_* type | CVar | CVar default value |
---|---|---|
LIGHTSPOT_SUPERDARK | "ai_SightRangeSuperDarkIllumMod" | 0.25 |
LIGHTSPOT_DARK | "ai_SightRangeDarkIllumMod" | 0.5 |
LIGHTSPOT_MEDIUM | "ai_SightRangeMediumIllumMod" | 0.8 |
LIGHTSPOT_LIGHT | (not explicitly handled by a cvar) | 1.0 |
These four anchor types give you a decent amount of flexibility when it comes to just how perceptive you want AI to be. They're also tied to above mentioned CVars which can be tweaked further if needed.
For now, select the LIGHTSPOT_SUPERDARK option to get the most effect. You'll also need to set a radius value, try '5', for 5 meters radius. You'll notice you now get a visual radius if you have Helpers enabled (Shift + Space).
One more thing you need to do is enable IsAffectedByLight parameter under 'Perception' on the AI character.
What all of this means is the AI will have limited visibility inside this radius. If the player is inside this radius then they will have a lower perception of them.
One thing to keep in mind is that visual light, either entities or the Sun, actually plays no role in this because the computation required and performance loss would be huge. This is why its faked through anchors rather than being based off actual lighting.
Remember with the all-powerful Entity:PropertySet node you have the ability of tweaking radius and other options on-the-fly via Flow Graph too.