I am using Blender to animate drone light shows.
- Each drone is represented by an icosphere with an emission material.
- A drone light show is basically a series of images and the drones navigate from image to image.
My workflow is to represent each image with empties. Then, the drones will move to all the empties in image 1 (I use dynamic parent for this, great plug in!), after a few seconds, the parenting to the empties on image 1 will stop, the drones will navigate to the empties in image 2, and parent again, etc until the end of the flight.
Right now, I am animating the movements between scenes by hand. So, after the end of an image, I look for the empty that is closest to the icosphere and navigate to it.
Of course, using hundreds of icospheres, there are bound to be collisions during these movements and I must correct all the movements by hand, moving icospheres and adding keyframes. This is all very time consuming.
What I am trying to achieve is the following (assuming we use 100 drones for this example).
- 1 select 100 empties as target positions.
- 2 Use some sort of plugin, or script, or animation nodes node tree that would calculate a path between where the icospheres are now, and where the empties are and would move all the icospheres to their new positions while maintaining a minimum distance between icospheres and not exceeding a maximum speed during the movement.
I have tried the "limit distance" constraint, but it does not work for our application. When two icospheres get too close, the limit distance constraint introduces jerky movements and very rapid speeds that cannot be replicated by a real drone. Also, the limit distance constraint introduces a lot of problems when rotating a complete scene or trying to do small adjustments to it.