U5.5 Funkenlanze: vierte Meshy-Figur (g05 und Heldin)
Figur und Lanze getrennt von Meshy; build_figure legt die Lanze in die rechte Hand und bindet sie an RightHand (props), Lanzenstoß aus dem Stand (in_place). Ersetzungen gelten nach den Godot-Zuordnungen. HUD-Porträts zeichnen Skelettfiguren als gebackenes Netz: mit GPU-Skinning blieben Karten leer. 110 Credits. Stresstest 38 Funkenlanzen gegen Phase 18: Mid 128,6 -> 147,6 fps, Karte 112,4 -> 128,0. Tests grün, Fingerabdrücke unverändert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
597
Assets/Luneraria/Art/Characters/funkenlanze_meshy.export.json
Normal file
|
|
@ -0,0 +1,597 @@
|
|||
{
|
||||
"id": "funkenlanze_meshy",
|
||||
"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": "['FunkenlanzeLanze_LOD0', 'FunkenlanzeLanze_LOD1', 'Funkenlanze_meshyBody_LOD0', 'Funkenlanze_meshyBody_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": "29045 fbx / 29045 godot"
|
||||
},
|
||||
{
|
||||
"check": "one_armature",
|
||||
"ok": true,
|
||||
"detail": "['Funkenlanze_meshyRig']"
|
||||
},
|
||||
{
|
||||
"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": "29045 / 29045"
|
||||
},
|
||||
{
|
||||
"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": "Walk_Fight_Forward",
|
||||
"frames": [
|
||||
0.0,
|
||||
40.0
|
||||
],
|
||||
"seconds": 1.2917,
|
||||
"loop": true,
|
||||
"contact_seconds": -1.0
|
||||
},
|
||||
"attack_a": {
|
||||
"source": "Thrust_Slash",
|
||||
"frames": [
|
||||
4,
|
||||
30
|
||||
],
|
||||
"seconds": 1.0,
|
||||
"loop": false,
|
||||
"contact_seconds": 0.6538
|
||||
},
|
||||
"attack_b": {
|
||||
"source": "Right_Hand_Sword_Slash",
|
||||
"frames": [
|
||||
0,
|
||||
36
|
||||
],
|
||||
"seconds": 1.0417,
|
||||
"loop": false,
|
||||
"contact_seconds": 0.4051
|
||||
},
|
||||
"hit": {
|
||||
"source": "Hit_Reaction",
|
||||
"frames": [
|
||||
0,
|
||||
12
|
||||
],
|
||||
"seconds": 0.5,
|
||||
"loop": false,
|
||||
"contact_seconds": -1.0
|
||||
},
|
||||
"ability": {
|
||||
"source": "Charged_Slash",
|
||||
"frames": [
|
||||
0.0,
|
||||
52.80000305175781
|
||||
],
|
||||
"seconds": 1.2083,
|
||||
"loop": false,
|
||||
"contact_seconds": 0.2975
|
||||
},
|
||||
"death": {
|
||||
"source": "Shot_and_Fall_Backward",
|
||||
"frames": [
|
||||
0.0,
|
||||
84.0
|
||||
],
|
||||
"seconds": 2.4167,
|
||||
"loop": false,
|
||||
"contact_seconds": -1.0
|
||||
}
|
||||
},
|
||||
"textures": {
|
||||
"glow_share": 0.0104,
|
||||
"palette_gains": {
|
||||
"rock": [
|
||||
0.8951,
|
||||
1.1038,
|
||||
1.4391
|
||||
],
|
||||
"metal": [
|
||||
2.0845,
|
||||
1.7399,
|
||||
0.7883
|
||||
]
|
||||
},
|
||||
"size": [
|
||||
2048,
|
||||
2048
|
||||
]
|
||||
},
|
||||
"unit": 0.009999999776482582,
|
||||
"lod": {
|
||||
"lod0_triangles": 20372,
|
||||
"lod1_triangles": 4997,
|
||||
"lod1_vertices": 2464,
|
||||
"welded_triangles": 20372,
|
||||
"lod0_screen": 0.2
|
||||
},
|
||||
"props": [
|
||||
{
|
||||
"name": "FunkenlanzeLanze",
|
||||
"triangles": 3077,
|
||||
"textures": {
|
||||
"glow_share": 0.098,
|
||||
"palette_gains": {
|
||||
"rock": [
|
||||
0.7881,
|
||||
1.0317,
|
||||
1.2699
|
||||
],
|
||||
"metal": [
|
||||
2.1491,
|
||||
1.8245,
|
||||
0.8038
|
||||
]
|
||||
},
|
||||
"size": [
|
||||
2048,
|
||||
2048
|
||||
]
|
||||
},
|
||||
"lod": {
|
||||
"lod0_triangles": 3077,
|
||||
"lod1_triangles": 599,
|
||||
"lod1_vertices": 292,
|
||||
"welded_triangles": 3077,
|
||||
"lod0_screen": 0.2
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"inputs_sha256": {
|
||||
"tools/meshy/g05/figure.json": "ec5cadcedc85c63ae7bea78912ad86b1c3f4efa1567fd1ce6b555743c130b085",
|
||||
"assets-source/meshy/g05/funkenlanze-skelett.glb": "d7f93f79ae7993afaab8924b310307d38ec0c5e8b39f230826a10d79b33f91c1",
|
||||
"assets-source/meshy/g05/funkenlanze-animationen.glb": "c47d742ee9379dee380ad2b1d4003778a56f301e38ea004c363901fd0065b383",
|
||||
"assets-source/meshy/g05/funkenlanze-lanze.glb": "79406f8f6e5a51a449e2b55dde310ade8b17ebbfb0857092dae5829fc2aa902d"
|
||||
},
|
||||
"source_sha256": "d9ce9bca5de4e49a3b4e01f3304bebefc9a69497493699647c4ad9bcc40b2331",
|
||||
"removed_modifiers": 0,
|
||||
"kind": "skinned",
|
||||
"fps": 24.0,
|
||||
"objects": 5,
|
||||
"meshes": {
|
||||
"Funkenlanze_meshyBody_LOD0": {
|
||||
"mesh": "Funkenlanze_meshyBody_LOD0",
|
||||
"triangles": 20372,
|
||||
"vertices": 24114,
|
||||
"ngons": 0,
|
||||
"materials": [
|
||||
"AI_Funkenlanze"
|
||||
],
|
||||
"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.5654,
|
||||
-0.0,
|
||||
-0.1531
|
||||
],
|
||||
"max": [
|
||||
0.565,
|
||||
1.8,
|
||||
0.1649
|
||||
]
|
||||
}
|
||||
},
|
||||
"FunkenlanzeLanze_LOD0": {
|
||||
"mesh": "FunkenlanzeLanze_LOD0",
|
||||
"triangles": 3077,
|
||||
"vertices": 4763,
|
||||
"ngons": 0,
|
||||
"materials": [
|
||||
"AI_FunkenlanzeLanze"
|
||||
],
|
||||
"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.2956,
|
||||
0.8369,
|
||||
-0.6454
|
||||
],
|
||||
"max": [
|
||||
0.5814,
|
||||
1.1601,
|
||||
1.0769
|
||||
]
|
||||
}
|
||||
},
|
||||
"Funkenlanze_meshyBody_LOD1": {
|
||||
"mesh": "Funkenlanze_meshyBody_LOD1",
|
||||
"triangles": 4997,
|
||||
"vertices": 2464,
|
||||
"ngons": 0,
|
||||
"materials": [
|
||||
"AI_Funkenlanze"
|
||||
],
|
||||
"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.5657,
|
||||
0.0002,
|
||||
-0.1539
|
||||
],
|
||||
"max": [
|
||||
0.5653,
|
||||
1.8005,
|
||||
0.1654
|
||||
]
|
||||
}
|
||||
},
|
||||
"FunkenlanzeLanze_LOD1": {
|
||||
"mesh": "FunkenlanzeLanze_LOD1",
|
||||
"triangles": 599,
|
||||
"vertices": 292,
|
||||
"ngons": 0,
|
||||
"materials": [
|
||||
"AI_FunkenlanzeLanze"
|
||||
],
|
||||
"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.2952,
|
||||
0.8349,
|
||||
-0.6468
|
||||
],
|
||||
"max": [
|
||||
0.5829,
|
||||
1.1619,
|
||||
1.0777
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"armatures": {
|
||||
"Funkenlanze_meshyRig": {
|
||||
"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.5657,
|
||||
-0.0,
|
||||
-0.6468
|
||||
],
|
||||
"max": [
|
||||
0.5829,
|
||||
1.8005,
|
||||
1.0777
|
||||
]
|
||||
},
|
||||
"clips": [
|
||||
{
|
||||
"name": "ability",
|
||||
"frames": [
|
||||
0.0,
|
||||
29.0
|
||||
],
|
||||
"seconds": 1.2083,
|
||||
"loop": false,
|
||||
"contact_seconds": 0.2975
|
||||
},
|
||||
{
|
||||
"name": "attack_a",
|
||||
"frames": [
|
||||
0.0,
|
||||
24.0
|
||||
],
|
||||
"seconds": 1.0,
|
||||
"loop": false,
|
||||
"contact_seconds": 0.6538
|
||||
},
|
||||
{
|
||||
"name": "attack_b",
|
||||
"frames": [
|
||||
0.0,
|
||||
25.0
|
||||
],
|
||||
"seconds": 1.0417,
|
||||
"loop": false,
|
||||
"contact_seconds": 0.4051
|
||||
},
|
||||
{
|
||||
"name": "death",
|
||||
"frames": [
|
||||
0.0,
|
||||
58.0
|
||||
],
|
||||
"seconds": 2.4167,
|
||||
"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,
|
||||
31.0
|
||||
],
|
||||
"seconds": 1.2917,
|
||||
"loop": true,
|
||||
"contact_seconds": -1.0
|
||||
}
|
||||
],
|
||||
"expected_from_godot": {
|
||||
"triangles": 29045,
|
||||
"bones": 25,
|
||||
"clips": [
|
||||
"idle",
|
||||
"walk",
|
||||
"attack_a",
|
||||
"attack_b",
|
||||
"hit",
|
||||
"ability",
|
||||
"death"
|
||||
]
|
||||
},
|
||||
"meshes_with_ngons": {},
|
||||
"meshes_without_uv": [],
|
||||
"triangles": 29045,
|
||||
"fbx": "Assets/Luneraria/Art/Characters/funkenlanze_meshy.fbx",
|
||||
"fbx_bytes": 3395228,
|
||||
"ok": true
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c7a2df2478dc1419da498eb7772fd512
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Luneraria/Art/Characters/funkenlanze_meshy.fbx
Normal file
337
Assets/Luneraria/Art/Characters/funkenlanze_meshy.fbx.meta
Normal file
|
|
@ -0,0 +1,337 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 70c39c469a6fa406f85b60c8407d95c9
|
||||
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: Funkenlanze_meshyRig|ability
|
||||
internalID: 422813326786192609
|
||||
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.24621369
|
||||
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: Funkenlanze_meshyRig|attack_a
|
||||
internalID: -1618003157874489814
|
||||
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: Funkenlanze_meshyRig|attack_b
|
||||
internalID: -725341257585236887
|
||||
firstFrame: 0
|
||||
lastFrame: 25
|
||||
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.38888356
|
||||
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: Funkenlanze_meshyRig|death
|
||||
internalID: 8241753305621923878
|
||||
firstFrame: 0
|
||||
lastFrame: 58
|
||||
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: Funkenlanze_meshyRig|hit
|
||||
internalID: -5223465465739027890
|
||||
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: Funkenlanze_meshyRig|idle
|
||||
internalID: 6872073163229914391
|
||||
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: Funkenlanze_meshyRig|walk
|
||||
internalID: 6401172072802503362
|
||||
firstFrame: 0
|
||||
lastFrame: 31
|
||||
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:
|
||||
246
Assets/Luneraria/Art/Generated/funkenlanze_meshy.controller
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1102 &-6986314372875093466
|
||||
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: -5223465465739027890, guid: 70c39c469a6fa406f85b60c8407d95c9, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-2465235324230030958
|
||||
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: 8241753305621923878, guid: 70c39c469a6fa406f85b60c8407d95c9, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &-1537806687701676047
|
||||
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: 6401172072802503362, guid: 70c39c469a6fa406f85b60c8407d95c9, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1107 &-966094004428431164
|
||||
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: 681452014891737801}
|
||||
m_Position: {x: 200, y: 0, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 5876526836096243017}
|
||||
m_Position: {x: 235, y: 65, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 3263760726816847817}
|
||||
m_Position: {x: 270, y: 130, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 2350197593209530011}
|
||||
m_Position: {x: 305, y: 195, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -2465235324230030958}
|
||||
m_Position: {x: 340, y: 260, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -6986314372875093466}
|
||||
m_Position: {x: 375, y: 325, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -1537806687701676047}
|
||||
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: 681452014891737801}
|
||||
--- !u!91 &9100000
|
||||
AnimatorController:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: funkenlanze_meshy
|
||||
serializedVersion: 5
|
||||
m_AnimatorParameters: []
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Base Layer
|
||||
m_StateMachine: {fileID: -966094004428431164}
|
||||
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 &681452014891737801
|
||||
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: 6872073163229914391, guid: 70c39c469a6fa406f85b60c8407d95c9, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &2350197593209530011
|
||||
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: -725341257585236887, guid: 70c39c469a6fa406f85b60c8407d95c9, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &3263760726816847817
|
||||
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: -1618003157874489814, guid: 70c39c469a6fa406f85b60c8407d95c9, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1102 &5876526836096243017
|
||||
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: 422813326786192609, guid: 70c39c469a6fa406f85b60c8407d95c9, type: 3}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 44426d34820fe40da91e59336999b8a9
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 9100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Luneraria/Art/Textures/ai-funkenlanze-albedo-2k.png
Normal file
|
After Width: | Height: | Size: 7.7 MiB |
117
Assets/Luneraria/Art/Textures/ai-funkenlanze-albedo-2k.png.meta
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 7fc4b2c8899894a4cb7ead6a1f068d4d
|
||||
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:
|
||||
BIN
Assets/Luneraria/Art/Textures/ai-funkenlanze-normal-2k.png
Normal file
|
After Width: | Height: | Size: 6 MiB |
117
Assets/Luneraria/Art/Textures/ai-funkenlanze-normal-2k.png.meta
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4d6594844ce3d4745ab0f633a576f5ad
|
||||
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:
|
||||
BIN
Assets/Luneraria/Art/Textures/ai-funkenlanze-orm-2k.png
Normal file
|
After Width: | Height: | Size: 3.7 MiB |
117
Assets/Luneraria/Art/Textures/ai-funkenlanze-orm-2k.png.meta
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2aa4e88af629e4aae8a06d60868fc76f
|
||||
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:
|
||||
BIN
Assets/Luneraria/Art/Textures/ai-funkenlanzelanze-albedo-2k.png
Normal file
|
After Width: | Height: | Size: 7.4 MiB |
|
|
@ -0,0 +1,117 @@
|
|||
fileFormatVersion: 2
|
||||
guid: dd29fb09dd4194e018c48d364cef5a28
|
||||
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:
|
||||
BIN
Assets/Luneraria/Art/Textures/ai-funkenlanzelanze-normal-2k.png
Normal file
|
After Width: | Height: | Size: 5.4 MiB |
|
|
@ -0,0 +1,117 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d7453004059694969b7dbf5f7e300f32
|
||||
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:
|
||||
BIN
Assets/Luneraria/Art/Textures/ai-funkenlanzelanze-orm-2k.png
Normal file
|
After Width: | Height: | Size: 3 MiB |
|
|
@ -0,0 +1,117 @@
|
|||
fileFormatVersion: 2
|
||||
guid: e168b52d1d8384a719170e5cfad65e4d
|
||||
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:
|
||||
|
|
@ -72,6 +72,9 @@ namespace Luneraria.EditorTools
|
|||
var manifest = Newtonsoft.Json.Linq.JObject.Parse(File.ReadAllText(Path.Combine(Path.GetDirectoryName(Application.dataPath), "tools/blender/export_manifest.json")));
|
||||
var models = new List<LuneUnitLibrary.UnitModel>();
|
||||
var aliases = new List<LuneUnitLibrary.UnitModel>();
|
||||
// The port's own replacements ("replaces", the Meshy figures of U5.5) come after the
|
||||
// Godot aliases: g05 is the skinned Funkenlanze of phase 18 and then the Meshy one.
|
||||
var replacements = new List<LuneUnitLibrary.UnitModel>();
|
||||
foreach (var asset in manifest["assets"])
|
||||
{
|
||||
string id = (string)asset["id"];
|
||||
|
|
@ -84,12 +87,15 @@ namespace Luneraria.EditorTools
|
|||
bool skinned = (string)asset["kind"] == "skinned";
|
||||
var model = new LuneUnitLibrary.UnitModel { Id = id, Prefab = prefab, Controller = skinned ? Controller(id, Art + group + "/" + id + ".fbx") : null };
|
||||
models.Add(model);
|
||||
string godotId = (string)asset["godot_manifest"]?["id"] ?? (string)asset["replaces"];
|
||||
string godotId = (string)asset["godot_manifest"]?["id"];
|
||||
if (skinned && godotId != null && godotId != id)
|
||||
aliases.Add(new LuneUnitLibrary.UnitModel { Id = godotId, Prefab = prefab, Controller = model.Controller });
|
||||
string replaced = (string)asset["replaces"];
|
||||
if (skinned && replaced != null)
|
||||
replacements.Add(new LuneUnitLibrary.UnitModel { Id = replaced, Prefab = prefab, Controller = model.Controller });
|
||||
}
|
||||
// Skinned figures replace the rigid model of the same Godot id.
|
||||
foreach (LuneUnitLibrary.UnitModel alias in aliases)
|
||||
foreach (LuneUnitLibrary.UnitModel alias in aliases.Concat(replacements))
|
||||
{
|
||||
models.RemoveAll(m => m.Id == alias.Id);
|
||||
models.Add(alias);
|
||||
|
|
|
|||
|
|
@ -181,6 +181,14 @@ MonoBehaviour:
|
|||
Neutral: {fileID: 2100000, guid: 5a6942f0733ed4ba0bc5c60732179c3d, type: 2}
|
||||
Blau: {fileID: 0}
|
||||
Rot: {fileID: 0}
|
||||
- Key: AI_Funkenlanze
|
||||
Neutral: {fileID: 2100000, guid: d5a88e3321a884b30bd8a8606b78090d, type: 2}
|
||||
Blau: {fileID: 0}
|
||||
Rot: {fileID: 0}
|
||||
- Key: AI_FunkenlanzeLanze
|
||||
Neutral: {fileID: 2100000, guid: 3e39141c45e974506afc4dc46f6b2ac2, type: 2}
|
||||
Blau: {fileID: 0}
|
||||
Rot: {fileID: 0}
|
||||
- Key: AI_Kohlenbeisser
|
||||
Neutral: {fileID: 2100000, guid: 19529a85bbe534478a40059f9505d897, type: 2}
|
||||
Blau: {fileID: 0}
|
||||
|
|
|
|||
68
Assets/Luneraria/Materials/Units/AI_Funkenlanze.mat
Normal 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_Funkenlanze
|
||||
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: 7fc4b2c8899894a4cb7ead6a1f068d4d, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _NormalMap:
|
||||
m_Texture: {fileID: 2800000, guid: 4d6594844ce3d4745ab0f633a576f5ad, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OrmMap:
|
||||
m_Texture: {fileID: 2800000, guid: 2aa4e88af629e4aae8a06d60868fc76f, 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
|
||||
8
Assets/Luneraria/Materials/Units/AI_Funkenlanze.mat.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d5a88e3321a884b30bd8a8606b78090d
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
68
Assets/Luneraria/Materials/Units/AI_FunkenlanzeLanze.mat
Normal 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_FunkenlanzeLanze
|
||||
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: dd29fb09dd4194e018c48d364cef5a28, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _NormalMap:
|
||||
m_Texture: {fileID: 2800000, guid: d7453004059694969b7dbf5f7e300f32, type: 3}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OrmMap:
|
||||
m_Texture: {fileID: 2800000, guid: e168b52d1d8384a719170e5cfad65e4d, 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
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3e39141c45e974506afc4dc46f6b2ac2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -52,6 +52,9 @@ MonoBehaviour:
|
|||
- Id: funkenlanze
|
||||
Prefab: {fileID: 919132149155446097, guid: 652ee682a82c34ff99c2eb11cd218f5e, type: 3}
|
||||
Controller: {fileID: 9100000, guid: b0e33b10cf38a4aca9b6a03585a5ef2d, type: 2}
|
||||
- Id: funkenlanze_meshy
|
||||
Prefab: {fileID: 919132149155446097, guid: 70c39c469a6fa406f85b60c8407d95c9, type: 3}
|
||||
Controller: {fileID: 9100000, guid: 44426d34820fe40da91e59336999b8a9, type: 2}
|
||||
- Id: g01
|
||||
Prefab: {fileID: 919132149155446097, guid: cb652a88669c64f4d98a351c01bf9642, type: 3}
|
||||
Controller: {fileID: 9100000, guid: 26a63e3ffbfe94d109316067e70ea293, type: 2}
|
||||
|
|
@ -65,8 +68,8 @@ MonoBehaviour:
|
|||
Prefab: {fileID: 919132149155446097, guid: 841c5b5333cc141a6bde6c22d3dc2884, type: 3}
|
||||
Controller: {fileID: 9100000, guid: ec68488f0997c4a8185eea30724740ff, type: 2}
|
||||
- Id: g05
|
||||
Prefab: {fileID: 919132149155446097, guid: 652ee682a82c34ff99c2eb11cd218f5e, type: 3}
|
||||
Controller: {fileID: 9100000, guid: b0e33b10cf38a4aca9b6a03585a5ef2d, type: 2}
|
||||
Prefab: {fileID: 919132149155446097, guid: 70c39c469a6fa406f85b60c8407d95c9, type: 3}
|
||||
Controller: {fileID: 9100000, guid: 44426d34820fe40da91e59336999b8a9, type: 2}
|
||||
- Id: g06
|
||||
Prefab: {fileID: 919132149155446097, guid: 71588361ff1ed4a72a13d46d2f3753be, type: 3}
|
||||
Controller: {fileID: 9100000, guid: 25806d20be161460284fa5cd0affc84b, type: 2}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ namespace Luneraria.UI
|
|||
|
||||
readonly Dictionary<string, Texture> _textures = new Dictionary<string, Texture>();
|
||||
readonly List<string> _queue = new List<string>();
|
||||
readonly List<Mesh> _baked = new List<Mesh>();
|
||||
Camera _camera;
|
||||
readonly Light[] _lights = new Light[3];
|
||||
|
||||
|
|
@ -179,6 +180,9 @@ namespace Luneraria.UI
|
|||
// of the same frame would show it too.
|
||||
model.SetActive(false);
|
||||
Destroy(model);
|
||||
foreach (Mesh baked in _baked)
|
||||
Destroy(baked);
|
||||
_baked.Clear();
|
||||
_textures[key] = target;
|
||||
Rendered++;
|
||||
PortraitReady?.Invoke(key);
|
||||
|
|
@ -196,10 +200,6 @@ namespace Luneraria.UI
|
|||
foreach (Transform node in model.GetComponentsInChildren<Transform>(true))
|
||||
node.gameObject.layer = Layer;
|
||||
Library.Materials?.Dress(model, 2);
|
||||
// A figure with a lane copy (U5.5) shows its full mesh: the portrait is a close-up, and
|
||||
// the LOD choice of a model rendered in the frame it was made in left the card empty.
|
||||
foreach (LODGroup group in model.GetComponentsInChildren<LODGroup>(true))
|
||||
group.ForceLOD(0);
|
||||
ShowDetail(model);
|
||||
// Skinned figures stand in their idle pose (Godot preview("idle", .4)).
|
||||
if (entry.Controller != null)
|
||||
|
|
@ -209,9 +209,43 @@ namespace Luneraria.UI
|
|||
if (idle != null)
|
||||
idle.SampleAnimation(animator != null ? animator.gameObject : model, Mathf.Min(.4f, idle.length));
|
||||
}
|
||||
Bake(model);
|
||||
return model;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Skinned figures are drawn as a baked mesh of their sampled pose (U5.5). With GPU skinning
|
||||
/// a skinned mesh rendered in the frame it was made in had no deformed vertices yet, and
|
||||
/// some cards stayed empty. A figure with a lane copy (_LOD0/_LOD1) shows its full mesh.
|
||||
/// </summary>
|
||||
void Bake(GameObject model)
|
||||
{
|
||||
foreach (LODGroup group in model.GetComponentsInChildren<LODGroup>(true))
|
||||
UnityEngine.Object.DestroyImmediate(group);
|
||||
foreach (SkinnedMeshRenderer skinned in model.GetComponentsInChildren<SkinnedMeshRenderer>(true))
|
||||
{
|
||||
skinned.enabled = false;
|
||||
if (skinned.name.EndsWith("_LOD1", StringComparison.Ordinal) || skinned.sharedMesh == null)
|
||||
continue;
|
||||
var baked = new Mesh { name = skinned.sharedMesh.name + " (portrait)" };
|
||||
skinned.BakeMesh(baked, true);
|
||||
var copy = new GameObject(skinned.name + "_Portrait") { layer = Layer };
|
||||
copy.transform.SetParent(skinned.transform, false);
|
||||
copy.AddComponent<MeshFilter>().sharedMesh = baked;
|
||||
var renderer = copy.AddComponent<MeshRenderer>();
|
||||
renderer.sharedMaterials = skinned.sharedMaterials;
|
||||
var block = new MaterialPropertyBlock();
|
||||
for (int i = 0; i < renderer.sharedMaterials.Length; i++)
|
||||
{
|
||||
if (!skinned.HasPropertyBlock())
|
||||
break;
|
||||
skinned.GetPropertyBlock(block, i);
|
||||
renderer.SetPropertyBlock(block, i);
|
||||
}
|
||||
_baked.Add(baked);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The portrait is the close-up of a figure: its surface detail (the family's PBR set in the
|
||||
/// figure's own space, U5.4) is switched on here, while the field skips it for frame rate.
|
||||
|
|
|
|||
BIN
assets-source/meshy/g05/funkenlanze-animationen.glb
Normal file
BIN
assets-source/meshy/g05/funkenlanze-konzept.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
assets-source/meshy/g05/funkenlanze-lanze-konzept.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
assets-source/meshy/g05/funkenlanze-lanze.glb
Normal file
BIN
assets-source/meshy/g05/funkenlanze-skelett.glb
Normal file
|
|
@ -163,6 +163,17 @@ Hinweis: Die Projektdateien des .NET-Harness (`tools/dotnet/*/*.csproj`) fehlten
|
|||
| Bild | `screenshots/u5.5-g03/` |
|
||||
| Commits | `luneraria/u5.5-g03` |
|
||||
|
||||
## U5.5 · Funkenlanze (g05)
|
||||
|
||||
| Punkt | Ergebnis |
|
||||
| --- | --- |
|
||||
| Tests | EditMode 29/29, PlayMode 14/14 (Verify A–I 718/0), Player-Selbsttest 30/30, Asset-Prüfung 24/0 |
|
||||
| Parität | Fingerabdrücke unverändert (`DCE95C96556F3A1A`, `7B8E43AEFC0D60C5`) |
|
||||
| Inhalt | Meshy-Figur für `g05` und die Heldin, Lanze als eigenes Modell an der rechten Hand, 110 Credits; Porträts aus gebackenem Netz (behebt leere Karten bei GPU-Skinning) |
|
||||
| Leistung | Stresstest 38 Funkenlanzen gegen die Phase-18-Figur: Mid 128,6 → 147,6 fps, Karte 112,4 → 128,0 fps. Rohdaten `logs/u5.5-g05/` |
|
||||
| Bild | `screenshots/u5.5-g05/` |
|
||||
| Commits | `luneraria/u5.5-g05` |
|
||||
|
||||
## 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.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Port-Status · Champions of Luneraria in Unity
|
||||
|
||||
Stand: 9. Oktober 2026 (U5.5, dritte Figur).
|
||||
Stand: 10. Oktober 2026 (U5.5, vierte 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 | [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 | [U5-VISUAL.md](U5-VISUAL.md) |
|
||||
|
||||
QA je Meilenstein: [PORT-QA.md](PORT-QA.md).
|
||||
|
||||
|
|
|
|||
|
|
@ -494,3 +494,45 @@ Stand 9. Oktober 2026, Zweig `luneraria/u5.5-g03` (auf `luneraria/u5.5-g02`). De
|
|||
Stresstest mit 35 Schlackenwachten, je drei Läufe (`logs/u5.5-g03/`): Mid-Lane nah 161,9 → 148,5 fps (−8 %), Karte 124,5 → 124,5 fps (0 %). Bilder: `screenshots/u5.5-g03/` (Figur, vorher/nachher im Spiel, Übersichten, Kampfmomente).
|
||||
|
||||
Bekannt: In der Leerlaufhaltung neigt sich die Schildplatte mit der Kopfbewegung der Bibliotheksbewegung leicht nach vorn.
|
||||
|
||||
## U5.5 · Vierte Figur: Funkenlanze (g05 und Heldin)
|
||||
|
||||
Stand 10. Oktober 2026, Zweig `luneraria/u5.5-g05` (auf `luneraria/u5.5-g03`). Die Fernkämpferin der Glutpakt. Anders als die drei Vorgänger ersetzt sie keine starre Phase-4-Figur, sondern die Skelettfigur aus Phase 18 (`funkenlanze`), die Truppe `g05` und Heldin `held_funkenlanze` gemeinsam nutzen (`Model = "g05"`).
|
||||
|
||||
### Neu: Waffe als eigenes Modell
|
||||
|
||||
Eine gehaltene Lanze würde das Auto-Rigging an Hand und Bein zugleich binden. Figur und Lanze kommen deshalb getrennt von Meshy (zwei Konzeptbilder, zwei Modelle); `build_figure.py` setzt die Lanze ein (`props` in `figure.json`, `attach_prop`):
|
||||
- auf ihre Länge skaliert (1,75 m), in der Ruhepose in die Faust des Knochens `RightHand` gelegt: Achse nach vorn und senkrecht zum Handknochen, Spitze voraus, Griff bei 40 % ab dem Ende;
|
||||
- allein an `RightHand` gebunden (Gewicht 1), so trägt jede Bewegung sie mit; eigenes Material `AI_FunkenlanzeLanze` mit eigenen Karten, eigene Lane-Fassung (3.077 → 599 Dreiecke).
|
||||
|
||||
Weitere Änderungen:
|
||||
- Stoß aus dem Stand (`in_place`): Der Bibliotheksstoß macht einen Ausfallschritt von 0,9 m; die waagrechte Bewegung der Hüfte wird herausgerechnet.
|
||||
- `LuneUnitLibraryBuilder`: Ersetzungen des Ports (`replaces`) gelten nach den Godot-Zuordnungen; `g05` zeigt damit sicher die Meshy-Figur, die Phase-18-Figur bleibt unter `funkenlanze` im Projekt.
|
||||
- **HUD-Porträts aus gebackenem Netz** (`LunePortraits.Bake`): Mit GPU-Skinning blieb eine Skelettfigur, die im selben Bild erzeugt und gerendert wird, ohne verformte Eckpunkte; seit dieser Serie waren so die Karten der Schlackenwacht leer. Das Porträt zeichnet jetzt die gebackene Pose als normales Netz (volle Fassung).
|
||||
|
||||
### Ablauf und Kosten
|
||||
|
||||
Zwei Konzeptbilder (24), Figur und Lanze als Modell (60), Skelett 1,8 m (5), sieben Bewegungen (21): **110 Credits**. Bewegungen: Idle, Kampfgang (1,3 s), Lanzenstoß aus dem Stand (`attack_a`, 1,0 s), Rechtshieb (`attack_b`), Trefferreaktion, aufgeladener Hieb (`ability`, 1,2 s), getroffen nach hinten fallen (`death`, 2,4 s).
|
||||
|
||||
`funkenlanze_meshy.fbx`: Körper 20.372 + 4.997, Lanze 3.077 + 599 Dreiecke, 25 Knochen; Export 23 Prüfungen, bytegleich wiederholbar.
|
||||
|
||||
### Prüfung
|
||||
|
||||
| Test | Ergebnis |
|
||||
| --- | --- |
|
||||
| EditMode / PlayMode | 29/29, 14/14, Verify A–I 718/0 |
|
||||
| Fingerabdrücke | `DCE95C96556F3A1A`, `7B8E43AEFC0D60C5`, unverändert |
|
||||
| Asset-Prüfung / Player-Selbsttest | 24/0, 30/30 |
|
||||
|
||||
### Leistung
|
||||
|
||||
Stresstest mit 38 Funkenlanzen (`-luneBenchmarkArmy g05`), je drei Läufe (`logs/u5.5-g05/`); verglichen mit der bisherigen Skelettfigur aus Phase 18:
|
||||
|
||||
| Ansicht | Phase 18 | Meshy |
|
||||
| --- | ---: | ---: |
|
||||
| Mid-Lane nah | 128,6 | 147,6 (+15 %) |
|
||||
| ganze Karte | 112,4 | 128,0 (+14 %) |
|
||||
|
||||
Die Meshy-Figur ist hier schneller: Die Phase-18-Figur hat 24.000 Dreiecke ohne Lane-Fassung.
|
||||
|
||||
Bilder: `screenshots/u5.5-g05/` (Figur, vorher/nachher im Spiel, Übersichten, Kampfmomente).
|
||||
|
|
|
|||
|
|
@ -1131,6 +1131,193 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "funkenlanze_meshy",
|
||||
"kind": "skinned",
|
||||
"ok": true,
|
||||
"checks": [
|
||||
{
|
||||
"check": "blender_checks_passed",
|
||||
"ok": true,
|
||||
"detail": ""
|
||||
},
|
||||
{
|
||||
"check": "imported",
|
||||
"ok": true,
|
||||
"detail": "\"Assets/Luneraria/Art/Characters/funkenlanze_meshy.fbx\""
|
||||
},
|
||||
{
|
||||
"check": "import_rules_applied",
|
||||
"ok": true,
|
||||
"detail": ""
|
||||
},
|
||||
{
|
||||
"check": "root_transform_identity",
|
||||
"ok": true,
|
||||
"detail": "\"funkenlanze_meshy 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": "\"29045 unity / 29045 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.566, 0.000, -0.647) (0.583, 1.801, 1.078)\""
|
||||
},
|
||||
{
|
||||
"check": "skinned_mesh",
|
||||
"ok": true,
|
||||
"detail": "4"
|
||||
},
|
||||
{
|
||||
"check": "bone_names Funkenlanze_meshyBody_LOD0",
|
||||
"ok": true,
|
||||
"detail": "[]"
|
||||
},
|
||||
{
|
||||
"check": "root_bone Funkenlanze_meshyBody_LOD0",
|
||||
"ok": true,
|
||||
"detail": "\"Root\""
|
||||
},
|
||||
{
|
||||
"check": "bone_names Funkenlanze_meshyBody_LOD1",
|
||||
"ok": true,
|
||||
"detail": "[]"
|
||||
},
|
||||
{
|
||||
"check": "root_bone Funkenlanze_meshyBody_LOD1",
|
||||
"ok": true,
|
||||
"detail": "\"Root\""
|
||||
},
|
||||
{
|
||||
"check": "bone_names FunkenlanzeLanze_LOD0",
|
||||
"ok": true,
|
||||
"detail": "[]"
|
||||
},
|
||||
{
|
||||
"check": "root_bone FunkenlanzeLanze_LOD0",
|
||||
"ok": true,
|
||||
"detail": "\"Root\""
|
||||
},
|
||||
{
|
||||
"check": "bone_names FunkenlanzeLanze_LOD1",
|
||||
"ok": true,
|
||||
"detail": "[]"
|
||||
},
|
||||
{
|
||||
"check": "root_bone FunkenlanzeLanze_LOD1",
|
||||
"ok": true,
|
||||
"detail": "\"Root\""
|
||||
},
|
||||
{
|
||||
"check": "generic_avatar",
|
||||
"ok": true,
|
||||
"detail": "\"funkenlanze_meshyAvatar\""
|
||||
},
|
||||
{
|
||||
"check": "clips",
|
||||
"ok": true,
|
||||
"detail": "[]"
|
||||
}
|
||||
],
|
||||
"facts": {
|
||||
"triangles": 29045,
|
||||
"renderers": 4,
|
||||
"meshes_without_uv_and_tangents": 0,
|
||||
"degenerate_triangles_dropped": 0,
|
||||
"bounds_min": [
|
||||
-0.5657289,
|
||||
-3.29370877E-08,
|
||||
-0.646835
|
||||
],
|
||||
"bounds_max": [
|
||||
0.582856357,
|
||||
1.80054533,
|
||||
1.07768822
|
||||
],
|
||||
"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.04166663,
|
||||
"loop": false,
|
||||
"events": 1
|
||||
},
|
||||
{
|
||||
"name": "death",
|
||||
"length": 2.41666675,
|
||||
"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": 1.29166663,
|
||||
"loop": true,
|
||||
"events": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "glasballiste",
|
||||
"kind": "skinned",
|
||||
|
|
|
|||
|
|
@ -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 g05 x36, speed 1x, measured after 10 s of combat",
|
||||
// moving units at the start of the first window: g05 38, w04 14, e04 11, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4
|
||||
"windows": [
|
||||
{"view": "overview (zoom 64)", "frames": 2573, "fps": 128.6, "frame_ms_avg": 7.77, "frame_ms_median": 3.21, "frame_ms_p95": 24.19, "frame_ms_p99": 31.30, "frame_ms_max": 44.01, "frames_over_16_7_ms": 418, "of_them_with_simulation_step": 73, "gc_collections": 21, "simulation_ms_per_frame": 0.072, "views_ms_per_frame": 0.211, "ui_ms_per_frame": 0.070, "units_alive_max": 97},
|
||||
// timings overview (zoom 64): main thread avg 2.59 / median 2.49 / p95 3.52 ms, render thread avg 1.87 / median 1.86 / p95 2.18 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.18 / median 0.25 / p95 21.63 ms
|
||||
{"view": "mid lane close (zoom 22)", "frames": 1467, "fps": 146.7, "frame_ms_avg": 6.82, "frame_ms_median": 3.01, "frame_ms_p95": 23.09, "frame_ms_p99": 29.90, "frame_ms_max": 36.90, "frames_over_16_7_ms": 160, "of_them_with_simulation_step": 18, "gc_collections": 9, "simulation_ms_per_frame": 0.044, "views_ms_per_frame": 0.191, "ui_ms_per_frame": 0.059, "units_alive_max": 41}
|
||||
// timings mid lane close (zoom 22): main thread avg 2.12 / median 2.02 / p95 3.09 ms, render thread avg 1.45 / median 1.44 / p95 1.70 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.70 / median 0.19 / p95 20.87 ms
|
||||
]
|
||||
}
|
||||
|
|
@ -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 g05 x36, speed 1x, measured after 10 s of combat",
|
||||
// moving units at the start of the first window: g05 38, w04 14, e04 11, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4
|
||||
"windows": [
|
||||
{"view": "overview (zoom 64)", "frames": 2557, "fps": 127.7, "frame_ms_avg": 7.83, "frame_ms_median": 3.29, "frame_ms_p95": 25.10, "frame_ms_p99": 31.80, "frame_ms_max": 42.00, "frames_over_16_7_ms": 419, "of_them_with_simulation_step": 37, "gc_collections": 21, "simulation_ms_per_frame": 0.076, "views_ms_per_frame": 0.215, "ui_ms_per_frame": 0.072, "units_alive_max": 97},
|
||||
// timings overview (zoom 64): main thread avg 2.68 / median 2.51 / p95 3.83 ms, render thread avg 1.90 / median 1.89 / p95 2.23 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.13 / median 0.22 / p95 22.42 ms
|
||||
{"view": "mid lane close (zoom 22)", "frames": 1483, "fps": 148.2, "frame_ms_avg": 6.75, "frame_ms_median": 3.22, "frame_ms_p95": 21.80, "frame_ms_p99": 30.32, "frame_ms_max": 37.70, "frames_over_16_7_ms": 158, "of_them_with_simulation_step": 10, "gc_collections": 9, "simulation_ms_per_frame": 0.044, "views_ms_per_frame": 0.189, "ui_ms_per_frame": 0.057, "units_alive_max": 41}
|
||||
// timings mid lane close (zoom 22): main thread avg 2.08 / median 1.99 / p95 3.09 ms, render thread avg 1.44 / median 1.43 / p95 1.68 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.68 / median 0.48 / p95 19.82 ms
|
||||
]
|
||||
}
|
||||
|
|
@ -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 g05 x36, speed 1x, measured after 10 s of combat",
|
||||
// moving units at the start of the first window: g05 38, w04 14, e04 11, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4
|
||||
"windows": [
|
||||
{"view": "overview (zoom 64)", "frames": 2557, "fps": 127.8, "frame_ms_avg": 7.82, "frame_ms_median": 3.29, "frame_ms_p95": 24.49, "frame_ms_p99": 31.80, "frame_ms_max": 44.71, "frames_over_16_7_ms": 415, "of_them_with_simulation_step": 43, "gc_collections": 21, "simulation_ms_per_frame": 0.074, "views_ms_per_frame": 0.218, "ui_ms_per_frame": 0.071, "units_alive_max": 97},
|
||||
// timings overview (zoom 64): main thread avg 2.65 / median 2.53 / p95 3.73 ms, render thread avg 1.90 / median 1.88 / p95 2.21 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.16 / median 0.23 / p95 21.71 ms
|
||||
{"view": "mid lane close (zoom 22)", "frames": 1478, "fps": 147.8, "frame_ms_avg": 6.77, "frame_ms_median": 2.85, "frame_ms_p95": 21.80, "frame_ms_p99": 30.59, "frame_ms_max": 39.59, "frames_over_16_7_ms": 165, "of_them_with_simulation_step": 11, "gc_collections": 9, "simulation_ms_per_frame": 0.045, "views_ms_per_frame": 0.190, "ui_ms_per_frame": 0.056, "units_alive_max": 41}
|
||||
// timings mid lane close (zoom 22): main thread avg 2.09 / median 2.01 / p95 2.97 ms, render thread avg 1.43 / median 1.41 / p95 1.69 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 4.69 / median 0.16 / p95 19.88 ms
|
||||
]
|
||||
}
|
||||
|
|
@ -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 g05 x36, speed 1x, measured after 10 s of combat",
|
||||
// moving units at the start of the first window: g05 38, w04 14, e04 11, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4
|
||||
"windows": [
|
||||
{"view": "overview (zoom 64)", "frames": 2248, "fps": 112.4, "frame_ms_avg": 8.90, "frame_ms_median": 3.96, "frame_ms_p95": 26.11, "frame_ms_p99": 32.10, "frame_ms_max": 40.61, "frames_over_16_7_ms": 407, "of_them_with_simulation_step": 72, "gc_collections": 20, "simulation_ms_per_frame": 0.082, "views_ms_per_frame": 0.231, "ui_ms_per_frame": 0.080, "units_alive_max": 97},
|
||||
// timings overview (zoom 64): main thread avg 2.86 / median 2.69 / p95 4.10 ms, render thread avg 2.53 / median 2.43 / p95 3.35 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 6.04 / median 1.02 / p95 22.99 ms
|
||||
{"view": "mid lane close (zoom 22)", "frames": 1303, "fps": 130.3, "frame_ms_avg": 7.67, "frame_ms_median": 3.02, "frame_ms_p95": 25.48, "frame_ms_p99": 35.10, "frame_ms_max": 45.08, "frames_over_16_7_ms": 193, "of_them_with_simulation_step": 29, "gc_collections": 10, "simulation_ms_per_frame": 0.051, "views_ms_per_frame": 0.187, "ui_ms_per_frame": 0.061, "units_alive_max": 41}
|
||||
// timings mid lane close (zoom 22): main thread avg 2.14 / median 2.03 / p95 3.02 ms, render thread avg 1.79 / median 1.78 / p95 2.09 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.55 / median 0.52 / p95 23.25 ms
|
||||
]
|
||||
}
|
||||
|
|
@ -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 g05 x36, speed 1x, measured after 10 s of combat",
|
||||
// moving units at the start of the first window: g05 38, w04 14, e04 11, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4
|
||||
"windows": [
|
||||
{"view": "overview (zoom 64)", "frames": 2246, "fps": 112.3, "frame_ms_avg": 8.91, "frame_ms_median": 3.89, "frame_ms_p95": 25.79, "frame_ms_p99": 31.99, "frame_ms_max": 40.51, "frames_over_16_7_ms": 403, "of_them_with_simulation_step": 40, "gc_collections": 21, "simulation_ms_per_frame": 0.080, "views_ms_per_frame": 0.226, "ui_ms_per_frame": 0.078, "units_alive_max": 97},
|
||||
// timings overview (zoom 64): main thread avg 2.76 / median 2.62 / p95 3.74 ms, render thread avg 2.53 / median 2.45 / p95 3.27 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 6.15 / median 0.99 / p95 22.77 ms
|
||||
{"view": "mid lane close (zoom 22)", "frames": 1286, "fps": 128.6, "frame_ms_avg": 7.78, "frame_ms_median": 3.30, "frame_ms_p95": 24.61, "frame_ms_p99": 32.40, "frame_ms_max": 42.31, "frames_over_16_7_ms": 208, "of_them_with_simulation_step": 20, "gc_collections": 9, "simulation_ms_per_frame": 0.048, "views_ms_per_frame": 0.199, "ui_ms_per_frame": 0.066, "units_alive_max": 41}
|
||||
// timings mid lane close (zoom 22): main thread avg 2.21 / median 2.09 / p95 3.30 ms, render thread avg 1.83 / median 1.81 / p95 2.15 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.56 / median 0.54 / p95 22.40 ms
|
||||
]
|
||||
}
|
||||
|
|
@ -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 g05 x36, speed 1x, measured after 10 s of combat",
|
||||
// moving units at the start of the first window: g05 38, w04 14, e04 11, w06 11, w02 7, e01 4, e02 4, w08 4, w10 4
|
||||
"windows": [
|
||||
{"view": "overview (zoom 64)", "frames": 2248, "fps": 112.4, "frame_ms_avg": 8.90, "frame_ms_median": 3.80, "frame_ms_p95": 26.51, "frame_ms_p99": 32.52, "frame_ms_max": 35.90, "frames_over_16_7_ms": 404, "of_them_with_simulation_step": 51, "gc_collections": 20, "simulation_ms_per_frame": 0.082, "views_ms_per_frame": 0.224, "ui_ms_per_frame": 0.077, "units_alive_max": 97},
|
||||
// timings overview (zoom 64): main thread avg 2.76 / median 2.62 / p95 3.89 ms, render thread avg 2.53 / median 2.43 / p95 3.27 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 6.13 / median 1.00 / p95 23.28 ms
|
||||
{"view": "mid lane close (zoom 22)", "frames": 1271, "fps": 127.0, "frame_ms_avg": 7.87, "frame_ms_median": 3.09, "frame_ms_p95": 26.19, "frame_ms_p99": 35.81, "frame_ms_max": 44.78, "frames_over_16_7_ms": 211, "of_them_with_simulation_step": 26, "gc_collections": 10, "simulation_ms_per_frame": 0.049, "views_ms_per_frame": 0.205, "ui_ms_per_frame": 0.067, "units_alive_max": 41}
|
||||
// timings mid lane close (zoom 22): main thread avg 2.31 / median 2.17 / p95 3.29 ms, render thread avg 1.79 / median 1.77 / p95 2.08 ms, gpu avg 0.00 / median 0.00 / p95 0.00 ms, present wait avg 5.58 / median 0.42 / p95 24.05 ms
|
||||
]
|
||||
}
|
||||
11
docs/port/logs/u5.5-g05/player-smoke.json
Normal 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"
|
||||
}
|
||||
11
docs/port/logs/u5.5-g05/scene-frame-rates.json
Normal 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.153, "measured_fps": 30.015, "max_steps_per_frame": 21, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
|
||||
{"target": "60 fps", "frames": 1626, "seconds": 27.095, "measured_fps": 60.01, "max_steps_per_frame": 11, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
|
||||
{"target": "120 fps", "frames": 3225, "seconds": 26.915, "measured_fps": 119.82, "max_steps_per_frame": 7, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true},
|
||||
{"target": "unlimited", "frames": 85389, "seconds": 26.824, "measured_fps": 3183.307, "max_steps_per_frame": 6, "steps": 12690, "hash": "DCE95C96556F3A1A", "winner": 1, "same_as_core": true}
|
||||
]
|
||||
}
|
||||
16
docs/port/logs/u5.5-g05/vertical-function-test.json
Normal 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": 48968, "fps": 2448.375, "frame_ms_avg": 0.408, "frame_ms_p95": 0.421, "simulation_ms_per_frame": 0.004, "views_ms_per_frame": 0.128, "units_alive_max": 116}}
|
||||
]
|
||||
}
|
||||
BIN
docs/port/screenshots/u5.5-g05/01-runde1-aufmarsch.jpg
Normal file
|
After Width: | Height: | Size: 595 KiB |
BIN
docs/port/screenshots/u5.5-g05/02-runde1-mid-kampf.jpg
Normal file
|
After Width: | Height: | Size: 610 KiB |
BIN
docs/port/screenshots/u5.5-g05/03-turm-faellt.jpg
Normal file
|
After Width: | Height: | Size: 543 KiB |
BIN
docs/port/screenshots/u5.5-g05/04-turm-ruine.jpg
Normal file
|
After Width: | Height: | Size: 534 KiB |
BIN
docs/port/screenshots/u5.5-g05/05-grotte-bosskampf.jpg
Normal file
|
After Width: | Height: | Size: 609 KiB |
BIN
docs/port/screenshots/u5.5-g05/06-held-kaempft.jpg
Normal file
|
After Width: | Height: | Size: 624 KiB |
BIN
docs/port/screenshots/u5.5-g05/07-boss-auf-der-lane.jpg
Normal file
|
After Width: | Height: | Size: 577 KiB |
BIN
docs/port/screenshots/u5.5-g05/08-ancient-faellt.jpg
Normal file
|
After Width: | Height: | Size: 624 KiB |
BIN
docs/port/screenshots/u5.5-g05/09-ancient-ruine.jpg
Normal file
|
After Width: | Height: | Size: 623 KiB |
BIN
docs/port/screenshots/u5.5-g05/10-ende-uebersicht.jpg
Normal file
|
After Width: | Height: | Size: 435 KiB |
BIN
docs/port/screenshots/u5.5-g05/11-welle21-uebersicht.jpg
Normal file
|
After Width: | Height: | Size: 592 KiB |
BIN
docs/port/screenshots/u5.5-g05/12-welle21-kampf.jpg
Normal file
|
After Width: | Height: | Size: 648 KiB |
BIN
docs/port/screenshots/u5.5-g05/13-ancient-rot-faellt.jpg
Normal file
|
After Width: | Height: | Size: 601 KiB |
BIN
docs/port/screenshots/u5.5-g05/14-welle-ende.jpg
Normal file
|
After Width: | Height: | Size: 580 KiB |
BIN
docs/port/screenshots/u5.5-g05/Characters.jpg
Normal file
|
After Width: | Height: | Size: 145 KiB |
BIN
docs/port/screenshots/u5.5-g05/Units.jpg
Normal file
|
After Width: | Height: | Size: 717 KiB |
BIN
docs/port/screenshots/u5.5-g05/figur/funkenlanze-attack_a.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
docs/port/screenshots/u5.5-g05/figur/funkenlanze.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 129 KiB |
BIN
docs/port/screenshots/u5.5-g05/figur/funkenlanze_meshy.jpg
Normal file
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 709 KiB |
BIN
docs/port/screenshots/u5.5-g05/spiel-nachher/02-portraet.jpg
Normal file
|
After Width: | Height: | Size: 711 KiB |
BIN
docs/port/screenshots/u5.5-g05/spiel-nachher/03-kampf-nah.jpg
Normal file
|
After Width: | Height: | Size: 610 KiB |
BIN
docs/port/screenshots/u5.5-g05/spiel-nachher/04-kampf-lane.jpg
Normal file
|
After Width: | Height: | Size: 650 KiB |
|
After Width: | Height: | Size: 705 KiB |
BIN
docs/port/screenshots/u5.5-g05/spiel-vorher/02-portraet.jpg
Normal file
|
After Width: | Height: | Size: 706 KiB |
BIN
docs/port/screenshots/u5.5-g05/spiel-vorher/03-kampf-nah.jpg
Normal file
|
After Width: | Height: | Size: 612 KiB |
BIN
docs/port/screenshots/u5.5-g05/spiel-vorher/04-kampf-lane.jpg
Normal file
|
After Width: | Height: | Size: 651 KiB |
|
|
@ -1720,6 +1720,52 @@
|
|||
"death"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "funkenlanze_meshy",
|
||||
"group": "Characters",
|
||||
"kind": "skinned",
|
||||
"representative": "U5.5 series: Funkenlanze (g05 and hero) from Meshy, lance as separate model in the right hand",
|
||||
"source": "tools/meshy/build_figure.py",
|
||||
"source_root": "unity",
|
||||
"generator": {
|
||||
"args": [
|
||||
"tools/meshy/g05/figure.json"
|
||||
],
|
||||
"inputs": [
|
||||
"tools/meshy/g05/figure.json",
|
||||
"assets-source/meshy/g05/funkenlanze-skelett.glb",
|
||||
"assets-source/meshy/g05/funkenlanze-animationen.glb",
|
||||
"assets-source/meshy/g05/funkenlanze-lanze.glb"
|
||||
]
|
||||
},
|
||||
"replaces": "g05",
|
||||
"expect": {
|
||||
"triangles": 29045,
|
||||
"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": {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import sys
|
|||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
from mathutils import Matrix
|
||||
from mathutils import Matrix, Vector
|
||||
|
||||
FPS = 24
|
||||
CLIP_ORDER = ['idle', 'walk', 'attack_a', 'attack_b', 'hit', 'ability', 'death']
|
||||
|
|
@ -231,6 +231,73 @@ def textures(material, prefix, rule, colours):
|
|||
return {'glow_share': round(float(mask.mean()), 4), 'palette_gains': gains, 'size': list(found['albedo'].size)}
|
||||
|
||||
|
||||
def attach_prop(arm, prop, source_root, unity_root, figure):
|
||||
"""A weapon generated as its own Meshy model (the auto rig would bind a held lance to hand and
|
||||
leg at once): scaled to its length, laid into the fist of the bone in the rest pose (axis along
|
||||
the figure's forward, perpendicular to the hand bone, tip forward, grip at a share of its
|
||||
length from the butt) and skinned to that bone alone, so every clip carries it."""
|
||||
objects = import_glb(source_root / prop['glb'])
|
||||
mesh = next(o for o in objects if o.type == 'MESH')
|
||||
for obj in objects:
|
||||
if obj is not mesh:
|
||||
bpy.data.objects.remove(obj, do_unlink=True)
|
||||
bpy.ops.object.select_all(action='DESELECT')
|
||||
mesh.select_set(True)
|
||||
bpy.context.view_layer.objects.active = mesh
|
||||
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
|
||||
data = mesh.data
|
||||
coords = np.empty(len(data.vertices) * 3)
|
||||
data.vertices.foreach_get('co', coords)
|
||||
coords = coords.reshape(-1, 3)
|
||||
axis = int(np.argmax(coords.max(0) - coords.min(0)))
|
||||
low, high = coords[:, axis].min(), coords[:, axis].max()
|
||||
tip_positive = prop.get('tip', '+') == '+'
|
||||
# Lance frame: u along the shaft from butt to tip, origin at the grip.
|
||||
u = np.zeros(3)
|
||||
u[axis] = 1.0 if tip_positive else -1.0
|
||||
butt = low if tip_positive else high
|
||||
scale = prop['length'] / (high - low)
|
||||
grip = butt + (high - low) * prop.get('grip', 0.4) * (1 if tip_positive else -1)
|
||||
centre = coords.mean(0)
|
||||
centre[axis] = grip
|
||||
bone = arm.data.bones[prop['bone']]
|
||||
head = arm.matrix_world @ bone.head_local
|
||||
tail = arm.matrix_world @ bone.tail_local
|
||||
d = (tail - head).normalized()
|
||||
forward = Vector((0.0, -1.0, 0.0))
|
||||
shaft = (forward - d * forward.dot(d)).normalized()
|
||||
side = d.cross(shaft).normalized()
|
||||
target = head + d * prop.get('palm', 0.07)
|
||||
# Rotation taking the lance's own axes (u, two others) to (shaft, d, side).
|
||||
a = [i for i in range(3) if i != axis]
|
||||
src = np.zeros((3, 3))
|
||||
src[:, 0] = u
|
||||
src[a[0], 1] = 1.0
|
||||
src[a[1], 2] = 1.0
|
||||
dst = np.array([shaft[:], d[:], side[:]]).T
|
||||
rot = dst @ np.linalg.inv(src)
|
||||
if np.linalg.det(rot) < 0:
|
||||
dst[:, 2] *= -1
|
||||
rot = dst @ np.linalg.inv(src)
|
||||
moved = ((coords - centre) * scale) @ rot.T + np.array(target[:])
|
||||
data.vertices.foreach_set('co', moved.ravel())
|
||||
data.update()
|
||||
mesh.name = data.name = prop['name']
|
||||
group = mesh.vertex_groups.new(name=prop['bone'])
|
||||
group.add(list(range(len(data.vertices))), 1.0, 'REPLACE')
|
||||
modifier = mesh.modifiers.new('Armature', 'ARMATURE')
|
||||
modifier.object = arm
|
||||
mesh.parent = arm
|
||||
mesh.matrix_parent_inverse = Matrix.Identity(4)
|
||||
material = mesh.material_slots[0].material
|
||||
maps = textures(material, str(unity_root / prop['textures']), figure['glow'], figure.get('palette', {}))
|
||||
material.name = prop['material']
|
||||
for node in list(material.node_tree.nodes):
|
||||
if node.type not in ('BSDF_PRINCIPLED', 'OUTPUT_MATERIAL'):
|
||||
material.node_tree.nodes.remove(node)
|
||||
return mesh, {'name': prop['name'], 'triangles': sum(len(poly.vertices) - 2 for poly in data.polygons), 'textures': maps}
|
||||
|
||||
|
||||
def lane_lod(body, rule):
|
||||
"""The lane-distance copy (LOD1): the seam copies welded (Meshy splits the mesh along its UV
|
||||
seams), decimated to the target triangle count, sharp edges from the angle instead of Meshy's
|
||||
|
|
@ -306,7 +373,16 @@ def build(figure_path, source_root, unity_root):
|
|||
source = bpy.data.actions[spec['source']]
|
||||
first, last = spec.get('frames', list(source.frame_range))
|
||||
seconds = spec.get('seconds', (last - first) / FPS)
|
||||
sampled[name] = (spec, sample_clip(arm_anim, source, (first, last), seconds), (first, last))
|
||||
samples = sample_clip(arm_anim, source, (first, last), seconds)
|
||||
if spec.get('in_place'):
|
||||
# The lunge of a library clip without its step: Hips keeps its horizontal place
|
||||
# (bone X and Z; the bone points up), so the figure strikes from where it stands.
|
||||
start = samples[0]['Hips'].to_translation()
|
||||
for pose in samples:
|
||||
hips = pose['Hips']
|
||||
hips[0][3] = start.x
|
||||
hips[2][3] = start.z
|
||||
sampled[name] = (spec, samples, (first, last))
|
||||
for obj in loose:
|
||||
bpy.data.objects.remove(obj, do_unlink=True)
|
||||
for action in list(bpy.data.actions):
|
||||
|
|
@ -372,11 +448,18 @@ def build(figure_path, source_root, unity_root):
|
|||
for node in list(tree.nodes):
|
||||
if node.type not in ('BSDF_PRINCIPLED', 'OUTPUT_MATERIAL'):
|
||||
tree.nodes.remove(node)
|
||||
props = []
|
||||
for prop in figure.get('props', []):
|
||||
mesh, facts = attach_prop(arm, prop, source_root, unity_root, figure)
|
||||
props.append((mesh, prop, facts))
|
||||
for image in list(bpy.data.images):
|
||||
bpy.data.images.remove(image)
|
||||
lod = lane_lod(body, figure['lod']) if 'lod' in figure else None
|
||||
for mesh, prop, facts in props:
|
||||
if 'lod' in figure:
|
||||
facts['lod'] = lane_lod(mesh, dict(figure['lod'], triangles=prop.get('lod_triangles', 600)))
|
||||
scene.frame_set(0)
|
||||
return {'clips': clips, 'textures': maps, 'unit': unit, 'lod': lod}
|
||||
return {'clips': clips, 'textures': maps, 'unit': unit, 'lod': lod, 'props': [facts for _, _, facts in props]}
|
||||
|
||||
|
||||
figure_file, source_dir, unity_dir, save_to = options()
|
||||
|
|
|
|||
10
tools/meshy/g05/01-konzept-lanze.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"ai_model": "gpt-image-2",
|
||||
"prompt": "Product concept of only the weapon from 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 spark lance, a long straight dark basalt-black staff banded with worn gold rings and glowing orange seams, a gold collar with small spikes, and a long faceted crystal spearhead glowing molten orange. The whole weapon lies horizontally, tip pointing right, seen exactly from the side, completely visible, centered, no hands, no figure. Plain light grey background, soft even studio light, no shadow, no text.",
|
||||
"aspect_ratio": "1:1",
|
||||
"reference_image_urls": [
|
||||
"@../saumwacht-godot/assets-source/phase3/masters/glutpakt/unit_g05_funkenlanze_icon.png",
|
||||
"@tools/meshy/g05/ref-g05-funkenlanze.png",
|
||||
"@assets-source/meshy/g01/kohlenbeisser-konzept.png"
|
||||
]
|
||||
}
|
||||
10
tools/meshy/g05/01-konzept.json
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"ai_model": "gpt-image-2",
|
||||
"prompt": "Full-body concept of the figure 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 Funkenlanze, a slender female lancer warrior of the ember faction in sleek dark basalt-black armor plates edged with worn gold, a visored helmet with two swept-back gold horn crests and a glowing orange visor slit, glowing molten orange seams on the chest core, waist and legs, pointed gold shoulder guards, gold knee and ankle rings. She carries NO weapon: both hands are empty and closed as if gripping a staff. Stylized realism, hand-sculpted detailed forms, 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_g05_funkenlanze_icon.png",
|
||||
"@tools/meshy/g05/ref-g05-funkenlanze.png",
|
||||
"@assets-source/meshy/g01/kohlenbeisser-konzept.png"
|
||||
]
|
||||
}
|
||||
15
tools/meshy/g05/02-modell-lanze.json
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"input_task_id": "01a12565-6a41-753c-b9b3-78a393f56f66",
|
||||
"ai_model": "latest",
|
||||
"should_texture": true,
|
||||
"enable_pbr": true,
|
||||
"texture_resolution": "2k",
|
||||
"should_remesh": true,
|
||||
"topology": "triangle",
|
||||
"target_polycount": 3000,
|
||||
"save_pre_remeshed_model": true,
|
||||
"target_formats": [
|
||||
"glb"
|
||||
],
|
||||
"multi_view_thumbnails": true
|
||||
}
|
||||
16
tools/meshy/g05/02-modell.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"input_task_id": "01a12565-5d78-7464-8969-99fb31d79634",
|
||||
"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
|
||||
}
|
||||
4
tools/meshy/g05/03-skelett.json
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"input_task_id": "01a12566-54b4-70c5-9513-4f8afe8bf9f1",
|
||||
"height_meters": 1.8
|
||||
}
|
||||
4
tools/meshy/g05/04-animationen.json
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"rig_task_id": "01a12569-545c-7774-8c02-4d006f5b61aa",
|
||||
"action_ids": [0, 21, 240, 219, 178, 242, 183]
|
||||
}
|
||||
24
tools/meshy/g05/figure.json
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"id": "funkenlanze_meshy",
|
||||
"replaces": "g05",
|
||||
"rig": "assets-source/meshy/g05/funkenlanze-skelett.glb",
|
||||
"animations": "assets-source/meshy/g05/funkenlanze-animationen.glb",
|
||||
"material": "AI_Funkenlanze",
|
||||
"textures": "Assets/Luneraria/Art/Textures/ai-funkenlanze",
|
||||
"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}},
|
||||
"props": [{"glb": "assets-source/meshy/g05/funkenlanze-lanze.glb", "name": "FunkenlanzeLanze", "material": "AI_FunkenlanzeLanze",
|
||||
"textures": "Assets/Luneraria/Art/Textures/ai-funkenlanzelanze", "bone": "RightHand", "tip": "+",
|
||||
"length": 1.75, "grip": 0.4, "palm": 0.07, "lod_triangles": 600}],
|
||||
"clips": {
|
||||
"idle": {"source": "Idle", "loop": true},
|
||||
"walk": {"source": "Walk_Fight_Forward", "seconds": 1.3, "loop": true},
|
||||
"attack_a": {"source": "Thrust_Slash", "frames": [4, 30], "seconds": 1.0, "contact_frame": 21, "in_place": true},
|
||||
"attack_b": {"source": "Right_Hand_Sword_Slash", "frames": [0, 36], "seconds": 1.05, "contact_frame": 14},
|
||||
"hit": {"source": "Hit_Reaction", "frames": [0, 12], "seconds": 0.5},
|
||||
"ability": {"source": "Charged_Slash", "seconds": 1.2, "contact_frame": 13},
|
||||
"death": {"source": "Shot_and_Fall_Backward", "seconds": 2.4}
|
||||
}
|
||||
}
|
||||
BIN
tools/meshy/g05/ref-g05-funkenlanze.png
Normal file
|
After Width: | Height: | Size: 975 KiB |
20
tools/meshy/g05/tasks/animationen.json
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"id": "01a12569-bbba-73dc-8cb4-da774f9df42c",
|
||||
"type": "animate",
|
||||
"name": "",
|
||||
"status": "SUCCEEDED",
|
||||
"created_at": 1791629049056,
|
||||
"progress": 100,
|
||||
"started_at": 1791629049064,
|
||||
"finished_at": 1791629079557,
|
||||
"expires_at": 1791888279557,
|
||||
"task_error": null,
|
||||
"result": {
|
||||
"animation_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-bbba-73dc-8cb4-da774f9df42c/output/merged_animations.glb",
|
||||
"animation_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-bbba-73dc-8cb4-da774f9df42c/output/merged_animations.fbx",
|
||||
"processed_usdz_url": "",
|
||||
"processed_armature_fbx_url": "",
|
||||
"processed_animation_fps_fbx_url": ""
|
||||
},
|
||||
"consumed_credits": 21
|
||||
}
|
||||
16
tools/meshy/g05/tasks/konzept-lanze.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"id": "01a12565-6a41-753c-b9b3-78a393f56f66",
|
||||
"type": "image-to-image",
|
||||
"ai_model": "gpt-image-2",
|
||||
"prompt": "Product concept of only the weapon from 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 spark lance, a long straight dark basalt-black staff banded with worn gold rings and glowing orange seams, a gold collar with small spikes, and a long faceted crystal spearhead glowing molten orange. The whole weapon lies horizontally, tip pointing right, seen exactly from the side, completely visible, centered, no hands, no figure. Plain light grey background, soft even studio light, no shadow, no text.",
|
||||
"status": "SUCCEEDED",
|
||||
"progress": 100,
|
||||
"created_at": 1791628767717,
|
||||
"started_at": 1791628767730,
|
||||
"finished_at": 1791628800223,
|
||||
"expires_at": 1791888000223,
|
||||
"image_urls": [
|
||||
"https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/uploads/image_01a12565-6a41-753c-b9b3-78a393f56f66_0.png"
|
||||
],
|
||||
"consumed_credits": 12
|
||||
}
|
||||
16
tools/meshy/g05/tasks/konzept.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"id": "01a12565-5d78-7464-8969-99fb31d79634",
|
||||
"type": "image-to-image",
|
||||
"ai_model": "gpt-image-2",
|
||||
"prompt": "Full-body concept of the figure 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 Funkenlanze, a slender female lancer warrior of the ember faction in sleek dark basalt-black armor plates edged with worn gold, a visored helmet with two swept-back gold horn crests and a glowing orange visor slit, glowing molten orange seams on the chest core, waist and legs, pointed gold shoulder guards, gold knee and ankle rings. She carries NO weapon: both hands are empty and closed as if gripping a staff. Stylized realism, hand-sculpted detailed forms, 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": 1791628764527,
|
||||
"started_at": 1791628764547,
|
||||
"finished_at": 1791628800843,
|
||||
"expires_at": 1791888000843,
|
||||
"image_urls": [
|
||||
"https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/uploads/image_01a12565-5d78-7464-8969-99fb31d79634_0.png"
|
||||
],
|
||||
"consumed_credits": 12
|
||||
}
|
||||
41
tools/meshy/g05/tasks/modell-lanze.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"id": "01a12566-5a8c-74a4-bda0-f15d41327ef1",
|
||||
"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": 1791628827822,
|
||||
"progress": 100,
|
||||
"started_at": 1791628827834,
|
||||
"finished_at": 1791628947059,
|
||||
"expires_at": 1791888147059,
|
||||
"task_error": null,
|
||||
"model_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/model.glb",
|
||||
"model_urls": {
|
||||
"glb": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/model.glb",
|
||||
"pre_remeshed_glb": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/pre_remeshed_model.glb"
|
||||
},
|
||||
"thumbnail_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/preview.png",
|
||||
"thumbnail_urls": {
|
||||
"back": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/preview_back.png",
|
||||
"front": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/preview_front.png",
|
||||
"left": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/preview_left.png",
|
||||
"right": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/preview_right.png"
|
||||
},
|
||||
"texture_urls": [
|
||||
{
|
||||
"base_color": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/texture_0.png",
|
||||
"metallic": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/texture_0_metallic.png",
|
||||
"roughness": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/texture_0_roughness.png",
|
||||
"normal": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-5a8c-74a4-bda0-f15d41327ef1/output/texture_0_normal.png"
|
||||
}
|
||||
],
|
||||
"consumed_credits": 30
|
||||
}
|
||||
41
tools/meshy/g05/tasks/modell.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"id": "01a12566-54b4-70c5-9513-4f8afe8bf9f1",
|
||||
"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": 1791628826400,
|
||||
"progress": 100,
|
||||
"started_at": 1791628826411,
|
||||
"finished_at": 1791629011694,
|
||||
"expires_at": 1791888211694,
|
||||
"task_error": null,
|
||||
"model_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/model.glb",
|
||||
"model_urls": {
|
||||
"glb": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/model.glb",
|
||||
"pre_remeshed_glb": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/pre_remeshed_model.glb"
|
||||
},
|
||||
"thumbnail_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/preview.png",
|
||||
"thumbnail_urls": {
|
||||
"back": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/preview_back.png",
|
||||
"front": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/preview_front.png",
|
||||
"left": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/preview_left.png",
|
||||
"right": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/preview_right.png"
|
||||
},
|
||||
"texture_urls": [
|
||||
{
|
||||
"base_color": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/texture_0.png",
|
||||
"metallic": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/texture_0_metallic.png",
|
||||
"roughness": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/texture_0_roughness.png",
|
||||
"normal": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12566-54b4-70c5-9513-4f8afe8bf9f1/output/texture_0_normal.png"
|
||||
}
|
||||
],
|
||||
"consumed_credits": 30
|
||||
}
|
||||
25
tools/meshy/g05/tasks/skelett.json
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"id": "01a12569-545c-7774-8c02-4d006f5b61aa",
|
||||
"type": "rig",
|
||||
"name": "",
|
||||
"status": "SUCCEEDED",
|
||||
"created_at": 1791629025839,
|
||||
"progress": 100,
|
||||
"started_at": 1791629025845,
|
||||
"finished_at": 1791629038653,
|
||||
"expires_at": 1791888238653,
|
||||
"task_error": null,
|
||||
"result": {
|
||||
"rigged_character_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-545c-7774-8c02-4d006f5b61aa/output/Character_output.fbx",
|
||||
"rigged_character_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-545c-7774-8c02-4d006f5b61aa/output/Character_output.glb",
|
||||
"basic_animations": {
|
||||
"walking_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-545c-7774-8c02-4d006f5b61aa/output/Animation_Walking_withSkin.glb",
|
||||
"walking_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-545c-7774-8c02-4d006f5b61aa/output/Animation_Walking_withSkin.fbx",
|
||||
"walking_armature_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-545c-7774-8c02-4d006f5b61aa/output/Animation_Walking_withSkin_armature.glb",
|
||||
"running_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-545c-7774-8c02-4d006f5b61aa/output/Animation_Running_withSkin.glb",
|
||||
"running_fbx_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-545c-7774-8c02-4d006f5b61aa/output/Animation_Running_withSkin.fbx",
|
||||
"running_armature_glb_url": "https://assets.meshy.ai/c8cdc243-64e1-4e9d-9fa1-3bd5ed731d84/tasks/01a12569-545c-7774-8c02-4d006f5b61aa/output/Animation_Running_withSkin_armature.glb"
|
||||
}
|
||||
},
|
||||
"consumed_credits": 5
|
||||
}
|
||||