U5.5 Herdhüter: achte Meshy-Figur (g09)

Herdofen-Golem mit fester Feuerschale an der Hüfte, Zauberbewegungen
(Feuerzauber, aufgeladener Zauber), Farbangleich nur für das Gold,
68 Credits, Lane-Fassung inklusive. Stresstest 36 Herdhüter: Mid
163,5 -> 156,8 fps, Karte 123,4 -> 131,3. 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 15:46:01 +02:00
parent eb8a537d54
commit 024937ce4a
71 changed files with 60107 additions and 58062 deletions

View file

@ -0,0 +1,486 @@
{
"id": "herdhueter",
"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": "['HerdhueterBody_LOD0', 'HerdhueterBody_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": "25139 fbx / 25139 godot"
},
{
"check": "one_armature",
"ok": true,
"detail": "['HerdhueterRig']"
},
{
"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": "25139 / 25139"
},
{
"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": "mage_soell_cast",
"frames": [
0.0,
54.400001525878906
],
"seconds": 1.0833,
"loop": false,
"contact_seconds": 0.3585
},
"attack_b": {
"source": "Over_Shoulder_Throw",
"frames": [
4,
30
],
"seconds": 1.0,
"loop": false,
"contact_seconds": 0.6538
},
"hit": {
"source": "Hit_Reaction",
"frames": [
0,
12
],
"seconds": 0.5,
"loop": false,
"contact_seconds": -1.0
},
"ability": {
"source": "Charged_Spell_Cast",
"frames": [
0.0,
64.0
],
"seconds": 1.4167,
"loop": false,
"contact_seconds": 0.9961
},
"death": {
"source": "dying_backwards",
"frames": [
0.0,
52.80000305175781
],
"seconds": 2.2083,
"loop": false,
"contact_seconds": -1.0
}
},
"textures": {
"glow_share": 0.0182,
"palette_gains": {
"metal": [
1.4418,
1.3734,
0.9035
]
},
"size": [
2048,
2048
]
},
"unit": 0.009999999776482582,
"lod": {
"lod0_triangles": 20141,
"lod1_triangles": 4998,
"lod1_vertices": 2509,
"welded_triangles": 20141,
"lod0_screen": 0.2
},
"props": []
},
"inputs_sha256": {
"tools/meshy/g09/figure.json": "b8fbf09467fb1a5bb4d21f460e3fb461036b271ef572b2763f2f83de95ed00a4",
"assets-source/meshy/g09/herdhueter-skelett.glb": "713603b1de0beb153981506678d6715307b5b251e9354fbcda2658a86660c0c4",
"assets-source/meshy/g09/herdhueter-animationen.glb": "c7a5c7338c29a2eb316fe650ca3b708ea533c8d84c07f9fa9d865351eefcce6b"
},
"source_sha256": "4d5cdab415e4bfa97abe420f7457d4e1cddd67b9a76c23ccb6f9313a2fd8ea4e",
"removed_modifiers": 0,
"kind": "skinned",
"fps": 24.0,
"objects": 3,
"meshes": {
"HerdhueterBody_LOD0": {
"mesh": "HerdhueterBody_LOD0",
"triangles": 20141,
"vertices": 21860,
"ngons": 0,
"materials": [
"AI_Herdhueter"
],
"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.776,
-0.0,
-0.3918
],
"max": [
0.7772,
1.45,
0.3949
]
}
},
"HerdhueterBody_LOD1": {
"mesh": "HerdhueterBody_LOD1",
"triangles": 4998,
"vertices": 2509,
"ngons": 0,
"materials": [
"AI_Herdhueter"
],
"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.776,
-0.0,
-0.392
],
"max": [
0.7777,
1.45,
0.3957
]
}
}
},
"armatures": {
"HerdhueterRig": {
"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.776,
-0.0,
-0.392
],
"max": [
0.7777,
1.45,
0.3957
]
},
"clips": [
{
"name": "ability",
"frames": [
0.0,
34.0
],
"seconds": 1.4167,
"loop": false,
"contact_seconds": 0.9961
},
{
"name": "attack_a",
"frames": [
0.0,
26.0
],
"seconds": 1.0833,
"loop": false,
"contact_seconds": 0.3585
},
{
"name": "attack_b",
"frames": [
0.0,
24.0
],
"seconds": 1.0,
"loop": false,
"contact_seconds": 0.6538
},
{
"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": 25139,
"bones": 25,
"clips": [
"idle",
"walk",
"attack_a",
"attack_b",
"hit",
"ability",
"death"
]
},
"meshes_with_ngons": {},
"meshes_without_uv": [],
"triangles": 25139,
"fbx": "Assets/Luneraria/Art/Characters/herdhueter.fbx",
"fbx_bytes": 3170028,
"ok": true
}

