ButterflyFleet

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].
Install Blender Add-ons
  1. Open Blender and go to Edit → Preferences → Add-ons.

  2. Select Install from Disk… from the dropdown menu in the top right corner.

  3. In the popup window select the ButterflyFleet Studio for Blender .zip file that you have downloaded previously to your computer, and press Enter.

  4. 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).

  5. 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 Server URL field automatically.

    Use community server

    Press this button to use the online community server. This action will clear the Server URL 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:

  1. Deactivate the add-on in Edit → Preferences → Add-ons by unticking the checkbox in front of the ButterflyFleet Studio add-on.

  2. Install the new version of the add-on using the same procedure as outlined above.

  3. Exit Blender.

  4. Restart Blender.

  5. 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:

  1. Deactivate the add-on first in Blender’s add-on manager.

  2. 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.

  3. Remove the file named ui_butterfly_studio.py.

  4. 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:

  1. The origin (0, 0, 0) in Blender corresponds to the show origin metadata value.

  2. 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.

  3. Ground level is always at Z = 0.

The table below summarizes all mappings between the relative and absolute coordinate system.

Table 1. Mapping between relative and geodetic coordinate systems

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 Recalculate Transitions 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.

Blender 3D Viewport with ButterflyFleet tabs

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.

Show panel
Swarm panel

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 Create Takeoff Grid button on the top of the Formations panel and check out the parameters in the popup window.

Create takeoff grid

Setup your takeoff grid with any convenient parameters and press OK.

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 Takeoff button on the Formations panel and setup the parameters of the automatic takeoff procedure.

Takeoff

After you press OK 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.

Formations panel

Use the + button on the Formations panel to create a formation as part of your drone show.

Create formation

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:

  1. 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.

  2. 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.

Storyboard

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 Recalculate transitions 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 RTH and Land 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.

Return to home

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.

Safety Check panel

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 Validate Trajectories 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.

Validate Trajectories

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.

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 Apply (change abruptly) or Fade to (fade linearly from last keyframe) buttons to add color animation keyframes to the given drones at the given frame.

Apply colors to selected drones
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.

Light Effects panel

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 Export to .skyc button of the Export panel on the "Safety & Export" tab to export your entire show into ButterflyFleet compiled show format.

Export panel

The ButterflyFleet compiled show format stores the sampled trajectories, lights, yaw, pyro and metadata needed for the final show file.

The Export to .csv 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 Export to validation .pdf 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 Refresh file formats 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.

ButterflyFleet tab

The ButterflyFleet tab contains three panels:

Setup Panel

The setup panel helps you setup your Blender environment for the latest version of ButterflyFleet Studio.

Setup panel

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 panel

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 Yaw indicators 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 Side 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 Apply 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 Specify location 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.

Swarm panel

Drone collection

Click on the Drones 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 Create Takeoff Grid 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 Preferred acceleration 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:

  • Landing flare height — the altitude (in meters) above ground where the descent slows to flare speed. Defaults to 0.2 m.

  • Landing flare speed — the vertical speed (in m/s) during the flare phase. Defaults to 0.1 m/s.

  • Landing ground settle time — 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 Drone template drop down menu.

Drone template

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 Create takeoff grid 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.

Formations tab

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.

Formations panel

Create Takeoff Grid

The Create Takeoff Grid 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.

Create takeoff grid

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 OK, a rectangular grid is created with the specified parameters.

For advanced settings enable the Advanced checkbox.

If you wish to have a separate column and row spacing for your basic takeoff grid, enable the Use separate column spacing 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 Takeoff 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.

Takeoff

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 RTH 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.

Return to home

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 Use custom spacing 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 Matching option controls target assignment strategy, while Layer Start Delay and Layer Descend Delay control activation and descent timing between layers.

Land

The Land 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.

Land

This button should be pressed after the return to home entry is inserted to the storyboard.

Selecting the active formation

Click on the Formation 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.

Create formation

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.

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 Select button on the Formations panel adds the selected formation to the current selection in Blender. Similarly, the Deselect 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 Generate Markers 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 Update 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.

Update formation

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 Reorder 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 Show order of formations 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 Stats 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.

Formation stats

Appending a formation to the storyboard

