Exporter script is fully automated
This commit is contained in:
parent
78682be732
commit
7ecd958e33
@ -1,15 +1,15 @@
|
||||
# Automation
|
||||
|
||||
## Setup
|
||||
- Add Blender 3.6 to your PATH so it can be run from command-line (putting `blender` in cmd should open Blender 3.6)
|
||||
- Ensure Python is installed on your machine
|
||||
- Install Blender as a Python module (you might have to do this as administrator): `pip install bpy==3.6.0`
|
||||
- Ensure you have Blender 3.6 installed (hopefully at the location: `C:\Program Files\Blender Foundation\Blender 3.6`)
|
||||
- Run the script located at `pipeline/export_all_anims.cmd`
|
||||
|
||||
## Editing
|
||||
|
||||
- Ensure Python is installed on your machine
|
||||
- Ensure you have Visual Studio Code installed
|
||||
- Open this directory in VS Code and install the recommended plugins
|
||||
- Open terminal, `cd` into `pipeline`, and run the following command: `$ git clone https://github.com/Korchy/blender_autocomplete.git`
|
||||
- Your workspace is now set up!
|
||||
|
||||
## Resources
|
||||
- [Blender as a Python Module](https://pypi.org/project/bpy/)
|
||||
|
@ -1,16 +0,0 @@
|
||||
import bpy
|
||||
from bpy.app.handlers import persistent
|
||||
import shutil
|
||||
|
||||
blender_bin = shutil.which("blender")
|
||||
if blender_bin:
|
||||
print("Found:", blender_bin)
|
||||
bpy.app.binary_path = blender_bin
|
||||
else:
|
||||
print("Unable to find blender!")
|
||||
|
||||
@persistent
|
||||
def load_handler(dummy):
|
||||
print("Load Handler", bpy.data.filepath)
|
||||
|
||||
bpy.app.handlers.load_post(load_handler)
|
@ -1 +1,3 @@
|
||||
blender ..\animations\infantry\anims-alan.blend --background --python export_anims.py
|
||||
set PATH=%PATH%;"C:\Program Files\Blender Foundation\Blender 3.6"
|
||||
blender ..\animations\infantry\anims-alan.blend --background --python export_anims.py
|
||||
blender ..\animations\insurrectionist\anims-alan.blend --background --python export_anims.py
|
||||
|
@ -1,5 +1,5 @@
|
||||
import bpy
|
||||
from bpy.types import Collection, LayerCollection, Object, Armature
|
||||
from bpy.types import LayerCollection, Object, NlaTrack
|
||||
|
||||
# Enter object mode
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
@ -19,21 +19,40 @@ def toggle_collection(coll: LayerCollection):
|
||||
bpy.context.view_layer.active_layer_collection = c
|
||||
toggle_collection(bpy.context.view_layer.layer_collection)
|
||||
|
||||
# Find rig to make it active
|
||||
armatureObj: Object = None
|
||||
# Find rig to make it active, and select all objects
|
||||
for objBase in bpy.context.scene.objects:
|
||||
# print(objBase)
|
||||
obj: Object = objBase
|
||||
# print(obj.data)
|
||||
if obj.type == 'ARMATURE':
|
||||
print("FOUND AN ARMATURE")
|
||||
armatureObj = obj
|
||||
obj.select_set(True)
|
||||
bpy.context.active_object
|
||||
print(bpy.context.active_object)
|
||||
#bpy.context.active_object.animation_data.nla_tracks
|
||||
bpy.context.view_layer.objects.active = obj
|
||||
if obj.visible_get():
|
||||
obj.select_set(True)
|
||||
|
||||
exit()
|
||||
|
||||
# EXTREMELY UGLY HACK TO EXIT TWEAK MODE
|
||||
# see: https://blender.stackexchange.com/questions/316547/how-to-override-context-area-using-script-when-running-blender-using-command-lin
|
||||
# and https://blender.stackexchange.com/questions/6101/poll-failed-context-incorrect-example-bpy-ops-view3d-background-image-add
|
||||
def get_view_nla(): # Get any window
|
||||
for window_manager in bpy.data.window_managers:
|
||||
for window in window_manager.windows:
|
||||
for area in window.screen.areas:
|
||||
area.type = 'NLA_EDITOR'
|
||||
for region in area.regions:
|
||||
if region.type == 'WINDOW':
|
||||
return dict(window=window, workspace=window.workspace, screen=window.screen, area=area, region=region)
|
||||
raise Exception('NLA context not found.')
|
||||
|
||||
# Forcibly override context to a window so we can access NLA editor
|
||||
with bpy.context.temp_override(**get_view_nla()):
|
||||
if bpy.context.scene.is_nla_tweakmode:
|
||||
bpy.ops.nla.tweakmode_exit() # Exit tweakmode
|
||||
|
||||
|
||||
# Go through all NLA tracks, unstar them and mute them
|
||||
bpy.context.active_object.animation_data.nla_tracks.active = None # Make track inactive
|
||||
for trackBase in bpy.context.active_object.animation_data.nla_tracks:
|
||||
track: NlaTrack = trackBase
|
||||
track.mute = True # Mute all tracks
|
||||
track.is_solo = False # Disable solo view for all tracks
|
||||
|
||||
# Get export directory
|
||||
path: str = bpy.data.filepath.replace('\\Shelby', '').replace('\\Tommy', '')
|
||||
@ -109,22 +128,4 @@ bpy.ops.pose.transforms_clear() # Clear all transforms
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
|
||||
## FOR DEBUGGING, see https://blender.stackexchange.com/questions/93728/blender-script-run-print-to-console
|
||||
# from bpy import context
|
||||
# import builtins as __builtin__
|
||||
# def console_print(*args, **kwargs):
|
||||
# for a in context.screen.areas:
|
||||
# if a.type == 'CONSOLE':
|
||||
# c = {}
|
||||
# c['area'] = a
|
||||
# c['space_data'] = a.spaces.active
|
||||
# c['region'] = a.regions[-1]
|
||||
# c['window'] = context.window
|
||||
# c['screen'] = context.screen
|
||||
# s = " ".join([str(arg) for arg in args])
|
||||
# for line in s.split("\n"):
|
||||
# bpy.ops.console.scrollback_append(c, text=line)
|
||||
|
||||
# def print(*args, **kwargs):
|
||||
# """Console print() function."""
|
||||
# console_print(*args, **kwargs) # to py consoles
|
||||
# __builtin__.print(*args, **kwargs) # to system console
|
||||
# exit()
|
||||
|
Loading…
Reference in New Issue
Block a user