Performance and Usability

Hey there! We haven’t talked in quite a while. And we all know what that means: Loads of content and new features! We’ve received a number of suggestions and wishes from you which we’ve sculpted into our most comprehensive update yet. So if you are into fast performance and clearer workflows while maintaining a tidy and sleek interface, this patch is for you! There’s an XXL changelog waiting for you. So without further ado, let’s get right into it!




Here’s the changelog for v1.5:


  • [Pro] With this patch, we laid the foundation for new formation components arriving in the next patches
  • All Polarith AI inspectors are now Unity-conform, especially all foldouts and tabs
  • All enhancements and fixes allow for great example and demo creation in future patches
  • The core steering algorithms are now deterministic when the whole application infrastructure is deterministic as well, have a look at the corresponding manual page


  • [Pro] Added AIMPerformance, a new component that replaces AIMThreading and provides further performance optimizations
  • [Pro] AIMPerformance: Added single-threaded load balancing which equally distributes agent updates over the available frames
  • Added AIMContextEvaluation: By inheriting from this class, you have full control over the update cycle of all AIMContext instances within the scene
  • AIMSteeringPerceiver: Implemented spatial hashing using a regular grid to improve the performance of the overall perception pipeline
  • AIMSteeringPerceiver: Implemented lazy percept receiving such that a percept is processed only if it is really relevant to at least one agent, this improves the overall performance
  • AIMSteeringFilter: Added a Range parameter that filters percepts before they are processed by a behaviour, this can improve the performance a lot
  • AIMSteeringTag: Added a Radius parameter to improve the handling of differently sized objects, so the same parameters can now be used for different object sizes
  • Added LayerBlending and LayerNormalization: All AIMSteeringBehaviour components are now able to store their intermediate results, these can then be normalized or applied to the Context using a different operation, this allows for a much more powerful behaviour combination to easily achieve boids, herds etc.
  • All AIMSteeringBehaviour and AIMReduction components can now predict their own future position based on fixed parameters or their actual velocity
  • Implemented a better self-recognition so that a percept representing the agent itself is ignored by behaviours (no need to have an inner radius for this purpose any longer)
  • Optimized the velocity tracking: When the velocity reaches the zero vector, the last valid non-zero vector is used to provide at least a valid direction
  • Instead of using a tracked or physics-related velocity, it is now possible to let the behaviour use a direction based on its rotation (most behaviours only need the direction and not the magnitude of the velocity vector)
  • Added a button to the behaviour inspectors that displays or hides more advanced options to improve the overall user experience
  • Added the two special predefined sensors LeftRightXY and DiagonalXY which might be useful for certain 2D setups but impossible to create without having AIMPlanarShaper
  • Improved the documentation content, look and feel


  • [Pro] AIMFollowPath and AIMFollowWaypoints: Fixed a bug which prevented the Points property from setting data when there was no AIMPathConnector (thanks Joe)
  • [Pro] AIMPlanarShaper: Fixed a problem that occurred because of API changes in Unity 5.6
  • [Pro] PlanarSeekBounds: Fixed a bug that led to wrong results when using a significance value other than 1
  • AIMContext: Fixed an error that occurred sporadically within the inspector
  • AIMContext: Fixed a bug which led to an annoying flickering of the indicator gizmo
  • AIMAvoid: Fixed the velocity warning that was shown even when there was a valid velocity source
  • AIMAvoid and MoveBehaviour: Fixed the method MapBySensitivityPlane() which had problems with any other transform scale than (1, 1, 1)


What’s Next?

Well, now we’ve got the right foundation, we’ll keep our promise: With the next patches, we’re going to produce decent content and examples corresponding to cool tutorials which will be continuously released on YouTube. Besides that, our developers are working on a Master Component so that the management of multiple behaviours will be easier. Moreover, most of you guys have formations on your personal wishlist. You’ll be happy to hear that we’re almost done with some really great stuff to be released next. Let me provide you some insights.