Pilot für eine generierte Figur: der Kohlenbeißer g01 kommt als Meshy-Ergebnis in den Port und ersetzt dort das Phase-4-Modell. Eine Figur genügt, um Pipeline, Bild und Leistung zu bewerten; Anatomie, Gesichter und Haare bleiben Künstler-Sculpts oder lizenzierte Packs (Vorgabe vom 1. Oktober). - Meshy-Pipeline unter tools/meshy/: API-Client (meshy.py, Ledger, Schlüssel nie geloggt) und Blender-Generator (build_figure.py) aus den unveränderten Downloads in assets-source/meshy/g01/. Export über den Manifest-Eintrag kohlenbeisser mit "replaces": "g01"; LuneUnitLibraryBuilder hängt die Figur zusätzlich unter der Godot-ID ein. - UV-Material AI_Kohlenbeisser (Familie authored): die Karten der Figur selbst, Lava-Glut aus der Albedo-Alpha (Meshy 7.1 ohne Emission-Map) mit _Glow 1,25. - Schatten ohne Normalen-Versatz (LuneShadowBias, _ShadowNormalScale 0): die UV-Naht-Kopien tragen geknickte Normalen; URP ApplyShadowBias zog helle Nähte durch den Schatten. Die Figur wirft nur mit Tiefen-Bias. - GPU-Batched-Skinning (PlayerSettings.meshDeformation, LuneProjectSetup): 35 Meshy-Kohlenbeißer kosteten mit CPU-Skinning rund 1 ms Haupt- und 1,7 ms Render-Thread je Bild. - LuneBenchmark: -luneBenchmarkRound und -luneBenchmarkArmy (Figuren-Stress). LuneAssetPreview: LUNE_ONLY für Vorher/Nachher, Trefferframe aus der Kontaktzeit des Manifests. FigureViewsTests (Explicit) für die vier Spielmomente der Figur. - Tests: EditMode 29/29, PlayMode 14/14 (6 Explicit), Verify 718/0, Player-Selbsttest 30/30, Kerntests 457/457, Fingerabdrücke unverändert (DCE95C96556F3A1A, 7B8E43AEFC0D60C5). - Leistung (A/B im selben Fenster, 35x g01): Meshy -21 % Mid (109,7 zu 138,8) und -13 % Karte (91,7 zu 105,6) gegenüber Phase-4. GPU-Skinning hebt Mid um 7-27 % und entlastet Haupt- und Render-Thread. Standard-Partie ab Runde 21 ohne g01 im Bild: drei Varianten bis 6 %. - Doku: U5-VISUAL (U5.5), PORT-QA, PORT-STATUS, KNOWN-BEHAVIOR-DIFFERENCES; Bilder screenshots/u5.5/ und u5.5-gpu/, Rohdaten logs/u5.5/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
446 lines
7.5 KiB
JSON
446 lines
7.5 KiB
JSON
{
|
|
"id": "kohlenbeisser",
|
|
"group": "Characters",
|
|
"source": "tools/meshy/build_figure.py",
|
|
"exporter_version": 11,
|
|
"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": "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": "['KohlenbeisserBody']"
|
|
},
|
|
{
|
|
"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": "20714 fbx / 20714 godot"
|
|
},
|
|
{
|
|
"check": "one_armature",
|
|
"ok": true,
|
|
"detail": "['KohlenbeisserRig']"
|
|
},
|
|
{
|
|
"check": "single_root_bone",
|
|
"ok": true,
|
|
"detail": "['Root']"
|
|
},
|
|
{
|
|
"check": "root_bone_name",
|
|
"ok": true,
|
|
"detail": "['Root']"
|
|
},
|
|
{
|
|
"check": "bone_count_match_godot",
|
|
"ok": true,
|
|
"detail": "25 / 25"
|
|
},
|
|
{
|
|
"check": "bone_names_portable",
|
|
"ok": true,
|
|
"detail": "[]"
|
|
},
|
|
{
|
|
"check": "skinned_meshes_present",
|
|
"ok": true,
|
|
"detail": ""
|
|
},
|
|
{
|
|
"check": "clips_match_godot",
|
|
"ok": true,
|
|
"detail": "[]"
|
|
},
|
|
{
|
|
"check": "required_clips_present",
|
|
"ok": true,
|
|
"detail": "[]"
|
|
},
|
|
{
|
|
"check": "roundtrip_mesh_names",
|
|
"ok": true,
|
|
"detail": "[]"
|
|
},
|
|
{
|
|
"check": "roundtrip_triangles",
|
|
"ok": true,
|
|
"detail": "20714 / 20714"
|
|
},
|
|
{
|
|
"check": "roundtrip_materials",
|
|
"ok": true,
|
|
"detail": "[]"
|
|
},
|
|
{
|
|
"check": "roundtrip_bones",
|
|
"ok": true,
|
|
"detail": "[]"
|
|
},
|
|
{
|
|
"check": "roundtrip_clips",
|
|
"ok": true,
|
|
"detail": "['ability', 'attack_a', 'attack_b', 'death', 'hit', 'idle', 'walk']"
|
|
}
|
|
],
|
|
"generator": {
|
|
"clips": {
|
|
"idle": {
|
|
"source": "Idle",
|
|
"frames": [
|
|
0.0,
|
|
96.0
|
|
],
|
|
"seconds": 4.0,
|
|
"loop": true,
|
|
"contact_seconds": -1.0
|
|
},
|
|
"walk": {
|
|
"source": "Slow_Orc_Walk",
|
|
"frames": [
|
|
0.0,
|
|
132.0
|
|
],
|
|
"seconds": 2.7917,
|
|
"loop": true,
|
|
"contact_seconds": -1.0
|
|
},
|
|
"attack_a": {
|
|
"source": "Right_Hand_Sword_Slash",
|
|
"frames": [
|
|
0,
|
|
36
|
|
],
|
|
"seconds": 1.0417,
|
|
"loop": false,
|
|
"contact_seconds": 0.4051
|
|
},
|
|
"attack_b": {
|
|
"source": "Punch_Forward_with_Both_Fists",
|
|
"frames": [
|
|
18,
|
|
56
|
|
],
|
|
"seconds": 1.0,
|
|
"loop": false,
|
|
"contact_seconds": 0.4737
|
|
},
|
|
"hit": {
|
|
"source": "Hit_Reaction",
|
|
"frames": [
|
|
0,
|
|
12
|
|
],
|
|
"seconds": 0.5,
|
|
"loop": false,
|
|
"contact_seconds": -1.0
|
|
},
|
|
"ability": {
|
|
"source": "Charged_Ground_Slam",
|
|
"frames": [
|
|
6,
|
|
64
|
|
],
|
|
"seconds": 1.2083,
|
|
"loop": false,
|
|
"contact_seconds": 0.7292
|
|
},
|
|
"death": {
|
|
"source": "dying_backwards",
|
|
"frames": [
|
|
0.0,
|
|
52.80000305175781
|
|
],
|
|
"seconds": 2.2083,
|
|
"loop": false,
|
|
"contact_seconds": -1.0
|
|
}
|
|
},
|
|
"textures": {
|
|
"glow_share": 0.0846,
|
|
"palette_gains": {
|
|
"rock": [
|
|
1.1754,
|
|
1.5842,
|
|
1.8014
|
|
],
|
|
"metal": [
|
|
1.7412,
|
|
1.6468,
|
|
1.1024
|
|
]
|
|
},
|
|
"size": [
|
|
2048,
|
|
2048
|
|
]
|
|
},
|
|
"unit": 0.009999999776482582
|
|
},
|
|
"inputs_sha256": {
|
|
"tools/meshy/g01/figure.json": "858bf47dc277a8a3a9f280d3f51a156b575d8abd091b083abf0cf2a32dc2277c",
|
|
"assets-source/meshy/g01/kohlenbeisser-skelett.glb": "f5379bc92f77f42235b45decc5dfab26428c6649ea3a17ca7b33809fe4dcd568",
|
|
"assets-source/meshy/g01/kohlenbeisser-animationen.glb": "16ede0d7afb86a46d658265ed7df4d1b1b0c9c5171af6de9257e6c764a55cb48"
|
|
},
|
|
"source_sha256": "124688e799e0508e58af53f5346857e5404d49875d6600cbb974afe1b1e5796e",
|
|
"removed_modifiers": 0,
|
|
"kind": "skinned",
|
|
"fps": 24.0,
|
|
"objects": 2,
|
|
"meshes": {
|
|
"KohlenbeisserBody": {
|
|
"mesh": "KohlenbeisserBody",
|
|
"triangles": 20714,
|
|
"vertices": 22962,
|
|
"ngons": 0,
|
|
"materials": [
|
|
"AI_Kohlenbeisser"
|
|
],
|
|
"uv_layers": [
|
|
"UVMap"
|
|
],
|
|
"color_attributes": [],
|
|
"active_color": null,
|
|
"custom_normals": true,
|
|
"normals_unit_length": true,
|
|
"bad_normals": 0,
|
|
"degenerate_triangles": 0,
|
|
"shape_keys": 0,
|
|
"skinned": true,
|
|
"scale": [
|
|
1.0,
|
|
1.0,
|
|
1.0
|
|
],
|
|
"bounds_unity": {
|
|
"min": [
|
|
-0.857,
|
|
0.0,
|
|
-0.388
|
|
],
|
|
"max": [
|
|
0.8576,
|
|
1.35,
|
|
0.3833
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"armatures": {
|
|
"KohlenbeisserRig": {
|
|
"bones": [
|
|
"Root",
|
|
"Hips",
|
|
"Spine02",
|
|
"Spine01",
|
|
"Spine",
|
|
"neck",
|
|
"Head",
|
|
"head_end",
|
|
"headfront",
|
|
"LeftShoulder",
|
|
"LeftArm",
|
|
"LeftForeArm",
|
|
"LeftHand",
|
|
"RightShoulder",
|
|
"RightArm",
|
|
"RightForeArm",
|
|
"RightHand",
|
|
"LeftUpLeg",
|
|
"LeftLeg",
|
|
"LeftFoot",
|
|
"LeftToeBase",
|
|
"RightUpLeg",
|
|
"RightLeg",
|
|
"RightFoot",
|
|
"RightToeBase"
|
|
],
|
|
"roots": [
|
|
"Root"
|
|
]
|
|
}
|
|
},
|
|
"empties": {},
|
|
"bounds_unity": {
|
|
"min": [
|
|
-0.857,
|
|
0.0,
|
|
-0.388
|
|
],
|
|
"max": [
|
|
0.8576,
|
|
1.35,
|
|
0.3833
|
|
]
|
|
},
|
|
"clips": [
|
|
{
|
|
"name": "ability",
|
|
"frames": [
|
|
0.0,
|
|
29.0
|
|
],
|
|
"seconds": 1.2083,
|
|
"loop": false,
|
|
"contact_seconds": 0.7292
|
|
},
|
|
{
|
|
"name": "attack_a",
|
|
"frames": [
|
|
0.0,
|
|
25.0
|
|
],
|
|
"seconds": 1.0417,
|
|
"loop": false,
|
|
"contact_seconds": 0.4051
|
|
},
|
|
{
|
|
"name": "attack_b",
|
|
"frames": [
|
|
0.0,
|
|
24.0
|
|
],
|
|
"seconds": 1.0,
|
|
"loop": false,
|
|
"contact_seconds": 0.4737
|
|
},
|
|
{
|
|
"name": "death",
|
|
"frames": [
|
|
0.0,
|
|
53.0
|
|
],
|
|
"seconds": 2.2083,
|
|
"loop": false,
|
|
"contact_seconds": -1.0
|
|
},
|
|
{
|
|
"name": "hit",
|
|
"frames": [
|
|
0.0,
|
|
12.0
|
|
],
|
|
"seconds": 0.5,
|
|
"loop": false,
|
|
"contact_seconds": -1.0
|
|
},
|
|
{
|
|
"name": "idle",
|
|
"frames": [
|
|
0.0,
|
|
96.0
|
|
],
|
|
"seconds": 4.0,
|
|
"loop": true,
|
|
"contact_seconds": -1.0
|
|
},
|
|
{
|
|
"name": "walk",
|
|
"frames": [
|
|
0.0,
|
|
67.0
|
|
],
|
|
"seconds": 2.7917,
|
|
"loop": true,
|
|
"contact_seconds": -1.0
|
|
}
|
|
],
|
|
"expected_from_godot": {
|
|
"triangles": 20714,
|
|
"bones": 25,
|
|
"clips": [
|
|
"idle",
|
|
"walk",
|
|
"attack_a",
|
|
"attack_b",
|
|
"hit",
|
|
"ability",
|
|
"death"
|
|
]
|
|
},
|
|
"meshes_with_ngons": {},
|
|
"meshes_without_uv": [],
|
|
"triangles": 20714,
|
|
"fbx": "Assets/Luneraria/Art/Characters/kohlenbeisser.fbx",
|
|
"fbx_bytes": 2936524,
|
|
"ok": true
|
|
}
|