|
|
Hi William,
"I suppose this corresponds to your AI Programming Wisdom chapter?"
In fact I didn't write anything for Programming Wisdom, but the two I wrote for Gems 2 are both relevant, as well as one of the ones coming up in Gems 3.
You have some good points there. It is quite a demanding list, but if I can meet the requirements of someone like yourself then I will know I'm onto a winner :)
Look out for a release around the end of March / beginning of April that I hope will address a number of the issues you raise.
This release will include benchmarks for different kinds of maps, for example indoor maze-like maps and large open outdoor maps. The purpose is to show that the system performs reasonably well on both kinds of maps (although it will still not be fully optimised) and to communicate targets for further optimisations.
In the past I have used very different kinds of optimisations for indoor and outdoor maps. Currently I am looking at something that promises to be a bit of a 'magic bullet' and provide good optimisation for both kinds of maps. Where different optimisations are required this will be hidden below the interface.
PathEngine is organised in terms of a set of geometric queries, and these queries are just as applicable to short paths, long paths, or path length determination for decision making and so on. The idea is to provide a simpler interface for developers by hiding the implementation details for these queries below the API. Perhaps it is a good idea to enable the developer to provide 'hints' to save the pathfinder a bit of time when a choice of optimisations has to be made.
Per NPC caching is organised in terms of updating a path that has already been generated (with a new start and/or end point for example).
The tradeoff between memory and speed is an important issue and I will certainly be looking to give developers control over this tradeoff. I would like to hide the details about this as much as possible, so this will probably be organised an interface involving the developer setting a target amount of memory for the preprocess to use. PathEngine would then report the actual amount of memory used, which might fail to meet the target. A set of standard benchmarks would also be provided in the interface to allow the developer to make comparisons between unrestricted preprocess and restricted preprocess.
The movement constraints is the most difficult point.
Something like falling off a cliff can be represented by an edge in the ground mesh with a specified cost to traverse in each direction.
This model doesn't extend to something like accumulating damage, but features like this are not difficult to add. Support for the system will include this kind of minor customisation.
Stuff like rocket jumps are more difficult. For this kind of feature you really need something like the 'reachabilities' generated for the Quake3 AAS. But the process of generating these kind of reachabilities requires specific knowledge about the collision and movement code that will actually arbitrate this kind of movement.
I will be looking at the best way for developers to be able to generate their own 'reachibilities' and integrate these into PathEngine, if navigational support for this kind of 3d movement is required.
|