U5.5 Aschenwerfer: sechste Meshy-Figur (g07)

Mörserkessel-Golem über das Auto-Rigging, Würfe als Angriffe (über die
Schulter, geduckter Schwungwurf), Lane-Fassung inklusive, 68 Credits.
Stresstest 36 Aschenwerfer: Mid 165,0 -> 147,1 fps, Karte 124,1 -> 126,8.
Tests grün, Fingerabdrücke unverändert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Martin Stickelbroeck 2026-10-10 14:11:03 +02:00
parent aa77d0e7fb
commit 91ea297a1c
71 changed files with 61806 additions and 59759 deletions

View file

@ -0,0 +1,491 @@
{
"id": "aschenwerfer",
"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": "['AschenwerferBody_LOD0', 'AschenwerferBody_LOD1']"
},
{
"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": "25282 fbx / 25282 godot"
},
{
"check": "one_armature",
"ok": true,
"detail": "['AschenwerferRig']"
},
{
"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": "25282 / 25282"
},
{
"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": "Over_Shoulder_Throw",
"frames": [
4,
30
],
"seconds": 1.0,
"loop": false,
"contact_seconds": 0.6538
},
"attack_b": {
"source": "Crouch_Charge_and_Throw",
"frames": [
4,
34
],
"seconds": 1.0833,
"loop": false,
"contact_seconds": 0.6861
},
"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.0538,
"palette_gains": {
"rock": [
1.1718,
1.6665,
1.8289
],
"metal": [
1.6137,
1.4983,
0.8449
]
},
"size": [
2048,
2048
]
},
"unit": 0.009999999776482582,
"lod": {
"lod0_triangles": 20287,
"lod1_triangles": 4995,
"lod1_vertices": 2486,
"welded_triangles": 20287,
"lod0_screen": 0.2
},
"props": []
},
"inputs_sha256": {
"tools/meshy/g07/figure.json": "6d7066a42c7c4b71ad6f7bb7569311cc7210156fde9a7fadc0eddc5bd6a00c7f",
"assets-source/meshy/g07/aschenwerfer-skelett.glb": "d9b311fdc33d18df89dcdd3a88be879079ac40d48f9e14d8ded90ed4c532be7f",
"assets-source/meshy/g07/aschenwerfer-animationen.glb": "6211206d4df5bfc3dee511cca1a92f31a8a19a23986265d30f169339589f7e11"
},
"source_sha256": "4d5cdab415e4bfa97abe420f7457d4e1cddd67b9a76c23ccb6f9313a2fd8ea4e",
"removed_modifiers": 0,
"kind": "skinned",
"fps": 24.0,
"objects": 3,
"meshes": {
"AschenwerferBody_LOD0": {
"mesh": "AschenwerferBody_LOD0",
"triangles": 20287,
"vertices": 23526,
"ngons": 0,
"materials": [
"AI_Aschenwerfer"
],
"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.8631,
-0.0,
-0.3725
],
"max": [
0.8637,
1.35,
0.3717
]
}
},
"AschenwerferBody_LOD1": {
"mesh": "AschenwerferBody_LOD1",
"triangles": 4995,
"vertices": 2486,
"ngons": 0,
"materials": [
"AI_Aschenwerfer"
],
"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": true,
"scale": [
1.0,
1.0,
1.0
],
"bounds_unity": {
"min": [
-0.8641,
0.0003,
-0.3727
],
"max": [
0.864,
1.351,
0.3742
]
}
}
},
"armatures": {
"AschenwerferRig": {
"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.8641,
-0.0,
-0.3727
],
"max": [
0.864,
1.351,
0.3742
]
},
"clips": [
{
"name": "ability",
"frames": [
0.0,
29.0
],
"seconds": 1.2083,
"loop": false,
"contact_seconds": 0.7292
},
{
"name": "attack_a",
"frames": [
0.0,
24.0
],
"seconds": 1.0,
"loop": false,
"contact_seconds": 0.6538
},
{
"name": "attack_b",
"frames": [
0.0,
26.0
],
"seconds": 1.0833,
"loop": false,
"contact_seconds": 0.6861
},
{
"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": 25282,
"bones": 25,
"clips": [
"idle",
"walk",
"attack_a",
"attack_b",
"hit",
"ability",
"death"
]
},
"meshes_with_ngons": {},
"meshes_without_uv": [],
"triangles": 25282,
"fbx": "Assets/Luneraria/Art/Characters/aschenwerfer.fbx",
"fbx_bytes": 3234540,
"ok": true
}

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 9289344f49e924be28263a19708a4aa9
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View file

