Make scripted visualizations in blender

Overview

Scripted visualizations in blender

The goal of this project is to script 3D scientific visualizations using blender.

To achieve this, we aim to bring together blender's powerful visualization toolkit with Anaconda's scientific computing and package management capabilities. For example, the code in ./apps/concepts/fourier_signal_composition.py was used to generate the following visualization.

Frequency sweep illustration

Getting Started

See the detailed setup instructions at the end of the file.

Contributing

This project is still a work in progress. Contributions and feedback are welcome!

Authors

License

Files in the directories apps and illustrations are copyright praneethnamburi.

The general purpose blender scripting code (bpn, pntools) is under the MIT license.

Acknowledgments

  • All the wonderful people that make open source software
  • Inspiration - 3blue1brown's videos and pedagogical clarity

Setup instructions

These are detailed instructions that worked for me on a windows 10 laptop.

blender+Anaconda+VSCode

  1. Download blender (get the zip file, NOT a binary installer), or just follow this link: https://builder.blender.org/download/
  2. Unzip to C:\blender\2.93.0 (which has a folder called 2.93)
  3. Open the python console within blender, and check the python version
    • e.g. 3.9.2
  4. Delete the python folder and all its contents (C:\blender\2.93.0\2.93\python)
  5. Install Anaconda (NOT miniconda), and open anaconda prompt with admin privileges
    • Make sure you have "C:\Users\Praneeth\anaconda3\condabin" in the system path
    • On windows, check the Path variable in the 'System Variables' box when editing environment variables
  6. Clone this repository, and the dependency to your workspace (make sure git is installed and added to your system path)
  7. Create an anaconda environment using the following commands:
    • Recommended method:
      • conda create -n blender293 python=3.9.2 numpy scipy pandas jupyter ipython matplotlib blinker scikit-learn
      • conda activate blender293
      • conda install -c conda-forge pybullet multiprocess pysimplegui
      • pip install decord imageio imageio-ffmpeg ffmpeg-python pytube ahrs urdfpy pint soundfile celluloid
    • Alternate method: Create an anaconda environment using the _requirements.yml file (simpler, but doesn't always work)
      • conda env update -f requirements.yml
      • Make sure to wait until it finishes running. It might appear stuck when installing pip packages. You might see a temporary text file created by conda in your current directory, for example "condaenv.p5qt3m3s.requirements.txt". Conda has finished doing its job when this file is deleted.
      • conda activate blender293
  8. Install VSCode and activate the environment from within VSCode's command line
  9. Call blender from the command line. The idea is to pass an extra argument while launching blender to set the path the python we want to use.
    • C:\blender\2.93.0\2.93\blender.exe --env-system-python "C:\Users\Praneeth\.conda\envs\blender293"
    • C:\blender\2.93.0\2.93\blender.exe --env-system-python "C:\Users\Praneeth\anaconda3\envs\blender293"
    • Remember to use double quotes if there is a space in the path!
    • If this works, you're good to go! Rest of the steps make are meant to make your life easier in the long run.
    • You should be able to install additional packages using conda and import them in the blender console.
  10. Recommended: Add the path to this repository to your python path. For example, create a 'paths.pth' file, open it in notepad, and type the following lines into it:
    • C:\dev\blender-ScritpViz
    • C:\dev\pn-utilities
    • Save this as C:\Users\Praneeth\anaconda3\envs\blender293\Lib\site-packages\paths.pth

Troubleshooting:

temp.yml, and check which packages failed to install. If it is pybullet, then it is probably because it needs Visual C++ 14. You can install Visual Studio Community edition (if you have the space, or perhaps the redistributable VC++ also works, I haven't tested it.)">
- A useful tip is to check if you're able to find the correct python, pip, conda and blender commands from your command prompt. Most of the issues I encountered had something to do with the correct paths.
- Use 'where blender' in the windows command prompt inside VSCode
- Result: C:\\blender\\2.93.0\\blender.exe
- where python
- C:\\Users\\Praneeth\\.conda\\envs\\blender293\\python.exe
- where conda
- C:\\ProgramData\\Anaconda3\\condabin\\conda.bat
- Check VSCode settings - 
  Add these settings in VSCode (to your workspace) - Modify this example
     -  "settings": {
           "terminal.integrated.env.windows": {
              "PATH": "C:\\blender\\2.83.0;C:\\Users\\Praneeth\\.conda\\envs\\blender2830;C:\\Users\\Praneeth\\.conda\\envs\\blender2830\\Library\\mingw-w64\\bin;C:\\Users\\Praneeth\\.conda\\envs\\blender2830\\Library\\usr\\bin;C:\\Users\\Praneeth\\.conda\\envs\\blender2830\\Library\\bin;C:\\Users\\Praneeth\\.conda\\envs\\blender2830\\Scripts;C:\\Users\\Praneeth\\.conda\\envs\\blender2830\\bin;C:\\ProgramData\\Anaconda3\\condabin;*OTHER THINGS IN YOUR PATH*,
           },
           "python.pythonPath": "C:\\Users\\Praneeth\\.conda\\envs\\blender2830\\python.exe",
        },
- If conda env create -f _requirements.yml fails, activate the environment, and use conda env export > temp.yml, and check which packages failed to install. If it is pybullet, then it is probably because it needs Visual C++ 14. You can install Visual Studio Community edition (if you have the space, or perhaps the redistributable VC++ also works, I haven't tested it.)

Current workflow

  1. Start VSCode
  2. Activatec conda environment from the terminal
    • conda activate blender293
  3. Start blender
    • C:\blender\2.93.0\2.93\blender.exe --env-system-python "C:\Users\Praneeth\.conda\envs\blender293"

Folder structure

_auth: Authentication

This folder contains authentication keys for interfacing with applications. Don't commit this when working with multiple people.

_dev: Developer notes

Notes for development and learning during the course of the project. _requirements_topLevel.txt is meant to help with python's package management. It is a good idea to add this to source control when developing with multiple people, but this will eventually disappear from distribution.

_temp: Temporary folder

Local cache for storing intermediate data generated by the software.

apps

Applications that use the main package bpn, and supporting package pntools. See License.

bpn

This folder contains the core scripts for using core module has wrappers around blender objects, divided into three types:

  1. Thing - class that initializes all wrappers
  2. Object, Mesh, Collection, GreasePencil - wrappers around bpy.data.(*)
  3. MeshObject, GreasePencilObject - Initialize object + data
    • Each of these classes have analogs in the new module (mesh, pencil)
    • The user should only need to interact with core classes through functions in the new module utils.get is the dispatcher that automatically creates objects from the appropriate classes in the core module.

names are very important in bpn. We use names to insulate bpn from bpy. That means, bpn tries very hard not to keep a copy of things from bpy. Instead, it tries to get the appropriate information from bpy when needed. names determine the interaction between bpy and bpn.

*args are for the 'new' function to create a new blender data instance *kwargs are for initializing that instance inside bpy.data.(type).(instance)

Objects and lights need to pass one argument through *args. I did not set it to have the flexibility of initializing empty objects with Nonetype. Classes inherited from Object also send *args up to Thing class (e.g. MeshObject, and GreasePencilObject) Rest of them ONLY send kwargs for initialization.

Modules vef, trf and env currently do not depend on any other files within bpn. env requires blender and therefore, will stay within bpn, but the other two can become their own packages that bpn uses. Perhaps move them to pntools?

pntools

General python tools that were developed with this proejct, but can generalize beyond this project.

bpn_init.py

The purpose is to bring bpn's functionality into blender's python console with one command. At the blender console, type from bpn_init import *

Owner
Praneeth Namburi
Movement Research and Education
Praneeth Namburi
Generate graphs with NetworkX, natively visualize with D3.js and pywebview

webview_d3 This is some PoC code to render graphs created with NetworkX natively using D3.js and pywebview. The main benifit of this approac

byt3bl33d3r 68 Aug 18, 2022
HW 02 for CS40 - matplotlib practice

HW 02 for CS40 - matplotlib practice project instructions https://github.com/mikeizbicki/cmc-csci040/tree/2021fall/hw_02 Drake Lyric Analysis Bar Char

13 Oct 27, 2021
Learn Data Science with focus on adding value with the most efficient tech stack.

DataScienceWithPython Get started with Data Science with Python An engaging journey to become a Data Scientist with Python TL;DR Download all Jupyter

Learn Python with Rune 110 Dec 22, 2022
A python-generated website for visualizing the novel coronavirus (COVID-19) data for Greece.

COVID-19-Greece A python-generated website for visualizing the novel coronavirus (COVID-19) data for Greece. Data sources Data provided by Johns Hopki

Isabelle Viktoria Maciohsek 23 Jan 03, 2023
Learning Convolutional Neural Networks with Interactive Visualization.

CNN Explainer An interactive visualization system designed to help non-experts learn about Convolutional Neural Networks (CNNs) For more information,

Polo Club of Data Science 6.3k Jan 01, 2023
Use Perspective to create the chart for the trader’s dashboard

Task Overview | Installation Instructions | Link to Module 3 Introduction Experience Technology at JP Morgan Chase Try out what real work is like in t

Abdulazeez Jimoh 1 Jan 22, 2022
Log visualizer for whirl-framework

Lumberjack Log visualizer for whirl-framework Установка pip install -r requirements.txt Как пользоваться python3 lumberjack.py -l путь до лога -o

Vladimir Malinovskii 2 Dec 19, 2022
Interactive Dashboard for Visualizing OSM Data Change

Dashboard and intuitive data downloader for more interactive experience with interpreting osm change data.

1 Feb 20, 2022
This is a place where I'm playing around with pandas to analyze data in a csv/excel file.

pandas-csv-excel-analysis This is a place where I'm playing around with pandas to analyze data in a csv/excel file. 0-start A very simple cheat sheet

Chuqin 3 Oct 05, 2022
PanGraphViewer -- show panenome graph in an easy way

PanGraphViewer -- show panenome graph in an easy way Table of Contents Versions and dependences Desktop-based panGraphViewer Library installation for

16 Dec 17, 2022
Lightweight, extensible data validation library for Python

Cerberus Cerberus is a lightweight and extensible data validation library for Python. v = Validator({'name': {'type': 'string'}}) v.validate({

eve 2.9k Dec 27, 2022
This is a learning tool and exploration app made using the Dash interactive Python framework developed by Plotly

Support Vector Machine (SVM) Explorer This app has been moved here. This repo is likely outdated and will not be updated. This is a learning tool and

Plotly 150 Nov 03, 2022
Visualize tensors in a plain Python REPL using Sparklines

Visualize tensors in a plain Python REPL using Sparklines

Shawn Presser 43 Sep 03, 2022
The interactive graphing library for Python (includes Plotly Express) :sparkles:

plotly.py Latest Release User forum PyPI Downloads License Data Science Workspaces Our recommended IDE for Plotly’s Python graphing library is Dash En

Plotly 12.7k Jan 05, 2023
Sky attention heatmap of submissions to astrometry.net

astroheat Installation Requires Python 3.6+, Tested with Python 3.9.5 Install library dependencies pip install -r requirements.txt The program require

4 Jun 20, 2022
A site that displays up to date COVID-19 stats, powered by fastpages.

https://covid19dashboards.com This project was built with fastpages Background This project showcases how you can use fastpages to create a static das

GitHub 1.6k Jan 07, 2023
A shimmer pre-load component for Plotly Dash

dash-loading-shimmer A shimmer pre-load component for Plotly Dash Installation Get it with pip: pip install dash-loading-extras Or maybe you prefer Pi

Lucas Durand 4 Oct 12, 2022
Glue is a python project to link visualizations of scientific datasets across many files.

Glue Glue is a python project to link visualizations of scientific datasets across many files. Click on the image for a quick demo: Features Interacti

675 Dec 09, 2022
MPL Plotter is a Matplotlib based Python plotting library built with the goal of delivering publication-quality plots concisely.

MPL Plotter is a Matplotlib based Python plotting library built with the goal of delivering publication-quality plots concisely.

Antonio López Rivera 162 Nov 11, 2022
A flexible tool for creating, organizing, and sharing visualizations of live, rich data. Supports Torch and Numpy.

Visdom A flexible tool for creating, organizing, and sharing visualizations of live, rich data. Supports Python. Overview Concepts Setup Usage API To

FOSSASIA 9.4k Jan 07, 2023