Press the Append 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 Insert button (located next to the Append button) to insert the selected formation as a new storyboard entry between existing entries, at the current timeline frame. Unlike the Append button, which only adds to the end, Insert 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:

  1. A placeholder entry with duration 1 is inserted at the current frame.

  2. All later timeline content is shifted forward consistently.

  3. Affected inbound and outbound transition caches are cleared.

  4. Transitions are recalculated to obtain exact durations.

  5. A retiming pass fits the inbound and outbound transition windows.

  6. 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 Append button instead.

Tip
The Insert 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.

Storyboard

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 Move 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 Move 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).

Staggered transition
Tip
as 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 Schedule overrides 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.

Schedule overrides

Finally, enable the Locked checkbox to lock a transition and do not allow its automatic update when the Recalculate transitions button is pressed.

Once you are satisfied with all the parameters of the transition, press the Recalculate 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.

Table 2. Transition matching methods

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
depth_balanced_polar_sorted

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
polar_sector_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
sector_plus_local_optimal

Starts from polar sectors, then refines assignments locally.

Use when radial sector structure is good but plain sector sorting leaves local swaps.

depth_balanced
depth_balanced_cost_optimal

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
collision_aware_optimal

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 Recalculate Transitions button to create automatic and optimal transitions between your formations without collisions.

Recalculate Transitions

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 Update Time Markers 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.

LEDs tab

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.

LED Control panel

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 Apply and Fade to 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.

Apply colors to selected drones

If the Fade to color 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 Use bloom effect 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 panel

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 Enable light effects 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 Import… button to import parametric light effects prepared in another Blender file, and use the Export… 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 Duplicate Light Effect 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 Effect Type 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 v 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 Effect Type 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 Effect Type 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 Effect Type 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 Apply Preset 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 Attach to 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:

Output
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.

Pyro tab

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.

Pyro Control panel

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 Trigger 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 Trigger 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.

Safety & Export tab

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 Check panel

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.

Real time safety checks

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 Show proximity warnings 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 Show altitude warnings 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 Show velocity warnings 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 Up 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 Show acceleration warnings 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 Show yaw rate warnings checkbox.

Technical details

Velocity warnings are special in the sense that in order to accurately estimate the velocity of a drone in any given frame, you need to know the position of the drone in the previous and in the next frame as well. However, Blender does not allow its add-ons to query the position of an object in a specific frame without explicitly switching to that frame, and switching frames all the time automatically for sake of the velocity validation would render the UI useless. Therefore, ButterflyFleet Studio will manage a cache of positions instead, for all the drones in a limited set of previously visited frames, and will attempt to estimate the velocity from the current frame and the information in the cache instead. A similar policy is applied for acceleration estimates — these are estimated from the velocities if there are cached velocities for surrounding frames.

The rules are as follows. If the cache contains information about the positions of the drones in nearby frames (because you have visited these frames before), ButterflyFleet Studio will show the maximum velocities in the 3D Viewport and perform the validation accordingly. If there is not enough information about nearby frames, the validation will not take place. Similarly, if the cache contains information about the accelerations of the drones in nearby frames, the acceleration warnings will be shown. If there is not enough information about nearby frames, the validation will not take place.

The safest way to perform the real-time velocity and acceleration validation is to start playing the show in the 3D Viewport because then Blender will visit the frames one by one. Another option is to scrub through the video by dragging the current frame marker in the Timeline panel of Blender, slowly. The definition of "slow" depends on the zoom level of the timeline - if the timeline is zoomed out to cover a ten-minute show, even a few pixels on the timeline may represent a jump that is large enough so that ButterflyFleet Studio will not attempt an estimation.

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 Run Full Proximity Check 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 Validate Trajectories 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.

Validate Trajectories

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 Show type dropdown, and also on your specific license purchased at the ButterflyFleet Store.

Export panel

Press the Refresh file formats 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 Export ButterflyFleet SKYC 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 Export ButterflyFleet CSV 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 Export validation report 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.

IMPORTANT

The validation .pdf is created by a configured local or remote backend running in the background. As creating the validation report is resource intensive, access to this feature might be disabled on the public backend and might be available only through a paid license option. If you need access, visit ButterflyFleet Store for the proper professional license.

If you press the Export validation report 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.

Warning
Creating 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.

Warning
Creating 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:

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 Export to Finale 3D .vviz or Export to Depence .ddsf buttons, you have to choose the path and filename of your output file. The Export selected drones only, Frame range, Trajectory FPS, Light FPS and Export yaw 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.