@ -0,0 +1,337 @@
fileFormatVersion: 2
guid: 91e3cc3d958a04fc58928224fa9af37c
ModelImporter:
serializedVersion: 24300
internalIDToNameTable: []
externalObjects: {}
materials:
materialImportMode: 2
materialName: 0
materialSearch: 1
materialLocation: 1
searchTexturesGlobally: 0
animations:
legacyGenerateAnimations: 4
bakeSimulation: 0
resampleCurves: 0
optimizeGameObjects: 0
removeConstantScaleCurves: 0
motionNodeName:
animationImportErrors:
animationImportWarnings:
animationRetargetingWarnings:
animationDoRetargetingWarnings: 0
importAnimatedCustomProperties: 0
importConstraints: 0
animationCompression: 0
animationRotationError: 0.5
animationPositionError: 0.5
animationScaleError: 0.5
animationWrapMode: 0
extraExposedTransformPaths: []
extraUserProperties: []
clipAnimations:
- serializedVersion: 16
name: ability
takeName: AschenwerferRig|ability
internalID: 2280130392081142755
firstFrame: 0
lastFrame: 29
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events:
- time: 0.6034925
functionName: OnLuneContact
data:
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
- serializedVersion: 16
name: attack_a
takeName: AschenwerferRig|attack_a
internalID: 4056297217607998373
firstFrame: 0
lastFrame: 24
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events:
- time: 0.6538
functionName: OnLuneContact
data:
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
- serializedVersion: 16
name: attack_b
takeName: AschenwerferRig|attack_b
internalID: -5137537421297023355
firstFrame: 0
lastFrame: 26
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events:
- time: 0.63334256
functionName: OnLuneContact
data:
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
- serializedVersion: 16
name: death
takeName: AschenwerferRig|death
internalID: 3265223523729494005
firstFrame: 0
lastFrame: 53
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
- serializedVersion: 16
name: hit
takeName: AschenwerferRig|hit
internalID: -4764687234542361821
firstFrame: 0
lastFrame: 12
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 0
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
- serializedVersion: 16
name: idle
takeName: AschenwerferRig|idle
internalID: 1341265237221012925
firstFrame: 0
lastFrame: 96
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 1
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
- serializedVersion: 16
name: walk
takeName: AschenwerferRig|walk
internalID: -698426100368411009
firstFrame: 0
lastFrame: 67
wrapMode: 0
orientationOffsetY: 0
level: 0
cycleOffset: 0
loop: 0
hasAdditiveReferencePose: 0
loopTime: 1
loopBlend: 0
loopBlendOrientation: 0
loopBlendPositionY: 0
loopBlendPositionXZ: 0
keepOriginalOrientation: 0
keepOriginalPositionY: 1
keepOriginalPositionXZ: 0
heightFromFeet: 0
mirror: 0
bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000
curves: []
events: []
transformMask: []
maskType: 3
maskSource: {instanceID: 0}
additiveReferencePoseFrame: 0
isReadable: 1
meshes:
lODScreenPercentages:
- 0.25
- 0.01
globalScale: 1
meshCompression: 0
addColliders: 0
useSRGBMaterialColor: 1
sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 0
importBlendShapes: 0
importCameras: 0
importLights: 0
nodeNameCollisionStrategy: 1
fileIdsGeneration: 2
swapUVChannels: 0
generateSecondaryUV: 0
useFileUnits: 1
keepQuads: 0
weldVertices: 1
bakeAxisConversion: 1
preserveHierarchy: 0
skinWeightsMode: 0
maxBonesPerVertex: 4
minBoneWeight: 0.001
optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1
indexFormat: 0
secondaryUVAngleDistortion: 8
secondaryUVAreaDistortion: 15.000001
secondaryUVHardAngle: 88
secondaryUVMarginMethod: 1
secondaryUVMinLightmapResolution: 40
secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4
useFileScale: 1
strictVertexDataChecks: 0
tangentSpace:
normalSmoothAngle: 60
normalImportMode: 0
tangentImportMode: 3
normalCalculationMode: 4
legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0
blendShapeNormalImportMode: 1
normalSmoothingSource: 0
referencedClips: []
importAnimation: 1
humanDescription:
serializedVersion: 3
human: []
skeleton: []
armTwist: 0.5
foreArmTwist: 0.5
upperLegTwist: 0.5
legTwist: 0.5
armStretch: 0.05
legStretch: 0.05
feetSpacing: 0
globalScale: 1
rootMotionBoneName:
hasTranslationDoF: 0
hasExtraRoot: 0
skeletonHasParents: 1
lastHumanDescriptionAvatarSource: {instanceID: 0}
autoGenerateAvatarMappingIfUnspecified: 1
animationType: 2
humanoidOversampling: 1
avatarSetup: 1
addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 1
remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,246 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1107 &-8975188305692316721
AnimatorStateMachine:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Base Layer
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 3718758981279263583}
m_Position: {x: 200, y: 0, z: 0}
- serializedVersion: 1
m_State: {fileID: 2452354781348441047}
m_Position: {x: 235, y: 65, z: 0}
- serializedVersion: 1
m_State: {fileID: 7479970833514730835}
m_Position: {x: 270, y: 130, z: 0}
- serializedVersion: 1
m_State: {fileID: -5472861064014237090}
m_Position: {x: 305, y: 195, z: 0}
- serializedVersion: 1
m_State: {fileID: 323987241544093019}
m_Position: {x: 340, y: 260, z: 0}
- serializedVersion: 1
m_State: {fileID: -4367898513667367134}
m_Position: {x: 375, y: 325, z: 0}
- serializedVersion: 1
m_State: {fileID: 4392489770327313565}
m_Position: {x: 410, y: 390, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 50, y: 20, z: 0}
m_EntryPosition: {x: 50, y: 120, z: 0}
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 3718758981279263583}
--- !u!1102 &-5472861064014237090
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: attack_b
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -5137537421297023355, guid: 91e3cc3d958a04fc58928224fa9af37c, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &-4367898513667367134
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: hit
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -4764687234542361821, guid: 91e3cc3d958a04fc58928224fa9af37c, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: aschenwerfer
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: -8975188305692316721}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 0
m_SyncedLayerIndex: -1
m_DefaultWeight: 0
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1102 &323987241544093019
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: death
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 3265223523729494005, guid: 91e3cc3d958a04fc58928224fa9af37c, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &2452354781348441047
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: ability
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 2280130392081142755, guid: 91e3cc3d958a04fc58928224fa9af37c, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &3718758981279263583
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: idle
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 1341265237221012925, guid: 91e3cc3d958a04fc58928224fa9af37c, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &4392489770327313565
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: walk
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: -698426100368411009, guid: 91e3cc3d958a04fc58928224fa9af37c, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &7479970833514730835
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: attack_a
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 4056297217607998373, guid: 91e3cc3d958a04fc58928224fa9af37c, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 371b8acccfc524a0f83b50fc7628ef37
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 9100000
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 MiB

View file

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 0889178a4b1324ca5a57027931f9071d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 MiB

View file

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 82d0c58a5c62343f7a1ef883a1a00d44
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 1
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

View file

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: d92c50acc3d8d4a4d90d28b91a9ec86c
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 0
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View file

@ -181,6 +181,10 @@ MonoBehaviour:
Neutral: {fileID: 2100000, guid: 5a6942f0733ed4ba0bc5c60732179c3d, type: 2}
Blau: {fileID: 0}
Rot: {fileID: 0}
- Key: AI_Aschenwerfer
Neutral: {fileID: 2100000, guid: 48235766686d249dfb6f4463f7a554c7, type: 2}
Blau: {fileID: 0}
Rot: {fileID: 0}
- Key: AI_Funkenlanze
Neutral: {fileID: 2100000, guid: d5a88e3321a884b30bd8a8606b78090d, type: 2}
Blau: {fileID: 0}

View file

