Coder Social home page Coder Social logo

skybrush-io / studio-blender Goto Github PK

View Code? Open in Web Editor NEW
43.0 3.0 30.0 3.33 MB

Skybrush Studio for Blender - a Blender addon for designing and validating drone shows

Home Page: https://skybrush.io

License: GNU General Public License v3.0

Python 98.57% Shell 1.24% Batchfile 0.18%
drone drone-show blender-addon uav skybrush drone-swarm

studio-blender's Introduction

Skybrush Studio for Blender

Skybrush Studio for Blender screenshot

This repo contains Skybrush Studio for Blender, a professional drone show designer framework integrated into Blender.

The output of Skybrush Studio for Blender is a single .skyc file, which contains the trajectories and light programs for all the drones in the show. Using .skyc files together with the Skybrush suite allows you to preview, validate, verify, analyze, plot and execute drone shows with a few clicks.

Installation

Skybrush Studio for Blender is distributed as a ZIP file that can be installed in Blender according to the official Blender add-on guide. However, this repository does not contain the ZIP version of the plugin or the standalone executables but the source code of the plugin. Therefore, in order to create the ZIP version and the executables on your own, you either need to download it from us or build the ZIP yourself. Once you obtained the ZIP version of the plugin, follow the installation guide in our online documentation

Building the plugin

The build process is tested on macOS at the moment. It is very likely to work on Linux as well. On Windows, you can try building inside Cygwin or Windows Subsystem for Linux; the build script is written in bash so you will definitely need an environment that provides bash.

The build script can be executed as follows:

$ bash etc/scripts/create_blender_dist.sh

When successful, the script creates the ZIP bundle of the addon in the dist/ folder.

Development

If you want to modify the plugin and add your own functionality, the easiest is to set up a folder that can be used directly as an entry in the Blender addon path. This way you can modify the source code of the plugin without having to build a ZIP after every modification.

First, run poetry install in the root folder of the repository to install the dependencies of the plugin.

Next, on Linux or macOS, you can run etc/scripts/bootstrap.sh to create a folder named dev/ within the repository. This folder sets up symbolic links in a way that allows you to load the plugin directly if you add the dev/ folder to your Blender addon path. On Windows, you can achieve the same thing by running etc/scripts/bootstrap_windows.bat.

Note that you might still need to exit Blender and restart it again if you make a modification to the plugin code to ensure that your modifications are picked up by Blender.

Support

For any support questions please contact us on our Discord server.

License

Copyright 2020-2022 CollMot Robotics Ltd.

Skybrush Studio for Blender is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Skybrush Studio for Blender is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

studio-blender's People

Contributors

ntamas avatar seankovacs avatar thomas-advantitge avatar vasarhelyi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

studio-blender's Issues

feature request- Vertex groups instead of Mesh Objects for LED Effects

If there was a way to use vertex groups instead of individual meshes in the LED effect tab, it would make multi colored images/scenerys way easy to handle.

Currently, I'm having to make a different mesh object that completely surrounds the desired drones, which makes it tricky if objects are spinning/waving, and even tricker if one object is coming in close proximity to another group's mesh of a different color.

This way it could be precise and exact. Thanks for all your hard work!

Unused constraint F-curves sometimes remain in the drone animation data

While investigating one of the Blender project files sent to us in private, I've found several F-curves in the animation data of drones where the target data path of the F-curve does not exist any more. I think this happens when formations are removed from the project after the user has already created transitions from them.

The easiest way to detect these stale F-curves (which appear with a red outline in the Dope Sheet) is with scripting. Assume that drone is a drone object:

action = drone.animation_data.action
for fcurve in action.fcurves:
    try:
        drone.path_resolve(fcurve.data_path)
    except ValueError:
        print(f"{fcurve.data_path} is invalid")

These should be cleaned up regularly. We should probably also filter in data paths whose name matches /constraints["Skybrush.Entry.*"].influence/ to avoid deleting something that we did not create ourselves.

[feature request] - light effect image custom axis plane

would be really useful if the image mapping in the light effects could a have a custom plane/origin for the mapping instead of the World XYZ.
Because at the moment is quite difficult to align the image precisely
(if for example the drone formation is rotated or the image colors need to be view from a precise angle)

image

[FEATURE REQUEST] - Using a collection of meshes for LED effect

Would it be possible to allow using a collection of mesh objects instead of a single object for the "Mesh" option of LED effect?
This would reduce the copying of LED effects for me and allow for better organization of LED effects. Joining multiple mesh objects into a single object is not a solution because then they can't be animated independently.
image

