"""Read-only comparison of static and Mixamo FBX UVs/materials/textures.""" import json,hashlib from pathlib import Path import bpy import numpy as np from io_scene_fbx import parse_fbx ROOT=Path(__file__).resolve().parents[2] OUT=ROOT/'Tools/output/lmgirl_tpose_studio/material_audit' OUT.mkdir(parents=True,exist_ok=True) def inspect(path): tree,_=parse_fbx.parse(str(path)) objects=next(e for e in tree.elems if e.id==b'Objects') raw=[] for e in objects.elems: if e.id not in (b'Material',b'Texture',b'Video',b'Geometry'):continue item=dict(type=e.id.decode(),name=str(e.props[1])) if e.id==b'Geometry':item['uv_layers']=[dict(name=str(x.id),children=[str(v.id) for v in x.elems]) for x in e.elems if x.id==b'LayerElementUV'] if e.id in (b'Texture',b'Video'):item['files']=[str(x.props) for x in e.elems if x.id in (b'FileName',b'RelativeFilename',b'Filename')];item['embedded_bytes']=sum(len(x.props[0]) for x in e.elems if x.id==b'Content' and x.props and isinstance(x.props[0],bytes)) raw.append(item) bpy.ops.wm.read_factory_settings(use_empty=True) bpy.ops.import_scene.fbx(filepath=str(path),use_anim=False) meshes=[];uv_values=[] for obj in bpy.context.scene.objects: if obj.type!='MESH':continue layers=[] for layer in obj.data.uv_layers: values=np.array([tuple(v.uv) for v in layer.data],dtype='