champions-of-luneraria/docs/port/logs/u2a/unity-verify.json
Martin Stickelbroeck 49cb4af407 U2A Blender/FBX Pipeline
Reproduzierbarer Export aus den Blender-Quellen der Godot-Referenz nach FBX,
geprüft auf beiden Seiten; sechs repräsentative Assets vollständig in Unity
verifiziert (normale Einheit g01, Einheit mit Skelett Funkenlanze, Turm
Grenzwacht, Ancient, Schlundkrone, Vegetation/Kartenrequisiten), dazu Bastion,
Kernwacht und Bossgrotte für die Szene.

- tools/blender: Manifest mit Exportregeln je Asset, Exportskript mit Prüfungen
  (Einheiten, Maßstab, Achsen, Vorderseite, Mesh-Namen, Dreiecke, Materialslots,
  Normalen, Tangenten, Vertexfarben, Maße, Root Bone, Bone-Namen, Clips, Blend
  Shapes) gegen die Manifeste der Godot-GLBs, FBX-Rundreise, byteidentische
  Ausgabe (feste Uhrzeit, PYTHONHASHSEED).
- Regeln wie beim GLB-Export: HIGH-RES-Modifikatoren weglassen, logische Namen,
  Skin-Teile zusammenfügen; 180°-Drehung, damit die Vorderseite nach Unitys
  Achsen-Bake auf +Z liegt (Unity = (-x, y, z) der Godot-Koordinaten).
- Unity: Importregeln (Postprocessor), Verifier gegen das Blender-Protokoll,
  Vorschaubilder; URP-Asset, Linear-Farbraum, URP-Settings nach
  Assets/Luneraria/Settings/Rendering.
- Ergebnis: 176/176 Blender-Prüfungen, 128/128 Unity-Prüfungen, Dreiecke gleich
  den Godot-GLBs, Maße auf 0,05 mm.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:41:24 +02:00

968 lines
22 KiB
JSON