@ -0,0 +1,68 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: AI_Aschenwerfer
m_Shader: {fileID: 4800000, guid: 9809bd5750e264586bd30e14a6f1bd4e, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 0
m_EnableInstancingVariants: 1
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AlbedoMap:
m_Texture: {fileID: 2800000, guid: 0889178a4b1324ca5a57027931f9071d, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMap:
m_Texture: {fileID: 2800000, guid: 82d0c58a5c62343f7a1ef883a1a00d44, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OrmMap:
m_Texture: {fileID: 2800000, guid: d92c50acc3d8d4a4d90d28b91a9ec86c, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _StoneMap:
m_Texture: {fileID: 2800000, guid: 2e11a30a0df8143ab84722ec0a116b6d, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Cull: 2
- _Energy: 1
- _Flicker: 0
- _Glow: 1.25
- _Metallic: 1
- _Mode: 0
- _NormalStrength: 1
- _ObjectSpace: 0
- _Quality: 1
- _Relief: 0.016
- _Rim: 0.35
- _Roughness: 1
- _Seed: 0
- _ShadowNormalScale: 0
- _StoneScale: 1
- _UvMaps: 1
- _VertexColor: 0
m_Colors:
- _AlbedoMean: {r: 1, g: 1, b: 1, a: 1}
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _OrmMean: {r: 1, g: 1, b: 1, a: 1}
- _RimColor: {r: 0.8, g: 0.86, b: 1, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 48235766686d249dfb6f4463f7a554c7
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load diff

View file

@ -16,6 +16,9 @@ MonoBehaviour:
- Id: arbeiter
Prefab: {fileID: 919132149155446097, guid: 213c8c8af4ced42cabb703c584dd5894, type: 3}
Controller: {fileID: 9100000, guid: e63b1fbeb857943b9a2438101f38c6c8, type: 2}
- Id: aschenwerfer
Prefab: {fileID: 919132149155446097, guid: 91e3cc3d958a04fc58928224fa9af37c, type: 3}
Controller: {fileID: 9100000, guid: 371b8acccfc524a0f83b50fc7628ef37, type: 2}
- Id: basaltbastion
Prefab: {fileID: 919132149155446097, guid: 841c5b5333cc141a6bde6c22d3dc2884, type: 3}
Controller: {fileID: 9100000, guid: ec68488f0997c4a8185eea30724740ff, type: 2}
@ -74,8 +77,8 @@ MonoBehaviour:
Prefab: {fileID: 919132149155446097, guid: 9e7984da72d934624961bf1843a975a2, type: 3}
Controller: {fileID: 9100000, guid: 333e60f0eb4384e86b5fd3f2a5242bcd, type: 2}
- Id: g07
Prefab: {fileID: 919132149155446097, guid: 5398b8b548d5944fca073f9319c68bf6, type: 3}
Controller: {fileID: 0}
Prefab: {fileID: 919132149155446097, guid: 91e3cc3d958a04fc58928224fa9af37c, type: 3}
Controller: {fileID: 9100000, guid: 371b8acccfc524a0f83b50fc7628ef37, type: 2}
- Id: g08
Prefab: {fileID: 919132149155446097, guid: a9778c2a8d21345698c3379e3bc4ed1a, type: 3}
Controller: {fileID: 0}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

View file

@ -185,6 +185,17 @@ Hinweis: Die Projektdateien des .NET-Harness (`tools/dotnet/*/*.csproj`) fehlten
| Bild | `screenshots/u5.5-g06/` |
| Commits | `luneraria/u5.5-g06` |
## U5.5 · Aschenwerfer (g07)
| Punkt | Ergebnis |
| --- | --- |
| Tests | EditMode 29/29, PlayMode 14/14 (Verify A–I 718/0), Player-Selbsttest 30/30, Asset-Prüfung 20/0 |
| Parität | Fingerabdrücke unverändert (`DCE95C96556F3A1A`, `7B8E43AEFC0D60C5`) |
| Inhalt | Meshy-Figur für `g07` mit Lane-Fassung und Wurfbewegungen, 68 Credits |
| Leistung | Stresstest 36 Aschenwerfer: Mid 165,0 → 147,1 fps, Karte 124,1 → 126,8 fps. Rohdaten `logs/u5.5-g07/` |
| Bild | `screenshots/u5.5-g07/` |
| Commits | `luneraria/u5.5-g07` |
## Ausblick
Der Pilot entscheidet über eine Serie weiterer Meshy-Figuren (Kosten je Figur, Lizenz, Stilgleichheit). Offen bleiben außerdem Künstler-Sculpts für Anatomie/Gesicht/Haar, LOD und Material-Atlanten sowie die Build-Module für Windows und Linux.

View file

@ -1,6 +1,6 @@
# Port-Status · Champions of Luneraria in Unity
Stand: 10. Oktober 2026 (U5.5, fünfte Figur).
Stand: 10. Oktober 2026 (U5.5, sechste Figur).
Referenz ist der Godot-Stand `luneraria/g3` (`1b540f2`) in `../saumwacht-godot`; er wird nicht mehr verändert. Engine: Unity 6.3 LTS (6000.3.20f1), Renderer URP. HDRP ist ausgeschlossen, bis ein Vergleich mit einer echten Szene etwas anderes nahelegt.
@ -13,7 +13,7 @@ Zielplattformen sind Fedora 44 und Windows 11; macOS ist die Entwicklungsplattfo
| U2 · Unity-Spielwelt | **fertig**: U2A Blender→FBX-Pipeline (9 Assets geprüft), U2B G1-Karte mit Materialsystem, U2C fester Takt und Ansichten (bildratenunabhängig nachgewiesen), U2D vollständige Bot-Partien sichtbar und gleich dem Kern; danach Batch-Import aller 86 Modelle, Einheiten mit eigenen Modellen | [U2-WORLD.md](U2-WORLD.md) |
| U3 · G3-HUD portieren | **fertig** (`luneraria/u3`): UI Toolkit, Sichtmodell mit Privatsphäre, menschlicher Sitz, alle HUD-Bereiche, Eingabe und Befehle, Prüfung 718/0, 14 G3-Motive, Spieltest, Leistung mit HUD | [U3-UI.md](U3-UI.md) |
| U4 · Netzwerk | **fertig** (`luneraria/u4` = `769e622`): LuneSession (Protokoll 4), TCP-Transport, Startbildschirm Host/Join, 43+12 Prüfungen, Mindestumfang M4. Nachtrag (`luneraria/u4-nachtrag`, in U5.3 zusammengeführt): Startbildschirm in der Szene, „Menü“ führt dorthin zurück | [U4-NETWORK.md](U4-NETWORK.md) |
| U5 · Visuelle Neuausrichtung (Vertical Slice Mid-Lane) | **fertig** (`luneraria/u5` = `2c1686b`, Stufen `luneraria/u5.2`): 6 PBR-Sätze, Surface-Shader mit Albedo/Normal/ORM, Stufen Lane/Rand, Hit- und Turm-VFX, 133/180 fps. **U5.3** (`luneraria/u5.3` = `07fa457`): Gebäude, Boss und Ringborkes Rinde auf PBR (11 Sätze); Bildfehler aus U5 behoben (doppelte Einfärbung, Datenkarten als sRGB, Streifen, bleichender Treffer-Flash, Nebel), Helligkeit und Grün wieder auf U3-Niveau **U5.4** (`luneraria/u5.4` = `4883d95`): Surface-Materialien für alle 146 Figurenmaterialien (Metalle metallisch, Randlicht, Struktur in den Porträts), SSAO (abschaltbar), Leistung −13 % Karte / −16 % Mid **U5.5-pilot** (`luneraria/u5.5-pilot` = `c386206`): Meshy-Figur für den Kohlenbeißer `g01` (Pipeline `tools/meshy/`, UV-Material mit Lava-Glut, Schatten ohne Normalen-Versatz), GPU-Batched-Skinning, Figuren-Stress −21 % Mid / −13 % Karte gegenüber Phase-4; **Lane-Fassung** (`luneraria/u5.5-lod`): 5.000-Dreiecke-LOD, Abstand −10 % Mid / −2 % Karte; **Schlackenklaue** `g02` (`luneraria/u5.5-g02`) als zweite Meshy-Figur, −11 % Mid / −1 % Karte; **Schlackenwacht** `g03` (`luneraria/u5.5-g03`), −8 % Mid / 0 % Karte; **Funkenlanze** `g05` mit Lanze als eigenem Modell (`luneraria/u5.5-g05`), +15 % gegenüber der Phase-18-Figur; **Glasballiste** `g06` als Maschine mit übernommenem Skelett (`luneraria/u5.5-g06`) | [U5-VISUAL.md](U5-VISUAL.md) |
| U5 · Visuelle Neuausrichtung (Vertical Slice Mid-Lane) | **fertig** (`luneraria/u5` = `2c1686b`, Stufen `luneraria/u5.2`): 6 PBR-Sätze, Surface-Shader mit Albedo/Normal/ORM, Stufen Lane/Rand, Hit- und Turm-VFX, 133/180 fps. **U5.3** (`luneraria/u5.3` = `07fa457`): Gebäude, Boss und Ringborkes Rinde auf PBR (11 Sätze); Bildfehler aus U5 behoben (doppelte Einfärbung, Datenkarten als sRGB, Streifen, bleichender Treffer-Flash, Nebel), Helligkeit und Grün wieder auf U3-Niveau **U5.4** (`luneraria/u5.4` = `4883d95`): Surface-Materialien für alle 146 Figurenmaterialien (Metalle metallisch, Randlicht, Struktur in den Porträts), SSAO (abschaltbar), Leistung −13 % Karte / −16 % Mid **U5.5-pilot** (`luneraria/u5.5-pilot` = `c386206`): Meshy-Figur für den Kohlenbeißer `g01` (Pipeline `tools/meshy/`, UV-Material mit Lava-Glut, Schatten ohne Normalen-Versatz), GPU-Batched-Skinning, Figuren-Stress −21 % Mid / −13 % Karte gegenüber Phase-4; **Lane-Fassung** (`luneraria/u5.5-lod`): 5.000-Dreiecke-LOD, Abstand −10 % Mid / −2 % Karte; **Schlackenklaue** `g02` (`luneraria/u5.5-g02`) als zweite Meshy-Figur, −11 % Mid / −1 % Karte; **Schlackenwacht** `g03` (`luneraria/u5.5-g03`), −8 % Mid / 0 % Karte; **Funkenlanze** `g05` mit Lanze als eigenem Modell (`luneraria/u5.5-g05`), +15 % gegenüber der Phase-18-Figur; **Glasballiste** `g06` als Maschine mit übernommenem Skelett (`luneraria/u5.5-g06`); **Aschenwerfer** `g07` (`luneraria/u5.5-g07`), −11 % Mid / +2 % Karte | [U5-VISUAL.md](U5-VISUAL.md) |
QA je Meilenstein: [PORT-QA.md](PORT-QA.md).

View file

@ -568,3 +568,19 @@ Stresstest mit 36 Glasballisten (`-luneBenchmarkArmy g06`), je drei Läufe, gege
- Starre Bindung auf einem durchgehenden Netz: Wo zwei Knochen aneinanderstoßen, reißen bei großen Ausschlägen (Sterbeclip, Bögen) kleine Lücken auf.
Bilder: `screenshots/u5.5-g06/` (Figur, vorher/nachher im Spiel, Übersichten, Kampfmomente).
## U5.5 · Sechste Figur: Aschenwerfer (g07)
Stand 10. Oktober 2026, Zweig `luneraria/u5.5-g07` (auf `luneraria/u5.5-g06`). Die Flächen-Artillerie der Glutpakt, wieder über das Auto-Rigging (menschenähnlich): ein Konzeptbild aus Icon, Phase-4-Bild und Kohlenbeißer-Konzept (12 Credits), Modell (30), Skelett mit 1,35 m (5), sieben Bewegungen (21), zusammen **68 Credits**.
- Entwurf: gedrungener Basaltgolem, statt eines Kopfes ein nach oben offener Mörserkessel mit Goldrand und glühender Glutkugel, Goldgürtel, Fäuste mit Goldbändern. Den Rauch des Icons gibt es nicht als Geometrie.
- Angriffe sind Würfe: `attack_a` ein Wurf über die Schulter (Ausholen und Wurf, 1,0 s, Treffer bei 0,57 s), `attack_b` ein geduckter Schwungwurf (1,1 s). Fähigkeit, Treffer, Tod, Leerlauf und Gang wie beim Kohlenbeißer.
- `aschenwerfer.fbx`: 20.284 + 4.998 Dreiecke, 25 Knochen; Export 23 Prüfungen, bytegleich wiederholbar. Manifest `"replaces": "g07"`.
| Test | Ergebnis |
| --- | --- |
| EditMode / PlayMode | 29/29, 14/14, Verify A–I 718/0 |
| Fingerabdrücke | `DCE95C96556F3A1A`, `7B8E43AEFC0D60C5`, unverändert |
| Asset-Prüfung / Player-Selbsttest | 20/0, 30/30 |
Stresstest mit 36 Aschenwerfern (`-luneBenchmarkArmy g07`), je drei Läufe gegen das starre Phase-4-Modell (`logs/u5.5-g07/`): Mid-Lane nah 165,0 → 147,1 fps (−11 %), Karte 124,1 → 126,8 fps (+2 %). Bilder: `screenshots/u5.5-g07/`.

View file

@ -793,6 +793,173 @@
]
}
},
{
"id": "aschenwerfer",
"kind": "skinned",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Characters/aschenwerfer.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"aschenwerfer 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": "\"25282 unity / 25282 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.864, 0.000, -0.373) (0.864, 1.351, 0.374)\""
},
{
"check": "skinned_mesh",
"ok": true,
"detail": "2"
},
{
"check": "bone_names AschenwerferBody_LOD0",
"ok": true,
"detail": "[]"
},
{
"check": "root_bone AschenwerferBody_LOD0",
"ok": true,
"detail": "\"Root\""
},
{
"check": "bone_names AschenwerferBody_LOD1",
"ok": true,
"detail": "[]"
},
{
"check": "root_bone AschenwerferBody_LOD1",
"ok": true,
"detail": "\"Root\""
},
{
"check": "generic_avatar",
"ok": true,
"detail": "\"aschenwerferAvatar\""
},
{
"check": "clips",
"ok": true,
"detail": "[]"
}
],
"facts": {
"triangles": 25282,
"renderers": 2,
"meshes_without_uv_and_tangents": 0,
"degenerate_triangles_dropped": 0,
"bounds_min": [
-0.8641475,
-2.86577837E-08,
-0.372707427
],
"bounds_max": [
0.864008069,
1.35102189,
0.3741645
],
"clips": [
{
"name": "ability",
"length": 1.20833337,
"loop": false,
"events": 1
},
{
"name": "attack_a",
"length": 1.0,
"loop": false,
"events": 1
},
{
"name": "attack_b",
"length": 1.08333337,
"loop": false,
"events": 1
},
{
"name": "death",
"length": 2.20833325,
"loop": false,
"events": 0
},
{
"name": "hit",
"length": 0.5,
"loop": false,
"events": 0
},
{
"name": "idle",
"length": 4.0,
"loop": true,
"events": 0
},
{
"name": "walk",
"length": 2.79166675,
"loop": true,
"events": 0
}
]
}
},
{
"id": "basaltbastion",
"kind": "skinned",

View file

@ -0,0 +1,15 @@
{
"build": "OSXPlayer player, 6000.3.20f1, release",
"device": "Mac17,2; Apple M5; Apple M5",
"graphics_api": "Metal",
"resolution": "1920x1080",
"vsync": 0,
"match": "seed 9 from round 5, army g07 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g07 36, w04 14, e04 12, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4, g05 2
"windows": [
{"view": "overview (zoom 64)", "frames": 2494, "fps": 124.7, "frame_ms_avg": 8.02, "frame_ms_median": 3.78, "frame_ms_p95": 24.60, "frame_ms_p99": 30.82, "frame_ms_max": 40.52, "frames_over_16_7_ms": 413, "of_them_with_simulation_step": 42, "gc_collections": 21, "simulation_ms_per_frame": 0.088, "views_ms_per_frame": 0.247, "ui_ms_per_frame": 0.079, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 3.01 / median 2.70 / p95 5.09 ms, render thread avg 2.07 / median 1.95 / p95 3.11 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.01 / median 0.18 / p95 21.75 ms
{"view": "mid lane close (zoom 22)", "frames": 1435, "fps": 143.5, "frame_ms_avg": 6.97, "frame_ms_median": 3.42, "frame_ms_p95": 22.04, "frame_ms_p99": 30.20, "frame_ms_max": 38.41, "frames_over_16_7_ms": 154, "of_them_with_simulation_step": 11, "gc_collections": 10, "simulation_ms_per_frame": 0.055, "views_ms_per_frame": 0.228, "ui_ms_per_frame": 0.069, "units_alive_max": 41}
// timings mid lane close (zoom 22): main thread avg 2.50 / median 2.30 / p95 4.01 ms, render thread avg 1.54 / median 1.50 / p95 2.03 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.46 / median 0.03 / p95 19.72 ms
]
}

View file

@ -0,0 +1,15 @@
{
"build": "OSXPlayer player, 6000.3.20f1, release",
"device": "Mac17,2; Apple M5; Apple M5",
"graphics_api": "Metal",
"resolution": "1920x1080",
"vsync": 0,
"match": "seed 9 from round 5, army g07 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g07 36, w04 14, e04 12, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4, g05 2
"windows": [
{"view": "overview (zoom 64)", "frames": 2538, "fps": 126.8, "frame_ms_avg": 7.88, "frame_ms_median": 3.40, "frame_ms_p95": 25.01, "frame_ms_p99": 30.90, "frame_ms_max": 41.41, "frames_over_16_7_ms": 416, "of_them_with_simulation_step": 23, "gc_collections": 21, "simulation_ms_per_frame": 0.075, "views_ms_per_frame": 0.217, "ui_ms_per_frame": 0.073, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.70 / median 2.57 / p95 3.86 ms, render thread avg 1.88 / median 1.86 / p95 2.21 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.18 / median 0.21 / p95 22.33 ms
{"view": "mid lane close (zoom 22)", "frames": 1495, "fps": 149.2, "frame_ms_avg": 6.70, "frame_ms_median": 2.99, "frame_ms_p95": 22.21, "frame_ms_p99": 31.20, "frame_ms_max": 62.61, "frames_over_16_7_ms": 162, "of_them_with_simulation_step": 7, "gc_collections": 10, "simulation_ms_per_frame": 0.045, "views_ms_per_frame": 0.186, "ui_ms_per_frame": 0.061, "units_alive_max": 41}
// timings mid lane close (zoom 22): main thread avg 2.02 / median 1.92 / p95 2.89 ms, render thread avg 1.38 / median 1.37 / p95 1.60 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.67 / median 0.25 / p95 19.95 ms
]
}

View file

@ -0,0 +1,15 @@
{
"build": "OSXPlayer player, 6000.3.20f1, release",
"device": "Mac17,2; Apple M5; Apple M5",
"graphics_api": "Metal",
"resolution": "1920x1080",
"vsync": 0,
"match": "seed 9 from round 5, army g07 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g07 36, w04 14, e04 12, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4, g05 2
"windows": [
{"view": "overview (zoom 64)", "frames": 2580, "fps": 128.9, "frame_ms_avg": 7.76, "frame_ms_median": 3.28, "frame_ms_p95": 25.20, "frame_ms_p99": 32.95, "frame_ms_max": 47.21, "frames_over_16_7_ms": 404, "of_them_with_simulation_step": 35, "gc_collections": 21, "simulation_ms_per_frame": 0.075, "views_ms_per_frame": 0.207, "ui_ms_per_frame": 0.071, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.56 / median 2.45 / p95 3.59 ms, render thread avg 1.85 / median 1.84 / p95 2.15 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.19 / median 0.24 / p95 22.58 ms
{"view": "mid lane close (zoom 22)", "frames": 1486, "fps": 148.6, "frame_ms_avg": 6.73, "frame_ms_median": 2.91, "frame_ms_p95": 23.10, "frame_ms_p99": 30.40, "frame_ms_max": 39.31, "frames_over_16_7_ms": 161, "of_them_with_simulation_step": 12, "gc_collections": 10, "simulation_ms_per_frame": 0.043, "views_ms_per_frame": 0.188, "ui_ms_per_frame": 0.061, "units_alive_max": 41}
// timings mid lane close (zoom 22): main thread avg 2.06 / median 1.99 / p95 2.99 ms, render thread avg 1.36 / median 1.35 / p95 1.59 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.67 / median 0.16 / p95 21.06 ms
]
}

View file

@ -0,0 +1,15 @@
{
"build": "OSXPlayer player, 6000.3.20f1, release",
"device": "Mac17,2; Apple M5; Apple M5",
"graphics_api": "Metal",
"resolution": "1920x1080",
"vsync": 0,
"match": "seed 9 from round 5, army g07 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g07 36, w04 14, e04 12, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4, g05 2
"windows": [
{"view": "overview (zoom 64)", "frames": 2484, "fps": 124.2, "frame_ms_avg": 8.05, "frame_ms_median": 3.20, "frame_ms_p95": 26.10, "frame_ms_p99": 35.90, "frame_ms_max": 45.00, "frames_over_16_7_ms": 409, "of_them_with_simulation_step": 54, "gc_collections": 21, "simulation_ms_per_frame": 0.079, "views_ms_per_frame": 0.209, "ui_ms_per_frame": 0.070, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.44 / median 2.29 / p95 3.55 ms, render thread avg 1.87 / median 1.85 / p95 2.25 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.62 / median 0.39 / p95 23.55 ms
{"view": "mid lane close (zoom 22)", "frames": 1672, "fps": 167.1, "frame_ms_avg": 5.98, "frame_ms_median": 2.80, "frame_ms_p95": 19.69, "frame_ms_p99": 27.51, "frame_ms_max": 35.70, "frames_over_16_7_ms": 148, "of_them_with_simulation_step": 17, "gc_collections": 9, "simulation_ms_per_frame": 0.038, "views_ms_per_frame": 0.184, "ui_ms_per_frame": 0.053, "units_alive_max": 41}
// timings mid lane close (zoom 22): main thread avg 1.76 / median 1.69 / p95 2.59 ms, render thread avg 1.28 / median 1.26 / p95 1.51 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.22 / median 0.65 / p95 17.87 ms
]
}

View file

@ -0,0 +1,15 @@
{
"build": "OSXPlayer player, 6000.3.20f1, release",
"device": "Mac17,2; Apple M5; Apple M5",
"graphics_api": "Metal",
"resolution": "1920x1080",
"vsync": 0,
"match": "seed 9 from round 5, army g07 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g07 36, w04 14, e04 12, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4, g05 2
"windows": [
{"view": "overview (zoom 64)", "frames": 2490, "fps": 124.4, "frame_ms_avg": 8.04, "frame_ms_median": 3.20, "frame_ms_p95": 26.39, "frame_ms_p99": 32.99, "frame_ms_max": 43.40, "frames_over_16_7_ms": 418, "of_them_with_simulation_step": 41, "gc_collections": 21, "simulation_ms_per_frame": 0.080, "views_ms_per_frame": 0.203, "ui_ms_per_frame": 0.070, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.42 / median 2.29 / p95 3.50 ms, render thread avg 1.87 / median 1.85 / p95 2.29 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.61 / median 0.38 / p95 23.82 ms
{"view": "mid lane close (zoom 22)", "frames": 1652, "fps": 165.2, "frame_ms_avg": 6.05, "frame_ms_median": 2.81, "frame_ms_p95": 20.78, "frame_ms_p99": 29.49, "frame_ms_max": 35.31, "frames_over_16_7_ms": 138, "of_them_with_simulation_step": 10, "gc_collections": 10, "simulation_ms_per_frame": 0.043, "views_ms_per_frame": 0.180, "ui_ms_per_frame": 0.052, "units_alive_max": 41}
// timings mid lane close (zoom 22): main thread avg 1.77 / median 1.69 / p95 2.59 ms, render thread avg 1.29 / median 1.28 / p95 1.51 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.29 / median 0.55 / p95 18.94 ms
]
}

View file

@ -0,0 +1,15 @@
{
"build": "OSXPlayer player, 6000.3.20f1, release",
"device": "Mac17,2; Apple M5; Apple M5",
"graphics_api": "Metal",
"resolution": "1920x1080",
"vsync": 0,
"match": "seed 9 from round 5, army g07 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g07 36, w04 14, e04 12, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4, g05 2
"windows": [
{"view": "overview (zoom 64)", "frames": 2475, "fps": 123.7, "frame_ms_avg": 8.08, "frame_ms_median": 3.30, "frame_ms_p95": 26.40, "frame_ms_p99": 34.80, "frame_ms_max": 44.50, "frames_over_16_7_ms": 409, "of_them_with_simulation_step": 65, "gc_collections": 21, "simulation_ms_per_frame": 0.081, "views_ms_per_frame": 0.208, "ui_ms_per_frame": 0.071, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.45 / median 2.33 / p95 3.57 ms, render thread avg 1.89 / median 1.88 / p95 2.29 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.63 / median 0.40 / p95 23.80 ms
{"view": "mid lane close (zoom 22)", "frames": 1626, "fps": 162.6, "frame_ms_avg": 6.15, "frame_ms_median": 2.94, "frame_ms_p95": 21.41, "frame_ms_p99": 28.71, "frame_ms_max": 43.08, "frames_over_16_7_ms": 142, "of_them_with_simulation_step": 14, "gc_collections": 9, "simulation_ms_per_frame": 0.044, "views_ms_per_frame": 0.185, "ui_ms_per_frame": 0.055, "units_alive_max": 41}
// timings mid lane close (zoom 22): main thread avg 1.83 / median 1.73 / p95 2.79 ms, render thread avg 1.30 / median 1.28 / p95 1.54 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.32 / median 0.81 / p95 19.38 ms
]
}

View file

@ -0,0 +1,11 @@
{
"build": "OSXPlayer player, 6000.3.20f1, release",
"device": "Mac17,2; Apple M5; Apple M5",
"graphics_api": "Metal",
"resolution": "1920x1080",
"seconds": 11.6,
"passed": ["Startbildschirm sichtbar", "Partie wartet: Spielcontroller und Treiber aus", "vor dem Start kein HUD", "„Allein spielen“ bedienbar", "Offline: Startbildschirm verborgen", "Offline: Spielcontroller und Treiber laufen", "Offline: HUD sichtbar", "Offline: neue Partie, Sitz 1 (Mid)", "Offline: Planung", "Offline: lokale Sitzung", "„Startaufstellung“ bedienbar", "Startaufstellung gekauft (3 Einheiten)", "„Bereit“ bedienbar", "Bereit: Kampf beginnt", "Kampf: Figuren im Feld", "„Menü“ bedienbar", "Verlassen-Dialog mit „Zum Menü“", "Zurück: Startbildschirm sichtbar", "Zurück: HUD verborgen", "Zurück: Spielcontroller und Treiber aus", "Zurück: Sitzung beendet", "Zurück: keine Figuren im Feld", "Zurück: Kamera ruht", "Zurück: „Allein spielen“ bedienbar", "Zweite Partie: Startbildschirm verborgen, HUD sichtbar", "Zweite Partie: neue Partie in der Planung", "SSAO folgt der Einstellung", "Option „Umgebungsverdeckung“ sichtbar", "Option schaltet SSAO um", "Option stellt SSAO zurück"],
"failed": [],
"photos": ["00-startbildschirm.jpg", "01-planung.jpg", "02-kampf.jpg", "03-verlassen.jpg", "04-zurueck-im-startbildschirm.jpg", "05-zweite-partie.jpg", "06-optionen.jpg"],
"result": "PASS"
}

View file

@ -0,0 +1,11 @@
{
"match": "seed 2, bots, speed 24x",
"core_hash": "DCE95C96556F3A1A",
"core_steps": 12690,
"runs": [
{"target": "30 fps", "frames": 815, "seconds": 27.141, "measured_fps": 30.028, "max_steps_per_frame": 20, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
{"target": "60 fps", "frames": 1626, "seconds": 27.092, "measured_fps": 60.018, "max_steps_per_frame": 10, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
{"target": "120 fps", "frames": 3223, "seconds": 26.903, "measured_fps": 119.8, "max_steps_per_frame": 8, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
{"target": "unlimited", "frames": 85457, "seconds": 26.815, "measured_fps": 3186.886, "max_steps_per_frame": 6, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true}
]
}

View file

@ -0,0 +1,16 @@
{
"runs": [
{"label": "match-seed2", "seed": 2, "start_round": 1, "extra_gold": 0, "speed": 6, "winner": 1, "end_note": "Ancient von Blau zerstört.", "steps": 12690, "hash": "DCE95C96556F3A1A", "core_hash": "DCE95C96556F3A1A", "same_as_core": true,
"units_alive_max": 84, "heroes_alive_max": 4, "boss_log": ["round 8: won team 1 ", "round 9: deployed team 1 bot"],
"rounds": [{"round": 1, "combat_seconds": 44.9, "lost": [], "boss": "none", "end": "cleared"}, {"round": 2, "combat_seconds": 57.1, "lost": [], "boss": "none", "end": "cleared"}, {"round": 3, "combat_seconds": 54.1, "lost": [], "boss": "none", "end": "cleared"}, {"round": 4, "combat_seconds": 62.9, "lost": [], "boss": "none", "end": "cleared"}, {"round": 5, "combat_seconds": 60.7, "lost": [], "boss": "none", "end": "cleared"}, {"round": 6, "combat_seconds": 62.1, "lost": [], "boss": "none", "end": "cleared"}, {"round": 7, "combat_seconds": 66.5, "lost": ["blau_bot_outer"], "boss": "none", "end": "cleared"}, {"round": 8, "combat_seconds": 89.65, "lost": ["rot_top_outer", "rot_top_inner"], "boss": "won", "end": "cleared"}, {"round": 9, "combat_seconds": 136.55, "lost": ["blau_bot_inner", "blau_base_2", "blau_base_1", "blau_ancient"], "boss": "deployed", "end": "core"}],
"events": ["round 7: blau_bot_outer destroyed", "round 8: rot_top_outer destroyed", "round 8: rot_top_inner destroyed", "round 8: grotto boss won", "round 9: blau_bot_inner destroyed", "round 9: blau_base_2 destroyed", "round 9: blau_base_1 destroyed", "round 9: blau_ancient destroyed", "round 9: grotto boss deployed"],
"shots": ["01-runde1-aufmarsch", "02-runde1-mid-kampf", "03-turm-faellt", "04-turm-ruine", "05-grotte-bosskampf", "06-held-kaempft", "07-boss-auf-der-lane", "08-ancient-faellt", "09-ancient-ruine", "10-ende-uebersicht"],
"performance": null},
{"label": "match-seed9-round21", "seed": 9, "start_round": 21, "extra_gold": 4000, "speed": 6, "winner": 0, "end_note": "Ancient von Rot zerstört.", "steps": 4195, "hash": "7B8E43AEFC0D60C5", "core_hash": "7B8E43AEFC0D60C5", "same_as_core": true,
"units_alive_max": 125, "heroes_alive_max": 6, "boss_log": [],
"rounds": [{"round": 21, "combat_seconds": 121.8, "lost": ["rot_mid_outer", "rot_top_outer", "rot_mid_inner"], "boss": "none", "end": "cleared"}, {"round": 22, "combat_seconds": 87.95, "lost": ["rot_top_inner", "rot_base_1", "blau_bot_outer", "rot_base_2", "rot_ancient"], "boss": "none", "end": "core"}],
"events": ["round 21: rot_mid_outer destroyed", "round 21: rot_top_outer destroyed", "round 21: rot_mid_inner destroyed", "round 22: rot_top_inner destroyed", "round 22: rot_base_1 destroyed", "round 22: blau_bot_outer destroyed", "round 22: rot_base_2 destroyed", "round 22: rot_ancient destroyed"],
"shots": ["11-welle21-uebersicht", "12-welle21-kampf", "13-ancient-rot-faellt", "14-welle-ende"],
"performance": {"window": "20 s real time at 1x speed, unlimited frame rate, round 21", "frames": 49377, "fps": 2468.804, "frame_ms_avg": 0.405, "frame_ms_p95": 0.427, "simulation_ms_per_frame": 0.004, "views_ms_per_frame": 0.125, "units_alive_max": 116}}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 KiB

View file

@ -1812,6 +1812,51 @@
"death"
]
}
},
{
"id": "aschenwerfer",
"group": "Characters",
"kind": "skinned",
"representative": "U5.5 series: Aschenwerfer (g07) from Meshy (image to 3D, auto rig, library clips)",
"source": "tools/meshy/build_figure.py",
"source_root": "unity",
"generator": {
"args": [
"tools/meshy/g07/figure.json"
],
"inputs": [
"tools/meshy/g07/figure.json",
"assets-source/meshy/g07/aschenwerfer-skelett.glb",
"assets-source/meshy/g07/aschenwerfer-animationen.glb"
]
},
"replaces": "g07",
"expect": {
"triangles": 25282,
"bones": 25,
"clips": [
"idle",
"walk",
"attack_a",
"attack_b",
"hit",
"ability",
"death"
]
},
"rules": {
"rest_action": null,
"root_bone": "Root",
"required_clips": [
"idle",
"walk",
"attack_a",
"attack_b",
"hit",
"ability",
"death"
]
}
}
],
"aliases": {

View file

@ -0,0 +1,10 @@
{
"ai_model": "gpt-image-2",
"prompt": "Full-body concept of the creature in the first two references for a 3D fantasy strategy game, painted in exactly the same art style and materials as the third reference (a fellow unit of its faction). The Aschenwerfer, a squat artillery golem of faceted black basalt rocks: instead of a head it carries a big black iron mortar cauldron set into its shoulders, opening upward, with a thick worn gold rim and gold brackets, holding a glowing molten orange ember ball; a wide gold belt with a pointed buckle, huge round rock shoulders, thick rock arms with gold bands ending in big blocky rock fists, short sturdy legs with gold ankle bands and blocky rock feet. No smoke. Stylized realism, hand-sculpted detailed forms, chunky readable silhouette. Standing in a symmetric A-pose, front view, arms held away from the body, legs apart, entire figure visible head to feet, centered. Plain light grey background, soft even studio light, no ground shadow, no text.",
"aspect_ratio": "1:1",
"reference_image_urls": [
"@../saumwacht-godot/assets-source/phase3/masters/glutpakt/unit_g07_aschenwerfer_icon.png",
"@tools/meshy/g07/ref-g07-phase4.png",
"@assets-source/meshy/g01/kohlenbeisser-konzept.png"
]
}

View file

@ -0,0 +1,16 @@
{
"input_task_id": "01a125a5-907a-77da-99a3-be525527e657",
"ai_model": "latest",
"should_texture": true,
"enable_pbr": true,
"texture_resolution": "2k",
"should_remesh": true,
"topology": "triangle",
"target_polycount": 20000,
"save_pre_remeshed_model": true,
"pose_mode": "a-pose",
"target_formats": [
"glb"
],
"multi_view_thumbnails": true
}

View file

@ -0,0 +1,4 @@
{
"input_task_id": "01a125a6-b87a-73f0-91b3-3f665c2527ba",
"height_meters": 1.35
}

View file

@ -0,0 +1,4 @@
{
"rig_task_id": "01a125a9-08d5-708d-8c13-daae256ffe70",
"action_ids": [0, 119, 421, 398, 178, 127, 189]
}

View file

@ -0,0 +1,21 @@
{
"id": "aschenwerfer",
"replaces": "g07",
"rig": "assets-source/meshy/g07/aschenwerfer-skelett.glb",
"animations": "assets-source/meshy/g07/aschenwerfer-animationen.glb",
"material": "AI_Aschenwerfer",
"textures": "Assets/Luneraria/Art/Textures/ai-aschenwerfer",
"root_bone": "Root",
"glow": {"hue": [0, 42], "saturation": 0.6, "value": 0.5, "metal_below": 0.5},
"lod": {"triangles": 5000, "sharp_degrees": 50, "lod0_screen": 0.2},
"palette": {"rock": {"color": "41434b", "strength": 0.8}, "metal": {"color": "c99645", "strength": 1.0}},
"clips": {
"idle": {"source": "Idle", "loop": true},
"walk": {"source": "Slow_Orc_Walk", "seconds": 2.8, "loop": true},
"attack_a": {"source": "Over_Shoulder_Throw", "frames": [4, 30], "seconds": 1.0, "contact_frame": 21},
"attack_b": {"source": "Crouch_Charge_and_Throw", "frames": [4, 34], "seconds": 1.1, "contact_frame": 23},
"hit": {"source": "Hit_Reaction", "frames": [0, 12], "seconds": 0.5},
"ability": {"source": "Charged_Ground_Slam", "frames": [6, 64], "seconds": 1.2, "contact_frame": 41},
"death": {"source": "dying_backwards"}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

View file

@ -0,0 +1,20 @@
{
"id": "01a125a9-71f3-76af-9c0b-8741acc8b61a",
"type": "animate",
"name": "",
"status": "SUCCEEDED",
"created_at": 1791633224531,
"progress": 100,
"started_at": 1791633224538,
"finished_at": 1791633252269,
"expires_at": 1791892452269,
"task_error": null,
"result": {
"animation_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-71f3-76af-9c0b-8741acc8b61a/output/merged_animations.glb",
"animation_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-71f3-76af-9c0b-8741acc8b61a/output/merged_animations.fbx",
"processed_usdz_url": "",
"processed_armature_fbx_url": "",
"processed_animation_fps_fbx_url": ""
},
"consumed_credits": 21
}

View file

@ -0,0 +1,16 @@
{
"id": "01a125a5-907a-77da-99a3-be525527e657",
"type": "image-to-image",
"ai_model": "gpt-image-2",
"prompt": "Full-body concept of the creature in the first two references for a 3D fantasy strategy game, painted in exactly the same art style and materials as the third reference (a fellow unit of its faction). The Aschenwerfer, a squat artillery golem of faceted black basalt rocks: instead of a head it carries a big black iron mortar cauldron set into its shoulders, opening upward, with a thick worn gold rim and gold brackets, holding a glowing molten orange ember ball; a wide gold belt with a pointed buckle, huge round rock shoulders, thick rock arms with gold bands ending in big blocky rock fists, short sturdy legs with gold ankle bands and blocky rock feet. No smoke. Stylized realism, hand-sculpted detailed forms, chunky readable silhouette. Standing in a symmetric A-pose, front view, arms held away from the body, legs apart, entire figure visible head to feet, centered. Plain light grey background, soft even studio light, no ground shadow, no text.",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1791632971896,
"started_at": 1791632971903,
"finished_at": 1791633010740,
"expires_at": 1791892210740,
"image_urls": [
"https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/uploads/image_01a125a5-907a-77da-99a3-be525527e657_0.png"
],
"consumed_credits": 12
}

View file

@ -0,0 +1,41 @@
{
"id": "01a125a6-b87a-73f0-91b3-3f665c2527ba",
"type": "image-to-3d",
"name": "",
"art_style": "",
"object_prompt": "",
"style_prompt": "",
"negative_prompt": "",
"texture_prompt": "",
"texture_image_url": "",
"text_style_prompt": "",
"image_style_url": "",
"status": "SUCCEEDED",
"created_at": 1791633046103,
"progress": 100,
"started_at": 1791633046110,
"finished_at": 1791633189188,
"expires_at": 1791892389188,
"task_error": null,
"model_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/model.glb",
"model_urls": {
"glb": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/model.glb",
"pre_remeshed_glb": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/pre_remeshed_model.glb"
},
"thumbnail_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/preview.png",
"thumbnail_urls": {
"back": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/preview_back.png",
"front": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/preview_front.png",
"left": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/preview_left.png",
"right": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/preview_right.png"
},
"texture_urls": [
{
"base_color": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/texture_0.png",
"metallic": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/texture_0_metallic.png",
"roughness": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/texture_0_roughness.png",
"normal": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a6-b87a-73f0-91b3-3f665c2527ba/output/texture_0_normal.png"
}
],
"consumed_credits": 30
}

View file

@ -0,0 +1,25 @@
{
"id": "01a125a9-08d5-708d-8c13-daae256ffe70",
"type": "rig",
"name": "",
"status": "SUCCEEDED",
"created_at": 1791633201159,
"progress": 100,
"started_at": 1791633201170,
"finished_at": 1791633217290,
"expires_at": 1791892417290,
"task_error": null,
"result": {
"rigged_character_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-08d5-708d-8c13-daae256ffe70/output/Character_output.fbx",
"rigged_character_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-08d5-708d-8c13-daae256ffe70/output/Character_output.glb",
"basic_animations": {
"walking_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-08d5-708d-8c13-daae256ffe70/output/Animation_Walking_withSkin.glb",
"walking_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-08d5-708d-8c13-daae256ffe70/output/Animation_Walking_withSkin.fbx",
"walking_armature_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-08d5-708d-8c13-daae256ffe70/output/Animation_Walking_withSkin_armature.glb",
"running_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-08d5-708d-8c13-daae256ffe70/output/Animation_Running_withSkin.glb",
"running_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-08d5-708d-8c13-daae256ffe70/output/Animation_Running_withSkin.fbx",
"running_armature_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125a9-08d5-708d-8c13-daae256ffe70/output/Animation_Running_withSkin_armature.glb"
}
},
"consumed_credits": 5
}