Ship the WeChat hot-update catalogs and the camp, TideWhale T2, UI atlas, and animation-lab work.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
"""Inventory local Mixamo FBX files without editing or exporting the inputs."""
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import bpy
|
||||
|
||||
src, out = map(Path, sys.argv[sys.argv.index('--')+1:])
|
||||
results = []
|
||||
for path in sorted(src.glob('*.fbx')):
|
||||
bpy.ops.wm.read_factory_settings(use_empty=True)
|
||||
bpy.ops.import_scene.fbx(filepath=str(path))
|
||||
item = {'file': str(path), 'fps': bpy.context.scene.render.fps, 'objects': [],
|
||||
'actions': [{'name': a.name, 'frames': list(a.frame_range)} for a in bpy.data.actions]}
|
||||
for obj in bpy.context.scene.objects:
|
||||
entry = {'name': obj.name, 'type': obj.type, 'matrix_world': [list(row) for row in obj.matrix_world]}
|
||||
if obj.type == 'ARMATURE':
|
||||
entry['bones'] = {b.name: {'head': list(obj.matrix_world @ b.head_local), 'tail': list(obj.matrix_world @ b.tail_local),
|
||||
'parent': b.parent.name if b.parent else None} for b in obj.data.bones}
|
||||
entry['action'] = obj.animation_data.action.name if obj.animation_data and obj.animation_data.action else None
|
||||
elif obj.type == 'MESH':
|
||||
coords = [obj.matrix_world @ v.co for v in obj.data.vertices]
|
||||
entry.update(vertices=len(coords), triangles=sum(len(p.vertices)-2 for p in obj.data.polygons),
|
||||
bounds=[[min(p[i] for p in coords) for i in range(3)], [max(p[i] for p in coords) for i in range(3)]],
|
||||
groups=len(obj.vertex_groups), modifiers=[{'type': m.type, 'target': m.object.name if m.type == 'ARMATURE' and m.object else None} for m in obj.modifiers])
|
||||
item['objects'].append(entry)
|
||||
results.append(item)
|
||||
print('INVENTORY', path.name, item['fps'], item['actions'], [(o['type'], o['name'], o.get('triangles'), len(o.get('bones', {}))) for o in item['objects']])
|
||||
out.parent.mkdir(parents=True, exist_ok=True)
|
||||
out.write_text(json.dumps(results, indent=2), encoding='utf-8')
|
||||
Reference in New Issue
Block a user