106 lines
7.5 KiB
Markdown
106 lines
7.5 KiB
Markdown
# 战场场景生成流程
|
||
|
||
这套流程把“想法、分件、模型、Unity 场景”分成四个有门槛的阶段。当前先完成设计图选择,未选择方案时不会调用微信网页图生 3D,也不会拼装最终 Prefab。
|
||
|
||
## 1. 设计图阶段:三选一
|
||
|
||
三张方案图必须通过项目内 `Tools/gpt_image_generate.py` 调用 `gpt-image-2.5` 生成。它们是 1024×1024 的俯视概念图,供确认路线、地表和组件类型,不作为运行时贴图。旧版 PIL 绘制草图只能作为历史预览,不能作为设计门输入。
|
||
|
||
| 方案 | 图片 | 重点 | 风险 |
|
||
| --- | --- | --- | --- |
|
||
| A 绿野三岔口 | `Battlefield_Design_A_GreenFork.png` | 中央安全线、左右高差支路、教学读路清晰 | 地标辨识度较弱 |
|
||
| B 溪谷浮桥 | `Battlefield_Design_B_StreamBridges.png` | 水面横切、三座浮桥、元素主题明确 | 桥和水面碰撞验证更复杂 |
|
||
| C 旧城花园 | `Battlefield_Design_C_OldGarden.png` | 残墙拱门、中央花园、首领关地标 | 墙体遮挡和批次更复杂 |
|
||
|
||
生成命令:
|
||
|
||
```powershell
|
||
# 先在当前 PowerShell 配置 GRSAI_API_KEY 或 GPT_IMAGE_API_KEY
|
||
python Tools/generate_battlefield_designs.py --design all
|
||
```
|
||
|
||
提示词和模型记录在 `Doc/Design/Scene/Battlefield/battlefield_design_prompts.json`,每张图旁边会写入 `*_gpt_image_status.json`。当前已选择第 1 张方案,即 A;脚本在生成 A 后会把 `selectedDesign` 登记为 `A`,再进入下一阶段。
|
||
|
||
## 2. 分件设计图阶段
|
||
|
||
从选中的总览图归纳组件类别。A 方案先使用树、岩石、桥、路牌、灌木 5 类;地表单独设计、单独图生 3D、单独减面、单独 Prefab,不计入装饰组件上限。组件图继续调用 `gpt-image-2.5`,以提示词描述主界面 Candy 的造型、色彩和软阴影;默认不上传项目内部参考图。
|
||
|
||
组件拆分前先扫描 `AIClient/Assets/Bundles/`。若组件类型已有同名 Unity Prefab,则登记 `generationStatus: reused` 并跳过该组件新设计图;只有资源库没有的类型才生成新的组件设计图。默认执行 `python Tools/generate_battlefield_components.py --design <ID>`,需要重做已有组件时显式增加 `--force-new-components`。
|
||
|
||
推荐清单:树、岩石、桥、路牌、灌木、水面、芦苇、残墙、拱门、花坛、喷泉、路灯、长椅、栅门。选定方案可以删减,但不能增加未登记的新类别。每类分件图放在:
|
||
|
||
```text
|
||
Doc/Design/Scene/Battlefield/<方案ID>/parts/<type>.png
|
||
```
|
||
|
||
分件图要求:纯白背景、单件、3/4 视角、完整入画、无文字、无地面底座;地表图单独放在 `<方案ID>/ground.png`,画出俯视边界、坡度、可行走区域和三条路线。
|
||
|
||
生成 A 方案组件图:
|
||
|
||
```powershell
|
||
python Tools/generate_battlefield_components.py --design A
|
||
```
|
||
|
||
提示词记录在 `Doc/Design/Scene/Battlefield/A/battlefield_component_prompts.json`。生成完成后先在窗口审核 `A/ground.png` 与 `A/parts/*.png`,审核通过再进入混元 3D 图生模型阶段。
|
||
|
||
当前进度:树、岩石、桥、路牌、灌木 5 类与独立地表均已完成混元 50k GLB、纹理校验、Blender 减面与 XPbr 烘焙。Unity 2022.3.62f3 已通过 Pipeline 生成组件 Prefab、`GreenfieldGround.prefab` 和 `Battlefield_Greenfield.prefab`。烘焙地表原是朝向 Z 的薄板,场景实例绕 X 轴 -90 度放平,顶面贴在 y=0,并覆盖三条路线。`AttachGreenfield.Build` 已把该场景嵌进开战预制体 `PrototypeArena`,原来的方块地面已关闭。按现有战斗相机(正交 9.5,看向路线中段)核对:三条路线落在土路上。桥模型保留,场景中不再摆放。部署标记和青色防线仍在路面上。Greenfield 整棵子树必须在第 30 层,否则开战相机看不到地表。Play Mode 隔离服已验证开战加载无桥绿野,截图 `Assets/Screenshots/battlefield_play_battle.png`。
|
||
|
||
## 3. 新组件默认模型流程
|
||
|
||
组件图审核后,地表和新装饰均执行 [统一场景模型流程](../SceneModelProduction.md):
|
||
|
||
```text
|
||
分件图 → 混元 50k 高模 → Studio 低模 → Studio UV
|
||
→ Blender 同源对齐、保留 Studio UV 烘焙
|
||
→ 超出目标 30% 时保留 UV 减面,否则登记跳过
|
||
```
|
||
|
||
先用 `Tools/hunyuan_3d_generate.py --image <分件图> --faces 50k --output <高模目录>` 完成高模,再用 LLM3DGraphics 虚拟环境执行:
|
||
|
||
```powershell
|
||
python Tools/scene_component_pipeline.py --manifest Doc/Design/Scene/Battlefield/battlefield_scene_manifest.json --part tree --dry-run
|
||
& D:/UD/AI/XModel/LLM3DGraphics/.venv/Scripts/python.exe Tools/scene_component_pipeline.py --manifest Doc/Design/Scene/Battlefield/battlefield_scene_manifest.json --part tree
|
||
```
|
||
|
||
每类单独填写确定的 `targetTriangles`,逐件登记 Studio 低模和 UV 任务、源模型哈希、烘焙与条件减面回执。Studio UV 不得用 Blender 自动展 UV 替代。模型须通过 GLB/内嵌贴图解码、低模面数、UV、包围盒、坐标和四向外观检查。
|
||
|
||
2026-10-26 前已完成的 A 方案保留原 Blender 减面/UV/烘焙回执;它是历史产物,不代表后续新组件继续采用旧链路。
|
||
|
||
最终 Unity 输入目录:
|
||
|
||
```text
|
||
AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/<方案ID>/
|
||
Ground/<ground>.fbx + XPbr 贴图 + 材质
|
||
Components/<type>/<type>.fbx + XPbr 贴图 + 材质
|
||
```
|
||
|
||
FBX 统一为 Y-up、原点在底面中点、局部 +Z 为正面。摆放时用 +Z 朝向目标;地表使用非凸 MeshCollider,其他组件不添加运行时生成的临时网格。
|
||
|
||
## 4. Unity Prefab 拼装
|
||
|
||
模型导入和 Prefab 操作只能通过 Unity Pipeline。`AIClient/AgentScripts/BuildBattlefieldScene.cs` 会:
|
||
|
||
1. 读取 manifest,拒绝空 `selectedDesign`、重复类型、超过 15 类或缺少独立地表。
|
||
2. 检查 Ground 与 Components 的 Prefab、材质和碰撞体。
|
||
3. 按方案布局生成根节点、地表、路线标记、出生点、终点和可选装饰实例。
|
||
4. 保存 `Assets/Bundles/Scenes/Prototype/Battlefield/Battlefield_Greenfield.prefab`,并接入 Art/UI 资源收集。
|
||
|
||
场景根节点固定包含:`Ground`、`Routes/Lane0..2`、`Gameplay/SpawnPoints`、`Gameplay/GoalPoints`、`Decorations`、`Lighting`。战斗代码只读取路线与标记,不在运行时生成业务场景骨架。
|
||
|
||
## 验收与交付门槛
|
||
|
||
- 设计门:三图中选一,确认路线、视线、地标和组件清单。
|
||
- 分件门:所有组件图为纯白单件图;类别数 ≤15;地表独立。
|
||
- 模型门:GLB 检查、低模面数和坐标约束通过;每个模型有来源日志。
|
||
- Unity 门:Prefab 由 Pipeline 保存,地表碰撞可用,三路线出生/终点可定位,Art Bundle 收集成功。
|
||
- 性能门:首屏视锥内控制 Draw Call、贴图和实例数,真机再按 G3 预算验收。
|
||
|
||
选择结果、分件图、模型路径、低模面数和 Prefab 路径都写入 manifest;任何一步没有登记,流程不算完成。
|
||
|
||
### Unity Pipeline 入口(编辑器可用后)
|
||
|
||
组件与独立地表统一执行:unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/BuildBattlefieldAssets.cs --entry BuildBattlefieldAssets.BuildAll。其中 BuildGround 只在 Assets/Bundles/Scenes/Prototype/Battlefield/A/Ground/ground.fbx 存在时生成 GreenfieldGround.prefab,并启用可读网格与非凸 MeshCollider;随后执行 BuildBattlefieldScene.Build 拼装最终场景。
|
||
|
||
|
||
2026-10-24 起新组件采用 +Z 正面;既有 PrototypeArena 及其 -Z 单位/挂点保持历史兼容,未批量重建。
|