Add rank, friends, fishing, and camp treasure with T2 studio models and skill presentation.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# 剩余四敌人Studio低模/UV及原动作复用
|
||||
|
||||
2026-10-21完成。用户明确授权四份高模上传腾讯混元3D Studio,批处理配方 `Config/Art/StudioTrials/Enemies.json`。沿用大角首领已验证的2~5步,交付四个独立Studio版本;原版模型、Avatar、控制器和成品动画保留,未替换正式战场。
|
||||
|
||||
| 角色 | 源高模面数 | Studio UV面数 | 最终三角面 | 原骨数 | 高度 | 局部脚底校正顶点数 |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| 小角怪 Hornlet | 50000 | 6236 | 1999 | 22 | 0.50m | 0 |
|
||||
| 疾跑怪 Dashlet | 50000 | 6162 | 1999 | 22 | 0.50m | 0 |
|
||||
| 硬壳怪 Shellhorn | 50000 | 9550 | 1999 | 28 | 0.50m | 0 |
|
||||
| 角怪队长 HornCaptain | 48236 | 9391 | 2000 | 22 | 0.60m | 0 |
|
||||
|
||||
## 制作过程
|
||||
|
||||
1. 官网Studio低模拓扑V1.5,三角面/低。逐角色上传自己的高模,再把精确下载的低模FBX提交Studio UV展开;保留任务ID、原始GLB/FBX/OBJ及UV布局PNG。
|
||||
2. 烘焙前对齐Studio居中/归一化的网格和原高模,使用等比缩放、底面中心平移;UV哈希前后一致。角怪队长使用 `horncaptain_main.glb`,与原22骨的生成源哈希完全一致;原始50k及清理版均保留。
|
||||
3. Blender在官网UV上烘焙1024²颜色/法线/AO/金属度/粗糙度。超过目标2000面的30%时再Collapse减面,保留UV层和贴图,不重复展开UV。小角怪、疾跑怪和硬壳怪得到1999面属于减面整数舍入,未添加无用面凑数。
|
||||
4. Blender转回各自原骨架,应用各自原角色配方中的权重规则,最多4个归一化权重。候选Prefab直接引用原Avatar、原AnimatorController及原Clips/Idle、Walk、Attack;没有重新生成、重新收尾或复制成品动作。
|
||||
5. 每角色重新检查实际蒙皮。仅在363帧约束中出现超过3毫米穿地的新脚底顶点才做游戏空间1毫米的局部几何校正;原骨骼、UV、动作与外层根Transform不变。无穿地的角色不套用大角首领的两个顶点编号。是否校正及数量以表格和每角色sole_fit.json为准。
|
||||
|
||||
## 资产与验证
|
||||
|
||||
- 四角色根目录 `AIClient/Assets/Bundles/Characters/Enemy/{Actor}Studio/`,包含 `{Actor}Studio.prefab`、`{Actor}Studio_Enemy.prefab`、静态/蒙皮FBX、XPbr材质和1024² base/mix贴图。
|
||||
- 独立场景 `AIClient/Assets/Bundles/Scenes/Review/Studio_{Actor}_Review.unity`;截图 `Assets/Screenshots/{actor小写}_studio_comparison.png`,1800×900,上原版/下Studio版,Static/Idle/Walk/Attack。场景以Additive生成、采样后关闭,不覆盖原角色总验收场景。
|
||||
- 五敌人总览 `Assets/Screenshots/enemy_studio_batch_overview.png`,对应独立场景 `Studio_Enemies_Overview.unity`;包含先前大角首领,统一0.8m展示高度仅供视觉比较,实际角色Prefab尺寸仍为表中数值。
|
||||
- 每角色均核对原骨路径和绑定局部TRS、原Avatar/控制器引用、原动作所有曲线绑定、蒙皮权重、底面和尺寸。绑定对照误差低于2毫米。
|
||||
- 三动作各121帧,共每角色363帧、四角色1452帧:没有塌陷或无效顶点;底面在±3毫米内,循环接缝小于1毫米,动作可见,倾角小于25°。Attack保留原动作的短距离前冲,不视作外层根漂移。
|
||||
- 同一次Play检查四个角色,各观察到Idle/Walk/Attack三状态、方向正确、外层角色根固定。原Prefab/控制器/成品动作/rig哈希再次复核一致。
|
||||
- 生成与QA回执 `Tools/output/studio_trial/{Actor}/`:trial.json、hunyuan_studio.json、studio_*Rsp.json、bake_alignment.json、model_decimated.json、static_export.json、sole_fit.json、unity_verification.json、play_verification.json。以status=validated为最终状态。
|
||||
|
||||
## 批处理复现
|
||||
|
||||
```powershell
|
||||
python Tools/process_enemy_studio_batch.py --stage cloud
|
||||
python Tools/process_enemy_studio_batch.py --stage finish
|
||||
python Tools/process_enemy_studio_batch.py --stage play
|
||||
python Tools/process_enemy_studio_batch.py --stage verify
|
||||
```
|
||||
|
||||
云端阶段调用已安装的3D工作台集成,依赖已有项目登录会话;本次四模型外传已获明确授权。Unity资产、导入设置、Prefab、材质和场景均经Pipeline,显式指定AIClient项目。原始下载与中间件保持可追溯,结果作为独立候选供比较;最终同面数的画质和目标设备性能应分别评估。
|
||||
|
||||
|
||||
## 五敌人战场替换与技能闭环样例(2026-10-21)
|
||||
|
||||
此后五敌人已全部替换正式 `PrototypeArena`,9槽×5类型。`BuildPrototype.FormalEnemies` 与验收检查同步;原 Avatar/控制器/动作继续复用。五类在真实 `PrototypeFlow` 内存隔离战斗观察到 Walk/Attack,攻击/受击特效音效正常(158次特效、122次声音),截图 `Assets/Screenshots/enemy_studio_arena.png`。回执 `Doc/Design/Combat/EnemyCombatFx/studio_arena.json`。
|
||||
@@ -0,0 +1,197 @@
|
||||
{
|
||||
"status": "validated",
|
||||
"actors": [
|
||||
{
|
||||
"actor": "Hornlet",
|
||||
"name": "小角怪",
|
||||
"source": "Tools/output/enemy_3d/Hornlet/hornlet.glb",
|
||||
"sourceTriangles": 50000,
|
||||
"studioTriangles": 6236,
|
||||
"triangles": 1999,
|
||||
"bones": 22,
|
||||
"height": 0.5,
|
||||
"bindErrorMm": 0.0281908069,
|
||||
"soleVertices": 0,
|
||||
"maxTilt": 10.8752375,
|
||||
"motionSamples": [
|
||||
{
|
||||
"name": "Idle",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/Hornlet/Clips/Idle.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.000115096569,
|
||||
"maxY": 5.96046448e-08,
|
||||
"movement": 0.008423355,
|
||||
"tilt": 0.182384253,
|
||||
"drift": 0.0,
|
||||
"seam": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Walk",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/Hornlet/Clips/Walk.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.0006853491,
|
||||
"maxY": 0.00068333745,
|
||||
"movement": 0.04498485,
|
||||
"tilt": 3.06841588,
|
||||
"drift": 0.0,
|
||||
"seam": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Attack",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/Hornlet/Clips/Attack.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.000669121742,
|
||||
"maxY": 0.0003812611,
|
||||
"movement": 0.121637732,
|
||||
"tilt": 11.0213184,
|
||||
"drift": 0.0249544084,
|
||||
"seam": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"actor": "Dashlet",
|
||||
"name": "疾跑怪",
|
||||
"source": "Tools/output/enemy_3d/Dashlet/dashlet.glb",
|
||||
"sourceTriangles": 50000,
|
||||
"studioTriangles": 6162,
|
||||
"triangles": 1999,
|
||||
"bones": 22,
|
||||
"height": 0.5,
|
||||
"bindErrorMm": 0.0261153382,
|
||||
"soleVertices": 0,
|
||||
"maxTilt": 11.0649471,
|
||||
"motionSamples": [
|
||||
{
|
||||
"name": "Idle",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/Dashlet/Clips/Idle.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.0006045401,
|
||||
"maxY": 4.85777855e-05,
|
||||
"movement": 0.0115007143,
|
||||
"tilt": 0.6205508,
|
||||
"drift": 1.11758709e-08,
|
||||
"seam": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Walk",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/Dashlet/Clips/Walk.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.000568091869,
|
||||
"maxY": 0.00143431127,
|
||||
"movement": 0.03515787,
|
||||
"tilt": 4.238314,
|
||||
"drift": 1.86264515e-08,
|
||||
"seam": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Attack",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/Dashlet/Clips/Attack.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.0007119626,
|
||||
"maxY": 0.000396505,
|
||||
"movement": 0.1429233,
|
||||
"tilt": 11.3336916,
|
||||
"drift": 0.0251499582,
|
||||
"seam": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"actor": "Shellhorn",
|
||||
"name": "硬壳怪",
|
||||
"source": "Tools/output/enemy_3d/Shellhorn/shellhorn.glb",
|
||||
"sourceTriangles": 50000,
|
||||
"studioTriangles": 9550,
|
||||
"triangles": 1999,
|
||||
"bones": 28,
|
||||
"height": 0.5,
|
||||
"bindErrorMm": 0.0279905289,
|
||||
"soleVertices": 0,
|
||||
"maxTilt": 11.324461,
|
||||
"motionSamples": [
|
||||
{
|
||||
"name": "Idle",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/Shellhorn/Clips/Idle.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.000730574131,
|
||||
"maxY": 2.98023224e-08,
|
||||
"movement": 0.0173166543,
|
||||
"tilt": 1.60327649,
|
||||
"drift": 7.450581e-09,
|
||||
"seam": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Walk",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/Shellhorn/Clips/Walk.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.000426262617,
|
||||
"maxY": -0.000110596418,
|
||||
"movement": 0.0472506844,
|
||||
"tilt": 7.10674572,
|
||||
"drift": 1.49011612e-08,
|
||||
"seam": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Attack",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/Shellhorn/Clips/Attack.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.00196000934,
|
||||
"maxY": 0.0009786487,
|
||||
"movement": 0.173831984,
|
||||
"tilt": 11.7986069,
|
||||
"drift": 0.0249543861,
|
||||
"seam": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"actor": "HornCaptain",
|
||||
"name": "角怪队长",
|
||||
"source": "Tools/output/enemy_3d/HornCaptain/horncaptain_main.glb",
|
||||
"sourceTriangles": 48236,
|
||||
"studioTriangles": 9391,
|
||||
"triangles": 2000,
|
||||
"bones": 22,
|
||||
"height": 0.6,
|
||||
"bindErrorMm": 0.0319501669,
|
||||
"soleVertices": 0,
|
||||
"maxTilt": 12.1147614,
|
||||
"motionSamples": [
|
||||
{
|
||||
"name": "Idle",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/HornCaptain/Clips/Idle.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.000101685524,
|
||||
"maxY": 0.0003542602,
|
||||
"movement": 0.0129548572,
|
||||
"tilt": 0.6308707,
|
||||
"drift": 0.0,
|
||||
"seam": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Walk",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/HornCaptain/Clips/Walk.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.00204786658,
|
||||
"maxY": 0.00033596158,
|
||||
"movement": 0.09477278,
|
||||
"tilt": 2.27967358,
|
||||
"drift": 1.11758709e-08,
|
||||
"seam": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Attack",
|
||||
"originalClip": "Assets/Bundles/Characters/Enemy/HornCaptain/Clips/Attack.anim",
|
||||
"frames": 121,
|
||||
"minY": -0.00267779827,
|
||||
"maxY": 0.00102874637,
|
||||
"movement": 0.1298844,
|
||||
"tilt": 12.6954126,
|
||||
"drift": 0.0249544121,
|
||||
"seam": 0.0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user