champions-of-luneraria/Assets/Luneraria/Art/Units/n09.export.json
Martin Stickelbroeck 3ca38a8443 U2 Batch Asset Import
Alle 86 Modelle der Godot-Referenz laufen durch die Blender→FBX-Pipeline
(nach bestandenem Vertical Function Test); jede Einheit zeigt ihr eigenes
Modell.

- Exportmanifest aus den Godot-Manifesten (tools/blender/make_manifest.py):
  Units, Enemies, Props, Characters, Peoples, Buildings, Environment; die
  drei Vergleichs-GLBs als Aliase. Neu in der Pipeline: Tangenten berechnet
  Unity mit MikkTSpace, Generatoren laufen in einer temporären Kopie, die
  Grüne Kluft wird wie das GLB zusammengefasst, Texturen kommen mit.
  1.616 Blender- und 1.247 Unity-Prüfungen grün, zwei Exportläufe
  byteidentisch; Kontaktbögen je Gruppe.
- Einheitenbibliothek nach Godots AssetLibrary: 70 Einträge der
  Einheitengruppen, Figuren mit Skelett ersetzen das starre Modell ihrer ID.
  Starre Modelle werden zur Laufzeit je Material zusammengefasst; Controller
  werden an Ort und Stelle aktualisiert.
- Tests mit allen Modellen: EditMode 11/11, PlayMode 2/2. Vertical Function
  Test Seed 2 DCE95C96556F3A1A und Seed 9 ab Runde 21 7B8E43AEFC0D60C5,
  beide gleich dem Kern (Nachweise mit LUNE_EVIDENCE=u2a-batch; die Belege
  von U2C und U2D bleiben unverändert).
- macOS-Player mit allen Modellen: 158-160 fps in der Übersicht
  (116 Einheiten), 205-207 fps auf der Mid-Lane; Haupt- und Render-Thread
  etwa doppelt so lang wie mit dem Platzhalter, Present-Ausreißer kürzer.
- Befund iCloud Drive: Konfliktkopien ("Name 2.ext") im Build-Cache ließen
  den Build die Einheitenbibliothek mit altem Feldlayout schreiben; der
  Player meldete sharedassets0.assets als beschädigt. LunePlayerBuild
  entfernt solche Kopien vor dem Build und bricht ab, wenn während des
  Builds neue entstehen. Bereits committete Kopien: Controller-Duplikate und
  World/Generated 2.meta entfernt, drei U2D-Benchmarkläufe als -run1 bis
  -run3 benannt.
- Dokumentation: U2-WORLD (Batch-Import), PORT-STATUS (Entscheidungen:
  Modelle direkt in Git, Projektort außerhalb von iCloud Drive), PORT-QA.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 19:10:35 +02:00

1084 lines
18 KiB
JSON

