https://github.com/bblanimation/background-processing
Send taxing Blender operations to the background with subprocess
https://github.com/bblanimation/background-processing
addon blender blender-addon blender-plugin blender-processes blender-python blender-scripts blender3d bpy bpython python3
Last synced: 4 months ago
JSON representation
Send taxing Blender operations to the background with subprocess
- Host: GitHub
- URL: https://github.com/bblanimation/background-processing
- Owner: bblanimation
- License: gpl-3.0
- Created: 2019-01-07T18:21:33.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2020-06-03T04:12:36.000Z (over 5 years ago)
- Last Synced: 2024-05-01T12:15:41.260Z (over 1 year ago)
- Topics: addon, blender, blender-addon, blender-plugin, blender-processes, blender-python, blender-scripts, blender3d, bpy, bpython, python3
- Language: Python
- Homepage:
- Size: 147 KB
- Stars: 6
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# 'Background Processing':
Run blender processes in the background with separate instances of Blender.
[Demo of the Background Processor on YouTube](https://youtu.be/8iIMP1SrHIE)
# Instructions for Use:
* First, add the background processor as a submodule to your addon module
* Write your own background processing scripts
* Background processing scripts will be executed from within a separate Blender instance
* This allows for Blender-only module imports such as bpy and bmesh
* This also allows for access to the source file's blend data (if no existing blend data must be accessed, consider setting `use_blend_file` to False in `JobManager.add_job` API call for efficiency)
* Background processing scripts can report their progress with `update_job_progress` function
* `update_job_progress` takes one float argument from 0.0 to 1.0
* use `update_job_progress` calls judiciously, as the function has a file write cost
* Background processing scripts can access the source file's blend data in two ways
* Set `use_blend_file` to `True` in `JobManager.add_job` API call (may prove costly for large blend files)
* Pass blend data directly to the script via the `passed_data_blocks` parameter of the `JobManager.add_job` API call
* Any blend data passed this way will be available as local blend data in the background processing script
* All blend data passed this way will also be available to the background processing script a `passed_data_blocks` variable
* Background processing scripts should include a `python_data` variable
* `python_data` variable should be set to dictionary containing any necessary data to retrieve
* these data blocks can then be accessed with the `JobManager.get_retrieved_python_data` API call upon job completion.
* Background processing scripts should include a `data_blocks` variable
* `data_blocks` variable should be set to list of Blend data blocks
* The background processor will automatically copy these data blocks to the active instance of Blender upon job completion
* these data blocks can then be accessed with the `JobManager.get_retrieved_data_blocks` API call upon job completion.
* Example use: `JobManager.get_retrieved_data_blocks(job).objects`
* NOTE:
``` Python
dir(JobManager.get_retrieved_data_blocks(job)) = [
'actions',
'armatures',
'brushes',
'cache_files',
'cameras',
'curves',
'fonts',
'grease_pencil',
'groups',
'images',
'ipos',
'lamps',
'lattices',
'linestyles',
'masks',
'materials',
'meshes',
'metaballs',
'movieclips',
'node_groups',
'objects',
'paint_curves',
'palettes',
'particles',
'scenes',
'sounds',
'speakers',
'texts',
'textures',
'worlds',
]
```
* Send scripts to the JobManager for execution
* Jobs can be added from within a separate operator/code block using the following code:
``` Python
from .job_manager import * # relative JobManager import path (current path assumes script is in same root folder as 'JobManager.py')
job = "/tmp/test_script.py" # REPLACE with path to your background processing script
job_manager = JobManager.get_instance()
job_manager.add_job(job)
```
* You'll find the entire background processing API in the Job Manager class (`classes/job_manager.py`)
* See `classes/add_job.py` for an example use of the JobManager class API in a custom operator