View file

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

Binary file not shown.

View file

@ -0,0 +1,337 @@
fileFormatVersion: 2
guid: b8441e587f74d4644ae91dbc0a6aa237
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: HerdhueterRig|ability
internalID: -817364748856007996
firstFrame: 0
lastFrame: 34
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.70311284
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: HerdhueterRig|attack_a
internalID: -6551953088108178907
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.33093327
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: HerdhueterRig|attack_b
internalID: 6067234716690994976
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: death
takeName: HerdhueterRig|death
internalID: 3124675449995976950
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: HerdhueterRig|hit
internalID: -6529938326446131921
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: HerdhueterRig|idle
internalID: 7838156346192728037
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: HerdhueterRig|walk
internalID: 7771137154590510994
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 &-6373384890404808317
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: -442112480009366297}
m_Position: {x: 200, y: 0, z: 0}
- serializedVersion: 1
m_State: {fileID: -5411923741965665210}
m_Position: {x: 235, y: 65, z: 0}
- serializedVersion: 1
m_State: {fileID: 603620564753002357}
m_Position: {x: 270, y: 130, z: 0}
- serializedVersion: 1
m_State: {fileID: 2473966187590044670}
m_Position: {x: 305, y: 195, z: 0}
- serializedVersion: 1
m_State: {fileID: 4623508853887791883}
m_Position: {x: 340, y: 260, z: 0}
- serializedVersion: 1
m_State: {fileID: 8953711105354662480}
m_Position: {x: 375, y: 325, z: 0}
- serializedVersion: 1
m_State: {fileID: 1125744478770656220}
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: -442112480009366297}
--- !u!1102 &-5411923741965665210
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: -817364748856007996, guid: b8441e587f74d4644ae91dbc0a6aa237, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &-442112480009366297
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: 7838156346192728037, guid: b8441e587f74d4644ae91dbc0a6aa237, 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: herdhueter
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: -6373384890404808317}
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 &603620564753002357
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: -6551953088108178907, guid: b8441e587f74d4644ae91dbc0a6aa237, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &1125744478770656220
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: 7771137154590510994, guid: b8441e587f74d4644ae91dbc0a6aa237, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &2473966187590044670
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: 6067234716690994976, guid: b8441e587f74d4644ae91dbc0a6aa237, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &4623508853887791883
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: 3124675449995976950, guid: b8441e587f74d4644ae91dbc0a6aa237, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &8953711105354662480
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: -6529938326446131921, guid: b8441e587f74d4644ae91dbc0a6aa237, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 MiB

View file

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 2de87d693711c4394a0e6301d6df3c8d
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.5 MiB

View file

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: b5c3e7e2110514c42b2333d2f7f30805
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.2 MiB

View file

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 993e977ea812448c1a7ef66524635b90
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