light effect on a group of drones

I have a question about if you can more efficiently separate some drones to use a light effect only visible on that group.

At the moment i found only "inside the mesh" property but if the drones are moving the mesh should also move and it'is not quite simple if the drones group changes its shape or mix with another group.
Would be cool if each light effect could have a selection index property where you can add a range or specific indexes

Automated Update time markers

the button to refresh timeline markers seems like an unnecessarily separate operation, it could be invisible and performed with each change that changes a transition.
This is to avoid wasting space in the interface and to be able to devote it to new and useful functions.

RTH to Drone Position vs Takeoff Grid Position

If user inadvertently changes drone object positions, the RTH feature returns drones to the moved drone object position. This condition is normally masked as the drone objects are tied to the formations all the way until RTH is selected at end of show. Please consider that RTH to the takeoff grid might be more resilient to this user error. Just a suggestion; there may be good reasons it's done the way it is currently.

Formation info viewport overlay placement should be improved

The plugin places an overlay in the top left corner of the 3D viewport that shows the name of the current formation, the min distance and the altitude range of the current frame. This may overlap with Blender's own viewport overlays; for instance, turn on the "Statistics" viewport overlay in the top right corner under the "Show Overlays" dropdown and you'll see what I mean.

The best would be to register our overlay as one that Blender knows about so it could also be toggled from the same overlay dropdown, although I don't know whether that's possible with the Python API. If not, at least we should make sure that it does not overlap Blender's own overlays.

Blender 4.0

The HUD for speed and min distance no longer displayed in Blender 4.0, though the rest of the addon seems to be functioning.

Automatic formation start time

Idea from n1ente on Discord: it should be possible to mark the start time of a formation as "dynamic" so the system would be able to shift it on the timeline if needed. Need to think about how to handle the case when a formation start time is marked as dynamic but there are other formations after it with fixed start times.

Better way to reorganize formations in the storyboard

The current implementation of the storyboard allows shifting formations up or down, but it also makes adjustments to the start and end frames of the formations in a manner that's somewhat unpredictable, in an attempt to keep the storyboard consistent (i.e. storyboard entries should be ordered by start time ascending, and the end time of a formation should be no later than the start time of the next). This should be improved.

One idea that was thrown around on Discord is to provide an "unlock" button that temporarily suspends storyboard validation and lets the designer reorder the formations freely, without changing the start or end times. Transition recalculations (and in general, all operations that require a valid storyboard) would be disabled until the storyboard is locked again, at which point a validation is performed.

Another idea was to convert the start/end times of the storyboard entries into a simple tabular format (one line per formation, three columns: start time, duration, formation name) and showing it in Blender's Text Editor. The designer would then be able to edit the formation order in the Text Editor and commit it back to the "real" storyboard later, and a validation would be performed at the point where the changes are written back to the storyboard.

Feel free to vote for one idea or another, or to come up with alternative proposals in the comments below.

feature request - control drone LED color through assigned vertex's color

vertex color can be controlled by weight paint textures, geometry node trees, and probably a few other ways.

this feature would:

I) increase creative control and facilitate animations due to the parameters that can be exposed and key framed.
II) unlock the ability to create, stack, and re-use presets

[feature request] - light effects, add some blend "color" mode

would be necessary a blend mode where the color of the new light effect is added on top of the others (like normal mode) but the black is "transparent" and has no effect.
use case example:
I have a colored formation (example all drones are red),
and i want a smooth circular blue gradient (mapped as distance from mesh) or an image to move across the formation. but keeping the red base color as "background" for the drones.
With the current blend modes (multiply, overlay etc) the red background or the new effect is always altered.

image
image

Add support for transitions between formations smaller than the fleet size

Steps to reproduce:

  1. Create a storyboard where the first formation after the takeoff has a smaller number of drone slots than the entire fleet size.
  2. Plan a transition to this formation.
  3. Create a new formation that would need the entire fleet.
  4. Add this formation to the end of the storyboard.

Observed result:

The transition planner fails because it only tries to use the drones that already participated in the last formation of the storyboard (which was smaller than the fleet size) and did not try to use the ones that were "left out" from that formation.

Expected result:

A transition should have been planned to the new formation using all the drones.

[feature request] - loops on temporal Output x

about the light effects:
temporal Output x mapping could have a "loop x number of times" option during the total duration of the effect.
So the color change could repeat with different speed depending on the number of loops value
(1 = no loops)

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.