{
"unity": "6000.3.20f1",
"ok": true,
"assets": [
{
"id": "ancient",
"kind": "static",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Buildings/ancient.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"ancient pos (0.0000, 0.0000, 0.0000) rot (0.00, 0.00, 0.00) scale (1.0000, 1.0000, 1.0000)\""
},
{
"check": "node_transforms_axis_clean",
"ok": true,
"detail": "[]"
},
{
"check": "mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "triangles",
"ok": true,
"detail": "\"19032 unity / 19032 blender \""
},
{
"check": "material_slots",
"ok": true,
"detail": "[]"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "[]"
},
{
"check": "tangents_where_uv",
"ok": true,
"detail": "[]"
},
{
"check": "uvs_where_blender_has_uv",
"ok": true,
"detail": "[]"
},
{
"check": "vertex_colors",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_axes_scale",
"ok": true,
"detail": "\"largest difference 0.00005 m; unity (-4.204, -0.988, -4.000) (4.204, 10.367, 4.000)\""
}
],
"facts": {
"triangles": 19032,
"renderers": 27,
"meshes_without_uv_and_tangents": 14,
"bounds_min": [
-4.20353031,
-0.9881463,
-4.0
],
"bounds_max": [
4.20352936,
10.3668232,
4.0
]
}
},
{
"id": "bastion",
"kind": "static",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Buildings/bastion.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"bastion pos (0.0000, 0.0000, 0.0000) rot (0.00, 0.00, 0.00) scale (1.0000, 1.0000, 1.0000)\""
},
{
"check": "node_transforms_axis_clean",
"ok": true,
"detail": "[]"
},
{
"check": "mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "triangles",
"ok": true,
"detail": "\"9364 unity / 9364 blender \""
},
{
"check": "material_slots",
"ok": true,
"detail": "[]"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "[]"
},
{
"check": "tangents_where_uv",
"ok": true,
"detail": "[]"
},
{
"check": "uvs_where_blender_has_uv",
"ok": true,
"detail": "[]"
},
{
"check": "vertex_colors",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_axes_scale",
"ok": true,
"detail": "\"largest difference 0.00005 m; unity (-2.116, -0.389, -2.539) (2.901, 7.161, 1.950)\""
}
],
"facts": {
"triangles": 9364,
"renderers": 11,
"meshes_without_uv_and_tangents": 6,
"bounds_min": [
-2.11555481,
-0.3890798,
-2.538877
],
"bounds_max": [
2.90077925,
7.160508,
1.94963574
]
}
},
{
"id": "bossgrotte",
"kind": "static",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Buildings/bossgrotte.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"bossgrotte pos (0.0000, 0.0000, 0.0000) rot (0.00, 0.00, 0.00) scale (1.0000, 1.0000, 1.0000)\""
},
{
"check": "node_transforms_axis_clean",
"ok": true,
"detail": "[]"
},
{
"check": "mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "triangles",
"ok": true,
"detail": "\"15182 unity / 15182 blender \""
},
{
"check": "material_slots",
"ok": true,
"detail": "[]"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "[]"
},
{
"check": "tangents_where_uv",
"ok": true,
"detail": "[]"
},
{
"check": "uvs_where_blender_has_uv",
"ok": true,
"detail": "[]"
},
{
"check": "vertex_colors",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_axes_scale",
"ok": true,
"detail": "\"largest difference 0.00004 m; unity (-7.777, -1.930, -10.465) (10.544, 7.693, 7.798)\""
}
],
"facts": {
"triangles": 15182,
"renderers": 12,
"meshes_without_uv_and_tangents": 4,
"bounds_min": [
-7.77746248,
-1.93,
-10.4646072
],
"bounds_max": [
10.5441828,
7.69265556,
7.79764366
]
}
},
{
"id": "grenzwacht",
"kind": "static",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Buildings/grenzwacht.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"grenzwacht pos (0.0000, 0.0000, 0.0000) rot (0.00, 0.00, 0.00) scale (1.0000, 1.0000, 1.0000)\""
},
{
"check": "node_transforms_axis_clean",
"ok": true,
"detail": "[]"
},
{
"check": "mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "triangles",
"ok": true,
"detail": "\"6516 unity / 6516 blender \""
},
{
"check": "material_slots",
"ok": true,
"detail": "[]"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "[]"
},
{
"check": "tangents_where_uv",
"ok": true,
"detail": "[]"
},
{
"check": "uvs_where_blender_has_uv",
"ok": true,
"detail": "[]"
},
{
"check": "vertex_colors",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_axes_scale",
"ok": true,
"detail": "\"largest difference 0.00005 m; unity (-2.258, -0.065, -2.553) (1.966, 6.060, 1.368)\""
}
],
"facts": {
"triangles": 6516,
"renderers": 7,
"meshes_without_uv_and_tangents": 2,
"bounds_min": [
-2.25751829,
-0.06533188,
-2.55256557
],
"bounds_max": [
1.96584618,
6.060136,
1.36833835
]
}
},
{
"id": "kernwacht",
"kind": "static",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Buildings/kernwacht.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"kernwacht pos (0.0000, 0.0000, 0.0000) rot (0.00, 0.00, 0.00) scale (1.0000, 1.0000, 1.0000)\""
},
{
"check": "node_transforms_axis_clean",
"ok": true,
"detail": "[]"
},
{
"check": "mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "triangles",
"ok": true,
"detail": "\"9224 unity / 9224 blender \""
},
{
"check": "material_slots",
"ok": true,
"detail": "[]"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "[]"
},
{
"check": "tangents_where_uv",
"ok": true,
"detail": "[]"
},
{
"check": "uvs_where_blender_has_uv",
"ok": true,
"detail": "[]"
},
{
"check": "vertex_colors",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_axes_scale",
"ok": true,
"detail": "\"largest difference 0.00004 m; unity (-6.076, -2.396, -2.194) (2.396, 8.330, 1.813)\""
}
],
"facts": {
"triangles": 9224,
"renderers": 9,
"meshes_without_uv_and_tangents": 2,
"bounds_min": [
-6.07622528,
-2.39588761,
-2.19388914
],
"bounds_max": [
2.39623713,
8.33,
1.81258774
]
}
},
{
"id": "funkenlanze",
"kind": "skinned",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Characters/funkenlanze.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"funkenlanze pos (0.0000, 0.0000, 0.0000) rot (0.00, 0.00, 0.00) scale (1.0000, 1.0000, 1.0000)\""
},
{
"check": "node_transforms_axis_clean",
"ok": true,
"detail": "[]"
},
{
"check": "mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "triangles",
"ok": true,
"detail": "\"24036 unity / 24036 blender \""
},
{
"check": "material_slots",
"ok": true,
"detail": "[]"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "[]"
},
{
"check": "tangents_where_uv",
"ok": true,
"detail": "[]"
},
{
"check": "uvs_where_blender_has_uv",
"ok": true,
"detail": "[]"
},
{
"check": "vertex_colors",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_axes_scale",
"ok": true,
"detail": "\"largest difference 0.00005 m; unity (-0.565, -0.010, -0.295) (0.430, 2.021, 1.435)\""
},
{
"check": "skinned_mesh",
"ok": true,
"detail": "1"
},
{
"check": "bone_names FunkenBody",
"ok": true,
"detail": "[]"
},
{
"check": "root_bone FunkenBody",
"ok": true,
"detail": "\"Root\""
},
{
"check": "generic_avatar",
"ok": true,
"detail": "\"funkenlanzeAvatar\""
},
{
"check": "clips",
"ok": true,
"detail": "[]"
}
],
"facts": {
"triangles": 24036,
"renderers": 1,
"meshes_without_uv_and_tangents": 0,
"bounds_min": [
-0.5651692,
-0.0104093477,
-0.2945487
],
"bounds_max": [
0.43,
2.02119541,
1.43500006
],
"clips": [
{
"name": "ability",
"length": 1.3,
"loop": false,
"events": 1
},
{
"name": "attack_a",
"length": 1.3,
"loop": false,
"events": 1
},
{
"name": "attack_b",
"length": 1.3,
"loop": false,
"events": 1
},
{
"name": "death",
"length": 2.0,
"loop": false,
"events": 0
},
{
"name": "hit",
"length": 0.5,
"loop": false,
"events": 0
},
{
"name": "idle",
"length": 3.0,
"loop": true,
"events": 0
},
{
"name": "start",
"length": 0.4,
"loop": false,
"events": 0
},
{
"name": "stop",
"length": 0.4,
"loop": false,
"events": 0
},
{
"name": "walk",
"length": 1.2,
"loop": true,
"events": 0
}
]
}
},
{
"id": "schlundkrone",
"kind": "skinned",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Characters/schlundkrone.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"schlundkrone pos (0.0000, 0.0000, 0.0000) rot (0.00, 0.00, 0.00) scale (1.0000, 1.0000, 1.0000)\""
},
{
"check": "node_transforms_axis_clean",
"ok": true,
"detail": "[]"
},
{
"check": "mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "triangles",
"ok": true,
"detail": "\"5712 unity / 5712 blender \""
},
{
"check": "material_slots",
"ok": true,
"detail": "[]"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "[]"
},
{
"check": "tangents_where_uv",
"ok": true,
"detail": "[]"
},
{
"check": "uvs_where_blender_has_uv",
"ok": true,
"detail": "[]"
},
{
"check": "vertex_colors",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_axes_scale",
"ok": true,
"detail": "\"largest difference 0.00005 m; unity (-1.327, 0.005, -0.553) (1.231, 3.318, 0.925)\""
},
{
"check": "skinned_mesh",
"ok": true,
"detail": "1"
},
{
"check": "bone_names SchlundkroneBody",
"ok": true,
"detail": "[]"
},
{
"check": "root_bone SchlundkroneBody",
"ok": true,
"detail": "\"Root\""
},
{
"check": "generic_avatar",
"ok": true,
"detail": "\"schlundkroneAvatar\""
},
{
"check": "clips",
"ok": true,
"detail": "[]"
}
],
"facts": {
"triangles": 5712,
"renderers": 1,
"meshes_without_uv_and_tangents": 0,
"bounds_min": [
-1.32726932,
0.00534708425,
-0.5531612
],
"bounds_max": [
1.23073983,
3.31821656,
0.9253263
],
"clips": [
{
"name": "ability",
"length": 1.3,
"loop": false,
"events": 0
},
{
"name": "attack_a",
"length": 1.3,
"loop": false,
"events": 1
},
{
"name": "attack_b",
"length": 1.3,
"loop": false,
"events": 1
},
{
"name": "death",
"length": 2.2,
"loop": false,
"events": 0
},
{
"name": "hit",
"length": 0.5,
"loop": false,
"events": 0
},
{
"name": "idle",
"length": 3.0,
"loop": true,
"events": 0
},
{
"name": "roar",
"length": 2.0,
"loop": false,
"events": 0
},
{
"name": "start",
"length": 0.4,
"loop": false,
"events": 0
},
{
"name": "stop",
"length": 0.4,
"loop": false,
"events": 0
},
{
"name": "victory",
"length": 2.0,
"loop": false,
"events": 0
},
{
"name": "walk",
"length": 1.6,
"loop": true,
"events": 0
}
]
}
},
{
"id": "map_props",
"kind": "static",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Environment/map_props.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"map_props pos (0.0000, 0.0000, 0.0000) rot (0.00, 0.00, 0.00) scale (1.0000, 1.0000, 1.0000)\""
},
{
"check": "node_transforms_axis_clean",
"ok": true,
"detail": "[]"
},
{
"check": "mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "triangles",
"ok": true,
"detail": "\"7338 unity / 7338 blender \""
},
{
"check": "material_slots",
"ok": true,
"detail": "[]"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "[]"
},
{
"check": "tangents_where_uv",
"ok": true,
"detail": "[]"
},
{
"check": "uvs_where_blender_has_uv",
"ok": true,
"detail": "[]"
},
{
"check": "vertex_colors",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_axes_scale",
"ok": true,
"detail": "\"largest difference 0.00002 m; unity (-7.368, -1.300, -3.900) (7.455, 5.244, 3.900)\""
}
],
"facts": {
"triangles": 7338,
"renderers": 15,
"meshes_without_uv_and_tangents": 15,
"bounds_min": [
-7.368419,
-1.3,
-3.90000057
],
"bounds_max": [
7.455483,
5.244,
3.90000057
]
}
},
{
"id": "g01",
"kind": "rigid",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Units/g01.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"g01 pos (0.0000, 0.0000, 0.0000) rot (0.00, 0.00, 0.00) scale (1.0000, 1.0000, 1.0000)\""
},
{
"check": "node_transforms_axis_clean",
"ok": true,
"detail": "[]"
},
{
"check": "mesh_names",
"ok": true,
"detail": "[]"
},
{
"check": "triangles",
"ok": true,
"detail": "\"79780 unity / 79780 blender \""
},
{
"check": "material_slots",
"ok": true,
"detail": "[]"
},
{
"check": "normals_unit_length",
"ok": true,
"detail": "[]"
},
{
"check": "tangents_where_uv",
"ok": true,
"detail": "[]"
},
{
"check": "uvs_where_blender_has_uv",
"ok": true,
"detail": "[]"
},
{
"check": "vertex_colors",
"ok": true,
"detail": "[]"
},
{
"check": "bounds_axes_scale",
"ok": true,
"detail": "\"largest difference 0.00004 m; unity (-0.792, 0.000, -0.447) (0.792, 1.350, 0.447)\""
},
{
"check": "forward_is_plus_z",
"ok": true,
"detail": "\"(0.000, 0.000, 0.750)\""
}
],
"facts": {
"triangles": 79780,
"renderers": 131,
"meshes_without_uv_and_tangents": 38,
"bounds_min": [
-0.792443752,
0.0,
-0.447301447
],
"bounds_max": [
0.7924438,
1.35,
0.447301567
]
}
}
]
}