@ -197,6 +197,10 @@ MonoBehaviour:
Neutral: {fileID: 2100000, guid: 3457f10507e8a47008df03877c11698c, type: 2} Neutral: {fileID: 2100000, guid: 3457f10507e8a47008df03877c11698c, type: 2}
Blau: {fileID: 0} Blau: {fileID: 0}
Rot: {fileID: 0} Rot: {fileID: 0}
- Key: AI_Herdhueter
Neutral: {fileID: 2100000, guid: 9915439a567434a72af9214c382d63c6, type: 2}
Blau: {fileID: 0}
Rot: {fileID: 0}
- Key: AI_Kohlenbeisser - Key: AI_Kohlenbeisser
Neutral: {fileID: 2100000, guid: 19529a85bbe534478a40059f9505d897, type: 2} Neutral: {fileID: 2100000, guid: 19529a85bbe534478a40059f9505d897, type: 2}
Blau: {fileID: 0} 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_Herdhueter
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: 2de87d693711c4394a0e6301d6df3c8d, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMap:
m_Texture: {fileID: 2800000, guid: b5c3e7e2110514c42b2333d2f7f30805, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OrmMap:
m_Texture: {fileID: 2800000, guid: 993e977ea812448c1a7ef66524635b90, 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: 9915439a567434a72af9214c382d63c6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load diff

View file

@ -83,8 +83,8 @@ MonoBehaviour:
Prefab: {fileID: 919132149155446097, guid: 73ea5eb2ee45348678205327bd213fe6, type: 3} Prefab: {fileID: 919132149155446097, guid: 73ea5eb2ee45348678205327bd213fe6, type: 3}
Controller: {fileID: 9100000, guid: 2fc2470c3e32a45aea03cc59d5d9accb, type: 2} Controller: {fileID: 9100000, guid: 2fc2470c3e32a45aea03cc59d5d9accb, type: 2}
- Id: g09 - Id: g09
Prefab: {fileID: 919132149155446097, guid: 957a60d5dc42440a6bf97264ae0bea2a, type: 3} Prefab: {fileID: 919132149155446097, guid: b8441e587f74d4644ae91dbc0a6aa237, type: 3}
Controller: {fileID: 0} Controller: {fileID: 9100000, guid: c39607363641a49fda53739117ea26a4, type: 2}
- Id: g10 - Id: g10
Prefab: {fileID: 919132149155446097, guid: eab745fe77c754fc8802ef073fcd610b, type: 3} Prefab: {fileID: 919132149155446097, guid: eab745fe77c754fc8802ef073fcd610b, type: 3}
Controller: {fileID: 0} Controller: {fileID: 0}
@ -94,6 +94,9 @@ MonoBehaviour:
- Id: glasballiste_meshy - Id: glasballiste_meshy
Prefab: {fileID: 919132149155446097, guid: 9e7984da72d934624961bf1843a975a2, type: 3} Prefab: {fileID: 919132149155446097, guid: 9e7984da72d934624961bf1843a975a2, type: 3}
Controller: {fileID: 9100000, guid: 333e60f0eb4384e86b5fd3f2a5242bcd, type: 2} Controller: {fileID: 9100000, guid: 333e60f0eb4384e86b5fd3f2a5242bcd, type: 2}
- Id: herdhueter
Prefab: {fileID: 919132149155446097, guid: b8441e587f74d4644ae91dbc0a6aa237, type: 3}
Controller: {fileID: 9100000, guid: c39607363641a49fda53739117ea26a4, type: 2}
- Id: kohlenbeisser - Id: kohlenbeisser
Prefab: {fileID: 919132149155446097, guid: cb652a88669c64f4d98a351c01bf9642, type: 3} Prefab: {fileID: 919132149155446097, guid: cb652a88669c64f4d98a351c01bf9642, type: 3}
Controller: {fileID: 9100000, guid: 26a63e3ffbfe94d109316067e70ea293, type: 2} Controller: {fileID: 9100000, guid: 26a63e3ffbfe94d109316067e70ea293, type: 2}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

View file

@ -207,6 +207,17 @@ Hinweis: Die Projektdateien des .NET-Harness (`tools/dotnet/*/*.csproj`) fehlten
| Bild | `screenshots/u5.5-g08/` | | Bild | `screenshots/u5.5-g08/` |
| Commits | `luneraria/u5.5-g08` | | Commits | `luneraria/u5.5-g08` |
## U5.5 · Herdhüter (g09)
| 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 `g09` mit Lane-Fassung und Zauberbewegungen, 68 Credits |
| Leistung | Stresstest 36 Herdhüter: Mid 163,5 → 156,8 fps, Karte 123,4 → 131,3 fps. Rohdaten `logs/u5.5-g09/` |
| Bild | `screenshots/u5.5-g09/` |
| Commits | `luneraria/u5.5-g09` |
## Ausblick ## 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. 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 # Port-Status · Champions of Luneraria in Unity
Stand: 10. Oktober 2026 (U5.5, siebte Figur). Stand: 10. Oktober 2026 (U5.5, achte 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. 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) | | 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) | | 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) | | 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`); **Aschenwerfer** `g07` (`luneraria/u5.5-g07`), −11 % Mid / +2 % Karte; **Kraterrufer** `g08` (`luneraria/u5.5-g08`), −9 % Mid / +10 % Karte | [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; **Kraterrufer** `g08` (`luneraria/u5.5-g08`), −9 % Mid / +10 % Karte; **Herdhüter** `g09` (`luneraria/u5.5-g09`), −4 % Mid / +6 % Karte | [U5-VISUAL.md](U5-VISUAL.md) |
QA je Meilenstein: [PORT-QA.md](PORT-QA.md). QA je Meilenstein: [PORT-QA.md](PORT-QA.md).

View file

@ -599,3 +599,22 @@ Stand 10. Oktober 2026, Zweig `luneraria/u5.5-g08` (auf `luneraria/u5.5-g07`). D
| Asset-Prüfung / Player-Selbsttest | 20/0, 30/30 | | Asset-Prüfung / Player-Selbsttest | 20/0, 30/30 |
Stresstest mit 36 Kraterrufern (`-luneBenchmarkArmy g08`), je drei Läufe gegen das starre Phase-4-Modell (`logs/u5.5-g08/`): Mid-Lane nah 171,3 → 155,1 fps (−9 %), Karte 123,5 → 136,2 fps (+10 %). Bilder: `screenshots/u5.5-g08/`. Stresstest mit 36 Kraterrufern (`-luneBenchmarkArmy g08`), je drei Läufe gegen das starre Phase-4-Modell (`logs/u5.5-g08/`): Mid-Lane nah 171,3 → 155,1 fps (−9 %), Karte 123,5 → 136,2 fps (+10 %). Bilder: `screenshots/u5.5-g08/`.
## U5.5 · Achte Figur: Herdhüter (g09)
Stand 10. Oktober 2026, Zweig `luneraria/u5.5-g09` (auf `luneraria/u5.5-g08`). Der Unterstützer der Glutpakt über das Auto-Rigging: ein Konzeptbild aus Icon, Phase-4-Bild und Aschenwerfer-Konzept (12 Credits), Modell (30), Skelett mit 1,45 m (5), sieben Bewegungen (21), zusammen **68 Credits**.
- Entwurf: Rumpf und Kopf sind ein hoher Herdofen aus hellem Kalkstein mit Schornstein, Goldraute und glühendem Ofenmaul; die Feuerschale aus dem Icon sitzt fest an der Hüfte statt in den Händen, damit das Auto-Rigging keine gehaltene Schale an die Arme bindet. Schultern, Arme und Beine aus dunklem Basalt mit Goldbändern.
- Bewegungen eines Unterstützers: `attack_a` ein Feuerzauber mit erhobener Hand (1,1 s, Treffer bei 0,4 s), `attack_b` der Wurf über die Schulter, `ability` ein aufgeladener Zauber (1,4 s) für die Stärkung der Verbündeten.
- Farbangleich nur für das Gold: Die Figur hat zwei Steintöne (heller Ofen, dunkler Basalt); ein gemeinsamer Steinangleich hätte den Ofen verdunkelt.
- `herdhueter.fbx`: 20.141 + 4.998 Dreiecke, 25 Knochen; Export 23 Prüfungen, bytegleich wiederholbar. Manifest `"replaces": "g09"`.
| 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 Herdhütern (`-luneBenchmarkArmy g09`), je drei Läufe gegen das starre Phase-4-Modell (`logs/u5.5-g09/`): Mid-Lane nah 163,5 → 156,8 fps (−4 %, die Läufe streuen hier stärker), Karte 123,4 → 131,3 fps (+6 %). Bilder: `screenshots/u5.5-g09/`.
Bekannt: In der Leerlaufhaltung neigt der Kopfknochen der Bibliotheksbewegung den Ofen nach vorn, das Ofenmaul ist dann aus der Nähe weniger zu sehen.

View file

@ -1821,6 +1821,173 @@
] ]
} }
}, },
{
"id": "herdhueter",
"kind": "skinned",
"ok": true,
"checks": [
{
"check": "blender_checks_passed",
"ok": true,
"detail": ""
},
{
"check": "imported",
"ok": true,
"detail": "\"Assets/Luneraria/Art/Characters/herdhueter.fbx\""
},
{
"check": "import_rules_applied",
"ok": true,
"detail": ""
},
{
"check": "root_transform_identity",
"ok": true,
"detail": "\"herdhueter 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": "\"25139 unity / 25139 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.776, 0.000, -0.392) (0.778, 1.450, 0.396)\""
},
{
"check": "skinned_mesh",
"ok": true,
"detail": "2"
},
{
"check": "bone_names HerdhueterBody_LOD0",
"ok": true,
"detail": "[]"
},
{
"check": "root_bone HerdhueterBody_LOD0",
"ok": true,
"detail": "\"Root\""
},
{
"check": "bone_names HerdhueterBody_LOD1",
"ok": true,
"detail": "[]"
},
{
"check": "root_bone HerdhueterBody_LOD1",
"ok": true,
"detail": "\"Root\""
},
{
"check": "generic_avatar",
"ok": true,
"detail": "\"herdhueterAvatar\""
},
{
"check": "clips",
"ok": true,
"detail": "[]"
}
],
"facts": {
"triangles": 25139,
"renderers": 2,
"meshes_without_uv_and_tangents": 0,
"degenerate_triangles_dropped": 0,
"bounds_min": [
-0.776041031,
-3.13281125E-05,
-0.3920062
],
"bounds_max": [
0.7777403,
1.44999969,
0.3956609
],
"clips": [
{
"name": "ability",
"length": 1.41666663,
"loop": false,
"events": 1
},
{
"name": "attack_a",
"length": 1.08333337,
"loop": false,
"events": 1
},
{
"name": "attack_b",
"length": 1.0,
"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": "kohlenbeisser", "id": "kohlenbeisser",
"kind": "skinned", "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 g09 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g09 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": 2568, "fps": 128.4, "frame_ms_avg": 7.79, "frame_ms_median": 3.21, "frame_ms_p95": 25.32, "frame_ms_p99": 31.31, "frame_ms_max": 38.00, "frames_over_16_7_ms": 417, "of_them_with_simulation_step": 29, "gc_collections": 22, "simulation_ms_per_frame": 0.082, "views_ms_per_frame": 0.216, "ui_ms_per_frame": 0.072, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.64 / median 2.51 / p95 3.61 ms, render thread avg 1.85 / median 1.84 / p95 2.16 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.14 / median 0.17 / p95 22.72 ms
{"view": "mid lane close (zoom 22)", "frames": 1515, "fps": 151.5, "frame_ms_avg": 6.60, "frame_ms_median": 3.00, "frame_ms_p95": 21.95, "frame_ms_p99": 30.20, "frame_ms_max": 37.58, "frames_over_16_7_ms": 158, "of_them_with_simulation_step": 9, "gc_collections": 10, "simulation_ms_per_frame": 0.048, "views_ms_per_frame": 0.193, "ui_ms_per_frame": 0.056, "units_alive_max": 43}
// timings mid lane close (zoom 22): main thread avg 2.06 / median 1.97 / p95 2.99 ms, render thread avg 1.39 / median 1.39 / p95 1.61 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.55 / median 0.17 / p95 19.93 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 g09 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g09 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": 2645, "fps": 132.1, "frame_ms_avg": 7.57, "frame_ms_median": 3.41, "frame_ms_p95": 23.32, "frame_ms_p99": 30.92, "frame_ms_max": 40.70, "frames_over_16_7_ms": 369, "of_them_with_simulation_step": 20, "gc_collections": 22, "simulation_ms_per_frame": 0.079, "views_ms_per_frame": 0.206, "ui_ms_per_frame": 0.071, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.55 / median 2.34 / p95 3.89 ms, render thread avg 1.82 / median 1.80 / p95 2.15 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.01 / median 0.26 / p95 21.07 ms
{"view": "mid lane close (zoom 22)", "frames": 1590, "fps": 158.7, "frame_ms_avg": 6.30, "frame_ms_median": 3.00, "frame_ms_p95": 20.79, "frame_ms_p99": 28.40, "frame_ms_max": 36.20, "frames_over_16_7_ms": 162, "of_them_with_simulation_step": 14, "gc_collections": 10, "simulation_ms_per_frame": 0.047, "views_ms_per_frame": 0.181, "ui_ms_per_frame": 0.052, "units_alive_max": 43}
// timings mid lane close (zoom 22): main thread avg 1.91 / median 1.80 / p95 2.78 ms, render thread avg 1.40 / median 1.39 / p95 1.63 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.38 / median 0.36 / p95 18.83 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 g09 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g09 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": 2670, "fps": 133.5, "frame_ms_avg": 7.49, "frame_ms_median": 3.20, "frame_ms_p95": 24.11, "frame_ms_p99": 32.81, "frame_ms_max": 42.11, "frames_over_16_7_ms": 377, "of_them_with_simulation_step": 36, "gc_collections": 22, "simulation_ms_per_frame": 0.080, "views_ms_per_frame": 0.199, "ui_ms_per_frame": 0.068, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.47 / median 2.32 / p95 3.51 ms, render thread avg 1.84 / median 1.83 / p95 2.18 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.02 / median 0.30 / p95 21.67 ms
{"view": "mid lane close (zoom 22)", "frames": 1605, "fps": 160.3, "frame_ms_avg": 6.24, "frame_ms_median": 3.00, "frame_ms_p95": 21.40, "frame_ms_p99": 30.60, "frame_ms_max": 35.19, "frames_over_16_7_ms": 139, "of_them_with_simulation_step": 13, "gc_collections": 10, "simulation_ms_per_frame": 0.047, "views_ms_per_frame": 0.175, "ui_ms_per_frame": 0.050, "units_alive_max": 43}
// timings mid lane close (zoom 22): main thread avg 1.85 / median 1.75 / p95 2.71 ms, render thread avg 1.41 / median 1.40 / p95 1.67 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.38 / median 0.99 / p95 19.48 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 g09 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g09 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": 2395, "fps": 119.7, "frame_ms_avg": 8.35, "frame_ms_median": 3.79, "frame_ms_p95": 25.30, "frame_ms_p99": 34.91, "frame_ms_max": 49.11, "frames_over_16_7_ms": 395, "of_them_with_simulation_step": 35, "gc_collections": 21, "simulation_ms_per_frame": 0.091, "views_ms_per_frame": 0.237, "ui_ms_per_frame": 0.084, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.92 / median 2.67 / p95 4.59 ms, render thread avg 2.00 / median 1.98 / p95 2.39 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.44 / median 0.26 / p95 22.83 ms
{"view": "mid lane close (zoom 22)", "frames": 1507, "fps": 150.4, "frame_ms_avg": 6.65, "frame_ms_median": 3.11, "frame_ms_p95": 21.52, "frame_ms_p99": 29.01, "frame_ms_max": 39.19, "frames_over_16_7_ms": 150, "of_them_with_simulation_step": 5, "gc_collections": 10, "simulation_ms_per_frame": 0.053, "views_ms_per_frame": 0.251, "ui_ms_per_frame": 0.078, "units_alive_max": 43}
// timings mid lane close (zoom 22): main thread avg 2.49 / median 2.36 / p95 3.91 ms, render thread avg 1.52 / median 1.51 / p95 1.83 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.14 / median 0.01 / p95 18.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 g09 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g09 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": 2556, "fps": 127.8, "frame_ms_avg": 7.83, "frame_ms_median": 3.30, "frame_ms_p95": 24.81, "frame_ms_p99": 32.00, "frame_ms_max": 43.60, "frames_over_16_7_ms": 377, "of_them_with_simulation_step": 36, "gc_collections": 22, "simulation_ms_per_frame": 0.085, "views_ms_per_frame": 0.196, "ui_ms_per_frame": 0.068, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.44 / median 2.26 / p95 3.80 ms, render thread avg 1.94 / median 1.91 / p95 2.46 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.39 / median 0.44 / p95 22.18 ms
{"view": "mid lane close (zoom 22)", "frames": 1747, "fps": 174.7, "frame_ms_avg": 5.72, "frame_ms_median": 2.60, "frame_ms_p95": 19.56, "frame_ms_p99": 27.91, "frame_ms_max": 33.39, "frames_over_16_7_ms": 144, "of_them_with_simulation_step": 8, "gc_collections": 10, "simulation_ms_per_frame": 0.041, "views_ms_per_frame": 0.166, "ui_ms_per_frame": 0.048, "units_alive_max": 43}
// timings mid lane close (zoom 22): main thread avg 1.63 / median 1.51 / p95 2.49 ms, render thread avg 1.31 / median 1.30 / p95 1.56 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.10 / median 0.62 / p95 18.01 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 g09 x36, speed 1x, measured after 10 s of combat",
// moving units at the start of the first window: g09 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": 2453, "fps": 122.6, "frame_ms_avg": 8.15, "frame_ms_median": 3.37, "frame_ms_p95": 26.60, "frame_ms_p99": 34.40, "frame_ms_max": 48.40, "frames_over_16_7_ms": 427, "of_them_with_simulation_step": 40, "gc_collections": 22, "simulation_ms_per_frame": 0.085, "views_ms_per_frame": 0.201, "ui_ms_per_frame": 0.074, "units_alive_max": 98},
// timings overview (zoom 64): main thread avg 2.47 / median 2.33 / p95 3.70 ms, render thread avg 1.89 / median 1.87 / p95 2.39 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.69 / median 0.38 / p95 24.05 ms
{"view": "mid lane close (zoom 22)", "frames": 1655, "fps": 165.4, "frame_ms_avg": 6.04, "frame_ms_median": 3.01, "frame_ms_p95": 19.84, "frame_ms_p99": 27.49, "frame_ms_max": 290.58, "frames_over_16_7_ms": 146, "of_them_with_simulation_step": 12, "gc_collections": 9, "simulation_ms_per_frame": 0.047, "views_ms_per_frame": 0.195, "ui_ms_per_frame": 0.056, "units_alive_max": 43}
// timings mid lane close (zoom 22): main thread avg 2.04 / median 1.78 / p95 3.40 ms, render thread avg 1.32 / median 1.29 / p95 1.59 ms, gpu avg 0.02 / median 0.00 / p95 0.00 ms, present wait avg 4.01 / median 0.25 / p95 17.96 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": 816, "seconds": 27.184, "measured_fps": 30.018, "max_steps_per_frame": 17, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
{"target": "60 fps", "frames": 1626, "seconds": 27.089, "measured_fps": 60.024, "max_steps_per_frame": 11, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
{"target": "120 fps", "frames": 3223, "seconds": 26.895, "measured_fps": 119.835, "max_steps_per_frame": 7, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
{"target": "unlimited", "frames": 84937, "seconds": 26.81, "measured_fps": 3168.152, "max_steps_per_frame": 7, "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": 49390, "fps": 2469.462, "frame_ms_avg": 0.405, "frame_ms_p95": 0.422, "simulation_ms_per_frame": 0.004, "views_ms_per_frame": 0.129, "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: 546 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 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: 602 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 669 KiB

View file

@ -1902,6 +1902,51 @@
"death" "death"
] ]
} }
},
{
"id": "herdhueter",
"group": "Characters",
"kind": "skinned",
"representative": "U5.5 series: Herdhüter (g09) from Meshy (image to 3D, auto rig, library clips)",
"source": "tools/meshy/build_figure.py",
"source_root": "unity",
"generator": {
"args": [
"tools/meshy/g09/figure.json"
],
"inputs": [
"tools/meshy/g09/figure.json",
"assets-source/meshy/g09/herdhueter-skelett.glb",
"assets-source/meshy/g09/herdhueter-animationen.glb"
]
},
"replaces": "g09",
"expect": {
"triangles": 25139,
"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": { "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 Herdh\u00fcter, a support golem: its torso and head are one tall hearth oven of pale grey limestone blocks with a rounded chimney top and a gold diamond emblem, a dark arched oven mouth in the chest with a glowing fire and embers inside; a round gold brazier bowl with a burning fire is built into the front of its waist below the oven mouth; broad shoulders of black basalt with round gold medallions, thick black basalt arms with gold bands ending in big blocky rock fists, short sturdy legs with gold ankle bands and blocky rock feet. Its hands are free. 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_g09_herdhueter_icon.png",
"@tools/meshy/g09/ref-g09-phase4.png",
"@assets-source/meshy/g07/aschenwerfer-konzept.png"
]
}

View file

@ -0,0 +1,16 @@
{
"input_task_id": "01a125fc-4f69-7364-ae3e-6d622378eeac",
"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": "01a125fd-5c11-7541-9a3b-614e1dfd5703",
"height_meters": 1.45
}

View file

@ -0,0 +1,4 @@
{
"rig_task_id": "01a125ff-d8ad-76c0-b399-3e1c93ce9db0",
"action_ids": [0, 119, 129, 421, 178, 125, 189]
}

View file

@ -0,0 +1,21 @@
{
"id": "herdhueter",
"replaces": "g09",
"rig": "assets-source/meshy/g09/herdhueter-skelett.glb",
"animations": "assets-source/meshy/g09/herdhueter-animationen.glb",
"material": "AI_Herdhueter",
"textures": "Assets/Luneraria/Art/Textures/ai-herdhueter",
"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": {"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": "mage_soell_cast", "seconds": 1.1, "contact_frame": 18},
"attack_b": {"source": "Over_Shoulder_Throw", "frames": [4, 30], "seconds": 1.0, "contact_frame": 21},
"hit": {"source": "Hit_Reaction", "frames": [0, 12], "seconds": 0.5},
"ability": {"source": "Charged_Spell_Cast", "seconds": 1.4, "contact_frame": 45},
"death": {"source": "dying_backwards"}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

View file

@ -0,0 +1,20 @@
{
"id": "01a12600-403f-749c-a608-404c00508700",
"type": "animate",
"name": "",
"status": "SUCCEEDED",
"created_at": 1791638913419,
"progress": 100,
"started_at": 1791638913430,
"finished_at": 1791638933034,
"expires_at": 1791898133034,
"task_error": null,
"result": {
"animation_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12600-403f-749c-a608-404c00508700/output/merged_animations.glb",
"animation_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12600-403f-749c-a608-404c00508700/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": "01a125fc-4f69-7364-ae3e-6d622378eeac",
"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 Herdh\u00fcter, a support golem: its torso and head are one tall hearth oven of pale grey limestone blocks with a rounded chimney top and a gold diamond emblem, a dark arched oven mouth in the chest with a glowing fire and embers inside; a round gold brazier bowl with a burning fire is built into the front of its waist below the oven mouth; broad shoulders of black basalt with round gold medallions, thick black basalt arms with gold bands ending in big blocky rock fists, short sturdy legs with gold ankle bands and blocky rock feet. Its hands are free. 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": 1791638656955,
"started_at": 1791638656965,
"finished_at": 1791638692532,
"expires_at": 1791897892532,
"image_urls": [
"https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/uploads/image_01a125fc-4f69-7364-ae3e-6d622378eeac_0.png"
],
"consumed_credits": 12
}

View file

@ -0,0 +1,41 @@
{
"id": "01a125fd-5c11-7541-9a3b-614e1dfd5703",
"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": 1791638724102,
"progress": 100,
"started_at": 1791638724110,
"finished_at": 1791638879080,
"expires_at": 1791898079080,
"task_error": null,
"model_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/model.glb",
"model_urls": {
"glb": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/model.glb",
"pre_remeshed_glb": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/pre_remeshed_model.glb"
},
"thumbnail_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/preview.png",
"thumbnail_urls": {
"back": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/preview_back.png",
"front": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/preview_front.png",
"left": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/preview_left.png",
"right": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/preview_right.png"
},
"texture_urls": [
{
"base_color": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/texture_0.png",
"metallic": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/texture_0_metallic.png",
"roughness": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/texture_0_roughness.png",
"normal": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125fd-5c11-7541-9a3b-614e1dfd5703/output/texture_0_normal.png"
}
],
"consumed_credits": 30
}

View file

@ -0,0 +1,25 @@
{
"id": "01a125ff-d8ad-76c0-b399-3e1c93ce9db0",
"type": "rig",
"name": "",
"status": "SUCCEEDED",
"created_at": 1791638890035,
"progress": 100,
"started_at": 1791638890044,
"finished_at": 1791638904803,
"expires_at": 1791898104803,
"task_error": null,
"result": {
"rigged_character_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125ff-d8ad-76c0-b399-3e1c93ce9db0/output/Character_output.fbx",
"rigged_character_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125ff-d8ad-76c0-b399-3e1c93ce9db0/output/Character_output.glb",
"basic_animations": {
"walking_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125ff-d8ad-76c0-b399-3e1c93ce9db0/output/Animation_Walking_withSkin.glb",
"walking_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125ff-d8ad-76c0-b399-3e1c93ce9db0/output/Animation_Walking_withSkin.fbx",
"walking_armature_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125ff-d8ad-76c0-b399-3e1c93ce9db0/output/Animation_Walking_withSkin_armature.glb",
"running_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125ff-d8ad-76c0-b399-3e1c93ce9db0/output/Animation_Running_withSkin.glb",
"running_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125ff-d8ad-76c0-b399-3e1c93ce9db0/output/Animation_Running_withSkin.fbx",
"running_armature_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a125ff-d8ad-76c0-b399-3e1c93ce9db0/output/Animation_Running_withSkin_armature.glb"
}
},
"consumed_credits": 5
}