Overview
ButterflyFleet Studio for Blender is a drone show design add-on for Blender, an open-source 3D creation suite. It provides the Blender-side tools for creating, editing, validating, importing and exporting both indoor and outdoor drone light shows.
This manual documents the Blender add-on only. It covers the panels, operators, timeline concepts, formations, storyboard transitions, lights, pyro, yaw, safety checks and .skyc import/export workflow available inside Blender.
The add-on is intended to keep the full design state visible and editable in Blender: drones, formations, transition timing, imported .skyc data, light effects, validation settings and export options all live in the same project file while you work.
If you are interested in working with ButterflyFleet Studio for Blender but you need a workflow that is not covered here, please contact us.
Feature highlights
- Formations
-
-
Smart tools for static/dynamic formation creation
-
Easy integration of internal or external 3D animations
-
Automatic transitions between formations
-
Multiple transition matching methods for geometry-specific or collision-aware assignment
-
Simple and smart takeoff in multiple phases
-
Simple and smart return-to-home and landing
-
Layered MOVE tools for procedural formation motion on active formation empties
-
- Import & Compatibility
-
-
Modular import of external formations or animation snippets using .csv and third-party formats
-
Optimal sampling of drones onto imported SVG drawings
-
QR code generation based on a simple url
-
- Lights
-
-
Dedicated color animation design tools
-
Wide variety of swarm-level parametric light effects
-
Built-in LED preset library for waves, scanners, outlines, fireworks and rhythmic wipes
-
- Pyro and yaw control
-
-
Pyro control support with visualization and several export options
-
Yaw control support for an extra degree of freedom
-
- Event synchronization
-
-
Transparent storyboard defines the drone show timeline
-
Storyboard and light effects are parametrized for smooth temporal adjustments
-
Easy integration and synchronization with music
-
- Safety
-
-
Smooth velocity and acceleration limited path planning
-
Real-time altitude, velocity, acceleration and proximity checks
-
Integrated visual feedback on real-time safety warnings
-
Flight validation report for a final show-level check
-
- Export & Compatibility
-
-
Shows can be exported in ButterflyFleet compiled show format (preferred) or as sampled positions and RGB colors with a fixed FPS in CSV format for further post-processing with external tools
-
Shows can also be exported into most of the known drone show formats on the market
-
.skyc import can recreate drones, stationary formations, storyboard entries, lights and optional full motion for further editing
-
Additional export options for fireworks and event visualization software
-
Software installation
ButterflyFleet Studio for Blender is a platform independent tool, just like Blender. The installation procedure is the same for Linux, macOS and Windows. Please follow the steps below.
Installation
1. Check hardware requirements
We suggest to follow the official Blender recommendation for choosing your computer on which you want to run Blender and ButterflyFleet Studio for Blender.
Some operations, such as automatic transition planning, takeoff/RTH planning and validation report generation, require the add-on to communicate with a configured planning backend. You may use the add-on without Internet access, but backend-backed functions will not be available until you either go online or configure a local standalone backend.
2. Install Blender
There are many Blender versions out there, we aim for compatibility with the latest Long Term Support (LTS) release. This is version 4.5 at the time of writing. if you are unsure, check the version number of the latest Long Term Support (LTS) release on the Blender site.
3. Install ButterflyFleet Studio for Blender
ButterflyFleet Studio for Blender can be downloaded from https://butterflyfleet.com/download/butterflyfleet_studio.zip as a single .zip file. Please download it to your computer first, then follow the instructions below.
|
Warning
|
Safari on macOS automatically unzips all .zip files by default, which will prevent you from selecting the .zip file itself when installing the plugin. If you are using Safari on macOS, hold down the Option key when clicking on the download link to prevent this from happening, or turn off the unzipping of "safe" files permanently in menu:Safari[Preferences > General]. |
-
Open Blender and go to Edit → Preferences → Add-ons.
-
Select from the dropdown menu in the top right corner.
-
In the popup window select the ButterflyFleet Studio for Blender .zip file that you have downloaded previously to your computer, and press Enter.
-
Once installed, activate the "ButterflyFleet Studio" add-on by clicking on the checkbox next to this item in the add-on list (you may need to scroll down to find the "ButterflyFleet Studio" item).
-
Setup add-on preferences by pressing the button on the left side of the "ButterflyFleet Studio" add-on item. Note that generally you need to change settings only if you are using a version of ButterflyFleet Studio for Blender other than the free community edition:
- API key
-
If you have received an API key for the planning backend, paste it here (by default you do not have to touch this setting).
- Server URL
-
Enter the URL of a dedicated planning backend if you are using one (by default you do not have to touch this setting, change only if you know what you are doing).
- Use local server
-
Press this button if you have purchased a professional local standalone backend that is running on your own machine. This action will fill the field automatically.
- Use community server
-
Press this button to use the online community server. This action will clear the field automatically. Our community server is a free service but it might be limited in drone number, execution time or available features. Purchase a professional server from ButterflyFleet Store if you need to use ButterflyFleet Studio for Blender without limits.
- Enable experimental features
-
Enable this checkbox if you are open to experiment with the latest features of ButterflyFleet Studio for Blender.
4. Enable Online Access in Blender
Starting from Blender 4.2, the preferences dialog in Blender provides an option where the user can explicitly indicate that they wish to allow (or deny) access to online resources. ButterflyFleet Studio for Blender uses a configured backend (either the online community backend or a local standalone backend) to calculate transitions, decompose formations, plan takeoffs and landings and export the show into various file formats. If you want to use the full capabilities of the add-on with an online backend, you need to enable online access if you are running Blender 4.2 or later. Earlier versions of Blender are not affected.
To turn on online access, open Blender and go to Edit → Preferences → System, scroll down to the "Network" section and then tick the "Allow Online Access" checkbox.
5. Setup network timeout in Blender
If you use large fleets and/or long and fine-grained shows, make sure that the "Network timeout" setting right below the "Allow Online Access" checkbox is large enough to handle requests towards your configured backend.
The longest action is usually the show export. During export most time is taken by the sampling of your show within Blender to form the backend request input. Even though this procedure is not part of the request time, with large shows you may run into cases where you need more processing time than the default 10 seconds. If such timeout occurs, raise the value as convenient.
Installing updates
ButterflyFleet Studio for Blender consists of multiple modules that are interpreted by the Python interpreter built into Blender. In order to perform an upgrade of the add-on, the previous version needs to be unloaded completely before the new version is installed. Due to how Python’s module system works, this is very hard to do without unloading the plugin manually. Therefore, the preferred sequence to update the add-on is as follows:
-
Deactivate the add-on in Edit → Preferences → Add-ons by unticking the checkbox in front of the add-on.
-
Install the new version of the add-on using the same procedure as outlined above.
-
Exit Blender.
-
Restart Blender.
-
Activate the add-on again in Edit → Preferences → Add-ons.
|
Note
|
If the update still fails after following the steps outlined above, try to completely uninstall the old add-on first manually (as described below) and then re-install the new one from scratch. |
Uninstallation
If you decide to uninstall ButterflyFleet Studio for Blender for any reasons, you have to do it manually. Removing the add-on from Blender’s add-on manager is possible, but it will not remove all files related to ButterflyFleet Studio for Blender. The full, manual process is as follows:
-
Deactivate the add-on first in Blender’s add-on manager.
-
Open the file manager of your operating system and navigate to the folder containing the Blender add-ons. Refer to Blender’s documentation to find the add-ons folder.
-
Remove the file named ui_butterfly_studio.py.
-
Also remove the butterfly folder within the vendor folder.
Key concepts
In this chapter we will explain the basic conventions and the key concepts of ButterflyFleet Studio for Blender so you can start designing a drone show from scratch as smoothly as possible.
Throughout this chapter (and in the rest of this manual) we assume familiarity with Blender itself; if you are new to Blender and 3D modeling in general, you should start with reading or watching a few Blender tutorials. The Blender homepage contains an extensive collection of tutorials. If you prefer to watch video tutorials, we recommend the Blender Fundamentals playlist from YouTube.
Units
-
Blender space units are treated as meters. Refer to the Blender manual to set up the metric unit system.
-
Blender time units are treated as seconds.
-
You can use any convenient framerate you wish, just make sure that it is divisible with the desired output frame rate of your trajectories (e.g., 24 FPS → 4 FPS or 25 FPS → 5 FPS). Note that the internal control loops of most drones run at 1 kHz, 400 Hz or 100 Hz, therefore it is advisable to use 25 FPS instead of 24 to make sure that the trajectory and light samples align nicely with the control loop of the drone.
Mapping of time
Blender uses relative time and this is preserved in the exported ButterflyFleet compiled show files as well. Frame 0 in Blender becomes relative time 0 s in the .skyc output.
|
Tip
|
We strongly recommend you to start your frames with 0, not 1. Frame 0 in Blender will be relative time 0 s in the .skyc output in all cases, regardless of what frame range you export. |
Coordinate system
Blender uses a relative coordinate system with X, Y and Z axes. The real world has directions of North-South, East-West and Up-Down in geodetic coordinates (latitude, longitude, altitude).
The add-on lets you store optional real-world placement metadata in the exported show according to the following rules:
-
The origin (0, 0, 0) in Blender corresponds to the show origin metadata value.
-
The X, Y and Z axes correspond to relative directions of front, left and up, respectively, where front is represented by the show orientation metadata value.
-
Ground level is always at Z = 0.
The table below summarizes all mappings between the relative and absolute coordinate system.
ButterflyFleet Studio for Blender |
Exported placement metadata |
(relative coordinates) |
(absolute/geodetic coordinates) |
(0, 0, 0) |
show origin |
X |
front (show orientation) |
Y |
left |
Z |
up |
Z = 0 |
ground level |
The takeoff grid
A typical drone show starts with the drones being arranged in a grid-like pattern on the ground. The spacing of the grid is usually between 2 to 4 meters, although it can be even smaller in crowded urban areas where it is hard to find large open spaces. A regular grid is easy to set up, but in certain cases it is more beneficial to shift every second row of the grid by half of the grid spacing to increase the distance between drones a bit further.
ButterflyFleet Studio for Blender will place the drones in a regular grid by default, but you can freely adjust the initial positions of the drones as needed to adapt the takeoff grid to the requirements of the area where the show will be performed.
Formations and transitions
Most drone shows alternate between showing static or dynamic formations (where the drones are arranged in patterns resembling familiar shapes, objects, animals or corporate logos) and performing transitions between the formations. Formations are designed and choreographed artistically, while transitions are typically computed by a path planning algorithm that knows how to make the drones move from the end of one formation to the beginning of the next formation while keeping safe distances between drones to avoid collisions.
In ButterflyFleet Studio for Blender, formations are stored as sub-collections in a top-level collection named Formations. This is a convention that you need to stick to; ButterflyFleet Studio will always look for this collection by name, and it will create one if it does not exist yet. Make sure not to rename this collection. Each sub-collection of the Formations collection is an individual formation, also identified primarily by its name so make sure to use unique names. The objects in a formation may be:
-
Empties, each empty mesh representing a desired position of a single drone in the formation
-
Meshes, each mesh representing a desired position of a single drone in the formation
-
Meshes with a dedicated vertex group named Drones, in which case the position of the mesh is ignored but each vertex in the vertex group indicates a desired position of a drone in the formation
We call the desired positions of the drones within a formation markers. Recall: markers may be the origins of empty or non-empty meshes, or the vertices in a dedicated vertex group of a mesh. It is possible to mix the three types of markers within a single formation, although the most common case is that either you have a number of empties in a formation, or a single mesh where a subset of vertices of the mesh are placed in a vertex group named Drones.
The storyboard
ButterflyFleet Studio for Blender arranges the formations into a list that we call the storyboard of the show. Each entry in the storyboard consists of an arrival frame when the formation should appear on the sky, a hold time, and a reference to one of the formations in the Formations collection. For entries after the first one, the previous entry’s depart frame is also the transition start for the incoming transition. Entries may not overlap with each other and one should ensure that there is enough time between formations to perform a transition. In a typical show, transitions last between 15-30 seconds, depending on the maximum velocity of the drones and the sizes of the formations.
When the show timeline is within the arrival and depart frames of a storyboard entry, ButterflyFleet Studio for Blender ensures that the drones follow the formation markers using standard Blender constraints. When the show timeline is between two formations, ButterflyFleet Studio for Blender will smoothly animate the influence parameters of these constraints automatically to make the drones fly from one formation to the next one. The assignment between drones and markers is calculated by the configured planning backend when you click on the button on the storyboard panel.
Transition planning
Automatic transitions between two formations are calculated by the configured planning backend in the background using highly-optimized proprietary maths. ButterflyFleet Studio for Blender provides automatic transitions between static, non-staggered formations with the following guarantees:
-
the transitions will be straight line
-
the velocity at the starting and ending point will remain zero
-
the minimum distance between any drones at any time during the transition will not be lower than D/sqrt(2) (equalling roughly 0.7*D), assuming that the minimum distance in the source or target formations is D.
Note that the automatic transition planner tries to find an optimal matching between source and target formations even in dynamic (nonzero starting or ending velocity) or staggered (different starting or ending time of different drones) cases, but without minimum distance guarantees, for the time being.
Return-to-home and landing
A drone show does not end with the last visible formation on the sky — one should also bring the drones back to the takeoff area in a safe manner. This is typically done in two parts: the return-to-home (RTH) maneuver makes the drones fly back above the takeoff area to a designated altitude, while the landing maneuver lands them vertically to ground level. In ButterflyFleet Studio for Blender, the RTH maneuver is planned as a collision-free return to assigned slots in the takeoff grid, with optional layered timing. For ground-to-ground shows, add a landing entry after RTH so the exported trajectory reaches ground level and is ready for the target flight stack’s normal end-of-show behavior.
|
Note
|
The current RTH matching options optimize safe assignment to takeoff-grid slots; they do not guarantee identity return to each drone’s original takeoff slot. Layer delays affect activation and descent timing, not identity matching. |
Light design
ButterflyFleet Studio for Blender also supports flawless light design for your drone light shows. In Blender we support a single RGB color to be mapped to each drone at each frame in the timeline by simple baked colors or by complex parametric light effects overlayed to the base color. The RGB color output from Blender is stored in exported show data for later conversion to the LED color space required by the target hardware. There are several smart tools dedicated in ButterflyFleet Studio for Blender for light design, to see these options please checkout the description of the LEDs tab.
Storage and visualization of color data
Baked colors of a given drone object are stored in the animation data of the color property of the object (shown as "Color" in the "Viewport Display" section in the Properties editor), while parametric light effect colors are dynamically overlaid onto this property for the current frame in real-time.
For properly visualizing colors, internally we use a common drone template material for all drones (which should always be the first material of each drone) with a shader node tree that injects the viewport color of the object (i.e. the color property) as the color source for the material. Therefore, for properly visualizing drone colors, you should set the "Object Color" and/or "Wireframe Color" properties of the Viewport Shading panel in your 3D viewports to Object.
Note that earlier (pre 4.0) versions of the ButterflyFleet Studio for Blender plugin used a different shader node tree with one unique material for each drone. This solution was changed in version 4.0 due to efficiency reasons. When you open a file that was created with an earlier version of the plugin, a migration window should pop up warning you about the deprecated structure of your old file and providing means for upgrading your file to the new structure automatically with a single click.
Color space
Internally, ButterflyFleet Studio for Blender uses the linear RGB color space, just like the entire Blender pipeline. The colors are encoded in this color space when they are exported to a show file, and the target playback or hardware pipeline is responsible for converting linear RGB colors to the color space appropriate for the end device.
Pyro design
ButterflyFleet Studio for Blender supports pyro control as part of your drone light shows. Pyro trigger events on multiple channels can be created with convenient payload descriptors and different visualization types. Pyro control events can be exported into the main .skyc show file or into external formats supporting drone-launched pyro. For more information please checkout the description of the Pyro tab.
Storage and visualization of pyro data
Pyro data for each drone is stored as a JSON string under "Object Data Properties" → "Drone Show" → "Pyro trigger events".
This JSON string gets converted into different visualizations based on the "Render" dropdown selection of the Pyro Control panel. Some visualizations of pyro data need a dedicated material for each drone, this is always stored as the second material of the drone objects.
Yaw control
ButterflyFleet also supports yaw control as part of a drone show for certain drone types. The yaw angle for yaw control in ButterflyFleet Studio for Blender is simply inferred from the Z component of the global rotation of objects assuming "XYZ Euler" notation. So far there are no specific tools to aid yaw control, it is the responsibility of the designer to create a yaw curve that harmonizes with the concept and spatio-temporal trajectory of the show.
|
Tip
|
if you wish to use yaw control, change your default drone object template to something that is not as isotropic as the default icosphere, so that you can also visualize your rotations in Blender. |
To export yaw control for your show, check the "Export yaw" checkbox in the .skyc export panel.
Useful Blender settings
We suggest you to check the following Blender settings before you start designing your drone show:
-
Set the "Object Color" and "Wireframe Color" properties of "Viewport Shading" in the top right corner of your 3D Viewport to "Object" as drone colors handled by our addon are sourced from drone object’s viewport color animation data.
-
set the first frame of the scene to 0 (instead of the default 1)
-
set your rendering frame rate to a convenient value
-
If you use a preview frame range separately from the render frame range, make sure it is enabled, otherwise it will return (0, 0) values in the Blender API that might result in erroneous output in certain cases
-
in the View tab on the sidebar of the 3D Viewport Editor set up a convenient Clip Start and End value to make your drones visible during the whole show in case you need to render your show
Tutorials
We carefully designed the tutorials below to guide you through all main processes involved in drone show design. Please select from the list below:
Quick guide to drone show design with ButterflyFleet Studio
ButterflyFleet Studio for Blender is a professional drone show designer framework integrated into Blender. In this tutorial we will show step by step how to create a drone show from scratch with it.
In this tutorial we assume the following:
-
You have a basic understanding of Blender and its capabilities
-
You have successfully installed the ButterflyFleet Studio for Blender to supplement Blender with all available ButterflyFleet tools. Refer to the Installation chapter if you haven’t done so yet.
-
You have read and understood the Key concepts chapter of this manual.
1. Initialize the show framework in Blender
Press N in the 3D Viewport editor to open its sidebar.
You will see six new tabs related to ButterflyFleet Studio:
These tabs contain all panels, buttons, operators and functions that are specifically needed for drone show design, in proper order.
The first two panels of interest are the Show panel and Swarm panel on the ButterflyFleet tab.
These panels contain some general configuration options you might want to review before starting your actual design workflow.
After configuring your workflow, move to the Formations panel on the Formations tab.
To initialize your drone show, first of all, press the button on the top of the Formations panel and check out the parameters in the popup window.
Setup your takeoff grid with any convenient parameters and press .
This will create all ButterflyFleet-specific collections (Drones, Formations and Templates) that you will need for your drone show, will add the first "Takeoff grid" entry to the storyboard and will also initialize your drones in the 3D Viewport editor.
To learn more about the mentioned collections, please read the Key concepts and the Glossary.
2. Create takeoff procedure automatically
Drone shows typically consist of artistic formations and other technical parts that are usually not the responsibility of designers to deal with (such as takeoff, transitions between formations, return-to-home or the landing procedure). ButterflyFleet Studio provides automated tools for handling these parts, if needed.
To take off your drones, simply press the button on the Formations panel and setup the parameters of the automatic takeoff procedure.
After you press on the Takeoff popup window, the "Takeoff" entry should appear in the Storyboard panel as the second entry.
3. Create formations
Formations are standalone parts of your final drone show, consisting of static or dynamic (animated) scenes.
The Formations panel will be your guide to deal with formations.
Use the button on the Formations panel to create a formation as part of your drone show.
If you would like to create static formations, they can be initialized from many individual objects (one drone per object) or from selected vertices of a single mesh (one drone per vertex).
If you wish to create animated formations, you have two options:
-
You can create a static formation, which either creates empty meshes based on the current positions of the selected objects or vertices, or places the meshes themselves in the formation. There is a subtle difference between the two options: when the mesh itself is placed in the formation, you need to keep the mesh in the scene, while if you create empties based on the selected meshes or vertices, you can remove the meshes afterwards as ButterflyFleet will use the empties instead. Typically, if you already have an animated mesh, you should put the mesh in the formation and switch it to wireframe mode or hide it in the 3D viewport and the render later on so you only see the drones in the final result. This way the animation attached to the mesh will also be followed by the formation.
-
You can create a vertex group of any vertices of an object in Blender’s Edit mode. ButterflyFleet adds a dedicated property to each mesh that allows you to set the name of the vertex group that contains the vertices that should participate in the formation when the mesh itself is placed in the formation. By convention, this vertex group is usually called Drones, but you are free to use any other name as you wish — just make sure that you set this name in the "Drone Show" panel of the "Object Data Properties" tab of the mesh in the Properties Editor.
Either way, make sure that the number of markers (vertices or objects) you use in a formation matches the size of your fleet. If your formation uses less markers than your fleet size, supplement it with placeholder objects so ButterflyFleet knows where to send the extra drones that do not participate in the formation., If your formation contains more markers than the number of drones in your fleet, ButterflyFleet will complain loudly when you try to recalculate the transitions between the formations.
|
Tip
|
If you work with vertices in Edit mode, the Delete & Dissolve, the Loop cut and Slide, the Decimate Geometry and the Merge by Distance operators are your friends to create the expected number of vertices in a single object. |
Repeat this phase with all the formations of your drone show and create a separate formation collection for all of them. These collections will all be listed in the Formations collection in the Outliner.
4. Create a storyboard from formations
The storyboard defines the temporal structure of your drone show, consisting of formations coming one after another, with automatic or manual transitions between them.
Check out the Storyboard panel in the Formations tab.
Add your formations to the storyboard, define their arrival frames and hold times. Leave the transition type as Auto and the transition schedule as Synchronized for the time being to let ButterflyFleet attempt to calculate the transitions between them. Later on you can experiment with more advanced, Manual and Staggered transitions, too.
|
Tip
|
Make sure that the time intervals of the formations do not overlap and pay attention to use enough transition time for your drones between different formations in the storyboard. A typical transition is usually between 15 and 30 seconds, depending on the size and complexity of your formations and the velocity and acceleration constraints. |
5. Create automatic transitions
Use the button at the bottom of the Storyboard panel of the Formations tab to create optimal transitions between your formations automatically. This will assure that all drones from a starting formation are mapped to their optimal matching point in the target formation.
While transitions are created, your drones in the Drones collection will also be attached to all your formations. The animation part of your show is now almost ready…
6. Add return-to-home and land to the end of your show
After all your artistic formations are ready, press the and buttons on the Formations panel in the Formations tab to add automatic return-to-home and land procedures to your drones, the same way you added the takeoff procedure at the beginning.
Popup windows for each button appear to be able to setup the parameteres of these smart functions. On success, the proper entries should also appear at the end of your storyboard.
7. Check and verify your animation
Use the Safety Check panel in the "Safety & Export" tab in the sidebar of the Viewport editor to enable real-time verification checks on your animation.
Setup your safety parameters with convenient values and watch your animation in the 3D Viewport editor. Drones and drone pairs not passing the safety checks (velocity, altitude, proximity) will be highlighted with red, while status information about the verification results will be visible on the left side of the window.
Press the button to get a full validation for a frame range, not just for a single frame (this might time some time depending on the number of your drones and the number of frames selected). Review the generated validation output and correct any trajectory, velocity, altitude or proximity issues before export.
Correct your show to eliminate all safety check warnings to ensure maximal safety of your drones and the world below them…
8. Add lights to your show
After all your animations are finalized and verified, use the LEDs tab in the sidebar of the 3D Viewport editor to add light animation to your show.
The first panel of interest for light design is the LED Control panel.
Move the scene to the desired frame, select the drones you wish to paint, select a color or two colors and press the (change abruptly) or (fade linearly from last keyframe) buttons to add color animation keyframes to the given drones at the given frame.
|
Tip
|
Select two distinct colors in the LEDs tab and change the "Color to apply" property to one of the Gradient options in the popup panel to create more spectacular coloring schemes according to the "Order in gradient" property selection. |
As a more advanced option, use the Light Effects panel in the LEDs tab to create more sophisticated, parametrized light effects for your show.
The effects defined in the "Light Effects" panel are calculated on-the-fly, frame by frame in Blender, based on several criteria, including the positions of the drones and an optional associated mesh, so it is possible to create light effects where the color depends on how far the drones are from a certain mesh in the scene or whether they are inside or outside an invisible "helper" mesh.
9. Add optional pyro or yaw control
There are additional options to make your drone shows even more spectacular, such as adding drone-launched fireworks to your shows or enhancing visuals with controlling the yaw angle of drones.
For adding pyro control please checkout the description of the Pyro Control panel.
For adding yaw control to your drones please use any standard Blender tools to change the orientation of your drone objects according to your needs.
|
Note
|
Both of these options require a professional license to be supported. |
10. Export your show to .skyc
Once ready with both the animations and light program, use the button of the Export panel on the "Safety & Export" tab to export your entire show into ButterflyFleet compiled show format.
The ButterflyFleet compiled show format stores the sampled trajectories, lights, yaw, pyro and metadata needed for the final show file.
The button of the Export panel allows you to sample the drone trajectories and the corresponding RGB colors at regular intervals and save them to a CSV file that you can load in external tools for further post-processing.
The button creates a unique safety report of your show in .pdf format for self-checking, validated reporting or as a supplement for flight permissions.
If you are a professional license holder, please press the to get a full list of additional third-party export formats that your license supports.
11. Enjoy
We are done. Review the exported .skyc file and send us feedback or ask us if you have any questions!
Tabs and Panels
ButterflyFleet Studio for Blender creates several new panels in three new tabs in the sidebar of the 3D Viewport editor. These tabs and panels contain all the main operations that you will need specifically for your drone show design.
We encourage you to exploit the standard possibilities of Blender to create your animation scenes, and use these features to setup your drone show based on them, conveniently, in short time.
To aid your drone show design, the following tabs are available currently, each containing one or more related panels:
ButterflyFleet tab
The ButterflyFleet tab in the sidebar of the 3D Viewport editor is the first tab you need to revise when starting to design a show in ButterflyFleet Studio for Blender. This tab contains general configuration options for your show design workflow.
The ButterflyFleet tab contains three panels:
Setup Panel
The setup panel helps you setup your Blender environment for the latest version of ButterflyFleet Studio.
Initialize Add-On
There are certain standard Blender settings (e.g. the Viewport shading color and wireless color option in the 3D View panel) that need to be setup properly to make the ButterflyFleet Studio for Blender addon fully functional. With pressing this button, all necessary Blender settings are updated to support the latest version of ButterflyFleet.
Update to Latest File Format
If you load a previous Blender file created with an older version of ButterflyFleet Studio for Blender, press this button to initiate a migration to the latest version.
Show Panel
The show panel helps you setup general drone show configuration options.
Show type
Please specify whether you designed a show for outdoor or indoor settings. This will help setup drone size, exporters and possibly other parameters adaptively.
Transition mode
Selects the transition planner used by the server for automatic transitions:
-
Extended: transition planning uses plan-transitions-extended only; standard .skyc export uses reconstruction-compatible sampling.
-
Advanced: transition planning uses plan-transition-advanced only; stores compact constant-jerk S-curve metadata.
-
Full: transition planning uses plan-transition-full only; standard .skyc export prefers authoritative trajectories.
Bucket matcher
Controls the request-level bucket-matching override used during transition point matching. Use server_default to follow the server configuration, disabled to turn bucket matching off for this request, or choose a concrete matcher used inside adaptive buckets: fast, sorted, greedy, hungarian, depth_polar, polar_sorted, sector_plus, depth_balanced, collision_aware, nearest_collision_aware_optimal, radial_sorted, sector_radial_sorted, pca_rank_sorted, centroid_frame_optimal, shell_preserving_optimal, sector_shell_optimal, topology_aware_optimal, graph_topology_optimal, neighbour_fast, neighbour_sorted, or neighbour_depth_balanced.
Orientation
The orientation section provides controls for yaw visualization and the spatial reference of the show.
Yaw indicators
Enable to show arrows in the 3D viewport indicating the yaw direction of each drone at the current frame.
Yaw
Selects the yaw control mode for the show:
-
Fixed yaw: exported yaw setpoints use one fixed angle for all drones.
-
Follow yaw: each drone turns so the selected side faces its takeoff point.
When Follow yaw is selected, the dropdown chooses which side of the drone faces the takeoff position (Front, Right, Back, or Left).
Fixed yaw
Set the fixed yaw angle here. Press to write this yaw to the drones as a keyframe at the storyboard start frame. If drones are selected, only the selected drones are affected; otherwise all drones are affected.
Specify location
If you know the exact location and orientation of your show in the real world, you can give this information to the add-on to include it in your exported .skyc show file as placement metadata. If you want to propose values for show origin and show orientation, enable the checkbox.
Latitude of show origin
You can define the latitude of the show origin, i.e. the North-South position of the (0, 0) Blender coordinate in the real world. Use simple signed floats or use the "N" or "S" prefixes if that is more convenient. Values are expected to be in degrees.
Longitude of show origin
You can define the longitude of the show origin, i.e. the East-West position of the (0, 0) Blender coordinate in the real world. Use simple signed floats or use the "E" or "W" prefixes if that is more convenient. Values are expected to be in degrees.
Show orientation
You can define the orientation of your show in the real world. The given value will define the orientation of the X+ axis of the show coordinate system relative to North (towards East) in the real world.
Swarm Panel
The swarm panel helps you setup your drone show with fleet-level configuration options.
Drone collection
Click on the button to select the collection that is your primary source of your drone objects. By default you do not have to change this setting, the button below will create a "Drones" collection and set it as your primary source automatically.
|
Important
|
Any mesh that is placed in the collection selected here will be treated as a drone by ButterflyFleet Studio, and it may adjust the constraints and other properties of the mesh as needed when performing certain operations. Make sure that there are no other objects in the collection that you select here, only the ones that you want to consider drones. |
Preferred acceleration
The slider sets a preferred acceleration (in all directions) that is used by the automated motion planning functions of ButterflyFleet Studio, for example when automatic transitions or transition times are calculated.
Landing parameters
The panel includes three sliders that control the final phase of the landing trajectory:
-
— the altitude (in meters) above ground where the descent slows to flare speed. Defaults to 0.2 m.
-
— the vertical speed (in m/s) during the flare phase. Defaults to 0.1 m/s.
-
— the time (in seconds) the drone stays at Z=0 before the trajectory ends, allowing the autopilot to complete its landing sequence. Defaults to 1.0 s.
Drone template
Before creating your first takeoff grid that initializes your drone objects, you can select a template object for your future drones. There are three options to select from, given by the drop down menu.
The default option is an isotropic Sphere. Select Cone to have a simple anisotropic object (suitable for yaw-controlled shows), or select Selected Object for any custom object that will be used as your drone template.
If Selected Object is chosen, make sure you have your template object selected before pressing the button. Note that this object will disappear after the creation of the swarm as it shall be used for the template only.
Drone radius
If you select a "Sphere" or "Cone" type drone template, you can also setup a radius for your template object before creating your first takeoff grid. The field is editable for the built-in Sphere and Cone templates. When the template is set to Selected Object, the selected object defines its own size and the radius field is disabled.
If you wish to change your drone size at a later stage, you can use standard Blender tools for this. First select all your drone objects you wish to resize, then set the "Transform Pivot Point" to "Individual Origins" and the simply scale up all objects around their own origins with s.
Formations tab
The Formations tab in the sidebar of the 3D Viewport editor helps you to organize your animations and formations into a drone show.
The Formations tab contains two panels:
For procedural motion that should be applied on top of the active formation itself, see the separate MOVE tab.
Formations panel
With the Formations panel of the Formations tab you can import, generate, create, update or remove formations, select, deselect and sort drones in formations, and you can also add formations to your storyboard.
Create Takeoff Grid
The button helps you set up your first and last formations, the takeoff and landing grid. The takeoff and the landing grid is assumed to be the same by default, but you can change them later on if needed.
For a regular takeoff grid you can define the number of rows and columns, the exact number of drones and the spacing between them. Once you press , a rectangular grid is created with the specified parameters.
For advanced settings enable the checkbox.
If you wish to have a separate column and row spacing for your basic takeoff grid, enable the checkbox and setup a separate column spacing.
If you wish to takeoff (and land) in layers, you can also define a more complex takeoff grid with slots, where each slot contains more than one drone with typically, but not necessarily smaller spacing (see the Intra-slot parameters). With such a takeoff grid it will be guaranteed that only one drone will takeoff from (and land to) every slot at a time, using layered takeoff and land operations automatically.
The Create takeoff grid operator also creates all ButterflyFleet-specific collections (Drones, Formations, Templates) that you will need for your drone show, it adds the first "Takeoff grid" entry to the storyboard and also initializes your drones in the 3D Viewport editor.
|
Tip
|
Once the takeoff grid is created, you are free to modify the created "Takeoff grid" formation to re-arrange the placement of the drones using standard Blender operations, thus you can easily adapt the grid to the requirements of your specific takeoff area. For instance, if there are lampposts, stairs, power lines or any other obstacles in the area, you can move the affected drones to other positions by simply changing the takeoff positions in the "Takeoff grid" formation. |
Takeoff
The button adds a takeoff maneuver to a specified altitude and with a specified average vertical velocity from your initial takeoff grid. The start frame of the maneuver can be customized, although it is usually the same as the first frame of the scene.
If the minimum distance between drones in the takeoff grid is smaller than the given spacing parameter, the takeoff is automatically performed in layers with no drones closer to each other than the spacing.
In such cases (i.e., when you set a small spacing parameter or the takeoff grid was created with more than one drones per slot), use the layer height parameter to setup the altitude difference between additional target layers above the default layer during the layered takeoff operation.
This button should ideally be pressed right after the takeoff grid is created, but before any other formations are added. It is also possible to use the operator later after having defined the first few formations, but you must ensure that there is enough time before the first formation to perform the takeoff and get to the first formation in time.
|
Note
|
ButterflyFleet requires you to specify the average vertical velocity of the drones during takeoff. This lets you gauge easily how much time the takeoff will need (e.g., taking off to 6 meters with an average velocity of 1.5 m/s takes 4 seconds), but since the drones need time to accelerate and decelerate, their maximum vertical velocity will be higher than the average velocity to compensate for the time lost during acceleration and deceleration. Make sure to take this into account in order not to overshoot the vertical velocity limits of the drones. |
Return to home (RTH)
The button adds a smart return-to-home maneuver that brings drones from their positions at the end of the last formation to assigned slots in the takeoff grid, using collision-free path planning. The maneuver is performed at a specified average horizontal velocity (XY) and vertical velocity (Z), arriving at the given altitude above the takeoff grid.
If the minimum distance between drones in the takeoff grid is smaller than the given spacing parameter, the RTH operation is automatically performed in layers with no drones closer to each other than the spacing.
In such cases (i.e., when you set a small spacing parameter or the takeoff grid was created with more than one drone per slot), use the Layer height parameter to set the altitude difference between additional target layers above the default layer during the layered RTH operation.
The operator dialog lets you configure:
-
Start frame of the return-to-home maneuver
-
Average horizontal (XY) and vertical (Z) velocity
-
Target altitude above the takeoff grid
-
Layer height for multi-layer landing
-
Custom spacing (enabled via the checkbox) — defaults to the proximity warning threshold
-
Matching method for target assignment (the "per layer" default assigns each drone to its closest slot per layer)
-
Layer start delay and layer descend delay (minimum time gap between consecutive layer activations during descent)
Note that the maneuver is not performed at the specified altitude — it is initiated from the positions at the end of the last formation. However, all drones arrive to the given altitude (or layered altitude) value, above the takeoff grid.
This button should be pressed after all formations of the show are inserted to the storyboard, but before the landing entry is given.
The RTH path plan is computed by the configured planning backend using the layered_checkerboard algorithm, which guarantees collision-free trajectories down to the home grid while respecting the configured velocity, acceleration and minimum distance constraints.
|
Caution
|
The current RTH matching options optimize safe assignment to grid slots; they do not guarantee identity return to each drone’s original takeoff slot. The option controls target assignment strategy, while and control activation and descent timing between layers. |
Land
The button lands the drones, starting from a given frame such that they move downwards in a straight line from their current position until they reach the given target altitude (ground is assumed to be at Z = 0). As usual, the average velocity of the descent can be adjusted.
If the minimum distance between drones in the takeoff grid is smaller than the given spacing parameter, the land operation is automatically performed in layers with no drones closer to each other than the spacing.
In such cases (i.e., when you set a small spacing parameter or the takeoff grid was created with more than one drones per slot), use the Motor spindown delay parameter to setup the time difference between landing layers. This ensures that drones will land close to the others within the same slot only when the motors of the neighboring drones are already stopped.
This button should be pressed after the return to home entry is inserted to the storyboard.
Selecting the active formation
Click on the button to select the formation to be edited in the Formations panel.
Creating a new formation
The button creates a new formation. Remember that formations are essentially sub-collections in your Formations collection, consisting of (stationary or animated) markers that define the desired positions of the drones in a particular scene of your drone show.
You can define a name for your new formation and choose how it should be initialized:
- Empty
-
Creates an empty formation (useful as a placeholder into which markers are generated later on)
- Current positions of drones
-
Creates a formation that contains one empty mesh for each drone, placed exactly at the current position of the drone. You can use this option to create a "snapshot" of the drone swarm at a given frame and use it again as a formation later on in the show.
- Selected objects
-
(Only in Object mode) Creates a formation that contains the currently selected objects. If the locations of the objects were animated, the formation will be animated as well. Removing any of these objects from the scene will also remove them from the formation.
- Current positions of selected objects
-
(Only in Object mode) Creates a formation that contains one empty mesh for the position of each selected object. The empties are added to the formation, but the objects themselves are not — therefore, even if the objects were animated, the formation will only take a snapshot of the objects at the current frame. You are then free to remove the objects from the scene without affecting the formation.
- Current positions of selected vertices
-
(Only in Edit mode) Creates a formation that contains one empty mesh for the position of each selected vertex of the currently edited object.
When the number of markers in the created formation is different from the number of drones in the show, a warning message will appear to indicate the formation size mismatch.
If you see such a message, try to harmonize the number of markers in the formation with the number of drones in the show, otherwise automatic transitions won’t work.
Removing a formation
Press the button to remove the selected formation from the Formations list and the Formations collection entirely. Meshes that were part of the formation but that were not referenced from anywhere else in the Blender scene will also be removed from the scene. If you want to keep them, put them in another collection first or by assigning them to a fake user in Blender.
Selecting and deselecting a formation
The button on the Formations panel adds the selected formation to the current selection in Blender. Similarly, the button removes the markers of the selected formation from the current selection.
Since formations may contain meshes as well as vertices of meshes as markers, you may not necessarily see the result of the selection immediately. If you are in Edit mode and you attempt to select a formation that contains meshes, you need to switch back to Object mode. Similarly, if you are in Object mode and you attempt to select a formation that contains vertices a markers, you need to switch to Edit mode to be able to interact with the selected vertices.
|
Tip
|
If you are in Object mode and the formation being selected contains vertices only (i.e. no meshes or empties), ButterflyFleet Studio will automatically switch to Edit mode. |
Generating markers for a formation
Once a formation is created (and preferably appended to the storybard), use the button to generate extra static or dynamic markers into that formation from different sources:
- From static CSV file
-
Use this option to import a previously created static formation from an external .csv file, in which each line contains the following values in order (colors are optional and assumed to have linear color space): Name, x_m, y_m, z_m, Red, Green, Blue
- From zipped CSV files
-
Use this option to import previously created animated formations or entire shows modularly from an external .zip source that contains multiple .csv files (one per drone), each containing baked trajectory and light animation in the following line format (colors are optional and assumed to have linear color space): Time_msec, x_m, y_m, z_m, Red, Green, Blue
- From zipped PATH/PATH3 files (PRO)
-
Use this option to import previously created animated formations or entire shows modularly from an external .zip source that contains multiple DSS .path or .path3 files (one per drone), each containing baked trajectory and light animation (in linear color space).
|
Note
|
This feature is not supported by our community server. To enable it, please purchase a proper license from ButterflyFleet Shop. |
- From SVG file (PRO)
-
Use this option to import an SVG file to sample it with the given number of drones. Note that only simple, flat SVG files can be imported correctly, and only vector graphic shapes are supported from the SVG file, text, images and other complex formats are not supported (we support what is supported by the external svgpathtools Python library). The importer tries to optimize the given number of drones to the imported shapes, which might result in ugly results if there are not enough or too many drones or if the curves are too complex. Try to simplify the SVG before importing as much as possible and experiment iteratively to find the proper number of drones for your SVG drawing! Colors of the curves are also imported.
|
Note
|
This feature is not supported by our community server. To enable it, please purchase a proper license from ButterflyFleet Shop. |
- From QR code
-
Use this option to generate a static QR code as part of the show.
Updating a formation
Press the button to update the selected formation from the current selection or from the current positions of the drones. This operation is essentially equivalent to removing all markers from the formation first, followed by the addition of the selection as if you were creating a formation from scratch.
You can also update formations simply by moving the markers in 3D space using the standard tools that Blender offers. New markers can be added simply by creating empty or non-empty meshes and adding them to the appropriate sub-collection of the Formations collection, or by extending the Drones vertex group in vertex-based meshes. Unneeded markers can simply be removed from the formations the same way you would remove any Blender object from its corresponding collection.
Reordering a formation
Points in every formation have a specific order. This gets useful when staggered transitions are created between two formations and thus drones do not depart from or arrive to a given formation at the same time, but in a delayed manner, one after another, in the order they are represented in the formations.
Reordering a formation can be issued any time with opening the drop down list and selecting the preferred reordering operator. Note that reordering is instantaneous; using multiple reorder operators is possible, each one will take the current order and apply its own modifications to create the new order. The following reorder operators are implemented:
- Sort by name
-
sort by the name of items in the formation (default sorting)
- Shuffle
-
shuffle the items in the formation to a completely random order
- Reverse
-
reverse the current order
- Sort by X/Y/Z coordinate
-
sort the current order according to the X/Y/Z coordinate value of each point in the formation
- Every 2nd/3rd/4th
-
pick every 2nd/3rd/4th item and repeat until all items are assigned to the new ordering
- Ensure safety distance
-
pick the first item, then iteratively pick the next item that is far enough from all previous items picked (based on the distance limit set in the safety settings). When the list is exhausted, start from the beginning with the remaining items, ignoring the items picked in the previous round(s) in distance calculations. Repeat the process until every item is processed. The result is an ordering where consecutive items strive to respect the distance limit.
|
Tip
|
to visualize the current order of a formation, enable the checkbox, which will connect all points in the formation with linear line segments between each consecutive point in the current order colored from green to red. |
Formation statistics
Press the button to show various useful statistics about the selected formation, such as the number of markers (empties, meshes or vertices), the size of the axis-aligned bounding box of the formation, or minimum distance between its markers on the current frame.
Appending a formation to the storyboard
Press the button to append the selected formation to the end of the storyboard. ButterflyFleet Studio will calculate the time needed to move from the end of the last formation to the newly added formation, according to the current acceleration and velocity limits, and set up the start time of the new formation accordingly.
Inserting a formation into the storyboard
Press the button (located next to the button) to insert the selected formation as a new storyboard entry between existing entries, at the current timeline frame. Unlike the button, which only adds to the end, creates a placeholder entry at the current frame and shifts all later timeline content (subsequent storyboard entries, light effect timing, markers, object keyframes, and tracked move ranges) forward by the placeholder delta.
The insert operation is transactional:
-
A placeholder entry with duration 1 is inserted at the current frame.
-
All later timeline content is shifted forward consistently.
-
Affected inbound and outbound transition caches are cleared.
-
Transitions are recalculated to obtain exact durations.
-
A retiming pass fits the inbound and outbound transition windows.
-
Transitions are recalculated again after retiming.
If there is show content after the current frame, the operation proceeds with the shift automatically. To append a formation strictly to the end without shifting any existing content, use the button instead.
|
Tip
|
The button is useful when you want to add a new formation in the middle of an existing show without manually retiming all subsequent formations. |
Storyboard panel
The storyboard specifies the overall structure of your drone show. It consists of entries, where each entry contains a reference to a formation, an arrival frame and a hold time. The location constraints added by Blender will ensure that each drone reaches one of the markers in the formation by the arrival frame, and that the drone keeps on following its marker until the entry’s depart frame.
Creating a new storyboard entry
Press the button next to the formation list in the Storyboard panel to add a new entry to the end of the storyboard. The new entry will not refer to any particular formation so make sure you also pick the formation in the editor below the storyboard entry list after adding the entry.
Editing a storyboard entry
Each storyboard entry has a label and an associated set of properties that define the timing and the transition corresponding to the storyboard entry. The label of the formation can be edited by double-clicking on the storyboard entry in the entry list. The widgets below the storyboard entry list allow you to edit the properties of the currently selected storyboard entry.
- Formation
-
Shows or sets the formation corresponding to the selected storyboard entry.
- Transition start
-
For the first storyboard entry, this shows the entry’s own arrival frame. For every later entry, it shows the depart frame of the previous storyboard entry, i.e. the frame where the transition into the selected entry begins. The numeric field is directly editable only when the selected entry is the last entry; changing it adjusts the previous formation’s hold time. For other entries, use to retime the transition while keeping later storyboard timing consistent.
- Move
-
Opens a prompt for a signed number of frames and moves the selected entry’s incoming transition start. A positive value delays the transition and shifts later storyboard entries, object keyframes, LED effect timing, LED preset mesh keyframes, time markers and frame ranges forward; the drones hold their position at the old transition start. A negative value moves the transition left and shifts later content left, but only as far as the stationary tail of the previous hold allows. Affected transition cache data is invalidated and regenerated around the moved transition.
- Arrival frame
-
Shows the frame when the formation of the selected storyboard entry appears on the sky. This field is read-only; it changes when operations such as transition recalculation, insertion, entry reordering, or retime the storyboard.
- Transition duration
-
Shows the current timing gap from the transition start to the arrival frame. For the first storyboard entry this is zero. Read-only.
- Hold time
-
Shows the duration of the selected storyboard entry in the drone show. The depart frame is the arrival frame plus the hold time, inclusive. Each entry must have a duration of at least one frame. Read-only in the Storyboard panel.
- Depart frame
-
Shows the frame when the formation ends and the transition to the next formation begins. Read-only. To adjust this frame for an entry that is followed by another entry, select the following entry and adjust or move its "Transition start".
- Purpose
-
Shows or sets the purpose of the given formation. The purpose can be "Takeoff", "Show", "Land" or left "Unspecified". The purpose of a given formation is automatically inferred from the operation you use to create the formation. In practise you usually do not need to modify it manually unless you know what you are doing. The purpose annotation gets written into the .skyc file so later adaptation workflows can distinguish artistic show formations from technical takeoff and landing formations.
- Custom Name
-
Ticking this check box allows you to keep the label of the storyboard entry even if you change the associated formation. Unticking this will change the label of the storyboard entry to the name of the formation when you change the formation.
- Transition from previous
-
Shows or sets the type of transition between the previous formation and this one. The default is Auto, which enables ButterflyFleet Studio to find an optimal mapping between the markers of the initial and the target formation. If you want to maintain the mapping yourself, set it to Manual instead and then sort the markers of the formation in the Outliner such that they are in the desired order (note that you need to turn off alphabetic ordering in the Outliner first). Blender will then map the nth marker in the initial formation to the nth marker in the target formation.
You can also select between two fundamental temporal schedules for the transition: Synchronized and Staggered. In Synchronized mode all drones depart from and arrive to the formations at the same time. In Staggered mode drones depart and arrive at different times, with a specific delay value between each of them set by the Departure delay and Arrival delay parameters (see image below).
Tipas an alternative to layered takeoff, you can use a staggered transition for your takeoff as well. If you do so, make sure to use the Ensure safety distance reordering operator for the takeoff formation. If you enable the checkbox, the departure and arrival times of individual markers in the formation can be altered. This option is useful if an automatic transition violates your minimal distance rule. In this case adding a bit of delay to a conflicting drone manually might eliminate the danger. Note that the automatic layered takeoff and landing operations also set individual schedule overrides behind the scenes.
Finally, enable the checkbox to lock a transition and do not allow its automatic update when the button is pressed.
Once you are satisfied with all the parameters of the transition, press the button on the popup window to update your show with the current transition.
- Transition to next
-
Shows or sets the type of transition between this formation and the next one. Parameters are identical to those of the Transition from previous option, see more details there.
Transition matching modes
The Matching dropdown in the Transition from previous and Transition to next popovers controls how automatic transitions pair source drones with target markers before the trajectory planner runs.
- smart
-
Uses the server smart selector. The current default order is translation, sorted, fast, depth_polar, then collision_aware. This is the default and a good general-purpose choice.
- fast
-
KD-tree based nearest-neighbor assignment heuristic.
- translation
-
Removes the source-to-target centroid shift before matching, then falls back to fast if the centered bounding boxes differ too much.
- sorted
-
Motion-aligned sorted assignment. Useful when source and target already have a strong global ordering.
- sorted_hungarian
-
Tries sorted matching and Hungarian matching, then keeps the safer or selected result.
- greedy
-
Deterministic nearest-neighbor matching. Useful for debugging or when you want a very direct local pairing.
- hungarian
-
Exact linear-assignment matching.
- depth_polar
-
Depth-balanced polar sorting. Typically useful for circle-to-plane and ring-to-grid style transitions.
- polar_sorted
-
Sector-based centroid-angle sorting. Useful for radial formations with a strong angular structure.
- sector_plus
-
Polar sector matching with local refinement.
- depth_balanced
-
Cost-based matching along the dominant travel axis.
- collision_aware
-
Matching with extra crossing-reduction logic. Prefer this when a transition tends to create overlaps or route crossings.
- radial_sorted, sector_radial_sorted, pca_rank_sorted
-
Volumetric ordering modes for overlapping or anisotropic formations.
- centroid_frame_optimal, shell_preserving_optimal, sector_shell_optimal
-
Local optimization modes that preserve centroid frames, shells, or sector/shell structure.
- topology_aware_optimal, graph_topology_optimal
-
Topology-aware optimization modes for dense overlapping volumes.
- neighbour_fast, neighbour_sorted, neighbour_depth_balanced
-
Keeps source-target pairs that are already within 0.6 meters, then assigns the remaining drones with the selected matcher. This is useful when you want to preserve local neighborhoods while still allowing global reassignment.
- butterfly_neighbour, butterfly
-
Sweep multiple matchers and keep the first safe candidate, otherwise the safest fallback.
Matching method reference
Matching chooses which source drone flies to which target marker. The selected matching is only the assignment step; the transition planner still controls motion timing, speed, acceleration and safety repair. In the Blender UI some methods use short names, while the server stores a longer API name. The table below lists both where they differ.
Method |
What it does |
When to use it |
smart / optimal |
Runs the server smart selector and compares several candidate assignments. The default candidate order is translation, sorted, fast, depth_polar, then collision_aware. Server admins can change this order. |
Default choice for normal formation-to-formation transitions. |
translation |
Subtracts the centroid shift between formations, matches the centered shapes, then restores the translation. If the centered bounding boxes are too different, it falls back to fast. |
Best for the same shape moved to a new location, or a formation that mostly translates without changing structure. |
sorted, sorted_improved |
Sorts source and target points along a motion-aligned frame, then pairs points by rank. The improved variant uses a more motion-aware frame. |
Good for ordered shapes, grids, lines, planes and cases where preserving global order matters. |
fast |
KD-tree nearest-neighbor matching with local 2-opt style improvement. |
Good general fallback when you need a fast local-distance assignment. |
sorted_hungarian |
Evaluates sorted matching and exact Hungarian assignment, then keeps the selected safer candidate. |
Useful below a few hundred drones when sorted order is plausible but exact distance minimization may help. |
hungarian |
Exact linear-assignment solver that minimizes total source-to-target distance. |
Use for smaller fleets when shortest total distance is more important than preserving visual order. |
greedy |
Deterministic nearest-neighbor assignment without the broader candidate logic. |
Mostly for debugging or simple local pairing; usually not the first production choice. |
depth_polar |
Balances depth along the travel direction and uses polar ordering inside that frame. |
Good for ring-to-grid, circle-to-plane and other transitions with clear depth and angular structure. |
polar_sorted |
Orders points by sectors and angle around the formation centroid. |
Useful for radial, circular or spiral formations where angular order should be preserved. |
sector_plus |
Starts from polar sectors, then refines assignments locally. |
Use when radial sector structure is good but plain sector sorting leaves local swaps. |
depth_balanced |
Uses a cost model along the center-of-mass travel axis to balance front/back depth. |
Useful for layered formations and large front-to-back motion where simple distance matching causes crossings. |
collision_aware |
Adds crossing-reduction logic to the assignment score before the trajectory planner runs. |
Use when the shortest or sorted assignment creates route crossings or close approaches. |
nearest_collision_aware_optimal |
Collision-aware variant that starts from a nearest-style candidate before local refinement. |
Useful as a bucket matcher or explicit fallback when local proximity should dominate. |
radial_sorted, sector_radial_sorted, pca_rank_sorted |
Volumetric ordering methods based on radius, sector/radius, or PCA-frame rank. |
Use for dense 3D formations, overlapping volumes or anisotropic shapes where 2D angular order is not enough. |
centroid_frame_optimal, shell_preserving_optimal, sector_shell_optimal |
Local optimization methods that preserve centroid/PCA frame, radial shells, or sector-and-shell structure. |
Use for complex 3D formations where the visual shell structure should survive the transition. |
topology_aware_optimal, graph_topology_optimal |
Topology-aware variants that try to preserve local neighbor relationships in dense volumes. |
Use for dense point clouds where visual continuity matters more than the shortest path. |
neighbour_fast, neighbour_sorted, neighbour_sorted_improved, neighbour_depth_balanced, neighbour_depth_polar |
Locks source-target pairs that are already within 0.6 meters, then assigns the remaining drones with the named fallback matcher. |
Use when editing imported or partially unchanged shows and you want nearby drones to keep their identity. |
butterfly_neighbour |
Sweeps the neighbour-preserving candidates and keeps the first safe candidate, otherwise the safest fallback. |
Use when identity preservation is important but one neighbour matcher is not reliable enough. |
butterfly |
Sweeps the broader matcher list and keeps the first safe candidate, otherwise the safest fallback. |
Use for difficult transitions when runtime is less important than trying many assignment styles. |
newton / smart-physics |
Evaluates smart matching plus Hungarian candidates, then uses the physics/full-transition backend when available. |
Use only when the configured server supports physical full-transition planning and you need authoritative trajectories. |
identity |
Keeps drone index n mapped to target marker n. |
Use for diagnostics or carefully ordered manual formations where reassignment is not wanted. |
Removing a storyboard entry
Press the button next to the formation list in the Storyboard panel to remove the selected storyboard entry from the list.
Finding the storyboard entry for the current frame
Press the upward pointing thin arrow button next to the formation list in the Storyboard panel to select the storyboard entry that contains the current frame. If the current frame falls between storyboard entries, the next entry will be selected. Pressing this button clears the selection if the current frame is after the end of the storyboard.
Changing the order of formations
Press the button next to the formation list in the storyboard to move the selected entry up by one slot in the storyboard. Similarly, the button next to the formation list moves the selected entry down by one slot in the storyboard. ButterflyFleet Studio will automatically adjust the start times of the entries to ensure that they are in ascending order.
|
Note
|
It is possible to mess up the order of entries in the storyboard by changing the start times explicitly in a way that they are not in ascending order any more. ButterflyFleet Studio will fix the ordering of the entries the next time the transitions are recalculated, or before any operation for which the add-on needs the exact ordering of entries. |
Recalculating transitions
Once you are satisfied with your storyboard, you can press the button to create automatic and optimal transitions between your formations without collisions.
The popup menu that appears when clicking on the button offers various options to recalculate all transitions or only a subset of them. The recalculation process also creates or updates the constraints on your drones in your Drones collection to follow the given formations during their associated time interval.
Updating time markers from the storyboard
The main cues of the storyboard can be rendered as time markers that appear in the Timeline Editor. To reset all time markers related to ButterflyFleet Studio and update them based on the current storyboard entries, press the button at the bottom of the Storyboard panel (markers added manually will remain untouched).
MOVE tab
The MOVE tab applies procedural motion on top of a formation by keyframing the formation’s empty marker objects directly. It is intended for quick secondary motion such as waving flags, butterfly wing motion, tilting a layout, or adding broad directional sweeps without rebuilding the formation itself.
The MOVE tools prefer explicit selection. If drones are selected, MOVE resolves those drones to their active formation marker empties and keyframes only those markers. If marker empties are selected directly, MOVE keyframes those empties. If no drone or marker empty is selected, MOVE falls back to the active formation at the current timeline frame, then the previous storyboard formation, then the active/selected formation.
Main controls
- Start Frame
-
Sets the first frame of the generated motion. When the value matches the current timeline frame, the field follows the timeline cursor automatically.
- Anchor
-
Defines the spatial anchor used by presets that depend on the formation layout. Available anchors are Center of Masses, Center of Bottom Points, and Center of Top Points.
- Respect Max Velocity
-
Scales the generated offsets down if needed so the resulting motion stays within the configured velocity limit.
- Respect Max A
-
Scales the generated offsets down if needed so the resulting motion stays within the configured acceleration limit.
Movement layers
The MOVE tab contains three independent layers: Layer A, Layer B, and Layer C. Layers are additive, so you can combine broad translation with tilt or wave motion.
Each layer provides the following controls:
- Preset
-
Selects the movement basis for the layer.
- Amplitude
-
Maximum displacement contributed by the layer, in meters.
- Duration
-
Duration of the layer in frames.
- Repeat Times
-
Number of times the movement pattern repeats across the layer duration.
- Param
-
Speed multiplier for the layer. Values above 1.0 make the movement cycle faster inside the same duration; lower values slow it down.
- Waveform
-
Temporal driver for the layer. Linear uses a smooth zero-acceleration ramp into the effect, while Sinusoidal creates a smooth in-and-out envelope.
- Axis
-
Local axis selector for Flag Wave and Butterfly. Auto infers the most useful local axis from the detected formation plane; Local Primary and Local Secondary let you override the inferred direction.
- Reverse
-
Inverts the sign of the layer.
Available presets
- Flag Wave
-
Detects the active formation plane automatically, finds a dominant axis within that plane, and displaces the formation in the perpendicular direction. This is intended for flag-like ripples on arbitrarily oriented planar formations.
- Right-Left
-
Translates the formation along the X axis.
- Top-Bottom
-
Translates the formation along the Y axis.
- Up-Down
-
Translates the formation along the Z axis.
- Tilt
-
Changes altitude across the dominant horizontal span of the formation.
- Butterfly
-
Detects the formation plane and a central symmetry line, then moves both wings together along the local lift direction. Drones near the center line move less, while outer wing drones move more. Use Axis when the automatic center line chooses the wrong local axis.
MOVE presets use smooth start/end envelopes and Bezier location keyframes. This avoids hard acceleration spikes at the edges of the authored range while keeping cyclic presets smooth inside the range.
Applying and clearing MOVE
- Apply
-
Resolves selected drones or marker empties first, samples the configured movement layers, and writes location keyframes onto those empty markers. With no selection, it applies to the full active formation. Long durations are authored with a capped number of samples to keep Blender stable, while the generated F-curves interpolate the in-between frames.
- Remove All
-
Removes MOVE-generated location keys from the same active formation empties without requiring manual selection.
|
Tip
|
MOVE is designed for formation empties, not for mesh drone objects. If the drones are constrained to those empties, the viewport motion comes from the empties moving. |
|
Tip
|
After Apply, ButterflyFleet selects the affected marker empties and adjusts the animation editor filters so the location keyframes are visible in the Timeline/Dope Sheet without manually selecting every drone. |
LEDs tab
The LEDs tab in the sidebar of the Viewport editor helps you create light animation for your drone show. Use it for direct color keyframes on selected drones and for procedural LED presets that are evaluated over a storyboard time range.
The LEDs tab contains two panels:
Use the LED Control panel when you want to set or fade selected drones to explicit colors at specific frames. Use the Light Effects panel when you want reusable presets such as waves, reveals, outlines, firework bursts, scanners, rings, sparkles, strobes, or color-ramp driven chases.
LED Control panel
The LED Control panel provides a simple way to adjust the color of the LED light of individual drones by inserting keyframes at the appropriate frames.
The color of the LED light is assumed to be controlled by an emissive material that is placed at the first material slot in the material list of the drone mesh. The name of the material starts with LED color of ... by convention, but this is not enforced — you can rename the material, but you need to keep in mind that ButterflyFleet Studio for Blender will always adjust the first material. If the material is not an emissive material, ButterflyFleet will fall back to adjusting the diffuse color of the material instead.
All the operations in this panel insert or modify keyframes on a Blender action that is attached to the color of the material as outlined above. You can achieve the same effect by inserting or modifying keyframes yourself; the power of this panel lies in the fact that it allows you to manipulate the keyframes of multiple drones at the same time, optionally taking into account the current positions of the drones as well when deciding what the final color should be.
Primary and secondary colors
The panel provides color pickers for two colors that are called primary and secondary, respectively. Changing the color in the color pickers does not add, remove or modify keyframes yet, they simply indicate your desired colors in the next steps. The primary and secondary colors can be swapped by clicking on the arrow button between the color pickers.
Applying colors
The and buttons below the selected primary and secondary colors open a popup window that looks like the one on the screenshot below. Both buttons insert color animation keyframes at the given frame for the selected drones, according to the settings in the popup window. They have no effect if none of the drones are seleced.
If the checkbox is disabled in the panel, then one keyframe with the original color of the drone is inserted right before the current frame and one with the selected (primary or secondary) color is added to the current frame, resulting in an abrupt color change at the given frame. If the checkbox is enabled, only one color keyframe will be added at the current frame, with linear interpolation on the left (from the past) from the previous color keyframe, no matter where it is in the timeline. This creates a fading effect starting from the previous keyframe.
The "Color to apply" option lets you select which color to apply on the drone in the current keyframe. The straightforward options are the primary and the secondary colors, but there is a third option that creates a gradient between the primary and secondary colors if multiple drones are selected.
In the gradient mode, all the drones in the selection are sorted first according to some criterion. The first drone gets the primary color, the last drone gets the secondary color, and all the drones in between them get assigned to a mix of the two colors according to where they are in the ordered sequence. The "Order in gradient" option defines what the sorting criteria should be. The followig options are available:
- Default
-
Drones are ordered in exactly the same way they appear in the Drones collection.
- Random
-
Drones are ordered randomly before the operator is applied. You get a new random order every time you invoke the operator.
- X coordinate
-
Drones are ordered by their X coordinate.
- Y coordinate
-
Drones are ordered by their Y coordinate.
- Z coordinate
-
Drones are ordered by their Z coordinate.
- Distance from 3D cursor
-
Drones are ordered according to their distance from the current position of the 3D cursor in Blender.
Ties are broken according to the order of the drones in the Drones collection.
Enabling or disabling the bloom effect
|
Note
|
Blender 4.3 removed support for the bloom effect built into the EEVEE renderer, therefore this option is not available on Blender 4.3 and later. Use the Compositor in Blender 4.3 or later to achieve a similar effect. |
The checkbox allows you to enable or disable the bloom effect that is applied to the 3D view. The bloom effect adds a not-so-subtle glow around the drones (and all other bright meshes), but it comes with a caveat: the RGB color that you see in the 3D view is not exactly the same as the RGB color that you apply to the drones but a brighter variant of it. On one hand, the bloom effect can be misleading during a fade-out to black because the fade-out seems to start later (and fade-ins seem to start earlier). On the other hand, this behaviour is in fact a good approximation of how the LED lights behave on a typical show drone.
Light Effects panel
The Light Effects panel lets you create advanced light effects that are applied on top of your base color animation dynamically.
Light effects are parametrized and they are not baked in as color keyframes, so it is very easy to adjust them if the timing of the animation changes — you only need to adjust the start frame and the duration of the light effect. However, this means that Blender calculates the light effects on-the-fly when you change frames, thus it comes with a slight performance cost.
If you are still in the motion design phase, we suggest you to uncheck the checkbox to avoid slowing down Blender rendering superfluously.
Anatomy of a light effect
Every light effect builds on a user-defined color space: a one dimensional color ramp, a two dimensional color image or a custom function:
- Color ramp
-
Color ramps consist of an arbitrary number of color stops at arbitrary positions, and a given interpolation method between the defined color stops. Essentially, the color ramp is a function that takes a number between 0 and 1 and returns a color.
- Color image
-
Color images are two dimensional analogues of color ramps with discrete colors stored in an image. Color images are basically two dimensional functions: they take two numbers between 0 and 1 (along their normalized X and Y axes) and return a color.
- Custom function
-
A Python function called for every drone at every frame of the light effect. The function should return a color, a tuple of four numbers ranging between 0 and 1 (red, green, blue and alpha components).
The light effect that you define in the panel produces one or two numbers between 0 and 1 for each drone, based on selected output mapping functions. The color ramp turns the first, the color image turns both mapped numbers into the color that gets applied to the drone.
Colors on the color ramp may have an alpha component. When the alpha component is 1, the color is opaque — it will replace the original color of the drone. When the alpha component is 0, the color is completely transparent and the original color of the drone will not be modified. Values in between 0 and 1 produce transparency effects — for instance, an alpha component of 0.5 mixes the original color of the drone with the color from the color ramp in equal proportions.
Light effects may be (and usually are) limited in space and time. Time-wise, the light effect affects the drones only from its designated start frame through its end frame. Space-wise, the light effect may affect all drones or only a subset of drones that are within the boundaries of an associated mesh. The mesh may be animated to produce dynamic light effects; for instance, you can "sweep" a cone of light on the drones by creating a light effect that sets the color of the drones to white, and then limiting it to the interior of an invisible sphere that is then swept through the scene.
The light effect stack
You may have noticed that the upper part of the light effects panel is occupied by a list. This list contains the effects themselves. In each frame all the effects are processed in a top-down manner, and for each effect, Blender decides whether the effect is going to affect the current frame or not, depending on its temporal and spatial properties. In any given frame, multiple effects may be active, and in this case the original color of each drone (defined by the keyframes of its material) is modified by each active effect in the order defined by the list of effects. This becomes important when the colors of the effects have alpha channels as the output may be a mixture of the original color of the drone as well as one or more active effects.
Importing and exporting light effects
Use the button to import parametric light effects prepared in another Blender file, and use the button to export one or more light effects of a given Blender file for later use (you can export the currently selected, all enabled or all light effects based on your choice of preference).
Please note that when a light effect is imported or exported, the data structures associated with the light effect (object meshes, images etc.) are not exported/imported, only a reference to their names is used. If you want to restore the same effect in another file, you need to have the same objects/images present in that Blender file as well.
Creating, removing, reordering light effects
Use the button next to the light effect list to add a new light effect to the end of the list. You can remove effects from the list by pressing the button. You can duplicate previously created light effects with the button. To rearrange light effects, use the and buttons.
Enabling and disabling light effects
Individual light effects can be enabled or disabled by clicking on the check box in front of the light effect. You can also give a descriptive name to each light effect by double-clicking on its slot to edit the name.
The color ramp
Use the dropdown list to select a light effect based on a color ramp (this is the default setting). In this case, below the list of light effects there are standard Blender widgets to set up the color ramp associated to the currently selected effect in the light effect stack. These widgets work just like any other color ramp editor in Blender, but here is a short summary for sake of completeness:
-
The button below the light effect list adds a new color stop to the color ramp.
-
The button below the light effect list removes the selected color stop from the color ramp.
-
The button reveals additional, less common (but nevertheless very useful) operators that can be applied to the entire color ramp:
-
Flip Color Ramp
-
Distribute Color Stops from Left
-
Distribute Color Stops evenly
-
Eyedropper tool for color selection
-
Reset Color Ramp
-
-
The "Color mode" dropdown list selects the color space in which the interpolation of the color ramp takes place. You can choose between RGB (red, green, blue), HSV (hue, saturation, value) and HSL (hue, saturation, lightness) color spaces.
-
The "Interpolation" dropdown list selects the interpolation mode used for the color ramp.
Refer to the documentation of the Color ramp widget in Blender’s own documentation for more details.
The color image
Use the dropdown list to select a light effect based on a color image. In this case an image selector input field appears where you can select the image used for the light effect. Further below a secondary output type selector and an optional output mapping selector also appears to be able to take advantage of both dimensions of the image as parametric input.
The most trivial usage of a color image is where e.g. the X axis represents time (TEMPORAL output type) and all pixel columns along the Y axis at a given X represent "discrete color ramps" for different time instants (e.g. using the INDEXED_BY_FORMATION output type). This way color effect design is reduced back to simple color image design that can be performed with any external tool.
Another usage is to project a static image onto the drones in a grid formation, using the properly selected Gradient (...) axis assignments on both axis.
Note that there is no interpolation between pixels in the color image, they are selected for each drone and each frame discretely. Therefore, color images should be used with a width/height that correspond to the selected output mapping perfectly (e.g. same height as the number of drones, same width as the number of frames in the light effect etc.), or they are suggested to be smooth images without sharp edges to compensate for the rounding errors of the discrete mapping. You can also scale up a low-resolution image in an external image editor tool and use the scaled-up version to simulate interpolation.
|
Warning
|
Directly accessing the pixel data of an image in Blender is somewhat slow at the moment (Blender 4.2 LTS). To improve the frame rate when using lots of light effects, we cache the retrieved pixels of images corresponding to a light effect. The cache is invalidated when a new image is selected for the light effect or when the light effect is removed, but not when you change the image data directly (e.g., via Blender’s Python API). If this happens, you can force a cache invalidation by selecting a new image for the light effect and then selecting the original one again. In most workflows this should not be a problem. |
The custom function
Use the dropdown list to select a light effect based on a custom function. In this case a file can be selected that contains the Python function that will be used as the custom function for the light effect. The file should contain a Python function with the following named arguments:
```python def color_function(frame, time_fraction, drone_index, formation_index, position, drone_count): return (1.0, 1.0, 1.0, 1.0) ```
Library presets
Use the dropdown list to select Presets or Advanced Presets when you want to drive the light effect with a built-in procedural expression instead of writing Python manually. Presets use the current color ramp as their palette and generate the ramp coordinates automatically for every drone and frame.
The button binds the selected preset to the active light effect. Internally this sets Output X to a built-in custom function, so the effect remains parametric and can still be retimed by changing its start frame, duration, fade in, fade out, storyboard attachment, or spatial constraint.
The preset controls are:
- Preset
-
Selects the built-in expression.
- Param
-
Selects the main mode for the preset. Examples include direction (left, right, up, down), order (forward, reverse), shape (cw, ccw, wide, narrow), or behavior (uniform, fine, clustered), depending on the preset.
- Param N
-
Numeric parameter for the selected preset. Examples include wavelength count, scanner width, reveal softness, group count, firework petal count, tail length, flash rate, and similar scale/detail controls. Use the ? button next to the field for the active preset’s exact meaning.
- Speed
-
Playback speed multiplier for the preset.
- Randomness
-
Deterministic jitter added to the sampled preset output.
- Sub-intervals
-
Splits the effect duration into repeated sections.
- Sub-interval Mode
-
Restart repeats the same time direction in each section, while Bounce alternates direction between sections.
- Ramp Curve
-
Optional remap for Advanced Presets before the generated value samples the color ramp. Linear keeps the raw preset value, while Smooth, Sine, and Stepped reshape the output.
Advanced Presets use the same preset list but default some modes to smoother show-ready behavior, such as pulse blinking and softer reveal fronts. Some presets also have a Hide/Reveal variant that works as a transparency-like overlay on top of the base color, revealing or hiding the underlying color without requiring a black-to-color ramp.
The current preset library includes the following families:
- Hide/Reveal presets (transparency overlays)
-
Reveal, Hide, Outline Reveal, Explosion (center-out reveal), Wave (directional wave reveal), Wave From Center (radial reveal), Matrix (falling strip mask). Use the Presets effect type for color-ramp output, or the Hide/Reveal effect type for transparency-style overlays on base colors.
- Blink, strobe, and noise presets
-
Blink All Fast, Blink All Slow, Blink Random Fast, Blink Random Slow, Strobe Gated, Noise Flicker Smooth, Crossfade A-B.
- Waves, reveals, and wipes
-
Wave, Reveal, Hide, Formation Index Wipe, Snake By Index, Matrix. Wave, Reveal, and Hide use the detected formation plane, so Param directions such as left, right, up, and down follow the local plane instead of assuming a fixed world axis.
- Explosion and color-transition presets
-
Explosion From Center, Explosion Black->Color, Explosion Color->Black.
- Outline and runner presets
-
Outline White Pulse, Outline Runner, Double Runner, Outline Pingpong, Outline Reveal, Outline Distance Band.
- Detected-line, side reveal, and cascade presets
-
Line Cascade Hold, Line Cascade Fade, Center Radial Reveal, Dual Side Reveal, Sparkle Reveal.
- Radial, spiral, and volumetric presets
-
Ring Pulse, Dual Ring Collision, Spiral In, Spiral Out, Shockwave Repeat, Center Breath, Vortex, Helix Z.
- Scanner and pattern presets
-
Scanner Plane X, Scanner Plane Y Bounce, Sine Ribbon Diagonal, Checker Phase, Group Chase Mod N, Meteor Trail.
- Firework-style presets
-
Chrysanthemum Burst, Palm Burst, Willow Fall, Crackle Core, Fountain Jet, Comet Shell.
|
Tip
|
Presets are a fast way to prototype show looks. Once the timing is correct, adjust the color ramp and Param/Param N values before rewriting the effect logic. |
Temporal constraints
The next group of properties below the color ramp or color image specify the temporal constraints of the light effect, i.e. when the light effect should be applied.
- Start, duration, end
-
The Start frame, Duration and End frame properties define the hard temporal limits: the light effect will be completely inactive outside this time interval.
|
Tip
|
Press the buttons on the right side of the start and end frame boxes to set them to the current frame. |
- Attach to storyboard entry or transition
-
You can also attach the start and end frames of a light effect to a storyboard entry or transition by selecting the proper entry or transition from the dropdown. If you do so, your start and end frames (and duration) will be kept in synchrony with your selected entry at all times.
|
Tip
|
To add an offset to the start or end frames of your light effect relative to the attached storyboard entry start and end times, simply change the start and end times of the light effect while a storyboard entry is attached. You will see the frame offsets next to the start and end frame indicators in brackets (e.g. (+1) or (-5)). |
- Fade in, fade out
-
The Fade in and Fade out properties specify the duration of the fade-in and the fade-out periods at the beginning and the end of the time interval of the light effect. During the fade-in period, the intensity of the light effect grows gradually from zero (inactive) to 1 (fully active). Similarly, the fade-out period animates the intensity of the light effect from 1 (fully active) to 0 (inactive). You can turn both of these off by setting their duration to zero.
Spatial constraints
Light effects may also be limited in space such that it affects only a subset of the drones. This is achieved by selecting a mesh in the Mesh picker widget and then setting the Target dropdown to one of the following options (instead of "All drones", which does not create a spatial constraint):
- Inside the mesh
-
Blender will test in each frame which drones are inside the selected mesh, and the effect will be applied only to those that are inisde. Note that containment checks are a relatively expensive operation, especially for complex meshes.
- Front side of plane
-
This setting is suitable if your mesh is a plane. Imagine that the plane is infinite and it separates the space into a "front" and a "back" half. Blender will select those drones that are in the "front" half of the 3D space. If your mesh is not a plane, Blender will pick the first face of the mesh and extend that into infinity. This test is computationally less expensive than a full containment test, so for simple cases you should use this instead of the more expensive containment test that you can achieve with the Inside the mesh option.
The result of the spatial constraint can also be inverted with the Invert target checkbox. This is mostly useful in conjunction with the Inside the mesh option, allowing you to match only those drones that are outside the associated mesh instead of being inside.
Output modes
The Output X and Output Y dropdowns determine how the color of a drone is picked from the color ramp or color image. Recall that each light effect essentially produces one or two numbers between 0 and 1 for each drone, and then passes this number through the color ramp or color image to calculate the final color that the effect will apply on the drone. The output dropdowns provide options for picking this number:
- First color of color ramp
-
The first color of the color ramp will be used by all drones during the whole light effect; in other words, each drone picks 0, which represents the start of the color ramp.
- Last color of color ramp
-
The last color of the color ramp will be used by all drones during the whole light effect; in other words, each drone picks 1, which represents the end of the color ramp.
- Indexed by drones
-
All the drones are sorted according to the order they appear in the Drones collection, and they are then distributed evenly along the color ramp or color image. For instance, if you have five drones, the first drone gets 0 (the left edge of the ramp), the second drone gets 0.25 (25% between the left and the right edge of the ramp), the third drone gets 0.5 (50% between the left and the right edge) and so on.
- Indexed by formation
-
All the drones are sorted according to the order they get mapped to the formation of a given frame, in the order markers appear in the corresponding subcollection in the Formations collection.
- Gradient (XYZ, XZY, …)
-
Drones are sorted according to their coordinates along the X, Y and Z axes (in this order), and they are then distribued evenly along the color ramp. This option has six variants with different axis order.
- Temporal
-
All drones will cycle through the color ramp simultaneously throughout the total duration of the light effect, starting from the left and ending at the right edge.
- Distance from mesh
-
The single static color picked for each drone will be calculated by mapping the normalized distances between the drones and the selected mesh (see the Mesh widget) to the color ramp (i.e. the closest drone to the mesh will pick the leftmost color in the ramp, the farthest will pick the rightmost color, all the rest will get a value in between, distributed evenly along the color ramp).
- Custom expression
-
A Python function which returns a number between 0 and 1. The function is called for each drone and each frame of the light effect. EXAMPLE: ```python def odd_even(frame, time_fraction, drone_index, formation_index, position, drone_count): return drone_index % 2 ```
Mapping
Some output mode types (such as Distance from mesh and Gradient-based types) support two mapping modes between the drones and the color ramp:
- Ordered
-
In ordered mode, drones are sorted first based on their coordinates or distances, and then they are distributed evenly along the color ramp or image.
- Proportional
-
In proportional mode, the drones are distributed along the color ramp or image in a way that their distances on the color space are proportional to their distances or coordinates in the scene itself.
Influence
The Influence parameter sets the overall transparency of the light effect. 1 means that the light effect completely overwrites the base color animation, 0 means no effect at all.
|
Tip
|
The influence parameter can be animated with keyframes, which is a simple way to create flashes, for example. |
Randomness
The Randomness parameter can be used to add a bit of randomness to the numbers picked by the drones according to the Output dropdowns. Each drone is associated with a unique random number between -0.5 and 0.5, this number is multiplied by the randomness parameter, wrapping around the edges of the color ramp or image as needed, and the result is added to the number that was calculated based on the setting of the Output dropdowns. This final number is then used to pick the color of the drone from the color ramp or image. Note that the default value of the randomness parameter is zero, which means that the value derived from the Output settings is used as is.
Pyro tab
The Pyro tab in the sidebar of the Viewport editor helps you add pyro trigger events to your drone show.
The Pyro tab so far contains only a single panel:
Pyro Control panel
The Pyro Control panel provides a simple way to add pyro control of individual drones by inserting pyro trigger events at the appropriate pyro channels and frames.
Render
There are several visualization types for pyro effects from which you can choose dynamically:
- None
-
Select this option to skip pyro visualization completely (might be needed for speeding up playback or render).
- Markers
-
select this option to use very simple but quick markers on drones which are supposed to have an active pyro effect at a given frame.
- Particles
-
Select this option to imitate gerbs falling down from the drones for visualization purposes (this option slows down rendering time substantially).
- Info
-
With this option drones will be highlighed with the same markers as in the Markers option but statically, throughout the entire show. Additionally, details about pyro channel, timing and payload will be also printed on them. Use this option to highlight and follow pyro drones throughout the entire show and to aid preflight pyro setup with double checking you added pyro to the right drones and to the right channel.
Particles of the pyro effect are assumed to be hosted by the second material slot in the material list of the drone mesh. The name of the material starts with Pyro of ... by convention, but this is not enforced — you can rename the material, but you need to keep in mind that ButterflyFleet Studio for Blender will always adjust the second material.
Channel
Multiple pyro channels are supported by our add-on. Channel indexing starts with 1.
To trigger a pyro event on a given channel, simply set the channel to a convenient value before pressing the button.
Note that only a single event is supported per channel on each drone, so consecutive triggering on the same channel will overwrite previous events.
Upload params from selection
Press this button to retrieve pyro payload parameters from the currently selected drone on the current channel.
Payload parameters
There are several payload parameters that can be setup for each pyro trigger event. The following payload parameters can be tuned:
- Name
-
Give a descriptive name for your pyro payloads here. If you export to the VVIZ format of Finale 3D, you can use VDL strings as a naming convention.
- Duration
-
This parameter defines the length of the pyro visualization. It is not affecting the trigger event itself.
- Prefire time
-
Pyro payloads usually need some time after triggering to light up on the sky. Define this duration here and put your trigger events exactly at the desired moments when they should start to be visible. ButterflyFleet will make sure your pyro payloads will be triggered this time earlier to have your spectacles right on time.
- Yaw
-
Defines the yaw angle of the pyro payload relative to the body frame of the drone, in degrees. (0° points towards the yaw of the drone, 90° to the right, -90° to the left etc.)
- Pitch
-
Defines the pitch angle of the pyro payload relative to the body frame of the drone, in degrees. (0° points ahead (towards the yaw of the payload), 90° points up, -90° points down etc.)
Trigger
When you have setup the pyro channel and all your payload parameters, select the drones you wish to add pyro to and move your timeline to the exact frame when you wish to have your pyro effect appear on the sky. Then simply press the button to add your pyro event.
Already saved pyro events are stored as a JSON string in the ButterflyFleet-specific "Drone Show" section of each drone’s Object Data Properties. The string can be manually edited as well to allow for easy pyro scripting. Alternatively, you can call Python’s bpy.ops.butterfly.trigger_pyro_on_selection() directly to add additional pyro trigger events to selected drones.
The Safety & Export tab in the sidebar of the Viewport editor lets you perform real-time and post-processed verification of your drone animation in Blender and export your show into several useful formats, including the ButterflyFleet compiled (.skyc) format.
The Safety and Export tab contains two panels; detailed description of each of them follows on the links below:
Safety Check panel
The Safety Check panel lets you perform real-time frame-level or full post-processed verification of your drone animation to aid you towards completely safe drone flighs.
Safety warnings of the current frame appear in real time as text on the left side of the 3D Viewport editor, while drones with warnings are also highlighted in real time with different colors according to the violation type as seen in the image below.
Safety Check checkbox
The checkbox at the top left corner of the panel allows you to disable the safety checks entirely, although it is advised not to do so. One valid reason for disabling them temporarily is if you feel that the Blender UI has become sluggish and that the safety checks are responsible for that. The safety checks should have negligible impact on the overall performance of Blender so let us know if you found a situation where disabling the safety checks improved Blender’s responsiveness significantly.
Proximity warnings
This option lets you define a minimum safety distance between your drones. If there are drones at the given frame that are closer to each other than this safety distance, you get real-time proximity warnings.
By default, the proximity warning is limited to drones above the minimum navigation altitude only (see below in the section about altitude warnings). This is to prevent spurious warnings about drones being too close in the takeoff grid. You can change this in the panel by choosing between the "All drones" and "Drones abouve min altitude" setting.
The text-based proximity warning on the left side of the 3D Viewport editor always shows you the minimum distance between all drone pairs on the current frame. This drone pair is also highlighted with red, along with a red line connecting them.
To enable or disable proximity warnings, use the checkbox.
|
Note
|
Distances are measured between the centers of the drones, not between their edges. A safety distance of 3 meters with a drone whose arm length is 450mm means that you have less than two meters between the drones when the safety distance is breached, so make sure that you take the arm length and the props into account. ButterflyFleet Studio is unaware of the physical dimensions of the drones. |
Altitude warnings
This option lets you define a minimum and a maximum altitude for your drone show. If there are drones above the maximum altitude (measured along the Z axis), or drones moving horizontally below the minimum altitude, you get real-time altitude warnings.
The text-based altitude warning on the left side of the 3D Viewport editor always shows you the overall altitude range of drones on the current frame. Drones above the altitude threshold at a given frame are highlighted in yellow.
To enable or disable altitude warnings, use the checkbox.
Velocity warnings
This option lets you define a maximum horizontal and vertical speed for your drone show (vertical speed can be further differentiated into maximum up and down speed). If there are drones above these velocity limits, you get real-time velocity warnings.
The text-based velocity warning on the left side of the 3D Viewport editor always shows you the maximum horizontal (XY), upwards (U) and downwards (D) velocity of drones on the current frame. Drones above the velocity thresholds at a given frame and drones moving horizontally below the minimum navigation altitude threshold are highlighted in blue.
To enable or disable velocity warnings, use the checkbox.
If you need different vertical velocity limits for ascending and descending motion, enable the checkbox next to the Z velocity slider. This reveals a separate slider for the upward velocity limit, while the main Z slider controls the downward limit.
Acceleration warnings
This option lets you define a maximum acceleration for drones in your drone show. If there are drones above the acceleration limit, you get real-time acceleration warnings.
The text-based acceleration warning on the left side of the 3D Viewport editor always shows you the maximum acceleration of drones on the current frame, irrespectively of the direction (horizontal or vertical). Note that acceleration is treated as an unsigned quantity: accelerations and decelerations are not distinguished. Drones above the acceleration threshold at a given frame are highlighted in magenta.
To enable or disable acceleration warnings, use the checkbox.
Yaw rate warnings
This option lets you define a maximum yaw rate for drones in your drone show. If there are drones above the yaw rate limit, you get real-time yaw rate warnings.
The text-based yaw rate warning on the left side of the 3D Viewport editor always shows you the maximum yaw rate of drones on the current frame, irrespectively of the direction of rotation (CW or CCW). Note that yaw rate is treated as an unsigned quantity: CW and CCW yaw rates are not distinguished. Drones above the yaw rate threshold at a given frame are highlighted in light blue.
To enable or disable yaw rate warnings, use the checkbox.
Finding all drone pairs closer than the proximity warning threshold
Real-time proximity warnings that are running during playback must be fast, therefore we cannot afford finding all pairs of drones in a frame that are closer than the proximity threshold by default; only one such pair will be marked in the 3D view. However, if you see a proximity warning marker and you suspect that there might be more pairs of drones that violate the proximity threshold in the current frame, you can ask for a full, exhaustive scan of all pairs of drones by pressing the button. This will refresh the current frame and mark all pairs of drones that are too close to each other.
Validating full or partial trajectories
Press the button to execute a full validation for a frame range instead of only for a single frame. This might take some time depending on the number of drones and the number of frames selected.
The validation results include the following set of charts:
-
Altitude range of all the drones as a function of time.
-
Horizontal and vertical velocity range of all the drones as a function of time.
-
Distance of the closest drone pair as a function of time.
All the charts will also indicate the thresholds selected in the Safety Check panel so you can quickly decide whether any of the chart lines breach the safety limits.
Export panel
Once you are finished with your drone show, use the Export panel to export it from Blender to different formats for further processing or direct upload to the drones.
The available output formats depend on whether you selected the "Indoor" or "Outdoor" setting in the Show panel's dropdown, and also on your specific license purchased at the ButterflyFleet Store.
Press the to enable export formats according to your license.
Note that export operations require Blender to sample trajectories and lights which can take a long time. To see the progress or predicted remaining time of the export procedure, run Blender from a terminal window or press "Toggle System Console" in the "Windows" menu to watch its terminal log.
Export to ButterflyFleet .skyc
The ButterflyFleet compiled show format is a single-file descriptor of your complete drone show. It contains the sampled trajectories, light program, yaw, pyro and metadata exported from the Blender project.
If you press the button, you have to choose the path and filename of your output file. There are also some parameters you can setup conveniently:
- Export selected drones only
-
Export all or only selected drones
- Frame range
-
Define the frame range of the output (Storyboard / Render / Preview / Current formation or transition)
- Redraw frames
-
Decides whether to redraw the main Blender window while iterating over the frames of the show. Redrawing can significantly increase the time needed to export the show, but it is required if you have video textures that are used to control light effects. "Auto" means to redraw the scene if it is needed to export the show correctly. "Always" means to redraw the scene even if it is not needed. "Never" means to skip redrawing the scene — note that this might lead to incorrect light effects in the exported show if you have video based light effects.
- Force Recalculate Transitions
-
Enable this checkbox to force the recalculation of all transition plans before exporting, ignoring any cached transition data. Leave disabled to reuse stored transition plans unless they are missing or stale.
- Trajectory FPS
-
Set output frame rate for drone trajectories (make sure it is a submultiple of your render FPS)
- Light FPS
-
Set the output frame rate for light programs (make sure it is a submultiple of your render FPS)
- Export cameras
-
Enable this checkbox to export Blender cameras into the .skyc file.
- Export pyro (PRO)
-
Enable this checkbox to include pyro trigger events in the exported .skyc file. Requires a professional license.
- Export yaw (PRO)
-
Enable this checkbox to output rotations around the yaw (vertical) axis of your drone objects into the .skyc file
|
Note
|
These features are not supported by our community server. To enable them, please purchase a proper license from ButterflyFleet Shop. |
Landing timing in exported SKYC
ButterflyFleet Studio for Blender generates the complete SKYC trajectory; the target flight stack then executes the uploaded trajectory and handles its final land/disarm behavior by itself. The exporter does not send a separate motor-off command.
For landings that reach ground level, the final part of the descent is slowed smoothly. By default the last 20 cm are capped to 0.1 m/s while still respecting the configured velocity and acceleration limits. When a drone first reaches Z = 0, the exporter records that timestamp as the drone’s landingTime metadata. The trajectory then remains at Z = 0 for the configured ground-settle time, defaulting to 1 second, so the actual SKYC trajectory duration ends after the drone has been on the ground for that settle interval.
This means landingTime marks touchdown for validation and timing metadata, while the last trajectory point controls when ArduPilot reaches the end of the uploaded show trajectory and proceeds with its normal landing/shutdown logic.
Export to ButterflyFleet .csv
The trajectories and LED light colors of the drones can also be sampled at regular intervals and exported to CSV files for further post-processing in external tools. This option appears only if you have installed and enabled the CSV export addon that is distributed separately. The CSV export will produce a single ZIP file that contains multiple CSV files, one for each drone, with the following columns: time (milliseconds), X, Y and Z coordinates (meters) and the red, green and blue components of the color of the LED light, in the usual 0-255 range, in linear color space.
|
Tip
|
Prefer the official ButterflyFleet compiled format (.skyc) when your workflow supports it, as it contains more show information in a more optimized way than this simple CSV representation. |
If you press the button, you have to choose the path and filename of your output file. There are also some parameters you can setup conveniently:
- Export selected drones only
-
Export all or only selected drones
- Frame range
-
Define the frame range of the output (Storyboard / Render / Preview / Current formation or transition)
- Frame rate
-
Set output frame rate of drone trajectories and light programs (make sure it is a submultiple of your render FPS)
|
Note
|
Special characters in drone names are converted to standard characters in the exported filenames. |
Export validation report .pdf
The button creates a unique safety report of your show in .pdf format for standalone self-checking, validated reporting or as a supplement for flight permissions or other administration purposes.
The validation report starts with a summary of flight statistics and safety test results, and continues with detailed plots on all aspects of the implemented safety checks.
If you press the button, you have to choose the path and filename of your output file. There are also some parameters you can setup conveniently:
- Export selected drones only
-
Export all or only selected drones
- Frame range
-
Define the frame range of the output (Storyboard / Render / Preview / Current formation or transition)
- Trajectory FPS
-
Set output sampling frame rate for drone trajectories (make sure it is a submultiple of your render FPS)
- Light FPS
-
Set the output sample frame rate for light programs (make sure it is a submultiple of your render FPS)
- Plot positions
-
Include position-related plots in the safety report, such as an elevation profile or horizontal extent of the trajectories.
- Plot velocities
-
Include velocity-related plots in the safety report including horizontal and vertical velocity timelines focusing on maximum velocity breach warnings.
- Plot accelerations
-
Include acceleration-related plots in the safety report including horizontal and vertical acceleration timelines focusing on maximum acceleration breach warnings.
- Plot yaw and yaw rate
-
Include yaw-related plots in the safety report including yaw and yaw rate timelines focusing on maximum yaw rate breach warnings.
- Plot projected drift
-
Include projected drift plots in the safety report. The drift plot is a complex output for checking integral predicted deviations from show trajectories due to maximum velocity or maximum acceleration threshold breach events.
- Plot nearest neighbor
-
Include a unified nearest neighbor plot in the safety report to check for minimum distance between drones throughout the entire show.
- Plot all nearest neighbors
-
Include nearest neighbor curves on a per-drone basis on a separate page of the safety report.
WarningCreating this plot might take a longer time, depending on the number of drones, frames and output frame rate. - Create individual drone plots
-
Include validation plots for each drone individually on separate pages in the final output.
WarningCreating these plots might take a long time, depending on the number of drones, frames and output frame rate.
Export to .skyc + .pdf
To save some time on final renderings, there is an option to export shows into .skyc and validation report .pdf formats at the same time, in parallel. In this case the sampling of trajectories and light effects - which is generally responsible for most of the export time - is performed only once, not twice, and the export processes are also executed in parallel by the backend.
All properties of this multi-export option are the same as the ones for the individual exporters.
Export to various third-party show formats
Upon purchasing a professional license, we provide additional exporters to various external drone show formats, including DSS PATH, DSS PATH3, Drotek, EVSKY, HighGreat DAC, LiteBee, etc.
Visit ButterflyFleet Store to purchase a professional license with third-party exporters. Contact us if you need any additional exporters that are not on the list yet.
Export to external fireworks and show visualization formats
If you are preparing your drone show as part of a larger event, e.g. with fireworks, use our Finale 3D / FWSim .vviz or Depence .ddsf exporters to export your drone show into formats that can be read by well known visualization softwares:
-
External link: Finale 3D: VVIZ format
-
External link: Finale 3D: Import from ButterflyFleet
-
External link: FWSim: VVIZ support
-
External link: Depence: Drones
|
Warning
|
Even though yaw control and pyro triggering is part of the official .ddsf specification and hence the actual .ddsf files ButterflyFleet exports, according to Depence customer service they only read the trajectories and light program from the .ddsf files so far, not yaw or pyro. Implementation of the latter two is in progress in Depence and we will be notified once it is ready. |
Note that our exporters that provide compatibility with these software require a professional license that can be purchased from ButterflyFleet Store.
If you press one of the or buttons, you have to choose the path and filename of your output file. The , , , and options will be available for these export types as well.
Export to Google Earth KMZ format
We also provide an exporter to Google Earth .kmz format. This export option lets you validate the spatial requirements of your show in a real 3D terrain context provided by Google Earth.
After defining the render range and FPS of the output, a static .kmz file is created showing all the linearized trajectories of the drones selected for export. The color of the line segments indicate the color of the given drone at that moment.
In the appendix you can find useful information about the following topics:
Third party tools
The following third party tools might be of help throughout your drone show design process with ButterflyFleet Studio for Blender.
If you know of any other tool you think should be on this list, please let us know.
Blosm for Blender
Blosm for Blender, formerly known as Blender-OSM lets you import Google 3D cities, OpenStreetMap 3D buildings and global real-world terrain into your Blender project with a few clicks.
Murmur
Murmur is a swarm flocking simulation for Blender and ButterflyFleet Studio, based on the Vásárhelyi et al. 2018 optimized flocking model.
The code for the simulation is prepared by our Discord user @envyofthebirds, representing the company Illuminaero.
Glossary
- Collection
-
Blender objects in a scene can be grouped into collections. Collections are listed in the Outliner editor. ButterflyFleet Studio for Blender uses collections to group drones, formations and drone object templates. For more information on collections in general, please read the official Blender documentation.
- Drones collection
-
This collection contains all your drone objects. It is created automatically with the "Create Takeoff Grid" operator, and you can re-assign it to a different collection in the Swarm tab if needed.
- Formations
-
A formation is a collection of markers, placed as a sub-collection in the dedicated Formations collection. Each marker specifies the desired position of one drone within the formation. Formations may be static or dynamic; in case of a dynamic formation, one must animate the positions of the markers within the formation using the standard Blender animation tools. You can read more about formations in the Key concepts chapter.
- Formations collection
-
This collection contains all your formations, which are also collections. A formation contains markers (see below) that specify the desired position of each drone within the formation.
- Formations tab
-
The Formations tab is a ButterflyFleet-specific new tab in the sidebar of the 3D Viewport editor that contains one panel that allows you to create formations and another to edit the storyboard.
- Marker
-
A marker is an object within a formation that specifies the desired position of a single drone in the formation. A marker may be an empty or non-empty mesh, in which case the position of the mesh (in world coordinates) will be used as the desired position. Non-empty meshes may also contain a dedicated vertex group named Drones. When such a vertex group exists in a non-empty mesh, the positions of all the vertices within the vertex group will be treated as markers instead of the position of the mesh itself. You can read more about markers in the Key concepts chapter.
- LEDs tab
-
The LEDs tab is a ButterflyFleet-specific new tab in the sidebar of the 3D Viewport editor that contains panels that allows you to add light animation to your drone show easily.
- Safety & Export tab
-
The Safety & Export tab is a ButterflyFleet-specific new tab in the sidebar of the 3D Viewport editor, containing of two panels: one allows you to perform real-time safety verification of your animation and another to export your drone show in ButterflyFleet Compiled Format (.skyc).
- SKYC
-
.skyc stands for ButterflyFleet Compiled format. It is our most common show definition file type that contains all information related to a drone show (all drone trajectories and light animations, pyro events, suggested geofence definitions, music, designer notes to the operators etc.). The final output of ButterflyFleet Studio for Blender is a single .skyc file for later validation, handoff or operation in compatible workflows.
- Storyboard
-
The storyboard is a simple list of formations (static or dynamic) that are organized in time with proper timing to give you the overall structure of your drone show animation. The storyboard can be edited in the "Formations" tab of the sidebar in the 3D Viewport editor.
- Takeoff grid
-
The takeoff grid contains the takeoff positions of your drones. It should be your initial formation in your Storyboard. The takeoff grid can be created with the "Create Takeoff Grid" operator, which also initializes all necessary collections for your drone show design.
- Templates collection
-
The templates collection contains all template objects necessary for the drone show. It is currently a single drone template that defines how all drones should look like in Blender. In the vast majority of cases you should not need to modify anything in this collection.