Add prototype gameplay loop with character/battlefield assets and server game APIs.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+70
-22
@@ -85,12 +85,14 @@ python Tools/gpt_image_generate.py --result-only --quality high --aspect-ratio 2
|
||||
|
||||
### 1. 场景
|
||||
|
||||
状态:a / b / c / d 已用 `TownSquare` 跑通。
|
||||
状态:a / b / c / d 已用 `TownSquare` 跑通;战斗战场方案 A「绿野三岔口」也已跑通到开战加载。
|
||||
|
||||
战斗战场专用流程见 [`Doc/Design/Scene/Battlefield/BattlefieldSceneGeneration.md`](Doc/Design/Scene/Battlefield/BattlefieldSceneGeneration.md):三张总览图选一 → 分件 → 混元图生 3D → 减面烘焙 → Pipeline 拼装 → 嵌进开战预制体。战场地表必须独立制作;装饰组件硬上限 15 类(推荐 8~12 类),清单与目标面数在 `battlefield_scene_manifest.json`。未选择方案不得生成模型或 Prefab。
|
||||
|
||||
**a. 整体设计图(需确认)**
|
||||
|
||||
1. 用项目画图方案绘制整场景设计图(样例:`Doc/Design/Scene/TownSquare/town_square.png`)。
|
||||
2. 从设计图归纳场景物件类型,**控制在 10 种以内**(含地表计 1 种)。
|
||||
2. 从设计图归纳场景物件类型;TownSquare 历史模板控制在 **10 种以内**(含地表),战斗战场按专用流程控制在 **15 种以内**,地表单独计件。
|
||||
3. **停在这里等人确认**类型清单与整体设计图。未确认不画组件、不生成模型。
|
||||
4. 原稿放到 `Doc/Design/Scene/{场景号}/`。
|
||||
|
||||
@@ -140,37 +142,83 @@ python Tools/gpt_image_generate.py --result-only --quality high --aspect-ratio 1
|
||||
|
||||
`TownSquare` 实测三角面:ground 800、shop 1797、tree 1498、lamp 500、board 800、fountain 1798、bench 699、bush 436。
|
||||
|
||||
**战斗战场样例 A · 绿野三岔口(2026-10-20)**
|
||||
|
||||
1. 设计 / 分件 / 模型:见 `Doc/Design/Scene/Battlefield/`;选中 A;树/岩石/桥/路牌/灌木 + 独立地表均已混元 50k → 减面烘焙 → 入 `Assets/Bundles/Scenes/Prototype/Battlefield/A/`。
|
||||
2. Pipeline:`BuildBattlefieldAssets.BuildAll` → `BuildBattlefieldScene.Build` → `AttachGreenfield.Build`。输出 `Battlefield_Greenfield.prefab`,嵌为 `PrototypeArena/Greenfield`;方块地面关闭。
|
||||
3. 桥模型保留(`placeInScene: false`),场景不摆桥。装饰为树、岩石、路牌、灌木。
|
||||
4. 战斗相机只画第 30 层:Greenfield 整棵子树必须设为 layer 30,否则地表在 Play Mode 不可见。
|
||||
5. 运行时仍由 `PrototypeFlow` 按地址 `PrototypeArena` 加载(Art/GameplayPrototype 收集)。Play Mode 隔离服验证截图:`Assets/Screenshots/battlefield_play_battle.png`。
|
||||
|
||||
### 2. 角色
|
||||
|
||||
#### A. 人物角色
|
||||
|
||||
状态:待细化。工具链已在 MaleExplorer 上跑通过(`Doc/ResDesc_Model.md`);本条按新目录与约 3000 面重核。
|
||||
状态:已用 `CaoCao` 跑通(约 3000 面、`Characters/Human/{英文名称}`)。
|
||||
|
||||
1. 参照风格图绘制设计图:**T Pose**,背景纯白。
|
||||
2. 原稿放到 `Doc/Design/Character/{英文名称}/`。
|
||||
3. 设计图走附录 B,减面后约 **3000** 面。
|
||||
4. 最终资源放到 `AIClient/Assets/Bundles/Characters/{类型}/{英文名称}/`。
|
||||
5. 登记 `Doc/ResDesc_Model.md` 与 `Doc/ResDesc_Picture.md`。
|
||||
1. 参照风格图绘制设计图:**T Pose**,双手空、全身入画、背景纯白。比例 `2:3`(本次 `1024×1536`)。
|
||||
2. 原稿放到 `Doc/Design/Character/{英文名称}/`,**不进 Bundles**。样例:`Doc/Design/Character/CaoCao/caocao.png`。
|
||||
3. 设计图走附录 B:混元 `--faces 50k` → `model_lowpoly_bake.py --tris 3000 --size 1024`。减面后约 **3000** 面。
|
||||
4. 用 `Tools/install_character_bundles.py -a {英文名称} --kind Human` 拷到 `AIClient/Assets/Bundles/Characters/Human/{英文名称}/`(`{名}.fbx`、`_base.png`、`_mix.png`、`.mat`)。
|
||||
5. Unity Pipeline 建 Prefab(Y-up、底面原点、局部 -Z 正面,**不要**再绕 X +90°):`unity command run_script --file AgentScripts/SetupCharacter.cs --entry SetupCharacter.SetupCaoCao`。身高缩到 **1.8m**。Art 收集已覆盖 `Assets/Bundles/Characters`。
|
||||
6. 运行时 `CharacterSpawner` 按地址 `CaoCao` 加载;Y 用 `GroundSit` 打地表 MeshCollider(中心点若未打中,偏 0.35m 再打)。
|
||||
7. 登记 `Doc/ResDesc_Model.md` 与 `Doc/ResDesc_Picture.md`。
|
||||
|
||||
既有 `Characters/MaleExplorer/` 是早期平铺目录,新角色按 `{类型}/{英文名称}` 存放。
|
||||
本次实测:高模 49990 面 → 低模 **3000** 面;贴图 1024;Prefab `Assets/Bundles/Characters/Human/CaoCao/CaoCao.prefab`。旧样例 `Characters/MaleExplorer/` 仍是平铺目录、约 5k 面,且 Prefab 带历史 +90°X,不作为新角色模板。
|
||||
|
||||
```bash
|
||||
python Tools/hunyuan_3d_generate.py --result-only --faces 50k -i Doc/Design/Character/CaoCao/caocao.png -o Tools/output/caocao_3d/caocao.glb
|
||||
python Tools/model_tools/model_lowpoly_bake.py Tools/output/caocao_3d/caocao.glb -o Tools/output/caocao_game --tris 3000 --size 1024 --result-only
|
||||
python Tools/install_character_bundles.py -a CaoCao --kind Human -b Tools/output/caocao_game/caocao_xpbr -c Doc/Design/Character/CaoCao/caocao.png
|
||||
# Unity Pipeline: run_script AgentScripts/SetupCharacter.cs --entry SetupCharacter.SetupCaoCao
|
||||
```
|
||||
|
||||
#### B. 非人角色
|
||||
|
||||
状态:待细化。
|
||||
状态:制作与验收工具已落地;正式宠物模型内容待做。
|
||||
|
||||
步骤骨架与人物相同(风格图 → 纯白设计图 → 附录 B → 入库 → 登记)。差异留到细化时写明:姿势、面数、`{类型}` 取值、是否需要与人形共用骨骼。
|
||||
步骤骨架与人物相同(风格图 → 纯白设计图 → 附录 B → 入库 → 登记)。差异:
|
||||
|
||||
- 目录 `Kind`:`Animal`(或后续 `Creature`);样例 `Characters/Animal/LmCat/`。
|
||||
- 姿势:可辨识站姿/四足,不强制 T Pose;目标身高按物种写进验收 manifest。
|
||||
- 面数:默认 800~2000,在 `character_unit_review_manifest.json` 的 `maxTriangles` 验收。
|
||||
- 是否与人形共用骨骼:首批正式宠物各自独立网格,不绑 Mixamo;绑骨/动作用 DGX TokenRig + UniMate(见二.3.B)。
|
||||
|
||||
**验收场景(专用,不进开战):**
|
||||
|
||||
- 流程说明:`Doc/Design/Character/CharacterUnitArtProc.md`
|
||||
- 清单:`Doc/Design/Character/character_unit_review_manifest.json`
|
||||
- Pipeline:`AgentScripts/BuildCharacterReview.cs`(`Build` / `OpenReview` / `ValidateReview`)
|
||||
- 场景:`Assets/Bundles/Scenes/Review/CharacterUnitReview.unity`
|
||||
- 已用 CaoCao / LmGirl / LmCat 跑通:身高与 XPbr 校验通过;截图 `Assets/Screenshots/character_unit_review.png`
|
||||
|
||||
新非人件:烘焙入库 → `SetupCharacter.Run` → 追加 manifest `subjects` → `BuildCharacterReview.Build` → `ValidateReview` 通过后,才替换开战简模。
|
||||
|
||||
### 3. 动画
|
||||
|
||||
状态:待细化。仓库尚无入库的动画生产脚本,本节不预设工具。
|
||||
|
||||
#### A. 人形角色动画
|
||||
|
||||
骨架:动作列表确认 → 生成或导入剪辑 → 绑定到对应角色 → 放到该角色目录或统一动画目录 → 登记 `Doc/ResDesc_Animation.md`。
|
||||
状态:待细化(Kimodo / Mixamo)。骨架:动作列表确认 → 生成或导入剪辑 → 绑定到对应角色 → 放到该角色目录或统一动画目录 → 登记 `Doc/ResDesc_Animation.md`。
|
||||
|
||||
#### B. 非人角色动画
|
||||
#### B. 非人角色动画(TokenRig + UniMate)
|
||||
|
||||
骨架同上。与人形是否共用动作、是否单独绑定,细化时确定。
|
||||
**敌方角色正式标准**:采用 [敌方角色标准制作方案 v1](Doc/Design/Character/EnemyCharacterProduction.md)。统一配方 `Config/Art/EnemyCharacters/{Name}.json`、入口 `Tools/enemy_character_pipeline.py`,交付Idle/Walk/Attack、Enemy视觉Prefab与验证清单。下方旧工具说明保留为阶段记录,敌方制作以新标准为准。
|
||||
|
||||
**伙伴角色复用**:统一入口 `Tools/character_animation_pipeline.py`,伙伴配方 `Config/Art/Companions/{Name}.json`,`usage=companion_visual`;不创建敌方Variant。火喵T1已完成同源22骨、Idle/Walk/远程施法Attack、伙伴视觉Prefab与Edit/Play验收,见 [制作记录](Doc/Design/Character/FireCat/ProductionBrief.md)。全骨骼初始姿势校准、附肢权重、动作峰值目视和CPU推理回退见上述标准方案的伙伴复用说明。
|
||||
|
||||
状态:工具已落地;依赖 DGX LLM3DGraphics(`http://192.168.130.16:8008`)能力绿灯。
|
||||
|
||||
1. **先做静态模(原流程)**:设计图 → 混元网页高模 → `model_lowpoly_bake` → `install_character_bundles` → `SetupCharacter` → CharacterUnitReview 验收通过。**不要**用 DGX Hunyuan3D 重做宠模。
|
||||
2. **能力门禁**:本机 LLM3DGraphics `tokenrig_ready` + `unimate_ready`(`python Tools/dgx3d_animal_pipeline.py --caps-only`);红灯时先 `nvsync connect DGXA --detach`。
|
||||
3. **绑骨 + 三动作**:网格仍用原混元/烘焙外观;TokenRig 若在过简低模上骨过少(宠球常见),应对**同角色高模**或可用代理模绑骨,再 `Tools/model_tools/bl_transfer_skin.py` 把骨架权重转到已验收低模,然后 UniMate×3。脚本入口:
|
||||
`python Tools/dgx3d_animal_pipeline.py --mesh …/{Name}.fbx -o Tools/output/{name}_dgx --name {Name}`
|
||||
(低模直绑若测得动作幅度过小,改走高模绑骨 + `bl_transfer_skin`。)
|
||||
4. **入库**:`Tools/install_animal_rigged.py` → `…/Rigged/` 与 `Anims/`。
|
||||
5. **Prefab / Animator**:`SetupAnimalAnimator`挂回静态模 `{Name}.mat`(XPbr)。现行接口:Motion Int 0=Idle、1=Walk;Attack Trigger单次攻击,结束恢复请求状态。正式敌方入口同时执行离线收尾与验证。
|
||||
6. **验收**:manifest 增加 `*_Rigged`(`requireAnimator` + `requireXpbr`);Scene 内 `CharacterReviewAnimCycle` 轮播。动作幅度可用剪辑曲线/骨骼角度抽检(Walk 应有明显关节摆动)。
|
||||
7. 登记 `Doc/ResDesc_Animation.md` / Model。TokenRig/UniMate 细节见 [`DGX3D_AI调用指南.md`](DGX3D_AI调用指南.md)。
|
||||
|
||||
**坐标与单动作门禁**:先用一个Walk验证骨架,再扩展三动作。项目FBX在Blender中为Y-up顶点,TokenRig GLB为Z-up,转权重前须 `--low-up Y --align-bounds`;只用同角色高模并检查几何距离。保留一致的Armature表示,动作来源rig哈希必须相同。提示明确解剖和单一动作;生成后离线修正姿态、脚底、步幅和循环,按实际蒙皮验收。岩团团已完成12骨三动作,正式复现 `Tools/enemy_character_pipeline.py --recipe Config/Art/EnemyCharacters/RockBall.json --build-review`。旧单Walk脚本仅诊断使用,历史见 [WalkRiggingFix.md](Doc/Design/Character/RockBall/WalkRiggingFix.md)。
|
||||
|
||||
### 4. 独立物件
|
||||
|
||||
@@ -264,11 +312,11 @@ python Tools/gpt_image_generate.py --result-only --quality high --aspect-ratio 1
|
||||
- 混元面数档:`--faces 50k|500k|1m`(默认 `50k`)。这是高模档,不是游戏面数。
|
||||
- 游戏面数用 `--tris` 控制。场景组件 / 地表:**300~2000**。人物:约 **3000**。
|
||||
- 高模与烘焙中间件留在 `Tools/output/`。
|
||||
- 角色安装可参考:`Tools/install_character_bundles.py`。场景分件:拷到 `Bundles/Scenes/{类型}/{场景号}/{英文短名}/`(`Tools/output/run_townsquare_pipeline.py`)。设计原稿不进 Bundles。
|
||||
- 角色安装:`Tools/install_character_bundles.py --kind Human` → `Bundles/Characters/Human/{英文名称}/`。场景分件:拷到 `Bundles/Scenes/{类型}/{场景号}/{英文短名}/`(`Tools/output/run_townsquare_pipeline.py`)。设计原稿不进 Bundles。
|
||||
- 碎叶等非流形:`bl_decimate.py` 在 collapse 卡住后会体素重网格再减面。
|
||||
- 轴向:混元 GLB = glTF Y-up。烘焙在 Blender 里用 Z-up;**导出 FBX 时** `prepare_game_export` 转回 Y-up,原点放在**底面中点**。**局部 -Z 是正面**(设计图朝相机的那面,与 glTF 相机看向 -Z 一致)。Unity 摆放用「-Z 指向目标」,不要用 `LookRotation` 默认的 +Z forward,也不要再绕 X 扶正或抬高度。
|
||||
- 最终 `_base.png` / `_mix.png`(以及烘焙五通道 PNG)写出时做 **PNG 无损压缩**(zlib 最高档;有 Pillow 则 `optimize=True`)。像素不变,只缩小文件。
|
||||
- 角色 Prefab:Unity 菜单 `AIGame/M3/Setup Character Prefab`。其他类型的 Prefab 步骤在细化时写明。
|
||||
- 角色 Prefab:Pipeline `AgentScripts/SetupCharacter.cs`(人物样例入口 `SetupCharacter.SetupCaoCao`)。游戏 FBX 已是 Y-up / 底面原点 / -Z 正面,Prefab **不要**再绕 X 扶正。旧菜单 `AIGame/M3/Setup Character Prefab` 只服务 MaleExplorer 历史资源。
|
||||
|
||||
---
|
||||
|
||||
@@ -280,10 +328,10 @@ python Tools/gpt_image_generate.py --result-only --quality high --aspect-ratio 1
|
||||
| --- | --- | --- |
|
||||
| 1 | 一.1 设计图 | 已写回:比例与实测尺寸、三张样例路径、四角纯白检查 |
|
||||
| 2 | 一.2 UI 图 | 参考图、拆单图步骤、Sprite 导入参数、与 JSON→Prefab 的衔接 |
|
||||
| 3 | 二.1 场景 | a/b/c/d 已写回:TownSquare 分件入库、拼装 Prefab/场景、运行时加载 |
|
||||
| 4 | 二.2.A 人物 | 按约 3000 面与 `{类型}/{英文名称}` 重跑或核对 MaleExplorer 差异 |
|
||||
| 5 | 二.2.B 非人角色 | 姿势、面数、骨骼、目录 |
|
||||
| 6 | 二.3 动画 | 人形 / 非人各自的生成与绑定方式 |
|
||||
| 3 | 二.1 场景 | a/b/c/d 已写回:TownSquare;另写回战场 A 拼装、嵌开战预制体、layer 30、Play 验证 |
|
||||
| 4 | 二.2.A 人物 | 已写回:CaoCao、3000 面、`Characters/Human/`、Pipeline Prefab、运行时地址 `CaoCao` |
|
||||
| 5 | 二.2.B 非人角色 | 已写回:Animal 目录、验收场景/Pipeline、LmCat 样例门槛;正式宠物内容待做 |
|
||||
| 6 | 二.3 动画 | 非人:DGX TokenRig+UniMate + `dgx3d_animal_pipeline.py` 已写回;人形 Kimodo 仍待细化 |
|
||||
| 7 | 二.4 独立物件 | 武器与道具的面数和 Bundle 目录 |
|
||||
| 8 | 二.5 特效 | 缩小步骤、序列帧切格、Particle Prefab 做法 |
|
||||
| 9 | 三 声音 | 音乐与音效的生成方式和目录 |
|
||||
|
||||
Reference in New Issue
Block a user