{
"id": "n09",
"group": "Units",
"source": "assets-source/phase4/blend/n09.blend",
"exporter_version": 10,
"blender": "5.2.2 LTS",
"fbx_settings": {
"use_selection": true,
"use_visible": false,
"use_active_collection": false,
"global_scale": 1.0,
"apply_unit_scale": true,
"apply_scale_options": "FBX_SCALE_UNITS",
"axis_forward": "Y",
"axis_up": "Z",
"bake_space_transform": false,
"object_types": [
"ARMATURE",
"EMPTY",
"MESH"
],
"use_mesh_modifiers": true,
"use_mesh_modifiers_render": true,
"mesh_smooth_type": "OFF",
"use_subsurf": false,
"use_mesh_edges": false,
"use_tspace": false,
"use_triangles": false,
"colors_type": "LINEAR",
"prioritize_active_color": true,
"use_custom_props": false,
"add_leaf_bones": false,
"primary_bone_axis": "Y",
"secondary_bone_axis": "X",
"use_armature_deform_only": true,
"armature_nodetype": "NULL",
"bake_anim": true,
"bake_anim_use_all_bones": true,
"bake_anim_use_nla_strips": false,
"bake_anim_use_all_actions": true,
"bake_anim_force_startend_keying": true,
"bake_anim_step": 1.0,
"bake_anim_simplify_factor": 0.0,
"path_mode": "STRIP",
"embed_textures": false,
"batch_mode": "OFF"
},
"checks": [
{
"check": "logical_names_unique",
"ok": true,
"detail": "[]"
},
{
"check": "turn_applied",
"ok": true,
"detail": "[]"
},
{
"check": "units_metric",
"ok": true,
"detail": "METRIC"
},
{
"check": "unit_scale_1",
"ok": true,
"detail": "1.0"
},
{
"check": "no_negative_scale",
"ok": true,
"detail": "{}"
},
{
"check": "object_scale_1",
"ok": true,
"detail": "{}"
},
{
"check": "mesh_names_unique",
"ok": true,
"detail": "['ArmL', 'ArmL_Cuff', 'ArmR', 'ArmR_Cuff', 'Body_CentralFlow', 'Body_ChoirCollar0', 'Body_ChoirCollar1', 'Body_ChoirGem', 'Body_TailL', 'Body_TailR', 'Body_WispL', 'Body_WispR', 'Head_ChoirHorn0_1', 'Head_ChoirHorn0__1', 'Head_ChoirMask0', 'Head_ChoirMask0_Eye1', 'Head_ChoirMask0_Eye_1', 'Head_ChoirMask0_Mouth', 'Head_ChoirWisp0', 'Head_CurledHood', 'Head_Mask', 'Head_Mask_Eye1', 'Head_Mask_Eye_1', 'Head_SingingMouth']"
},
{
"check": "material_slots_filled",
"ok": true,
"detail": "{}"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "{}"
},
{
"check": "no_blend_shapes",
"ok": true,
"detail": "{}"
},
{
"check": "triangles_match_godot",
"ok": true,
"detail": "1314 fbx / 1314 godot"
},
{
"check": "part_names_match_godot",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_match_godot",
"ok": true,
"detail": "largest difference 0.00002 m"
},
{
"check": "no_armature",
"ok": true,
"detail": "[]"
},
{
"check": "forward_marker_unity_plus_z",
"ok": true,
"detail": "[0.0, 0.0, 0.75]"
},
{
"check": "roundtrip_mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "roundtrip_triangles",
"ok": true,
"detail": "1314 / 1314"
},
{
"check": "roundtrip_materials",
"ok": true,
"detail": "[]"
}
],
"source_sha256": "e78f32636c2ecdb26c826315c788fd6e5312fe94b7cc93e27bdc7cbfd40e818d",
"removed_modifiers": 0,
"logical_names": {
"objects": 26,
"materials": 4,
"merged_materials": 0
},
"kind": "rigid",
"fps": 24.0,
"objects": 26,
"meshes": {
"Body_WispL": {
"mesh": "Body_WispL_Mesh",
"triangles": 142,
"vertices": 73,
"ngons": 1,
"materials": [
"SW_nebelchor_secondary_9578CF"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.0151,
0.0259,
-0.1158
],
"max": [
0.2951,
0.9598,
-0.0168
]
}
},
"Body_TailL": {
"mesh": "Body_TailL_Mesh",
"triangles": 118,
"vertices": 61,
"ngons": 1,
"materials": [
"SW_nebelchor_primary_45456F"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
0.1004,
0.0,
-0.1795
],
"max": [
0.3174,
0.8361,
-0.0407
]
}
},
"Body_WispR": {
"mesh": "Body_WispR_Mesh",
"triangles": 142,
"vertices": 73,
"ngons": 1,
"materials": [
"SW_nebelchor_secondary_9578CF"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.2951,
0.0259,
-0.1158
],
"max": [
0.0151,
0.9598,
-0.0168
]
}
},
"Body_TailR": {
"mesh": "Body_TailR_Mesh",
"triangles": 118,
"vertices": 61,
"ngons": 1,
"materials": [
"SW_nebelchor_primary_45456F"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.3174,
0.0,
-0.1795
],
"max": [
-0.1004,
0.8361,
-0.0407
]
}
},
"Body_CentralFlow": {
"mesh": "Body_CentralFlow_Mesh",
"triangles": 94,
"vertices": 49,
"ngons": 1,
"materials": [
"SW_nebelchor_primary_45456F"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.1751,
0.0902,
-0.1045
],
"max": [
0.1513,
0.9773,
0.0734
]
}
},
"Head_Mask": {
"mesh": "Head_Mask_Mesh",
"triangles": 26,
"vertices": 15,
"ngons": 1,
"materials": [
"SW_nebelchor_light_C4D6E5"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.1189,
0.8854,
0.0453
],
"max": [
0.0984,
1.2789,
0.1642
]
}
},
"Head_Mask_Eye_1": {
"mesh": "Head_Mask_Eye_1_Mesh",
"triangles": 14,
"vertices": 9,
"ngons": 0,
"materials": [
"SW_nebelchor_accent_82DBCE"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
0.0271,
1.0699,
0.1519
],
"max": [
0.0779,
1.1248,
0.1642
]
}
},
"Head_Mask_Eye1": {
"mesh": "Head_Mask_Eye1_Mesh",
"triangles": 14,
"vertices": 9,
"ngons": 0,
"materials": [
"SW_nebelchor_accent_82DBCE"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.0779,
1.0699,
0.1519
],
"max": [
-0.0271,
1.1248,
0.1642
]
}
},
"Head_CurledHood": {
"mesh": "Head_CurledHood_Mesh",
"triangles": 118,
"vertices": 61,
"ngons": 1,
"materials": [
"SW_nebelchor_secondary_9578CF"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.2614,
0.9837,
-0.1167
],
"max": [
0.2491,
1.45,
-0.0273
]
}
},
"Head_SingingMouth": {
"mesh": "Head_SingingMouth_Mesh",
"triangles": 20,
"vertices": 12,
"ngons": 0,
"materials": [
"SW_nebelchor_primary_45456F"
],
"uv_layers": [
"UVMap"
],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.0257,
0.9505,
0.1474
],
"max": [
0.0257,
1.0498,
0.1777
]
}
},
"Body_ChoirCollar0": {
"mesh": "Body_ChoirCollar0_Mesh",
"triangles": 22,
"vertices": 13,
"ngons": 1,
"materials": [
"SW_nebelchor_light_C4D6E5"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.205,
0.7624,
-0.0161
],
"max": [
0.205,
0.9756,
0.1519
]
}
},
"Body_ChoirCollar1": {
"mesh": "Body_ChoirCollar1_Mesh",
"triangles": 22,
"vertices": 13,
"ngons": 1,
"materials": [
"SW_nebelchor_secondary_9578CF"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.205,
0.6559,
-0.0161
],
"max": [
0.205,
0.869,
0.1519
]
}
},
"Body_ChoirGem": {
"mesh": "Body_ChoirGem_Mesh",
"triangles": 20,
"vertices": 12,
"ngons": 0,
"materials": [
"SW_nebelchor_accent_82DBCE"
],
"uv_layers": [
"UVMap"
],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.0477,
0.6688,
0.108
],
"max": [
0.0477,
0.8397,
0.1795
]
}
},
"ArmL": {
"mesh": "ArmL_Mesh",
"triangles": 56,
"vertices": 30,
"ngons": 2,
"materials": [
"SW_nebelchor_secondary_9578CF"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
0.0807,
0.6471,
-0.0578
],
"max": [
0.3381,
0.9049,
0.0834
]
}
},
"ArmL_Cuff": {
"mesh": "ArmL_Cuff_Mesh",
"triangles": 84,
"vertices": 44,
"ngons": 0,
"materials": [
"SW_nebelchor_light_C4D6E5"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
0.1476,
0.6536,
0.0275
],
"max": [
0.5438,
0.9838,
0.0703
]
}
},
"ArmR": {
"mesh": "ArmR_Mesh",
"triangles": 56,
"vertices": 30,
"ngons": 2,
"materials": [
"SW_nebelchor_secondary_9578CF"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.3381,
0.6471,
-0.0578
],
"max": [
-0.0807,
0.9049,
0.0834
]
}
},
"ArmR_Cuff": {
"mesh": "ArmR_Cuff_Mesh",
"triangles": 84,
"vertices": 44,
"ngons": 0,
"materials": [
"SW_nebelchor_light_C4D6E5"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.5438,
0.6536,
0.0275
],
"max": [
-0.1476,
0.9838,
0.0703
]
}
},
"Head_ChoirMask0": {
"mesh": "Head_ChoirMask0_Mesh",
"triangles": 26,
"vertices": 15,
"ngons": 1,
"materials": [
"SW_nebelchor_light_C4D6E5"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.4156,
1.1199,
-0.1121
],
"max": [
-0.2853,
1.356,
-0.0407
]
}
},
"Head_ChoirMask0_Eye_1": {
"mesh": "Head_ChoirMask0_Eye_1_Mesh",
"triangles": 14,
"vertices": 9,
"ngons": 0,
"materials": [
"SW_nebelchor_accent_82DBCE"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.3281,
1.2305,
-0.0501
],
"max": [
-0.2976,
1.2635,
-0.0378
]
}
},
"Head_ChoirMask0_Eye1": {
"mesh": "Head_ChoirMask0_Eye1_Mesh",
"triangles": 14,
"vertices": 9,
"ngons": 0,
"materials": [
"SW_nebelchor_accent_82DBCE"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.3911,
1.2305,
-0.0501
],
"max": [
-0.3606,
1.2635,
-0.0378
]
}
},
"Head_ChoirMask0_Mouth": {
"mesh": "Head_ChoirMask0_Mouth_Mesh",
"triangles": 20,
"vertices": 12,
"ngons": 0,
"materials": [
"SW_nebelchor_primary_45456F"
],
"uv_layers": [
"UVMap"
],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.3597,
1.1639,
-0.0538
],
"max": [
-0.3289,
1.2234,
-0.0356
]
}
},
"Head_ChoirWisp0": {
"mesh": "Head_ChoirWisp0_Mesh",
"triangles": 46,
"vertices": 25,
"ngons": 1,
"materials": [
"SW_nebelchor_secondary_9578CF"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.3869,
1.0166,
-0.117
],
"max": [
-0.2666,
1.197,
-0.0808
]
}
},
"Head_ChoirHorn0__1": {
"mesh": "Head_ChoirHorn0__1_Mesh",
"triangles": 22,
"vertices": 13,
"ngons": 1,
"materials": [
"SW_nebelchor_light_C4D6E5"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.3263,
1.2919,
-0.1142
],
"max": [
-0.2016,
1.4429,
-0.0899
]
}
},
"Head_ChoirHorn0_1": {
"mesh": "Head_ChoirHorn0_1_Mesh",
"triangles": 22,
"vertices": 13,
"ngons": 1,
"materials": [
"SW_nebelchor_light_C4D6E5"
],
"uv_layers": [],
"color_attributes": [],
"active_color": null,
"custom_normals": false,
"normals_unit_length": true,
"bad_normals": 0,
"degenerate_triangles": 0,
"shape_keys": 0,
"skinned": false,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.4871,
1.2919,
-0.1142
],
"max": [
-0.3624,
1.4429,
-0.0899
]
}
}
},
"armatures": {},
"empties": {
"Model_n09": [
0.0,
0.0,
0.0
],
"Forward": [
0.0,
0.0,
0.75
]
},
"bounds_unity": {
"min": [
-0.5438,
0.0,
-0.1795
],
"max": [
0.5438,
1.45,
0.1795
]
},
"clips": [],
"expected_from_godot": {
"triangles": 1314,
"bounds_godot": {
"min": [
-0.543777346611023,
0.0,
-0.17949174344539642
],
"max": [
0.543777346611023,
1.4500000476837158,
0.1794917732477188
]
},
"resource_path": "res://assets/models/unit_n09.glb"
},
"meshes_with_ngons": {
"Body_WispL": 1,
"Body_TailL": 1,
"Body_WispR": 1,
"Body_TailR": 1,
"Body_CentralFlow": 1,
"Head_Mask": 1,
"Head_CurledHood": 1,
"Body_ChoirCollar0": 1,
"Body_ChoirCollar1": 1,
"ArmL": 2,
"ArmR": 2,
"Head_ChoirMask0": 1,
"Head_ChoirWisp0": 1,
"Head_ChoirHorn0__1": 1,
"Head_ChoirHorn0_1": 1
},
"meshes_without_uv": [
"ArmL",
"ArmL_Cuff",
"ArmR",
"ArmR_Cuff",
"Body_CentralFlow",
"Body_ChoirCollar0",
"Body_ChoirCollar1",
"Body_TailL",
"Body_TailR",
"Body_WispL",
"Body_WispR",
"Head_ChoirHorn0_1",
"Head_ChoirHorn0__1",
"Head_ChoirMask0",
"Head_ChoirMask0_Eye1",
"Head_ChoirMask0_Eye_1",
"Head_ChoirWisp0",
"Head_CurledHood",
"Head_Mask",
"Head_Mask_Eye1",
"Head_Mask_Eye_1"
],
"triangles": 1314,
"fbx": "Assets/Luneraria/Art/Units/n09.fbx",
"fbx_bytes": 100684,
"ok": true
}