Replace TownSquare with HomeCamp art and land humanoid bots, LittleBear, and LmGirl review assets.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
udx
2026-11-03 20:33:08 +08:00
co-authored by Cursor
parent 45e62132c8
commit 9eec364f30
838 changed files with 57978 additions and 12225 deletions
+15 -4
View File
@@ -21,11 +21,11 @@ Pipeline:`AIClient/AgentScripts/BuildCharacterReview.cs`、`SetupCharacter.cs`
- `Animal`:非人生物 / 宠物正式模型(站姿或四足,目标身高按物种登记)
- 后续武器/道具走 `GameResProductProc` 独立物件节,可先在本验收场景并排放下对比尺度
网格约定与附录 B 一致:Y-up、原点在底面中点、局部 **-Z 为正面**。
网格约定与附录 B 一致:Y-up、原点在底面中点、局部 **+Z 为正面**。
## 制作步骤(单件)
1. **设计图**:纯白底、全身入画。人物用 T Pose、比例 `2:3`;非人用可辨识站姿,比例按体型选 `2:3` 或 `1:1`。
1. **设计图**:纯白底、全身入画。人形角色用正面正交 T Pose、双手空、比例 `2:3`,必须原样加入 [GameResProductProc.md「二.2.A 人物角色」](../../../GameResProductProc.md#a-人物角色) 的完整固定英文姿态提示词,并按该节要求目视核对;非人用可辨识站姿,比例按体型选 `2:3` 或 `1:1`。
2. **混元图生 3D**:`Tools/hunyuan_3d_generate.py --faces 50k`。
3. **减面烘焙**:`Tools/model_tools/model_lowpoly_bake.py --tris <目标> --size 1024`。人物约 3000;非人/宠物默认 800~2000,在 manifest 的 `maxTriangles` 写死验收上限。
4. **入库**:`python Tools/install_character_bundles.py -a {Name} --kind {Kind} -b Tools/output/..._xpbr`
@@ -34,12 +34,18 @@ Pipeline:`AIClient/AgentScripts/BuildCharacterReview.cs`、`SetupCharacter.cs`
6. **登记**到 `Doc/ResDesc_Model.md` / `Doc/ResDesc_Picture.md`。
7. **验收**:把该件追加进 `character_unit_review_manifest.json` 的 `subjects`,再执行下方 Pipeline。
### 人形角色蒙皮(默认)
静态模型验收通过后,人形角色默认采用 **固定 Mixamo 骨架 + TokenRig 只预测蒙皮权重**。先按角色体型拟合骨架并固定,清除参考模型既有权重,使用已有骨架模式预测权重;随后装回固定骨架并校验骨名、层级、骨轴与休息矩阵,检查和清理跨部位错误影响,归一化后导出。保留原网格、UV 和烘焙贴图。
Unity Pipeline 配置 Humanoid 与角色自己的 Avatar,并对实际所需动作进行形变、脚踝交叉及接地验收;动画 Prefab 和资源登记完成后才接入业务。详细约定见 [GameResProductProc.md「二.2.A 人物角色」](../../../GameResProductProc.md#a-人物角色)。现有固定 41 骨与局部约束工具需按新角色拟合、验收。
## 验收场景(专用)
场景里固定包含:
- 地面与刻度(身高参考柱 0.5 / 1.0 / 1.8m)
- 每个 subject 脚下的 **-Z 正面箭头**
- 每个 subject 脚下的 **+Z 正面箭头**
- 方向光 + 验收相机
- 按 `spacing` 横向排列的 Prefab 实例
@@ -68,7 +74,7 @@ unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScr
- 包围盒底面 `min.y` 接近 0(±0.05)
- 身高在 `expectedHeight ± heightTolerance`
- 三角面数 ≤ `maxTriangles`
- 人工目视:局部 -Z 朝向相机前的箭头、无悬浮、无穿模、贴图无品红缺贴图
- 人工目视:局部 +Z 朝向相机前的箭头、无悬浮、无穿模、贴图无品红缺贴图
通过后,才允许把该 Prefab 接到开战/营地替换简模。
@@ -83,3 +89,8 @@ unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScr
敌方角色制作采用 [EnemyCharacterProduction.md](EnemyCharacterProduction.md):同角色骨架、空间对齐、三动作来源哈希、离线收尾、Enemy视觉Prefab与整段验收。岩团团已从单Walk阶段升级到Idle/Walk/Attack;总验收按三动作检查。
本场景**不**被 `PrototypeFlow` 加载。开战仍用 `PrototypeArena` 简模,直到某宠物正式模型验收通过并单独做替换任务。
### 朝向兼容(2026-10-24)
新 subject 默认 `localForward: "+Z"`,新资源相机应位于其 +Z 正面一侧。历史 manifest 中的旧件已显式标注 `localForward: "-Z"`,沿用原相机和旧件朝向,脚下标记按各自配置生成。渲染辅助 `AuditCharacterVisual.Capture` 的 `forwardZ` 默认 +1;旧 -Z 件必须传 -1。
@@ -6,7 +6,7 @@
每个敌人交付已验收静态模、同源骨架和蒙皮、Idle/Walk/Attack、Animator、Enemy视觉Prefab、验收场景、来源清单和验证报告。流程到可调用的视觉资产为止,战斗数值、寻路和伤害结算由玩法接入。
统一约定:Unity Y-up、米制、底面中心原点、局部-Z正面。外层逻辑根旋转identity、缩放1,关闭Root Motion;移动和转向由玩法驱动。网格、骨架和动画必须共用绑定空间,不能靠运行时反向旋转补救。
统一约定:Unity Y-up、米制、底面中心原点、局部+Z正面。外层逻辑根旋转identity、缩放1,关闭Root Motion;移动和转向由玩法驱动。网格、骨架和动画必须共用绑定空间,不能靠运行时反向旋转补救。
| 动作 | 标准行为 | 岩团团参数 |
| --- | --- | --- |
@@ -24,7 +24,7 @@
先尝试验收网格的TokenRig;过简低模导致关键关节缺失时,对**同角色高模**绑骨再转权重。骨数不能代替关节和动作质量验收。
项目静态FBX导入Blender后仍为Y-up顶点,TokenRig GLB为Blender Z-up。`bl_transfer_skin.py --low-up Y --align-bounds` 先转Y→Z,再以底面中心平移/等比缩放对齐,最后转权重,保留原UV与三角面。几何距离门槛:最大≤尺寸3%、RMS≤1%;不满足就停止检查来源或对齐,不能对另一角色强行蒙皮。
历史静态FBX曾在Blender中保留Y-up顶点,TokenRig GLB为Blender Z-up。v2标准FBX默认导入后已在Blender Z-up世界中站立,必须读取完整节点变换,不能对新文件再无条件旋转90°。旧输入兼容:`bl_transfer_skin.py --low-up Y --align-bounds` 先转Y→Z,再以底面中心平移/等比缩放对齐,最后转权重,保留原UV与三角面。几何距离门槛:最大≤尺寸3%、RMS≤1%;不满足就停止检查来源或对齐,不能对另一角色强行蒙皮。
配方记录 `rigSource`,每个动作回执记录rig SHA256,导入前要求完全一致;新生成回执还校验FBX SHA256。Unity检查骨路径与父子关系,禁止按bone_N同名混用其它rig。Armature的+90°X可保留,不单独清零。
@@ -59,7 +59,7 @@ animator.SetTrigger("Attack");
Attack包含 `OnEnemyAttackImpact` 动画事件,时刻=`attackImpact * attackSeconds`。预览允许无接收器;玩法接入时由现有攻击事件或表现桥接处理,避免重复结算。美术事件不直接扣血,不替代服务器/战斗判定。
视觉Prefab输出 `Assets/Bundles/Characters/Enemy/{Name}/{Name}_Enemy.prefab`。新敌人源资产通常放 `Characters/Enemy/{Name}/`;岩团团复用已有 `Characters/Animal/RockBall/` 的模型、动画、XPbr,通过Variant交付Enemy目录,不复制贴图材质。转向时以局部-Z对准目标。
视觉Prefab输出 `Assets/Bundles/Characters/Enemy/{Name}/{Name}_Enemy.prefab`。新敌人源资产通常放 `Characters/Enemy/{Name}/`;岩团团复用已有 `Characters/Animal/RockBall/` 的模型、动画、XPbr,通过Variant交付Enemy目录,不复制贴图材质。新资源转向时以局部+Z对准目标,直接使用 Quaternion.LookRotation(direction)。
## 6. 验收门槛
@@ -199,3 +199,8 @@ shellRegionMin/Max在Unity归一化空间选取壳区,扣除shellBone刚性
## 四敌人Studio流程复验完成(2026-10-21)
Hornlet、Dashlet、Shellhorn、HornCaptain均按大角首领2~5步流程完成独立Studio版,绑定各自原骨架并直接复用原Avatar/控制器/三段成品动作。使用通用StudioTrial脚本按本角色骨数、尺寸及实际动作约束验收;禁止照搬大角首领骨编号或脚底顶点。生成、修正、Edit/Play及资源路径见 [StudioEnemies/Production.md](StudioEnemies/Production.md)。
### +Z 新约定与旧样例
自 2026-10-24 起新资源统一 +Z 正面。本文各日期样例、固定骨架和旧配方的 -Z 门禁描述其已验收的实际空间,保持兼容,不代表项目默认值。旧绑定空间只能在一次完整的网格/骨架/动作迁移中改变,不能仅改验证器符号或粒子挂点。
@@ -0,0 +1,12 @@
LittleBear:人形小熊,双足直立,圆耳、焦糖棕色短毛、奶油色口鼻和腹部,黑鼻与友善深色眼睛。圆润卡通冒险游戏风格,无服装、配饰或手持物。保留清楚的肩肘腕、髋膝踝,手掌为简化熊掌,便于固定 Mixamo 骨架蒙皮。
standard T-pose, front orthographic view, full body,
arms extended horizontally at shoulder height,
straight elbows, palms facing down,
legs straight, feet slightly apart and pointing forward,
symmetrical neutral stance, character modeling reference
纯白背景 #FFFFFF,正面正交视角,全身包括耳尖、指尖、脚底完整入画;对称中立站姿,双手空;无场景、地面阴影、文字、水印。2:3 画幅。
生成方式:内置 imagegen(项目脚本未配置图像服务密钥),1024×1536 RGB。
目标:混元50k高模→Studio低模→Studio UV→1024²烘焙→超出3000面目标30%时保留UV减面→固定Mixamo骨架+TokenRig只预测权重→Unity Humanoid与实际Walking验收。展示身高1.2m。
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

File diff suppressed because it is too large Load Diff
@@ -26,7 +26,8 @@
"heightTolerance": 0.15,
"maxTriangles": 3500,
"requireXpbr": true,
"notes": "人物样例:Y-up、底面原点、局部 -Z 正面"
"notes": "人物样例:Y-up、底面原点、局部 -Z 正面",
"localForward": "-Z"
},
{
"id": "LmGirl",
@@ -36,7 +37,8 @@
"heightTolerance": 0.15,
"maxTriangles": 3500,
"requireXpbr": true,
"notes": "人物样例"
"notes": "人物样例",
"localForward": "-Z"
},
{
"id": "LmCat",
@@ -46,7 +48,8 @@
"heightTolerance": 0.12,
"maxTriangles": 3500,
"requireXpbr": true,
"notes": "非人样例:可作宠物正式模型目录模板 Characters/Animal/{Name}"
"notes": "非人样例:可作宠物正式模型目录模板 Characters/Animal/{Name}",
"localForward": "-Z"
},
{
"id": "RockBall",
@@ -56,7 +59,8 @@
"heightTolerance": 0.12,
"maxTriangles": 2000,
"requireXpbr": true,
"notes": "岩团团正式静态宠模:混元50k→烘焙1500 tris;已通过。开战/营地替换另开任务"
"notes": "岩团团正式静态宠模:混元50k→烘焙1500 tris;已通过。开战/营地替换另开任务",
"localForward": "-Z"
},
{
"id": "RockBall_Rigged",
@@ -72,7 +76,8 @@
"Walk",
"Attack"
],
"notes": "敌方制作标准样例:同角色12骨→空间对齐→低模转权重→Idle/Walk/Attack→离线收尾;Enemy视觉Variant见Characters/Enemy/RockBall。Motion=0/1,Attack使用Trigger。"
"notes": "敌方制作标准样例:同角色12骨→空间对齐→低模转权重→Idle/Walk/Attack→离线收尾;Enemy视觉Variant见Characters/Enemy/RockBall。Motion=0/1,Attack使用Trigger。",
"localForward": "-Z"
},
{
"id": "FireCat",
@@ -82,7 +87,8 @@
"heightTolerance": 0.01,
"maxTriangles": 2000,
"requireXpbr": true,
"notes": "火喵T1伙伴静态模:混元50k→1998 tris/1024 XPbr,隔离正侧背面与尺寸贴地验收通过。"
"notes": "火喵T1伙伴静态模:混元50k→1998 tris/1024 XPbr,隔离正侧背面与尺寸贴地验收通过。",
"localForward": "-Z"
},
{
"id": "FireCat_Companion",
@@ -98,7 +104,8 @@
"Walk",
"Attack"
],
"notes": "火喵T1伙伴视觉:同角色22骨,Walk全骨骼首帧校准,尾部权重修正;Idle/Walk循环,Attack单次双爪施法,0.55秒出手事件。专用Companion_FireCat_Review场景Edit/Play均通过。"
"notes": "火喵T1伙伴视觉:同角色22骨,Walk全骨骼首帧校准,尾部权重修正;Idle/Walk循环,Attack单次双爪施法,0.55秒出手事件。专用Companion_FireCat_Review场景Edit/Play均通过。",
"localForward": "-Z"
},
{
"id": "BudBud",
@@ -108,7 +115,8 @@
"heightTolerance": 0.01,
"maxTriangles": 2000,
"requireXpbr": true,
"notes": "芽芽T1正式静态模,0.50m、Y-up、底面中心、局部-Z正面,正侧背检查通过。"
"notes": "芽芽T1正式静态模,0.50m、Y-up、底面中心、局部-Z正面,正侧背检查通过。",
"localForward": "-Z"
},
{
"id": "BudBud_Companion",
@@ -124,7 +132,8 @@
"Idle",
"Walk",
"Attack"
]
],
"localForward": "-Z"
},
{
"id": "SparkBird",
@@ -134,7 +143,8 @@
"heightTolerance": 0.01,
"maxTriangles": 2000,
"requireXpbr": true,
"notes": "闪闪雀T1正式静态模:混元50k→2000 tris/1024 XPbr,0.45m、Y-up、底面中心、局部-Z正面,四向验收通过。"
"notes": "闪闪雀T1正式静态模:混元50k→2000 tris/1024 XPbr,0.45m、Y-up、底面中心、局部-Z正面,四向验收通过。",
"localForward": "-Z"
},
{
"id": "SparkBird_Companion",
@@ -150,7 +160,8 @@
"Idle",
"Walk",
"Attack"
]
],
"localForward": "-Z"
},
{
"id": "BubbleTurtle",
@@ -160,7 +171,8 @@
"heightTolerance": 0.01,
"maxTriangles": 2000,
"requireXpbr": true,
"notes": "泡泡龟T1正式静态模:混元50k→离线统一朝向→2000 tris/1024 XPbr,0.35m、Y-up、底面中心、局部-Z正面,四向图确认。"
"notes": "泡泡龟T1正式静态模:混元50k→离线统一朝向→2000 tris/1024 XPbr,0.35m、Y-up、底面中心、局部-Z正面,四向图确认。",
"localForward": "-Z"
},
{
"id": "BubbleTurtle_Companion",
@@ -176,7 +188,8 @@
"Idle",
"Walk",
"Attack"
]
],
"localForward": "-Z"
},
{
"id": "RockRhino",
@@ -186,7 +199,8 @@
"heightTolerance": 0.01,
"maxTriangles": 2000,
"requireXpbr": true,
"notes": "岩甲犀T1静态模:官方混元50k→离线+70°统一朝向→2000tris/1024 XPbr,0.55m、Y-up、底面中心、局部-Z正面,四向图确认。"
"notes": "岩甲犀T1静态模:官方混元50k→离线+70°统一朝向→2000tris/1024 XPbr,0.55m、Y-up、底面中心、局部-Z正面,四向图确认。",
"localForward": "-Z"
},
{
"id": "RockRhino_Companion",
@@ -202,7 +216,8 @@
"Idle",
"Walk",
"Attack"
]
],
"localForward": "-Z"
},
{
"id": "Hornlet_Enemy",
@@ -218,7 +233,8 @@
"Walk",
"Attack"
],
"notes": "小角怪(普通,type0):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type0 嵌套。"
"notes": "小角怪(普通,type0):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type0 嵌套。",
"localForward": "-Z"
},
{
"id": "Dashlet_Enemy",
@@ -234,7 +250,8 @@
"Walk",
"Attack"
],
"notes": "疾跑怪(快速,type1):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type1 嵌套。"
"notes": "疾跑怪(快速,type1):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type1 嵌套。",
"localForward": "-Z"
},
{
"id": "Shellhorn_Enemy",
@@ -250,7 +267,8 @@
"Walk",
"Attack"
],
"notes": "硬壳怪(护甲,type2):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type2 嵌套。"
"notes": "硬壳怪(护甲,type2):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type2 嵌套。",
"localForward": "-Z"
},
{
"id": "HornCaptain_Enemy",
@@ -266,7 +284,8 @@
"Walk",
"Attack"
],
"notes": "角怪队长(精英,type3):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type3 嵌套。"
"notes": "角怪队长(精英,type3):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type3 嵌套。",
"localForward": "-Z"
},
{
"id": "GreatHorn_Enemy",
@@ -282,7 +301,8 @@
"Walk",
"Attack"
],
"notes": "大角首领(首领,type4):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type4 嵌套。"
"notes": "大角首领(首领,type4):混元50k→2000 tris/1024 XPbr,DGXA同源TokenRig,biped_short/body_slam三动作,Edit/Play通过;战场 Enemies/EnemyN/Type4 嵌套。",
"localForward": "-Z"
},
{
"id": "FlameLion",
@@ -292,7 +312,8 @@
"heightTolerance": 0.01,
"maxTriangles": 2000,
"requireXpbr": true,
"notes": "烈焰狮T1静态:官方混元50k→2000tris/1024 XPbr,0.60m、Y-up、底面中心、局部-Z正面,四向验收通过。"
"notes": "烈焰狮T1静态:官方混元50k→2000tris/1024 XPbr,0.60m、Y-up、底面中心、局部-Z正面,四向验收通过。",
"localForward": "-Z"
},
{
"id": "FlameLion_Companion",
@@ -308,7 +329,8 @@
"Idle",
"Walk",
"Attack"
]
],
"localForward": "-Z"
},
{
"id": "VineSprite_Companion",
@@ -324,7 +346,8 @@
"Walk",
"Attack"
],
"notes": "藤蔓灵(pet 7)T1:混元50k→2000 tris/1024 XPbr,DGXA同源28骨,biped_short/ranged_cast(治疗施法),Edit/Play通过。"
"notes": "藤蔓灵(pet 7)T1:混元50k→2000 tris/1024 XPbr,DGXA同源28骨,biped_short/ranged_cast(治疗施法),Edit/Play通过。",
"localForward": "-Z"
},
{
"id": "ThunderLeopard_Companion",
@@ -340,7 +363,8 @@
"Walk",
"Attack"
],
"notes": "雷鸣豹(pet 8)T1:混元50k→2000 tris/1024 XPbr,DGXA同源31骨,quadruped_heavy/braced_bash(头肩短扑),Edit/Play通过。"
"notes": "雷鸣豹(pet 8)T1:混元50k→2000 tris/1024 XPbr,DGXA同源31骨,quadruped_heavy/braced_bash(头肩短扑),Edit/Play通过。",
"localForward": "-Z"
},
{
"id": "TideWhale_Companion",
@@ -356,7 +380,32 @@
"Walk",
"Attack"
],
"notes": "潮汐鲸(pet 9)T1:混元50k→2000 tris/1024 XPbr,DGXA同源22骨,biped_short/body_slam,Edit/Play通过。"
"notes": "潮汐鲸(pet 9)T1:混元50k→2000 tris/1024 XPbr,DGXA同源22骨,biped_short/body_slam,Edit/Play通过。",
"localForward": "-Z"
},
{
"id": "LittleBear_Static",
"kind": "Human",
"prefab": "Assets/Bundles/Characters/Human/LittleBear/LittleBear_Static.prefab",
"expectedHeight": 1.2,
"heightTolerance": 0.02,
"maxTriangles": 3000,
"requireXpbr": true,
"localForward": "+Z",
"notes": "人形小熊:正交T-pose设计图→混元50k→Studio低模/UV→1024烘焙→保留UV减面3000。专用验收场景LittleBearReview。"
},
{
"id": "LittleBear",
"kind": "Human",
"prefab": "Assets/Bundles/Characters/Human/LittleBear/LittleBear.prefab",
"expectedHeight": 1.2,
"heightTolerance": 0.02,
"maxTriangles": 3000,
"requireXpbr": true,
"requireAnimator": true,
"requiredClips": ["Breathing Idle", "mixamo.com"],
"localForward": "+Z",
"notes": "固定Mixamo41骨+TokenRig只预测权重,局部约束与裆部连续过渡;自己的有效Humanoid Avatar。Motion=0 Idle/1 Walk,Foot IK开启,共享现有剪辑。250点采样无脚踝交叉;独立LittleBearReview场景验收,未重建总览场景。"
}
],
"workflow": {
@@ -364,6 +413,7 @@
"bakeOutput": "Tools/output/{name}_game/",
"bundleDir": "AIClient/Assets/Bundles/Characters/{Kind}/{Name}/",
"setupEntry": "SetupCharacter.Run",
"reviewEntry": "BuildCharacterReview.Build"
"reviewEntry": "BuildCharacterReview.Build",
"defaultLocalForward": "+Z"
}
}
+1 -1
View File
@@ -158,7 +158,7 @@ proposal文件显式 `runtimeEnabled=false`,现有CMake和客户端加载器
逻辑侧只认识entityId和逻辑位置。角色Prefab提供语义挂点Cast、Body、Hit、Head;表现配置映射到各自骨架,业务代码不硬编码bone_7等名称。已有火喵/岩团团尚未制作这些技能挂点,设计样例采用bounds fallback;正式接入须通过Pipeline制作挂点并在动作全过程检查位置。
角色局部-Z为正面。世界朝向由目标方向决定,不能总朝世界-Z或直接把Unity的transform.forward当角色正面。粒子挂点随动作,投射物释放后进入世界空间;护盾随目标,命中爆闪按HitResolved位置播放。根位移由逻辑驱动,动作Root Motion关闭。
新角色局部+Z为正面,与Unity的transform.forward一致,世界朝向通过Quaternion.LookRotation(direction)对准目标;不能把世界固定+Z当作角色当前朝向。现有-Z角色与旧SkillMuzzle挂点按各自历史配置兼容,不随新约定自动翻转。粒子挂点随动作,投射物释放后进入世界空间;护盾随目标,命中爆闪按HitResolved位置播放。根位移由逻辑驱动,动作Root Motion关闭。
资源加载走YooAsset,动画/特效/音效引用按地址和类型校验,资源handle由战斗资源集持有;动作实例持有租用对象和生命周期token。BattleEnded、切页和销毁都必须停止本场循环声音、清空粒子/Trail并归还池,禁止把旧轨迹带到下一次播放。
+1 -1
View File
@@ -45,7 +45,7 @@ G0 使用 `PlayerPrefs` 的独立账号命名空间 `AIGame.G0.v1.{pid}`,不
四个页面为 `UI_PrototypePinball`、`UI_PrototypePets`、`UI_PrototypeFormation`、`UI_PrototypeBattle`,位于 `Doc/UIPrefabCreater/` 与对应 UI Prefab 目录。战斗结果面板是战斗 JSON 的持久化子节点。
`Assets/Bundles/Scenes/Prototype/PrototypeArena.prefab` 包含战场、三只伙伴简模、九个敌人池、攻击弹体池、独立相机与灯光,所有业务场景对象由编辑器预制后实例化。相机只绘制第 30 层,退出战斗关闭,不改写原主相机设置。角色局部 -Z 为正面,战斗中按敌人方向旋转。
`Assets/Bundles/Scenes/Prototype/PrototypeArena.prefab` 包含战场、三只伙伴简模、九个敌人池、攻击弹体池、独立相机与灯光,所有业务场景对象由编辑器预制后实例化。相机只绘制第 30 层,退出战斗关闭,不改写原主相机设置。该历史战场角色局部 -Z 为正面,保留旧资源适配;新资源按项目 +Z 正面约定制作。
伙伴使用 Unity 原始几何体的原型模型,供后续正式美术替换。肖像由同一模型在 Unity 隔离场景渲染,不引用外部生成服务。资源登记见 `Doc/ResDesc_Model.md`、`Doc/ResDesc_Picture.md` 与 `Doc/ResDesc_Effect.md`。
@@ -45,28 +45,26 @@ python Tools/generate_battlefield_components.py --design A
当前进度:树、岩石、桥、路牌、灌木 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. 微信网页图生 3D 与减面
## 3. 新组件默认模型流程
分件图确认后,逐类执行项目现有的腾讯混元网页流程。每个模型都保留原始任务目录和日志,不能直接把高模放入 Unity:
组件图审核后,地表和新装饰均执行 [统一场景模型流程](../SceneModelProduction.md):
```powershell
# 1) 微信扫码登录(首次或凭证过期时)
python Tools/hunyuan_3d_generate.py --login
# 2) 图生 GLB 高模(每类一份;不超过 15 类 + 地表)
python Tools/hunyuan_3d_generate.py `
--image Doc/Design/Scene/Battlefield/<方案ID>/parts/tree.png `
--faces 50k `
--output Tools/output/battlefield/<方案ID>/tree
# 3) 减面、重展 UV、烘焙、XPbr 收尾
python Tools/model_tools/model_lowpoly_bake.py `
Tools/output/battlefield/<方案ID>/tree/generated.glb `
-o Tools/output/battlefield/<方案ID>/tree_game `
--tris 700 --size 1024
```text
分件图 → 混元 50k 高模 → Studio 低模 → Studio UV
→ Blender 同源对齐、保留 Studio UV 烘焙
→ 超出目标 30% 时保留 UV 减面,否则登记跳过
```
`model_lowpoly_bake.py` 的具体目标面数按组件登记:地表 800~1500、地标 1200~2000、普通装饰 300~1000、重复小件 300~600;命令中的 `--tris` 每次填写一个确定整数。模型验收必须通过 GLB 文件头、内嵌贴图解码、低模三角面数、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 输入目录:
@@ -76,7 +74,7 @@ AIClient/Assets/Bundles/Scenes/Prototype/Battlefield/<方案ID>/
Components/<type>/<type>.fbx + XPbr 贴图 + 材质
```
FBX 统一为 Y-up、原点在底面中点、局部 -Z 为正面。摆放时用 -Z 朝向目标;地表使用非凸 MeshCollider,其他组件不添加运行时生成的临时网格。
FBX 统一为 Y-up、原点在底面中点、局部 +Z 为正面。摆放时用 +Z 朝向目标;地表使用非凸 MeshCollider,其他组件不添加运行时生成的临时网格。
## 4. Unity Prefab 拼装
@@ -102,3 +100,6 @@ FBX 统一为 Y-up、原点在底面中点、局部 -Z 为正面。摆放时用
### 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 单位/挂点保持历史兼容,未批量重建。
@@ -95,9 +95,21 @@
"modelStatusFile": "Tools/output/battlefield/A/tree_hunyuan_status.json",
"prefab": "Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/tree/tree.prefab",
"label": "tree",
"position": { "x": -8.0, "y": 0.0, "z": 9.0 },
"rotation": { "x": 0.0, "y": 15.0, "z": 0.0 },
"scale": { "x": 2.2, "y": 2.2, "z": 2.2 }
"position": {
"x": -8.0,
"y": 0.0,
"z": 9.0
},
"rotation": {
"x": 0.0,
"y": 15.0,
"z": 0.0
},
"scale": {
"x": 2.2,
"y": 2.2,
"z": 2.2
}
},
{
"type": "rock",
@@ -112,9 +124,21 @@
"modelStatusFile": "Tools/output/battlefield/A/rock_hunyuan_status.json",
"prefab": "Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/rock/rock.prefab",
"label": "rock",
"position": { "x": 7.2, "y": 0.0, "z": 5.5 },
"rotation": { "x": 0.0, "y": 20.0, "z": 0.0 },
"scale": { "x": 1.6, "y": 1.6, "z": 1.6 }
"position": {
"x": 7.2,
"y": 0.0,
"z": 5.5
},
"rotation": {
"x": 0.0,
"y": 20.0,
"z": 0.0
},
"scale": {
"x": 1.6,
"y": 1.6,
"z": 1.6
}
},
{
"type": "bridge",
@@ -144,9 +168,21 @@
"modelStatusFile": "Tools/output/battlefield/A/sign_hunyuan_status.json",
"prefab": "Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/sign/sign.prefab",
"label": "sign",
"position": { "x": -6.2, "y": 0.0, "z": -2.2 },
"rotation": { "x": 0.0, "y": 180.0, "z": 0.0 },
"scale": { "x": 1.6, "y": 1.6, "z": 1.6 }
"position": {
"x": -6.2,
"y": 0.0,
"z": -2.2
},
"rotation": {
"x": 0.0,
"y": 180.0,
"z": 0.0
},
"scale": {
"x": 1.6,
"y": 1.6,
"z": 1.6
}
},
{
"type": "shrub",
@@ -161,9 +197,21 @@
"modelStatusFile": "Tools/output/battlefield/A/shrub_hunyuan_status.json",
"prefab": "Assets/Bundles/Scenes/Prototype/Battlefield/A/Components/shrub/shrub.prefab",
"label": "shrub",
"position": { "x": -7.2, "y": 0.0, "z": 0.5 },
"rotation": { "x": 0.0, "y": -15.0, "z": 0.0 },
"scale": { "x": 1.3, "y": 1.3, "z": 1.3 }
"position": {
"x": -7.2,
"y": 0.0,
"z": 0.5
},
"rotation": {
"x": 0.0,
"y": -15.0,
"z": 0.0
},
"scale": {
"x": 1.3,
"y": 1.3,
"z": 1.3
}
}
],
"assembly": {
@@ -192,5 +240,21 @@
"status": "generated",
"generatedAtUtc": "2026-10-18T08:12:13Z",
"observedSize": "1254x1254"
},
"modelPipeline": {
"defaultForNewComponents": true,
"tool": "Tools/scene_component_pipeline.py",
"steps": [
"hunyuan_web_highpoly",
"studio_lowpoly",
"studio_uv",
"blender_bake",
"blender_decimate_preserve_uv_if_over_130_percent"
],
"highpolyFaces": "50k",
"textureSize": 1024,
"preserveStudioUV": true,
"decimationComparison": "actualTriangles * 10 > targetTriangles * 13",
"legacyPolicy": "Keep existing A assets and their actual Blender production receipts; do not mark them as Studio outputs."
}
}
+81 -6
View File
@@ -19,9 +19,9 @@
连续地表为五步流程后的编辑收尾资产 `GroundSurface.asset/.prefab`:Unity Pipeline 创建持久化的 2 三角面顶面和非凸 MeshCollider,覆盖 36×42m;`ground_surface.png` 是内置 imagegen 另绘的正俯视地表颜色贴图,提示词见 `ground_surface_prompt.txt`。它不是 Studio 地表 UV 的延续,未把失败的 Studio 地表称作通过验收。
路灯和长椅通过隔离四向检查后复用 TownSquare 资产。两套旧树木/灌木均有烘焙黑斑,未用于交付;树木与花边改为 `tree_card.png` / `flower_card.png` 透明图片面片,Unlit AlphaClip、无碰撞和投影,提示词见 `foliage_prompts.json`。首版不含告示牌、拱门和围栏。
路灯和长椅通过隔离四向检查后复用公共资产 `Assets/Bundles/Scenes/Common/{lamp,bench}/`(2026-10-26 从测试场景迁出,保留原 GUID)。两套旧树木/灌木均有烘焙黑斑,未用于交付;树木与花边改为 `tree_card.png` / `flower_card.png` 透明图片面片,Unlit AlphaClip、无碰撞和投影,提示词见 `foliage_prompts.json`。首版不含告示牌、拱门和围栏。
## 用户指定的五步模型流程
## 新场景组件默认模型流程
1. **混元网页生成高模**:每张白底分件图生成一份 50k GLB,保留任务号、日志、原始高模与哈希。
2. **3D Studio · 低模生成**:输入同一分件的高模,使用官网 Studio 低模功能,记录低模任务号和实际三角面数。
@@ -29,13 +29,13 @@
4. **Blender · 贴图烘焙**:先将 Studio 居中/归一化后的低模对齐到其确切来源高模,保留 Studio UV,烘焙颜色、法线、AO、金属度、粗糙度,再打包 XPbr base/mix。
5. **超出目标 30% · Blender 保留 UV 减面**:仅当实际三角面数严格大于目标×1.30 时触发,减至目标附近;未超过阈值则明确登记为跳过。保留现有 UV 和已烘焙贴图,不重新展开 UV。
所有模型完成上述流程后统一导出 Y-up、底面中心原点、局部 -Z 正面的 FBX。在 Unity 四向检查正面;不能用运行时旋转修补源模型坐标。地表另验水平顶面、厚度和可行走区域,防止生成竖直薄板后未经检查直接摆入场景。
所有模型完成上述流程后统一导出 Y-up、底面中心原点、局部 +Z 正面的 FBX。在 Unity 四向检查正面;不能用运行时旋转修补源模型坐标。地表另验水平顶面、厚度和可行走区域,防止生成竖直薄板后未经检查直接摆入场景。
复用依据:`Tools/studio_accessory_pipeline.py` 与 `Tools/campguide_studio_mesh.py` 已有第 02~05 步实现;`Tools/studio_lowpoly_trial.py` 含同源对齐、Studio UV 与 30% 阈值逻辑。它们目前分别面向挂件和角色,后续应提取静态场景入口,不能直接把 HomeCamp 当角色或 T2 挂件发布。
复用依据:`Tools/studio_accessory_pipeline.py` 与 `Tools/campguide_studio_mesh.py` 已有第 02~05 步实现;`Tools/studio_lowpoly_trial.py` 含同源对齐、Studio UV 与 30% 阈值逻辑。现已从 HomeCamp 实跑代码提取统一静态场景入口 `Tools/scene_component_pipeline.py`,不把场景组件当角色或 T2 挂件发布。
## 初始布局(模型验收后微调)
坐标为 Unity 世界坐标,单位米;相机从 -Z 看向 +Z,建筑正面局部 -Z 朝向广场。物件实际 Y 由地表碰撞向下投射确定,清单 Y=0 只是布局参考。
坐标为 Unity 世界坐标,单位米;相机从 -Z 看向 +Z,该历史布局的建筑仍以局部 -Z 朝向广场;新建筑采用 +Z 正面时须按新轴向重新计算摆放旋转。物件实际 Y 由地表碰撞向下投射确定,清单 Y=0 只是布局参考。
| 对象 | 初始 X/Z | 尺寸参考 | 朝向 |
| --- | --- | --- | --- |
@@ -74,7 +74,7 @@ Studio GLB 在法线和 UV 接缝处拆分顶点,直接减面会删除碎片
侧屋和 Studio 地表仍有表面瑕疵,**仅保存制作/审核资产,没有摆入交付场景**。交付场景采用通过外观检查的主屋三实例和喷泉,地表用连续顶面编辑收尾。`Test/HomeCampXPbr` 是项目 XPbr 的独立双面版本,仅供 HomeCamp 材质使用,未修改原 XPbr Shader。
场景静态入口为 `Tools/homecamp_model_pipeline.py --part <ground|mainhouse|cottage|fountain>`,使用 `D:/UD/AI/XModel/LLM3DGraphics/.venv/Scripts/python.exe` 运行。每件资产的五步回执位于 `Tools/output/homecamp_studio/<part>/production.json`;重复执行校验来源与配置并复用已完成阶段。
统一场景模型入口为 `Tools/scene_component_pipeline.py --manifest Doc/Design/Scene/HomeCamp/homecamp_scene_manifest.json --part <ground|mainhouse|cottage|fountain>`;`Tools/homecamp_model_pipeline.py --part ...` 保留为兼容入口,使用 `D:/UD/AI/XModel/LLM3DGraphics/.venv/Scripts/python.exe` 运行。每件资产的五步回执位于 `Tools/output/homecamp_studio/<part>/production.json`;重复执行校验来源与配置并复用已完成阶段。
Unity 入口为 `AIClient/AgentScripts/BuildHomeCamp.cs`:`BuildAssets` 导入和制作组件,`CaptureParts` 四向验收,`Build` 持久化拼装并渲染两种竖屏尺寸,`Verify` 验证面数、XPbr、地表碰撞与无碰撞的 Unlit 远景。通过 Pipeline 的 `run_script` 执行,构建用 Additive 临时场景并恢复原场景;初始 `Boot.unity` 没有未保存编辑。
@@ -86,3 +86,78 @@ Unity 入口为 `AIClient/AgentScripts/BuildHomeCamp.cs`:`BuildAssets` 导入
- 验证:`Tools/output/homecamp_review/verification.txt`,实际拼装 **9987 三角面**,连续地表 **25/25** 射线采样通过,远景 Unlit、无碰撞、不投影;独立场景未加入 Build Settings。
- Pipeline 制作脚本编译无诊断;基于本轮起始 cursor=382 查询 Console,未新增 error。Boot 场景仍为 `dirty=False`。
- 当前交付是固定相机静态场景,尚未替换首页背景或接入角色行走;未构建或发布 Art/Player,未做真机性能验收。长屏会裁掉部分边缘房屋/远景,正式首页接入时仍需按机型调整相机。
## v2 美术精修(2026-10-28)
按 `SceneReviewGeneration.md` 阶段 5 执行,入口顺序:`BuildLookDev` → `Build` → `Bake`(烘焙后自动 `Capture`)→ `Verify`。参数见 manifest `lookDev`。
- 地表:换成 42×42m 地面,使用 XTerrain 两层(石板/草地 1024² 无缝贴图 + 512² 控制图,由 `Tools/homecamp_ground_textures.py` 生成),石板 3.2m 重复一次。
- 材质:除远景图外全部为 Lit;树/花面片改为 Simple Lit AlphaClip,投影并接收阴影。
- 光照:前左暖色 Mixed 主光、三色环境光、线性雾;Subtractive 光照图 + AO,非方向性,1 张 1024 光照图,烘焙 25 秒。编辑器离屏截图不渲染实时阴影,审核以烘焙结果为准。
- 后处理:`HomeCampVolume.asset`(Neutral 色调映射、轻度对比/饱和、Bloom 0.3、暗角)。
- 布局:从 31 处增至 58 处,右侧房屋改为镜像实例,新增 2 棵树、1 盏路灯、1 张长椅,24 处花丛;拼装 11236 三角面。
- 结果:TECH PASS;对比图 `Tools/output/homecamp_review/compare_portrait.png`。六轴评分:构图 3、材质 3、光照 4、色彩 3、密度 2、比例 3,**ART FAIL**。
- 退回项:① 缺少 B/C 级道具(栅栏、遮阳摊位、花盆、岩石、台阶、柏树、灌木),需新的混元上传授权;② 前景草地过空,需要灌木/岩石/花丛打散,草地层也要加变化;③ 机位比参考图更俯、广场显得过大,需拉近、放低视角;④ 喷泉光照图 UV 有 436 texel 重叠(画面未见瑕疵)。
## v2 B/C 道具(2026-10-28)
用户授权后新增栅栏、摊位、岩石、台阶、柏树、灌木、单盆花盆。混元 50k → Studio → 烘焙 → 条件减面;全部经 `BuildHomeCamp.BuildProps` 导入。
| 分件 | 目标面 | 最终面 | 状态 |
| --- | ---: | ---: | --- |
| fence | 1000 | 1055 | 已摆入 |
| stall | 2500 | 2500 | 已摆入 |
| rocks | 600 | 600 | 已摆入 |
| steps | 1200 | 1198 | 已摆入 |
| cypress | 1500 | 1500 | 已摆入 |
| bush | 1800 | 1800 | v2 简化叶团后通过 |
| flowerpot | 800 | 799 | 三盆组合失败后拆单盆,场景内 10 实例 |
| flowerpots(组合) | — | — | 放弃:Studio 16589 面,减面丢面积;见 manifest fallback |
拼装 87 处、47489 三角面。TECH PASS。六轴:构图 4、材质 3、光照 4、色彩 4、密度 4、比例 4 → **ART FAIL**(材质)。退回:前景草地打散、可选补遮阳棚侧屋。
## v2 草地打散与材质收尾(2026-10-28)
- 草地:新源图 `ground_tile_grass_v2_source.jpg` → 暖色草坪层 + 深绿苔藓层;控制图 G/B 噪声分斑,避免平涂霓虹绿。
- 光照:主光 1.7、阴影强度 0.72、Subtractive 阴影色提亮;后处理饱和度 8 / 对比度 10。
- 布局:房屋下沉 8cm;前景加岩石/灌木/花丛,98 处、54101 三角面。
- 六轴全 ≥4 → **ART PASS**。侧屋遮阳棚仍用摊位+主屋实例代替,原 cottage 仅保留审核。
## v2 真侧屋 cottage(2026-10-28)
- 重绘白底分件图并混元 50k → Studio → 烘焙;最终 **3500** 面。
- 左侧 `HouseLeft` 换成 cottage(黄白遮阳棚 + 柜台);去掉 StallLeft,避免双遮阳棚。
- 四向审核 `Tools/output/homecamp_review/cottage_sheet_v2.png`;场景 97 处 / 53120 三角面,TECH PASS。
## DGX 阔叶树与花丛(2026-11-03)
按 `DGX3D_AI调用指南.md` 的静物路径制作,不用网页混元 Studio UV。本地 Turbo 出黏土参考图,再 `engine=dgx`、`character_type=static` 生成网格并烘焙低模。
| 分件 | 目标面 | 最终面 | 场景 |
| --- | ---: | ---: | --- |
| shadetree | 2000 | 1999 | 屋后左右草地各一棵,落在竖屏画面内 |
| flowercluster | 800 | 794 | 近景草地四处,另加喷泉环六丛 |
阔叶树首版导出沿 Z 横躺,已离线把树干转到 +Y、原点放回底面中心。花丛正面可读,侧面花瓣仍是低模块面。
同日下午把喷泉一圈 12 张花卡片换成 6 丛花丛,正面朝向镜头,否则俯视只看见叶顶。竖屏水平视角大约 29°,`|x|>=11` 的树位在画面外,网格只会在边缘露一块。阔叶树因此只留屋后左右两棵(左高 6.2,右高 5.7,朝向不同),更远的两张树卡片保留。`Bake` 26 秒,竖屏 `Tools/output/homecamp_review/homecamp_portrait.png`。未重做六轴评分。广场其余花边仍是卡片。烘焙前会先关掉已打开的旧 HomeCamp,避免内存里的卡片场景把新布局写回去。
## HomeCamp 道具性能与显存深度优化(2026-11-03)
针对场景内高频小道具导致的面数高(原 53,120 面)、多材质导致无法 GPU Instancing 合批以及贴图未压缩占用过大问题进行系统优化:
1. **Shader 补全 GPU Instancing 变体支持**:
- 修复 HomeCampXPbr.shader 的 ForwardLit 主渲染 Pass 缺少 #pragma multi_compile_instancing 的问题,确保场景道具前向渲染时能够被 URP 正确合批。
2. **小道具材质全面开启 Instancing**:
- 场景内 lowerpot(10 实例)、ush(10 实例)、cypress(3 实例)、 ence(3 实例)、 lowercluster(10 实例)等道具材质全部启用 enableInstancing = true,同类道具可在单 DrawCall 内完成渲染。
3. **高频道具拓扑减面(保留角点 UV 与外观)**:
- ush:从 1800 面优化至 648 面(减少 64% 面数),10 处灌木累计节约 11,520 三角面。
- lowerpot:从 799 面优化至 279 面(减少 65% 面数),10 盆花盆累计节约 5,200 三角面。
- cypress:从 1500 面优化至 800 面(减少 47% 面数),3 棵柏树累计节约 2,100 三角面。
- ence:从 1055 面优化至 450 面(减少 57% 面数),3 段栅栏累计节约 1,815 三角面。
- 场景总拼装面数从 53,120 面骤降至 **44,381 面**(削减近 9,000 面),核心视觉轮廓保持无损。
4. **贴图导入规格优化**:
- Props 小道具的 base / mix 贴图从原 1024/2048 Uncompressed 优化为最大 512×512 且开启纹理压缩(Compressed),小道具贴图显存占用直降 90% 以上。
5. **重构与光照烘焙验证**:
- 经 BuildProps -> BuildLookDev -> Build -> Bake 全流程重构并完成光照贴图烘焙,25/25 地表射线检测通过,TECH PASS。前后对比图保存至 AIClient/Assets/Screenshots/homecamp_optimization_comparison.png。
Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 831 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 844 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 KiB

@@ -7,7 +7,7 @@
1080,
1920
],
"status": "independent_scene_first_version_validated",
"status": "v2_cottage_placed",
"modelPipeline": {
"steps": [
"hunyuan_web_highpoly",
@@ -127,23 +127,15 @@
{
"id": "cottage",
"designImage": "Doc/Design/Scene/HomeCamp/cottage.png",
"targetTriangles": 3000,
"modelStatus": "processed_review_candidate_not_placed",
"targetTriangles": 3500,
"modelStatus": "visually_validated_and_placed",
"instances": [
{
"name": "CottageLeft",
"name": "HouseLeft",
"position": [
-7,
-6.8,
0,
4.5
]
},
{
"name": "CottageRight",
"position": [
7,
0,
4.5
3.6
]
}
],
@@ -165,26 +157,23 @@
"highpolyJobId": "6338023c4d4b4233976babd1198d0c49",
"highpolyCreationId": "8420a93b-f3de-4746-97c4-2e15b17c5f1c",
"highpolyWorkDir": "Tools/data/hunyuan/jobs/6338023c4d4b4233976babd1198d0c49",
"initialTargetTriangles": 1800,
"budgetRevisionReason": "Retain continuous ground/house surface and Studio UV charts; initial lower budget caused missing patches",
"finalTriangles": 2995,
"productionReceipt": "Tools/output/homecamp_studio/cottage/production.json",
"studioLowpolyTask": "44e1b0dcf52449f092f727a06eca1023-0-61d9ba22-da64-4adb-b440-11b8a08a",
"studioUVTask": "44e1b0dcf52449f092f727a06eca1023-0-b33f6718-07fb-42c7-981d-3a7512a0",
"steps": {
"01": "highpoly_validated",
"02": "studio_lowpoly_completed",
"03": "studio_uv_completed",
"04": "blender_bake_completed_on_studio_uv",
"05": "uv_preserving_decimation_completed"
},
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/cottage/cottage.prefab",
"initialTargetTriangles": 2995,
"budgetRevisionReason": "v2 redesign for solid awning cottage; previous Studio mesh had surface fragmentation",
"sourceOutputs": {
"Tools/output/homecamp_studio/cottage/xpbr/cottage.fbx": "0cd83d07210db2b8ff9fe9ce949f769409ddd02321da4d4730337c758e56a2cf",
"Tools/output/homecamp_studio/cottage/xpbr/cottage_base.png": "db7ac208bfeaa514384e94af1bec41579de370ace66dcc4c181e865a2381279b",
"Tools/output/homecamp_studio/cottage/xpbr/cottage_mix.png": "4d6c3ac43a6d84cf33686dab41ab53da5df6f6753bbc3f1dee70e32313190d70"
},
"visualIssue": "Studio surface/UV fragmentation; retained for further repair, excluded from delivered assembly"
"tier": "B",
"realSizeMeters": [
4.5,
3.8,
4.0
],
"designRevision": "v2_simplified_awning_cottage",
"finalTriangles": 3500,
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/cottage/cottage.prefab",
"productionReceipt": "Tools/output/homecamp_studio/cottage/production.json"
},
{
"id": "fountain",
@@ -231,28 +220,162 @@
"Tools/output/homecamp_studio/fountain/xpbr/fountain_base.png": "6ad8524be4cdd902349daf41ba9ccc5f8830b1c436114b822ba45bf40a49c451",
"Tools/output/homecamp_studio/fountain/xpbr/fountain_mix.png": "0118ecd392cdcfdb5fed0489f1e2df6d5cb3d5a0842d27d21334970d87183512"
}
},
{
"id": "fence",
"designImage": "Doc/Design/Scene/HomeCamp/fence.png",
"tier": "B",
"targetTriangles": 1000,
"realSizeMeters": [
3.0,
0.9,
0.25
],
"highpoly": "Tools/output/homecamp_3d/fence/fence.glb",
"modelStatus": "visually_validated_and_placed",
"finalTriangles": 1055,
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/fence/fence.prefab",
"productionReceipt": "Tools/output/homecamp_studio/fence/production.json"
},
{
"id": "stall",
"designImage": "Doc/Design/Scene/HomeCamp/stall.png",
"tier": "B",
"targetTriangles": 2500,
"realSizeMeters": [
2.2,
2.4,
1.3
],
"highpoly": "Tools/output/homecamp_3d/stall/stall.glb",
"modelStatus": "visually_validated_and_placed",
"finalTriangles": 2500,
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/stall/stall.prefab",
"productionReceipt": "Tools/output/homecamp_studio/stall/production.json"
},
{
"id": "flowerpots",
"designImage": "Doc/Design/Scene/HomeCamp/flowerpots.png",
"tier": "B",
"targetTriangles": 3000,
"realSizeMeters": [
1.2,
0.9,
0.9
],
"highpoly": "Tools/output/homecamp_3d/flowerpots/flowerpots.glb",
"modelStatus": "abandoned_split_to_single_pot",
"initialTargetTriangles": 3000,
"budgetRevisionReason": "v2 clay-dome design still produced Studio 16589 faces; UV-preserving reduction stalled at 3371 (above 130% of 2200). Raised to B-tier upper 3000 so 3371 is within 130%.",
"designRevision": "v2_simplified_foliage",
"fallback": "flowerpot",
"fallbackReason": "Three-pot cluster Studio mesh stayed at 16589 faces; UV-preserving reduction to ~3371 lost >20% surface area. Split into single flowerpot instances per SceneModelProduction failure step 2."
},
{
"id": "rocks",
"designImage": "Doc/Design/Scene/HomeCamp/rocks.png",
"tier": "C",
"targetTriangles": 600,
"realSizeMeters": [
1.6,
0.9,
1.2
],
"highpoly": "Tools/output/homecamp_3d/rocks/rocks.glb",
"modelStatus": "visually_validated_and_placed",
"finalTriangles": 600,
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/rocks/rocks.prefab",
"productionReceipt": "Tools/output/homecamp_studio/rocks/production.json"
},
{
"id": "steps",
"designImage": "Doc/Design/Scene/HomeCamp/steps.png",
"tier": "B",
"targetTriangles": 1200,
"realSizeMeters": [
2.5,
1.0,
2.0
],
"highpoly": "Tools/output/homecamp_3d/steps/steps.glb",
"modelStatus": "visually_validated_and_placed",
"finalTriangles": 1198,
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/steps/steps.prefab",
"productionReceipt": "Tools/output/homecamp_studio/steps/production.json"
},
{
"id": "cypress",
"designImage": "Doc/Design/Scene/HomeCamp/cypress.png",
"tier": "B",
"targetTriangles": 1500,
"realSizeMeters": [
1.3,
5.0,
1.3
],
"highpoly": "Tools/output/homecamp_3d/cypress/cypress.glb",
"modelStatus": "visually_validated_and_placed",
"finalTriangles": 1500,
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/cypress/cypress.prefab",
"productionReceipt": "Tools/output/homecamp_studio/cypress/production.json"
},
{
"id": "bush",
"designImage": "Doc/Design/Scene/HomeCamp/bush.png",
"tier": "B",
"targetTriangles": 1800,
"realSizeMeters": [
1.2,
0.9,
1.2
],
"highpoly": "Tools/output/homecamp_3d/bush/bush.glb",
"modelStatus": "visually_validated_and_placed",
"initialTargetTriangles": 800,
"budgetRevisionReason": "Simplified clay-dome foliage after Studio returned 23975 faces on leafy v1",
"designRevision": "v2_simplified_foliage",
"finalTriangles": 1800,
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/bush/bush.prefab",
"productionReceipt": "Tools/output/homecamp_studio/bush/production.json"
},
{
"id": "flowerpot",
"designImage": "Doc/Design/Scene/HomeCamp/flowerpot.png",
"tier": "C",
"targetTriangles": 800,
"realSizeMeters": [
0.55,
0.7,
0.55
],
"highpoly": "Tools/output/homecamp_3d/flowerpot/flowerpot.glb",
"modelStatus": "visually_validated_and_placed",
"splitFrom": "flowerpots",
"finalTriangles": 799,
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/flowerpot/flowerpot.prefab",
"productionReceipt": "Tools/output/homecamp_studio/flowerpot/production.json"
}
],
"reuseCandidates": [
{
"id": "tree",
"prefab": "Assets/Bundles/Scenes/Town/TownSquare/tree/tree.prefab",
"status": "rejected_texture_artifacts"
"status": "removed_rejected_test_asset",
"reason": "Texture artifacts; not used in HomeCamp. Replaced by foliage image cards."
},
{
"id": "lamp",
"prefab": "Assets/Bundles/Scenes/Town/TownSquare/lamp/lamp.prefab",
"prefab": "Assets/Bundles/Scenes/Common/lamp/lamp.prefab",
"status": "visually_verified"
},
{
"id": "bench",
"prefab": "Assets/Bundles/Scenes/Town/TownSquare/bench/bench.prefab",
"prefab": "Assets/Bundles/Scenes/Common/bench/bench.prefab",
"status": "visually_verified"
},
{
"id": "bush",
"prefab": "Assets/Bundles/Scenes/Town/TownSquare/bush/bush.prefab",
"status": "rejected_texture_artifacts"
"status": "removed_rejected_test_asset",
"reason": "Texture artifacts; not used in HomeCamp. Replaced by foliage image cards."
}
],
"backdrop": {
@@ -326,33 +449,35 @@
{
"id": "cottage",
"path": "Doc/Design/Scene/HomeCamp/cottage.png",
"width": 1312,
"height": 1199,
"sha256": "7d290546cbf0e797c02261226fbcbbb4f8919b34e32fb15e5dae6e4c80e2a1ff",
"width": 1024,
"height": 1024,
"sha256": "96c64ab3cc4f0a5e2e82dbf3b562977be24808347fb1a47e2e7522761f88f6fd",
"corners": [
[
253,
253,
253
255,
255,
255
],
[
254,
254,
254
255,
255,
255
],
[
254,
254,
254
255,
255,
255
],
[
254,
253,
254
255,
255,
255
]
],
"imageDecodes": true,
"whiteCornersPass": true
"whiteCornersPass": true,
"revision": "v2_simplified_awning_cottage",
"previousArchive": "Doc/Design/Scene/HomeCamp/cottage_v1_20261028_154839.png"
},
{
"id": "fountain",
@@ -445,6 +570,259 @@
]
],
"imageDecodes": true
},
{
"id": "fence",
"path": "Doc/Design/Scene/HomeCamp/fence.png",
"width": 1152,
"height": 864,
"sha256": "743f61c53f60f217d8c8bd2505d14b091995dff06692e7ab7aa85c321971cd74",
"corners": [
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
]
],
"imageDecodes": true,
"whiteCornersPass": true
},
{
"id": "stall",
"path": "Doc/Design/Scene/HomeCamp/stall.png",
"width": 1024,
"height": 1024,
"sha256": "46ed2cb20f6d9dc35729fd118f03cca2fe683966fb9329db20e2df81cdd9199d",
"corners": [
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
]
],
"imageDecodes": true,
"whiteCornersPass": true
},
{
"id": "flowerpots",
"path": "Doc/Design/Scene/HomeCamp/flowerpots.png",
"width": 1024,
"height": 1024,
"sha256": "a2846053f9a4d6fb63d43b811552ce98a6753fd3257c001c1252d43ca7ace581",
"corners": [
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
]
],
"imageDecodes": true,
"whiteCornersPass": true,
"revision": "v2_simplified_foliage",
"previousArchive": "Doc/Design/Scene/HomeCamp/flowerpots_v1_leafy_20261028_140834.png"
},
{
"id": "rocks",
"path": "Doc/Design/Scene/HomeCamp/rocks.png",
"width": 1152,
"height": 864,
"sha256": "53afaa988205cb29eaece3cf86dbef35f39eb1514c14b220344a0c3f15acd122",
"corners": [
[
255,
255,
255
],
[
255,
255,
253
],
[
253,
253,
253
],
[
255,
255,
255
]
],
"imageDecodes": true,
"whiteCornersPass": true
},
{
"id": "steps",
"path": "Doc/Design/Scene/HomeCamp/steps.png",
"width": 1152,
"height": 864,
"sha256": "90ed47fd2183da95c53e2b55232a66a35bbfe4bcb5cfb6f4fdc2c75247c8f119",
"corners": [
[
252,
254,
253
],
[
255,
255,
253
],
[
255,
255,
255
],
[
255,
255,
255
]
],
"imageDecodes": true,
"whiteCornersPass": true
},
{
"id": "cypress",
"path": "Doc/Design/Scene/HomeCamp/cypress.png",
"width": 864,
"height": 1152,
"sha256": "3f5dec40eb6e4b3592cb32b60a4fe5d4c7ed6cf5dfe07aa7f3a1197b7b7badac",
"corners": [
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
]
],
"imageDecodes": true,
"whiteCornersPass": true
},
{
"id": "bush",
"path": "Doc/Design/Scene/HomeCamp/bush.png",
"width": 1024,
"height": 1024,
"sha256": "fad168ba6e6a3afbb21ff7781f9ef021012b41231c5e93161cf6a8899fd9e4f9",
"corners": [
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
]
],
"imageDecodes": true,
"whiteCornersPass": true,
"revision": "v2_simplified_foliage",
"previousArchive": "Doc/Design/Scene/HomeCamp/bush_v1_leafy_20261028_140834.png"
},
{
"id": "flowerpot",
"path": "Doc/Design/Scene/HomeCamp/flowerpot.png",
"width": 1024,
"height": 1024,
"sha256": "15adf1ebaadfdd6345996d903d9c9659406104352469a9ebd75af34d268ea8a1",
"corners": [
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
],
[
255,
255,
255
]
],
"imageDecodes": true,
"whiteCornersPass": true,
"revision": "single_pot_split_from_cluster"
}
],
"referenceSha256": "818447d9f9b0cad2dcd08b7cbecd870d2efd62d43d33e2c43ef2056394f96ada",
@@ -457,10 +835,10 @@
1310
],
"sha256": "e2b764b9ec9e50fb0a076e3b764a5c6bced053c631cca0ed3e8e6a7eb04e6f98",
"representation": "alpha_clipped_unlit_quad",
"representation": "alpha_clipped_simple_lit_quad",
"alphaCutoff": 0.55,
"collider": false,
"shadows": false
"shadows": true
},
{
"id": "flower_card",
@@ -470,24 +848,33 @@
1024
],
"sha256": "f898d822667a7b0b94c23cde0705760fb58c05210e47f4157026c719c841e4b6",
"representation": "alpha_clipped_unlit_quad",
"representation": "alpha_clipped_simple_lit_quad",
"alphaCutoff": 0.55,
"collider": false,
"shadows": false
"shadows": true
}
],
"assembly": {
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.prefab",
"scene": "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.unity",
"triangles": 9987,
"placements": 31,
"triangles": 53120,
"placements": 97,
"groundCollisionSamples": 25,
"groundCollisionPassed": 25,
"houses": "Three scaled/rotated instances of visually validated mainhouse",
"ground": "Pipeline-authored continuous GroundSurface.asset with ground_surface.png; original Studio ground excluded",
"houses": "MainHouse + HouseRight (mirrored mainhouse) + HouseLeft (cottage v2 awning)",
"ground": "42x42 XTerrain stone/grass + control; Studio ground excluded",
"mainHudIntegrated": false,
"playModeTested": false,
"devicePerformanceTested": false
"devicePerformanceTested": false,
"props": [
"fence",
"stall",
"flowerpot",
"rocks",
"steps",
"cypress",
"bush"
]
},
"qa": {
"report": "Tools/output/homecamp_review/verification.txt",
@@ -497,14 +884,39 @@
"consoleNewErrors": 0,
"originalBootSceneDirty": false,
"fixedCamera": true,
"longScreenLimitation": "Edge buildings and some distant scenery crop; final HUD integration needs device framing"
"longScreenLimitation": "Edge buildings and some distant scenery crop; final HUD integration needs device framing",
"compare": "Tools/output/homecamp_review/compare_portrait.png",
"scaleReference": "Tools/output/homecamp_review/homecamp_scale_reference.png",
"tech": "PASS",
"artReview": {
"date": "2026-10-28",
"reference": "AIClient/Assets/Bundles/UI/Bg/home_camp.png",
"passRule": "every axis >= 4",
"scores": {
"composition": 4,
"material": 4,
"lighting": 4,
"color": 4,
"density": 4,
"scale": 4
},
"result": "PASS",
"notes": [
"Warm + dark grass layers via XTerrain G/B control patches; softer Mixed shadows and lifted subtractive tint",
"House bases sunk 8cm; more foreground rocks/bushes/flower cards (98 placements)",
"Left awning cottage still uses mainhouse+stall stand-in; original cottage mesh retained as review-only"
],
"returnTo": []
},
"propsSheet": "Tools/output/homecamp_review/props_sheet_all.png",
"cottageSheet": "Tools/output/homecamp_review/cottage_sheet_v2.png"
},
"authoredGroundSurface": {
"mesh": "Assets/Bundles/Scenes/Town/HomeCamp/GroundSurface.asset",
"prefab": "Assets/Bundles/Scenes/Town/HomeCamp/GroundSurface.prefab",
"triangles": 2,
"dimensions": [
36,
42,
42
],
"texture": "Doc/Design/Scene/HomeCamp/ground_surface.png",
@@ -513,6 +925,100 @@
1254
],
"textureSha256": "12dc5f81435cb50438a665fd54cfe50ba321b6a99ad1a3ebb62513964ce7a2e3",
"creation": "Unity Pipeline editing cleanup after the five model stages; not Studio UV"
"creation": "Unity Pipeline editing cleanup after the five model stages; not Studio UV",
"material": "Assets/Bundles/Scenes/Town/HomeCamp/ground_terrain.mat",
"shader": "XWorld/XTerrain",
"layers": {
"stone": "ground_tile_stone.png",
"grass": "ground_tile_grass.png"
},
"control": "ground_control.png",
"tileMeters": 3.2,
"generator": "Tools/homecamp_ground_textures.py",
"receipt": "Tools/output/homecamp_review/ground_layers.json"
},
"lookDev": {
"version": 2,
"date": "2026-10-28",
"materials": "Lit only except backdrop; foliage cards Simple Lit AlphaClip 0.55 cast/receive shadows",
"sun": {
"euler": [
38,
68,
0
],
"color": [
1,
0.92,
0.78
],
"intensity": 1.9,
"mode": "Mixed"
},
"ambient": {
"mode": "Trilight",
"sky": [
0.5,
0.58,
0.7
],
"equator": [
0.44,
0.44,
0.4
],
"ground": [
0.26,
0.24,
0.2
]
},
"fog": {
"mode": "Linear",
"color": [
0.72,
0.84,
0.93
],
"start": 40,
"end": 200
},
"lightmap": {
"settings": "Assets/Bundles/Scenes/Town/HomeCamp/HomeCampLighting.lighting",
"mode": "Subtractive",
"lightmapper": "ProgressiveGPU",
"directional": false,
"texelsPerUnit": 10,
"maxSize": 1024,
"ambientOcclusion": true,
"output": "Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp/",
"count": 1,
"bakeSeconds": 25
},
"volume": {
"profile": "Assets/Bundles/Scenes/Town/HomeCamp/HomeCampVolume.asset",
"tonemapping": "Neutral",
"postExposure": -0.05,
"contrast": 12,
"saturation": 12,
"temperature": 6,
"bloom": 0.3,
"vignette": 0.18
},
"note": "Editor offscreen capture does not render realtime shadows; review relies on baked lightmaps"
},
"uploadAuthorizationV2": {
"status": "authorized_by_user",
"destination": "https://3d.hunyuan.tencent.com/",
"scope": "Upload new HomeCamp B/C prop white-background design images (fence, awning stall, flower pots, rocks, steps, cypress, bushes and similar) and their derived model files to Hunyuan web/3D Studio for steps 01-03",
"authorizationText": "User selected: authorize uploading this batch of new prop component images",
"authorizedDate": "2026-10-28"
},
"uploadAuthorizationCottageV2": {
"status": "authorized_by_user",
"destination": "https://3d.hunyuan.tencent.com/",
"scope": "Upload cottage_v2 white-background design image and derived model files to Hunyuan web/3D Studio for steps 01-03",
"authorizationText": "User confirmed: 好补真侧屋",
"authorizedDate": "2026-10-28"
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 683 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

+78
View File
@@ -0,0 +1,78 @@
# 新场景组件默认模型生产流程
自 2026-10-26 起,所有新场景组件(含独立地表)默认使用:
```text
分件设计图
→ 混元网页 50k GLB 高模
→ 3D Studio 低模
→ 3D Studio UV
→ Blender 同源高低模对齐、保留 Studio UV 烘焙
→ 超出目标 30% 时 Blender 保留 UV 减面
→ XPbr base/mix + FBX → Unity Pipeline 导入、Prefab 与场景验收
→ 美术收尾(Lit 材质、平铺地表、烘焙光照、后处理)→ 对图评分
```
场景级的美术基准、分层拆件、收尾和对图评分见 [SceneReviewGeneration.md](SceneReviewGeneration.md) 的“商业化品质基线”和第 5 阶段。
## 制作要求
1. 分件图通过审核后再制作模型;地表单独生产。复用已验收 Prefab 时跳过新模型生产。
2. 混元使用 `--faces 50k`。保留任务号、原始 GLB、哈希和日志,校验文件头及内嵌贴图解码。
3. Studio 低模和 Studio UV 分别保留任务回执。不得用 Blender 自动展 UV 替代 Studio UV。
4. 烘焙前将 Studio 低模对齐到确切来源高模,保留 Studio UV,烘焙颜色、法线、AO、金属度、粗糙度并打包 XPbr。
5. 减面条件为 `actualTriangles * 10 > targetTriangles * 13`;等于 130% 不触发。未超出时登记跳过,超出时减至目标附近,保留 UV 和贴图;必要时向最终低模补同源投射烘焙,不重展 UV。
6. 模型完成不等于外观通过。单件四向检查、UV/面数/贴图检查、地表水平与碰撞检查通过后才拼场景。
7. 新 FBX 为 Y-up、底面中心原点、局部 +Z 正面。坐标与正面必须实测;历史 -Z 资源按已登记配置复用。
8. 分件图尺寸按场景 manifest 的 `artDirection.scaleChart` 标注真实米制尺寸,导入 Unity 后按该尺寸缩放,不在拼装时目测缩放。
## 面数预算(按屏占比)
`targetTriangles` 按组件层级和正式机位下的屏占比确定,不再对所有组件统一用 300~2000:
| 层级 | 参考预算 | 适用 |
| --- | ---: | --- |
| A 主体 | 3000~6000 | 主建筑、地标;造型复杂(带遮阳棚、阳台、烟囱)取上限 |
| B 中景 | 1000~3000 | 侧屋、摊位、台阶、拱门、大树 |
| C 点缀 | 200~800 | 花盆、木箱、岩石、灌木 |
| 地表几何 | 2000~6000 | 只承载起伏和轮廓,表面细节交给平铺材质 |
整场景在正式机位视锥内的参考上限为 6 万三角面、80 个 Draw Call,以真机验收结果为准。HomeCamp 首版整场景只有 9987 面,瓶颈在面数预算过低导致的碎面,而不是性能。
## Studio 低模失败时的处理顺序
出现碎面、破洞、反面或贴图黑斑时,按以下顺序处理,每一步都要登记回执,不能直接降级成平面贴片了事:
1. **提高预算重跑 Studio 低模**:目标面数提高到原来的 1.5~2 倍,但不超过本层级上限。
2. **拆分组件**:把遮阳棚、烟囱、花箱等附件拆成独立分件,分别走五步流程,在 Prefab 里组合。
3. **修复反面与黑斑**:统一面朝向,检查烘焙 cage 距离和射线距离;黑斑通常来自高低模没对齐或 cage 太小,需要重新对齐后再烘焙。
4. **重做分件图**:造型过于细碎时,简化设计图里的镂空和细杆结构后重新生成高模。
5. 以上都失败时,才允许用替代表现(例如树改成卡片),并在 manifest 标注 `fallback` 和原因。替代表现同样要满足第 5 阶段的 Lit 材质和阴影要求。
## 统一工具入口
`Tools/scene_component_pipeline.py` 从场景 manifest 读取 `sceneId`、组件 `id`/`type`、`designImage`、`highpoly`/`highPoly` 和 `targetTriangles`。若有单独的 `modelReferenceImage`,混元计划使用该图。`ground` 独立登记;普通组件放在 `components`。`modelPipeline.textureSize` 默认 1024。
先查看计划,不调用远程服务或 Blender:
```powershell
python Tools/scene_component_pipeline.py --manifest Doc/Design/Scene/Battlefield/battlefield_scene_manifest.json --part tree --dry-run
```
计划会打印混元 50k 高模命令及来源/输出路径。先使用 `Tools/hunyuan_3d_generate.py` 完成高模,再用 LLM3DGraphics 虚拟环境执行后续生产:
```powershell
& 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
```
普通场景默认中间目录为 `Tools/output/scene_models/<sceneId>/<part>/`,可用 manifest 的 `modelOutputDir` 或 `--output-dir` 指定其他 `Tools/output/` 内目录。不得覆盖来源或设置不匹配的旧生产记录。已有完成记录按哈希复用。
`Tools/homecamp_model_pipeline.py --part ...` 是该入口的 HomeCamp 兼容包装,保留既有输出目录和修复步骤。
## 收尾与历史资源
- `production.json` 记录任务、面数、减面执行/跳过、烘焙和输出哈希;模型路径、回执和 Prefab 路径须登记回场景 manifest。
- 仅复制源 FBX 和贴图入 `AIClient/Assets/Bundles/Scenes/`;导入、材质、Prefab、碰撞体、场景制作均通过 Unity Pipeline。
- 图片登记 `Doc/ResDesc_Picture.md`,模型、贴图和 Prefab 登记 `Doc/ResDesc_Model.md`。
- `model_lowpoly_bake.py` 保留用于已有资源的历史复现与其他明确使用它的工具;不再作为新场景组件的默认入口。
- 既有战场 A 的 Blender 减面/UV/烘焙回执保留真实来源,不自动重生成,也不标为已执行 Studio 低模/UV。
+91 -9
View File
@@ -1,6 +1,31 @@
# Unity 关卡场景四阶段生成流程
# Unity 关卡场景五阶段生成流程
每个新关卡都按“设计选择 → 组件拆分 → 3D 资产 → Unity 场景”推进。每一阶段都有输入、输出和状态登记;没有完成上一阶段时,不进入下一阶段。
每个新关卡都按“设计选择 → 组件拆分 → 3D 资产 → Unity 场景 → 美术收尾与对图验收”推进。每一阶段都有输入、输出和状态登记;没有完成上一阶段时,不进入下一阶段。
技术检查(面数、哈希、碰撞、Console)通过只代表“可用”,不代表“可上线”。场景交付以第 5 阶段对图验收为准。
## 商业化品质基线
以下问题来自 HomeCamp 首版复盘(`Tools/output/homecamp_review/homecamp_portrait.png` 对比 `home_camp.png`),新场景必须在对应阶段提前规避:
| 首版问题 | 根因 | 对应要求 |
| --- | --- | --- |
| 广场空旷,远不及参考图丰富 | 只拆了 4 个组件,花盆、摊位、围栏、岩石、台阶、拱门都没做 | 第 2 阶段按 A/B/C 分层拆件,并给出密度目标 |
| 石板尺寸失真,地面像一张大贴图 | 36×42m 地表只用一张 1254² 贴图,纹素密度过低 | 地表表面用 `XTerrain` 平铺分层材质,并做路沿/台阶等边缘件 |
| 物件不贴地,画面发平 | 地表和树卡用的是 Unlit 材质,不接收阴影;场景里没有后处理 Volume | 第 5 阶段统一 Lit 材质、阴影、烘焙 AO、调色 |
| 侧屋、地表、树、灌木出现碎面和黑斑 | 2000~3000 面的预算压到复杂造型上,Studio 低模产生碎片和反面 | 按屏占比定面数,失败时先走规定的重试顺序 |
| 主屋复制三次,一眼能看出重复 | 没有变体手段 | 复用件必须有材质色调、缩放、附件的变体 |
### 美术基准包(第 1 阶段产出,人工确认)
写入场景 manifest 的 `artDirection` 字段,后续所有阶段都以它为准:
- `referenceImage`:唯一视觉目标图,同时也是第 5 阶段的对比基准。
- `palette`:主色、辅色、点缀色各 2~3 个,外加阴影色倾向(冷或暖)。
- `scaleChart`:角色身高 1.6m 为基准,标出门高、窗台、长椅、路灯、石板边长、台阶高度。所有分件都按这张表确定尺寸。
- `lighting`:主光方向和色温、环境光、阴影软硬、雾的起止距离。
- `camera`:正式机位与 FOV,并标出安全区。HUD 会遮挡的区域不摆主体。
- `density`:目标画面内 A/B/C 三类件各自的数量下限,以及相机内地面暴露率上限(参考值:近景不超过 35%)。
## 1. 生成设计图并选择方案
@@ -30,18 +55,35 @@ python Tools/generate_battlefield_components.py --design A --force-new-component
组件拆分完成后先审核地表图和组件图,再进入 3D 阶段。组件复用路径、生成状态和设计图路径都写回 manifest。
### 分层拆件与密度
每个组件在 manifest 里标 `tier`,拆件时按参考图逐区域清点,不能只拆大件:
| 层级 | 内容 | 典型数量 | 说明 |
| --- | --- | --- | --- |
| A 主体 | 主建筑、地标(喷泉、城门) | 1~4 种 | 决定画面辨识度,预算最高,必须有独立设计图 |
| B 中景 | 侧屋、摊位、围栏段、台阶、拱门、大树 | 4~8 种 | 构成场景结构,复用件必须有变体 |
| C 点缀 | 花盆、木箱、岩石、灌木、花丛、路牌 | 6~15 种 | 决定“丰富感”,按组散布 |
- 地表另拆为“可平铺表面 + 边缘件”(路沿、草地石板过渡、台阶、水岸),边缘件按 B 层制作。
- 复用件的变体手段写进 manifest `variants`:材质色调(屋顶、墙面、遮阳棚颜色)、0.85~1.15 的缩放、附件组合(花箱、灯笼、招牌)。同一 Prefab 在同一画面里出现超过 2 次时,必须换变体。
- C 层优先做成 `Cluster` 组合 Prefab(例如花盆 ×3 + 木箱),拼装时成组摆放,避免散点感。
- 战场装饰类别上限 15 类仍然有效。A/B/C 合计超过上限时,先合并成组合件。
## 3. 根据新设计图生成 3D 模型
只有新组件才执行图生 3D;复用组件直接使用 manifest 中的 `existingPrefab`/`prefab`。新组件按统一链路生成:
只有新组件才执行图生 3D;复用组件使用已验收 Prefab。所有新组件(含独立地表)默认遵循 [统一模型流程](SceneModelProduction.md):
```text
组件设计图
→ Hunyuan 3D 50k GLB
→ Blender 减面、重拓扑、UV 与 XPbr 烘焙
→ AIClient/Assets/Bundles/Scenes/.../<type>/<type>.fbx + 贴图 + Prefab
分件图 → 混元 50k GLB 高模 → Studio 低模 → Studio UV
→ Blender 同源对齐、保留 Studio UV 烘焙
→ 实际面数 > 目标×1.30 时保留 UV 减面,否则登记跳过
→ FBX + XPbr 贴图 → Unity Pipeline 导入和制作 Prefab
```
每个组件的模型路径、目标面数、烘焙回执和 Prefab 路径必须登记到 manifest。FBX 遵循 Y-up、底面中心原点、局部 `-Z` 正面;导入和 Prefab 制作只能走 Unity Pipeline。
统一工具为 `Tools/scene_component_pipeline.py --manifest <场景manifest> --part <id>`;`--dry-run` 只打印计划。高模先由混元网页工具完成。Studio 低模/UV 任务、来源哈希、烘焙、条件减面与最终路径必须登记。不得用 Blender 自动 UV 替代 Studio UV。
FBX 遵循 Y-up、底面中心原点、局部 +Z 正面;导入和 Prefab 制作只能走 Unity Pipeline。既有战场 A 按真实旧回执保留,不自动重做。
## 4. 生成 Unity 场景并交给人工审核
@@ -63,12 +105,52 @@ unity command --project-path $project run_script --file AgentScripts/BuildSceneR
人工审核 Hierarchy、Scene View 和 Game View,重点检查组件穿插、悬空、朝向、地表碰撞和路线可读性。审核场景只用于编辑器审阅,不加入正式 Build Settings,也不由运行时代码创建。
审核场景固定摆一个 1.6m 灰模角色作为比例参照,放在正式机位里的主要活动区。
## 5. 美术收尾与对图验收
拼装通过后,由同一个场景构建脚本完成以下收尾,全部通过 Pipeline 持久化,不在运行时补:
**材质与地表**
- 场景内只要在正式机位里可见、而且位于地面层的物件,都使用 Lit 材质(XPbr、`XTerrain` 或 URP Simple Lit),并开启接收阴影。Unlit 只允许用于天空和远景面片。
- 植被卡片用 Alpha Clip 的 Lit 材质,开启接收阴影;树冠法线朝外球面化,避免卡片发平。卡片底部放接触阴影贴片。
- 地表使用 `XTerrain`:4 层平铺纹理(石板、草地、泥土、碎石)加一张控制图。控制图按布局图绘制,平铺密度按 `scaleChart` 里的石板边长换算,禁止整块地表只用一张拉伸贴图。
- 物件和地面接缝处必须有过渡:草边、路沿、碎石、贴花,不能是硬切边。
**灯光与后处理**
- 静态固定机位的场景优先烘焙:静态物件勾选 Contribute GI,烘焙 lightmap 和 AO。实时主光只给角色和动态物件投影。
- 场景放一个全局 Volume:Tonemapping(Neutral 或 ACES 二选一,按 `artDirection.lighting` 定)、Color Adjustments、Shadows Midtones Highlights,再加轻量 Bloom 和 Vignette。低档画质只保留调色,Bloom 关闭。
- 开启线性雾或高度雾,让远景面片和近景之间有空气层次;雾色取远景图的地平线颜色。
- 灯具、窗户使用自发光贴图,配合 Bloom 做出点缀亮点。
**对图验收(交付门)**
1. 用正式机位,在 1080×1920 和长屏两种尺寸下各渲染一张图,与 `referenceImage` 并排拼成对比图,存到 `Tools/output/<sceneId>_review/compare_*.png`。
2. 人工按下表评分,每项 1~5 分。任意一项低于 4 分则打回对应阶段,不进入接入环节:
| 维度 | 4 分标准 |
| --- | --- |
| 轮廓与辨识度 | 主建筑和地标一眼能认出来,前中后景层次分明 |
| 密度与丰富度 | 画面内没有大片空白地面,A/B/C 数量达到 `density` 下限 |
| 比例 | 门、长椅、路灯和 1.6m 参照角色比例协调 |
| 光影 | 每个物件都有落地阴影或 AO,体积感清楚 |
| 色彩 | 与 `palette` 一致,饱和度和明暗不出现脏色或过曝 |
| 品质瑕疵 | 没有碎面、黑斑、反面、接缝漏光和明显重复 |
3. 评分和打回原因写进 manifest `qa.artReview`。`verification.txt` 必须分两行写:`TECH PASS/FAIL` 和 `ART PASS/FAIL/PENDING`。只有技术项通过时,只能写成 `ART PENDING`。
4. 接入正式玩法前,补做真机性能验收:画面内三角面、Draw Call、贴图内存,以及微信小游戏低端机帧率。超出预算时优先合并材质图集、开启 GPU Instancing、做 LOD,不要靠删减 C 层点缀来过关。
## 一键编排与状态门
四阶段可以由编排器按顺序执行。它默认复用已有组件,只打印第 3 阶段的模型任务,不会在模型未登记前调用 Unity:
前四阶段由编排器按顺序提示和调用,第 5 阶段的评分由人工完成;模型阶段仍需独立执行统一模型工具,编排器不自动调用模型服务。它默认复用已有组件,只打印第 3 阶段的模型任务;未准备好模型和 Prefab 时,不要增加 `--run-unity`。Unity 拼装端会检查引用的 Prefab 是否存在,但编排器本身不校验完整模型生产回执:
```powershell
python Tools/run_battlefield_scene_pipeline.py --design A --dry-run
```
确认设计和组件图后,去掉 `--dry-run`;需要重做设计或组件时分别使用 `--force-design`、`--force-new-components`。Unity Editor 和 Pipeline 运行后,再加 `--run-unity` 执行第 4 阶段。
朝向新约定自 2026-10-24 生效;旧场景的 -Z 组件保持其已登记的朝向与布局,不直接套用新资源的 LookRotation 规则。
Binary file not shown.

Before

Width:  |  Height:  |  Size: 973 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 884 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 930 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

+11 -11
View File
@@ -11,73 +11,73 @@
"sound": "Click",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Click.wav",
"seconds": 0.08,
"channels": 2,
"channels": 1,
"frequency": 44100
},
{
"sound": "Confirm",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Confirm.wav",
"seconds": 0.36,
"channels": 2,
"channels": 1,
"frequency": 44100
},
{
"sound": "Back",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Back.wav",
"seconds": 0.22,
"channels": 2,
"channels": 1,
"frequency": 44100
},
{
"sound": "Open",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Open.wav",
"seconds": 0.34,
"channels": 2,
"channels": 1,
"frequency": 44100
},
{
"sound": "Close",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Close.wav",
"seconds": 0.24,
"channels": 2,
"channels": 1,
"frequency": 44100
},
{
"sound": "Tab",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Tab.wav",
"seconds": 0.07,
"channels": 2,
"channels": 1,
"frequency": 44100
},
{
"sound": "Claim",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Claim.wav",
"seconds": 0.78,
"channels": 2,
"channels": 1,
"frequency": 44100
},
{
"sound": "Deny",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Deny.wav",
"seconds": 0.27,
"channels": 2,
"channels": 1,
"frequency": 44100
},
{
"sound": "Toggle",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Toggle.wav",
"seconds": 0.1,
"channels": 2,
"channels": 1,
"frequency": 44100
},
{
"sound": "Notify",
"clip": "Assets/Bundles/Sound/SFX/UI/Ui_Notify.wav",
"seconds": 0.52,
"channels": 2,
"channels": 1,
"frequency": 44100
}
],
"bundleBuilt": false,
"verifiedUtc": "2026-10-21T01:21:08.0054518Z"
"verifiedUtc": "2026-11-03T12:14:42.1569866Z"
}
+21
View File
@@ -2,6 +2,10 @@
所有生成资源须按类型登记到对应文件。每条包含:路径、简要说明(用途、生成方式等)。未登记视为流程未完成。
新场景组件(含独立地表)默认采用 [Studio 场景模型流程](Design/Scene/SceneModelProduction.md):分件图 → 混元 50k → Studio 低模 → Studio UV → Blender 烘焙 → 超目标 30% 时保留 UV 减面。TownSquare 测试内容已删除;HomeCamp 使用的路灯/长椅迁入 `Assets/Bundles/Scenes/Common/`,登记见 Model。
自 2026-10-24 起,新资源统一 **Y-up、底面中心原点、局部 +Z 正面**,见 `Config/Art/ModelConvention.json`。历史登记中的 -Z 记录描述旧资产实际空间,保留兼容,不代表当前默认规范。
敌方角色标准生产与三动作登记要求见 [EnemyCharacterProduction.md](Design/Character/EnemyCharacterProduction.md),配方入口 `Config/Art/EnemyCharacters/{Name}.json`。
| 类型 | 登记文件 | 典型内容 |
@@ -46,3 +50,20 @@
### 2026-10-22 收尾复核
五份技能/UI离线混音试听、浮点母带与技术回执已登记Sound,工具已登记Config;入口 [MixReview/Production.md](Design/Sound/MixReview/Production.md)。潮汐鲸T2已完成Studio低模/UV、400面512²挂件及正式战场验证,全量10/10,见 [TideWhale/T2/Production.md](Design/Character/TideWhale/T2/Production.md);Model/Picture/Animation/Config已补登记。
### 人形小熊 LittleBear(2026-10-26)
已交付3000面/1024贴图/1.2m/局部+Z的人形小熊,固定Mixamo41骨+TokenRig只预测权重、独立Humanoid Prefab及Idle/Walk控制器。设计图、模型、贴图和动作复用分别登记Picture/Model/Animation;来源与专属验收见 [production_receipt.json](Design/Character/LittleBear/production_receipt.json)。总清单有已有曹操Prefab缺失,专属小熊验收通过。
### HomeCamp DGX 静物(2026-11-03)
阔叶树 1999 面与花丛 794 面已按 DGX 图生网格入库并摆进 HomeCamp,登记见 Model/Picture 与 [HomeCamp/Production.md](Design/Scene/HomeCamp/Production.md)。静物未绑骨。
### 2026-11-03 美术资源优化收尾(P0 & P1)
- UI 肖像升级:十只正式伙伴高品质 3D 肖像渲染(覆盖 proto_pet_0..9),更新 UI 图集并修复曹操等 27 角色单元测试清单(PASS subjects=27)。
- 孤立资源清理:安全删除已废弃的旧版 rhino 目录。
- HomeCamp 场景优化:Shader 补全 GPU Instancing,高频道具(灌木/花盆/柏树/栅栏)深度减面,贴图压缩,场景三角面从 53,120 面优化至 44,381 面,重新烘焙完成。
- 音频与着色器收敛(P2):全量 29 条音频资产优化为移动端标准(单发 SFX 强制单声道 + ADPCM,BGM 流式 Vorbis,关闭 3D 冗余计算);通用 XPbr 补齐 Fog 与 Instancing 变体支持。
+46
View File
@@ -225,3 +225,49 @@
- `Tools/output/lmgirl_tpose_studio/rig_mixamo41/Walking_{raw,post,clean,clean_eps,local}_corrected.glb`:五版同修正步态外部预览件;源静态 .blend、绑定 .glb 和旧 Walking_*.glb 未覆盖,旧件用于未修正基线。5 件重导入核验通过,见 `gait_export_manifest.json` / `gait_export_verification.json`。
- `AIClient/AgentScripts/VerifyLmGirlGait.cs`:32 原帧目标姿态误差最大约 0.00000048m,120Hz 扫描四版共 500 个样本未发现脚踝跨线;网站最小间距约 0.0863m,TokenRig 各版约 0.0959m(原尺度)。腿段长度漂移小于 0.00000051m。修正动作上 192 次原生蒙皮采样也与独立 LBS 参考通过;局部约束版最大有效边拉伸仍约 1.903。回执 `unity_gait_verification.json`。
- 本轮修复落脚宽度/交叉,不含地面接触锁定或零滑步求解。局部约束版原尺度脚底最低点约 -14.5~13.8mm;原生源 Walking 与未修正参考数据仍保存。`summary.json` 已区分 baseline 与 active 指标,不再声称女孩行走直接采样未变的同一动画资产。
### Mixamo Walking 在 Unity 中的 Avatar 参考姿势修复(2026-10-24)
- `AIClient/Assets/Bundles/Characters/Human/Common/Walking.fbx`:经 Unity Pipeline 将 Rig 的 Avatar Definition 从 Create From This Model 改为 Copy From Other Avatar,Source 使用当前网站绑定模型 `test/Boy_mixamo/CampGuideStudio.fbx` 的 CampGuideStudioAvatar;保持 Humanoid、原循环/根位移及控制器引用。未更改原始 FBX 字节、网格、权重或动画曲线源。原 source Avatar 自动参考姿势与模型不同,引入脚部方向异常。
- `AIClient/Assets/Review/CharacterAnimationLab/PlaybackDiagnostics/Walking_{Generic,CopyBoyAvatar}.fbx`:Pipeline CopyAsset 生成的隔离诊断副本。Generic 使用无 Avatar、无压缩的原骨骼曲线作为直接 FBX 参考;CopyBoyAvatar 验证模型 Avatar 共享后效果,均不接入正式控制器/业务场景。
- 32帧、30Hz、相对骨盆的对比:原 Humanoid 脚部方向最大偏差34.018°,脚踝位置偏差6.423cm,最大关节点偏差10.723cm;修复后分别2.785°/1.028cm/2.105cm。Generic 对独立 Blender FBX 轨迹误差小于0.242mm,脚部方向误差小于0.00012°。保留标准 Humanoid 重定向的小偏差,未宣称逐帧完全等同网站。
### 男女角色共享 Walking 的 Foot IK 修复(2026-10-25)
- 经 Unity Pipeline 将 `AIClient/Assets/Bundles/Characters/Human/Common/Man.controller` 的 walk 状态 Foot IK 开启;两角色继续使用同一 `Common/Walking.fbx`,动画 Source Avatar 保持男孩,两实例各自使用自己的 Avatar。没有新增动画曲线或修改模型权重、参考姿势、FBX、导入器。本条更新此前 Foot IK 关闭的历史记录。
- 隔离 Animator 一周期120Hz、每角色125个样本:女孩关闭 Foot IK 时脚踝有向间距 -3.522~1.805cm,106个样本交叉;开启后10.049~14.024cm,0交叉。男孩开启前后约8.6~11.4cm,均0交叉。生产控制器实际采样复核通过,见 `Tools/output/lmgirl_tpose_studio/shared_walk_audit/validation.json`。未把脚踝间距等同鞋面无碰撞或地面零滑步保证;未比较不存在的女孩专属网站Walking文件。
### 人形小熊 LittleBear Idle/Walk(2026-10-26)
- `AIClient/Assets/Bundles/Characters/Human/LittleBear/LittleBear.controller`:独立Humanoid控制器,`Motion` Int 0=Idle、1=Walk,双向过渡0.15秒,两状态Foot IK开启。`LittleBear.prefab` 使用自己的有效 `LittleBear_RiggedAvatar`,Root Motion关闭。
- Idle直接复用 `Common/CampGuideStudio@Breathing Idle.fbx`;Walk直接复用 `Common/Walking.fbx`,原动画与源Avatar保持不变。蒙皮FBX仅含绑定姿态,不内嵌动作,不生成新动作曲线。
- `Tools/output/littlebear_studio/review/unity_validation.json`:两状态各125个归一化相位采样,脚踝交叉0;Walking间距8.28~10.98cm,最大有效边拉伸2.178倍(裆部平滑前3.254倍),Idle最大1.928倍;Motion参数往返切换通过。Walking脚底最低点范围-1.20~2.41cm,尚不承诺零滑步;验证为Editor隔离Animator,不是Play Mode整场验证。
- 总来源与复现见 `Doc/Design/Character/LittleBear/production_receipt.json`;专属验收场景 `Assets/Bundles/Scenes/Review/LittleBearReview.unity`。
### XBot 通用 Humanoid Controller(2026-10-26)
- `AIClient/Assets/Bundles/Characters/Human/Common/XBot.controller`:通过 Unity Pipeline 执行 `AIClient/AgentScripts/BuildXBotController.cs` 生成。单层四状态:默认 `Idle`、`Walk`、`Attack01`、`Attack02`。`Motion` 为 Int,0(及非1值)=Idle,1=Walk;双向过渡0.15秒。`Attack01`、`Attack02` 为 Trigger,从 Any State 以0.1秒过渡触发对应攻击,禁止同状态自身重入;其他攻击Trigger可打断当前攻击。攻击到归一化时间0.95后,以0.15秒过渡按当前Motion返回Idle或Walk。
- `AIClient/Assets/Bundles/Characters/Human/Common/AnimX/X Bot@BreathingIdle.fbx`:用户提供的无网格65骨Mixamo待机源,导入剪辑名 `Idle`,30fps、3.300秒、循环。
- `AIClient/Assets/Bundles/Characters/Human/Common/AnimX/X Bot@Walking.fbx`:用户提供的无网格65骨Mixamo行走源,导入剪辑名 `Walk`,30fps、0.967秒、循环。
- `AIClient/Assets/Bundles/Characters/Human/Common/AnimX/X Bot@atk01.fbx` 与 `X Bot@Atk02.fbx`:用户提供的无网格65骨Mixamo攻击源,导入剪辑名分别为 `Attack01`/`Attack02`,30fps、3.500/4.933秒、不循环;未裁切原动作。
- 上述四段FBX经Pipeline导入为Humanoid,骨名及骨骼父子层级均与XBot完全一致(忽略非骨骼外层节点名称)。`Common/XBot.fbx` 经Pipeline配置为Humanoid、Create From This Model;动作使用Copy From Other Avatar并引用其有效XBotAvatar,避免从动作姿态生成参考Avatar。原始FBX字节不修改。
- 使用:角色Animator的Controller指定 `XBot.controller`,Avatar指定角色自己的有效Humanoid Avatar,关闭Apply Root Motion。调用 `animator.SetInteger("Motion", 1/0)` 切换行走/待机,`animator.SetTrigger("Attack01")` 或 `SetTrigger("Attack02")` 触发攻击。四动作均将根旋转、Y、XZ烘焙进姿态,角色位移由业务驱动;Idle/Walk开启Foot IK。其他人形角色可共用Controller,但须使用自身Avatar并另行验收;本轮未配置或验证YBot。
- 验证回执 `Tools/output/common_bot_controller/validation.json`:XBot有效Humanoid Avatar、65骨;四状态各25个相位的骨骼姿态采样通过(100次),6条待机/行走/攻击往返路径通过。验证在Editor隔离Preview Scene执行,不修改当前场景;未进行Play Mode整场或零滑步/穿插的视觉验收。生成脚本拒绝覆盖已有Controller;仅重新检查可运行 `BuildXBotController.Verify`。
### YBot 通用 Humanoid Controller(2026-10-26)
- `AIClient/Assets/Bundles/Characters/Human/Common/YBot.controller`:通过 Unity Pipeline 执行 `AIClient/AgentScripts/BuildYBotController.cs` 生成,引用AnimY的四段动作。沿用XBot参数约定:默认 `Idle`,`Motion` Int 0(及非1值)=Idle、1=Walk;`Attack01`/`Attack02` Trigger触发对应攻击。Idle/Walk循环并开启Foot IK,攻击不循环;待机行走过渡0.15秒,Any State进入攻击0.1秒,禁止同状态自身重入,其他攻击Trigger可打断当前攻击。攻击到归一化时间0.95后,以0.15秒过渡按当前Motion返回Idle或Walk。
- `AIClient/Assets/Bundles/Characters/Human/Common/AnimY/Y Bot@BreathingIdle.fbx`:用户提供的无网格65骨Mixamo待机源,Humanoid剪辑 `Idle`,30fps、9.933秒、循环。
- `AIClient/Assets/Bundles/Characters/Human/Common/AnimY/Y Bot@Walking.fbx`:用户提供的无网格65骨Mixamo行走源,Humanoid剪辑 `Walk`,30fps、1.033秒、循环。
- `AIClient/Assets/Bundles/Characters/Human/Common/AnimY/Y Bot@Atk01.fbx` 与 `Y Bot@atk02.fbx`:用户提供的无网格65骨Mixamo攻击源,Humanoid剪辑 `Attack01`/`Attack02`,30fps、2.333/1.867秒、不循环;保留完整原动作。
- 四段源骨名及骨骼父子层级与YBot完全一致(忽略非骨骼外层节点名称)。`Common/YBot.fbx` 经Pipeline配置为Humanoid、Create From This Model;四动作经Pipeline配置为Copy From Other Avatar,使用有效YBotAvatar。原始FBX字节不修改,根旋转、Y、XZ烘焙进姿态。使用时角色Animator指定本Controller与角色自身有效Humanoid Avatar,关闭Apply Root Motion,业务负责角色位移;其他角色共用需分别验收。
- 验证回执 `Tools/output/common_ybot_controller/validation.json`:YBot有效Humanoid Avatar、65骨,四动作共100次相位采样通过,待机/行走及两种攻击往返共6条路径通过。Editor隔离Preview Scene验证,不改当前场景;尚未进行Play Mode整场及接地/穿插视觉验收。生成入口 `BuildYBotController.Build` 拒绝覆盖已有Controller,重验入口 `BuildYBotController.Verify`。
### Bot 动作测试与25/41骨共享控制器(2026-10-26)
- 当前测试入口切换到 `AIClient/Assets/Review/BotAnimationLab/BotAnimationLab.unity`,菜单 `Tools/Characters/Open Animation Comparison` 或 `Open Bot Animation Lab`。旧CharacterAnimationLab/LmGirl场景保留。四角色2×2预览:XBot、YBot、XBot25、XBot41;XBot三种骨架引用同一个 `Common/XBot.controller`,YBot引用 `Common/YBot.controller`,直接播放既有AnimX/AnimY动作,没有复制或新烘焙动作。
- `Common/XBot25.fbx`、`Common/XBot41.fbx` 通过Pipeline设置 `Animation Type=Humanoid`、`Avatar Definition=Create From This Model`,各自生成有效 `XBot25Avatar`/`XBot41Avatar`。Prefab中的Animator分别使用自身Avatar、共用XBot.controller、关闭Apply Root Motion。源AnimX仍Copy From Other Avatar引用65骨XBotAvatar,不改成精简角色Avatar。
- 共享依靠Humanoid重定向:角色只需满足有效人形映射,不要求目标也有65骨,不应把65骨Avatar直接指定给不同骨架。25骨版保留完整身体/手腕,无手指链;41骨版额外保留左右拇指/食指链,各自缺少的独立手指动作无法还原。四模型骨名、映射和有效性见 `Tools/output/bot_animation_lab/avatar_configuration.json`。
- 复用成品:`AIClient/Assets/Bundles/Characters/Human/Common/Prefabs/{XBot,YBot,XBot25,XBot41}.prefab`。精简源模型约为XBot的1/100尺度,两个Prefab根均匀缩放约99.3倍,使休息姿态高度约1.896m;未改FBX源字节、蒙皮、骨轴或模型导入globalScale。测试场景进一步统一展示高度1.6m,方便观察。
- `AIClient/Assets/Review/CharacterAnimationLab/{BotAnimationLab,BotAnimationSeekBar}.cs` 控制已有Animator与UI,支持待机/行走/两攻击、播放暂停、前后逐帧、拖动进度、0.25/0.5/1/2倍速、单次/循环攻击、正侧背视图、彩色/灰模、四角色聚焦与全身/上身/手部。运行时不创建角色、动画、材质或业务UI。正常播放走Controller参数/Trigger及真实过渡;Seek按各自动作的同归一化相位定位,X/Y动作时长不同,正常播放与前进一帧按实际秒推进。
- UI为 `Doc/UIPrefabCreater/UI_BotAnimationLab.json` → `AIClient/Assets/Bundles/UI/Prefab/UI_BotAnimationLab.prefab`,1080×1920,复用既有九宫格Sprite。构建/配置/验证入口 `AIClient/AgentScripts/BuildBotAnimationLab.cs`,分别为 `Build`/`Configure`/`Verify`/`Controls`;构建拒绝覆盖任何当前未保存的场景内容。
- `Tools/output/bot_animation_lab/playback_validation.json`:四角色四动作各25相位,共400次Animator姿态和BakeMesh有限值检查;每角色6条待机/行走/攻击往返路径,共24条通过。`play_controls.json`:Play Mode下23个真实UI按钮及进度指针、前后逐帧、速度、聚焦、材质、视角、循环攻击检查通过。已目视复核四版行走和攻击截图;不等同零滑步、全动作无穿插或缺失手指自由度的保证。
+47 -2
View File
@@ -336,7 +336,7 @@
## 銝餌��Y宏�函垢�曄內銝𤾸��典躹靽桀�嚗�2026-10-22嚗�
- `AIClient/Assets/HotUpdate/Scripts/Gameplay/GameplayBootstrap.cs`嚗𡁜�甇W鍳�冽𧒄�芸𢆡�𥕦遣 TownSquareSpawner嚗𠸖haracterSpawner嚗䔶��㰘蝸 TownSquare嚗𠸖aoCao嚗𥕦�韏���𦠜��堒㦤�舀����亙藁靽萘���
- `AIClient/Assets/HotUpdate/Scripts/Gameplay/GameplayBootstrap.cs`嚗𡁜�甇W鍳�冽𧒄�芸𢆡�𥕦遣憸��銝𣇉�嚗𠸖haracterSpawner嚗䔶��㰘蝸瘚贝��箸艶嚗𠸖aoCao嚗𥟇��堒㦤�舀����亙藁靽萘���
- `AIClient/Assets/Bundles/UI/Material/HomeExplorerCutout.mat`嚗䥪ipeline �𥕦遣����脤�閫��摨閙�韐剁�`UI_MainHUD.json` �朞��唳𣈲��� RawImage.material �曉�撘閧鍂嚗玺hader �� Prefab 靘肽��枏�嚗屸��滩�銵峕𧒄 Shader.Find �曆��啣紡�湔楛�脩畆敶U��omeExplorerPresenter �鞱��芸停蝏迎��䭾��鞱捶憸��撟園��� RT嚗愢ainHudView 靽萘��a埯摰嗉䌊撌梁��孵稬蝏穃���
- `AIClient/Assets/AOT/Scripts/UI/UiSafeArea.cs`��Assets/Plugins/WebGL/UiSafeArea.jslib`��Assets/AOT/link.xml`嚗朞挽憭���典躹嚗见凝靽∠�����典躹嚗讛��𦠜��桀�颲寥���嚗峕��餉��讐�敶雴��吔�250ms 蝻枏�嚗𥕦��峕艶�典�嚗��撅��厰��寥�霈拚▲�剁�摨閖����隞嗥� JSON ��� Prefab嚗�僎�祉�靽萘��踹� AOT 鋆����
- `JsonUIPrefabBuilder.cs`嚗𡁜��� RawImage.material嚗𥕢耨甇�蕭�� assets.sprites �曉�頝臬���䔮憸矋�憯唳�韏��蝻箏仃�仿���蜓�屸𢒰�峕艶�峕郊�啁緵�� `Assets/Bundles/UI/Bg/home_camp.png`嚗峕𧊋�W��批㦛��𤌍敶蓥�����舀�隞嗚��
@@ -409,4 +409,49 @@
- `Tools/model_tools/bl_decimate.py`嚗𡁜��� `export_fbx_source_yup` v2 �其葩�嗅��祆�銵����蓮�W僎�条�撖澆枂嚗𥕢��蹱��牐���V����U���蝘啣��㗇𥋘��validate_fbx_yup_scene` �⊿� +Y �箸艶憯唳�銝舘��寞�頧穿�蝻拇𦆮嚗峕�蝏嘥��� -90簞 �贝蓮��辣��
- `Tools/model_tools/bl_prepare_studio_trial.py` 撠� `fbxAxes.exportVersion` �坔��墧�嚗𢱌Tools/lmgirl_tpose_mesh.py` �厩��砍ế摰𡁏糓�血��� FBX 蝻枏�嚗峕�蝏� mesh_receipt �峕𧒄��鉄頧游�撉峕𤣰��迨甈⊥𧊋摰鮋��滩�閬����蟮�桀���
- `Tools/model_tools/tests/bl_test_fbx_axes.py` �� `axis_pipeline_audit/regression/{results.json,run.log}`嚗�7 銝� Blender �𧼮�憿寥�朞�嚗�舅銝芾��脯���憭滩蓮�V舅甈~����脰��乓��仃韐交������霂舀�隞嗆�蝏嘅�嚗�4 銝芰緵�㗇聢撘誩�瘚见� 5 銝芾��祈祗瘜閙��仿�朞���仃韐交���★��紡�粹�霂臭蛹銝餃𢆡���𨬭���摰� static�𣜿Pbr ����墧� `axis_pipeline_audit/production/static_export.json` 撌脤�朞�嚗𥟇𧊋餈𥡝� Mixamo 蝵𤑳�銝𠹺���
- `Tools/model_tools/README.md` 銝� `GameResProductProc.md` 撌脰‘摰峕㟲�箸艶頧游�撉峕𤣰閬��嚗屸俈甇V�璉��仿▲�� Y-up �舘秤�斗��麄��
- `Tools/model_tools/README.md` 銝� `GameResProductProc.md` 撌脰‘摰峕㟲�箸艶頧游�撉峕𤣰閬��嚗屸俈甇V�璉��仿▲�� Y-up �舘秤�斗��麄��
### LmGirl �蠘楝敺���啣紡�箏��改�2026-10-24嚗�
- 撌脣����銵� `bl_prepare_studio_trial.py` 閬���� static FBX嚗峕凒�� `static_export.json` 銝� `mesh_receipt.json` �� fbxAxes嚗莅HA256��axis_pipeline_audit/stages.json` �啣� Current static FBX嚗���渲��孵��W��嘥�撉峕𤣰�朞�嚗峕𠯫敹� `axis_pipeline_audit/stages.log`��
- �鞾𧫴畾菜瓲�乓��BX �𧼮��峕唂���隡牐耨憭滩��祆㺿銝箔���粉�� `axis_pipeline_audit/legacy/LmGirlTpose.fbx`嚗𣬚&靽嗪��啁��𣂼���蟮�躰秤隞滚虾憭滨緵嚗䔶��𠰴歇靽格迤�蠘楝敺�秤敶㮖��扯��乓��
### Mixamo LmGirl �鞱捶嚗𦶥V �芾粉霂𦠜鱏嚗�2026-10-24嚗�
- `Tools/model_tools/bl_inspect_lmgirl_materials.py` �� `Tools/output/lmgirl_tpose_studio/material_audit/fbx_materials.json`嚗𡁏� static 銝𡒊�蝡躰��� FBX �賣� UVMap嚗�14997 �Z�嚗屸◇摨� UV 摮𡑒� hash ��蛹 `6359447fc86be05dacaeab6661341633e97c5b84643681fcf5449b190668dff4`嚗��憪� FBX ��� Material嚗䔋exture嚗莬ideo 撖寡情���隡惩� bl_prepare_studio_trial.py 撌脫�蝛箸�韐冽局嚗𣬚�蝡躰��墧𧊋銝W仃 UV��
- `AIClient/AgentScripts/InspectLmGirlMaterials.cs` �� �𣬚𤌍敶� `unity_materials.json`嚗𡁶� Unity Pipeline �芾粉�詨笆 FBX��irl.prefab 銝𤾸㦤�臬�靘页�UV0 ����剁���蝙�� URP 暺䁅恕 Lit �鞱捶嚗諹斐�曉��其蛹蝛箝��歇�詨笆�臬��函�閫���箸艶 LmGirlTextured.mat嚗𥟇𧋦甈⊥𧊋靽格㺿 FBX���韐具��refab �硋㦤�胯��
### Studio �蹱��紡�箏��游��a�霂���瑕酋�墧�嚗�2026-10-24嚗�
- `Tools/model_tools/bl_verify_studio_static.py`嚗𡁜��唬蛹颲枏枂��辣憭嫣�閫坿𠧧�㵪��冽��� Blender 暺䁅恕撖澆��詨笆��蝏� FBX 銝� model_ex.glb ����港����雿𨰻���摨訫��嫘��V��𢒰�啣�����䀹揢����瑕酋�墧� `Tools/output/campguide_studio/axis_pipeline_audit/verification.json`嚗𥕦�餈娍�憭找�蝵株秤撌� 0.000000086m嚗峕��㗇鱏閮��朞���
- `Tools/output/campguide_studio/{static_export,mesh_receipt}.json` 撌脫凒�啣紡�箇��砌�頧游�靽⊥�嚗龧esh_receipt �峕郊霈啣� FBX 頝臬�銝� SHA256��
### 擃䀹芋嚗𤩺�蝏� FBX 閫��甇�𢒰�豢䰻嚗�2026-10-24嚗�
- `Tools/model_tools/bl_render_static_front.py`嚗𡁻�霈文紡�亙��� FBX嚗𣲵lTF �箸艶嚗䔶誑 +Z 銝� -Z 銝支儒甇�漱�豢㦤皜脫��瑕酋��戊摮拍�擃䀹芋�峕�蝏����芋�页�靽萘�撋��擃䀹芋韐游㦛嚗屸���芋�衤蝙�冽𠳿�� color �橘�隞�銁 Blender ���銝剔�摰𡁜恣�交�韐具��𧊋靽格㺿皞鞱�皞僐��
- `Tools/output/character_front_audit/comparison.json` 銝� `Tools/output/character_front_render.log` 霈啣�皞鞾�璅∪�撣��閫�㦛��歇鈭箏極璉��亙虾閫���剁��屸�嚗𣬚&霈文��漤��� FBX 瘝輻鍂�曇悖擃䀹芋 +Z 甇�𢒰��ameResProductProc.md 銝� prepare_game_export 瘜券�撌脫�蝖桀���蓬撖澆枂��㺭銝滨�鈭舘圾�𡝗迤�a��嗚��
### 憿寧𤌍甇�𢒰蝥血��嫣蛹 +Z嚗�2026-10-24嚗�
- �厩鍂�瑟�蝷綽�`AGENTS.md`��.cursor/rules/aigame-basics.mdc` �� `GameResProductProc.md` 蝏煺��啗�皞� Y-up嚗誩��V葉敹��撅��� +Z 甇�𢒰嚗𥟇鰵�滨蔭 `Config/Art/ModelConvention.json` 霈啣� up嚗葊orward嚗誩��對�蝐喳��𦠜唂韏�漣�澆捆蝑𣇉裦����脯���鈭箝����賢��箸艶�嗡�瘚��撌脣�甇伐���蟮韏��鈭见�靽萘��笔�潦��
- `AIClient/AgentScripts/AuditCharacterVisual.cs` ��迤�Y㮾�粹�霈� +Z嚗䈣forwardZ=-1` �曉��澆捆�找辣嚗𥕢舅銝� CampGuide ��蟮�亙藁靽萘� -1��Tools/enemy_static_pipeline.py` 暺䁅恕 +Z嚗�僎�舀� `--forward-z=-1`�������扳�蝖株�瘙�犖撌交䰻�贝��剁��𡁜�嚗䔶��齿�皜脫��扯�敶㮖�甇�𢒰�芸𢆡�朞���
- `BuildCharacterReview.cs` �� subject �� `localForward` 暺䁅恕 +Z嚗峕䲮�烐�霈啣�颲寧�璉��交𣈲�� 簣Z嚗𢱌Doc/Design/Character/character_unit_review_manifest.json` ��25銝芣𠳿�� subject �曉�憯唳� -Z嚗䔶���唂韏���峕唂�箸艶�豢㦤���璉��交��𤏸圾�琜�銝漤�撱箏㦤�荔�����閧� CaoCao.prefab 蝻箏仃撅硺��W�韏��撘閧鍂嚗���渲�皞鞾��嗆𧊋憯啁妍�朞���
- `Config/Combat/skill_presentations_v1.proposal.json` 銝� `Tools/validate_skill_design.py` ��鰵�嗡��讛悅�峕郊 +Z嚗䔶��� design_only嚗蓤untimeEnabled=false��緵�㗇��箇��扳��嫣���蟮 HomeExplorer 頧砍�銵亙��芣㺿�矋�BuildModelView 瘜券��𡒊&摰���⊥唂 -Z 韏�漣��
- `Tools/model_tools/bl_verify_studio_static.py` 霂餃��唳����靘脲旿銝𤾸��� FBX SHA256 �寥���犖撌交��𤏸扇敶訫‵�� project_front_conforms嚗峕𧊋�交𧒄閬��銵亥�閫㗇��乓��琸摮抬�憟喳酋銝支遢�蹱��紡�箏� mesh_receipt �啣銁��蛹 anatomicalFront=+Z��rojectForward=+Z��rojectFrontConforms=true嚗拃BX ���銝滚���
- 撉諹�嚗䦧nity Pipeline 銝支葵�孵�璉��亙����朞�嚗諹��脫���25憿寞��𤏸圾�鞾�朞�嚗�4銝芣聢撘誩�瘚卝��ython霂剜���25憿寞��質挽霈∪�霈柴��鰵����滨蔭���閫坿𠧧�蹱����啣紡�仿�朞������ `Tools/output/character_front_audit/{project_convention_validation,skill_design_plus_z}.json`嚗峕𠯫敹� `{boy,girl}_plus_z_verification.log`��𧊋�贝蓮璅∪���耨�寥爸�塚��函𤫇�碶�摮条鍂�瑕㦤�胯��
### Unity嚗𦬅ixamo �剜𦆮撌桀�霂𦠜鱏嚗�2026-10-24嚗�
- `AIClient/AgentScripts/DiagnoseMixamoPlayback.cs`嚗𡁜蘨霂駁�����滚紡�亙膥��爸�惩������尿�選��朞� Pipeline �券�蝳餃��穿�PreviewScene 銝凋誑�见𢆡 PlayableGraph ��甅嚗峕�颲��憪� Generic��� Humanoid��芋�� Avatar �曹澈銝厩�頝臬���� FixWalking 靽格㺿�煺漣 Walking 撖澆��剁��芾��典�撅� SaveAssets �碶�摮条鍂�瑕㦤�胯��
- `Tools/model_tools/bl_audit_mixamo_playback.py` 撖澆枂銝滨� Humanoid ���憪� FBX 隡烐�憪踹飵��32撣批���膘餈對�`summarize_mixamo_playback.py` 隞亦𡠺蝡贝蓬頧祆揢撉諹� Generic ����僎瘙��餉�摨佗�雿滨蔭霂臬榆����� `Tools/output/campguide_studio/playback_audit/{importers,fbx_reference,comparison,summary,fix,validation,walking_importer_before}.json`嚗𢱌before_{comparison,summary}.json` 靽萘�靽桀��滚笆瘥𢛵��
- 敶枏� Man.controller �� walk 隞滚��� Common/Walking.fbx嚗𤅎oot IK �喲𡡒嚗𣬚琸摮拐�憟喳酋銝文�靘𧢲�蝏穃�霅血�嚗𥕦��滚㦤�舀𧊋憭��Play嚗𣬚鍂�瑕� isDirty=true �嗆����踺���憪� FBX SHA256 `e0bd467fbd99aa77437921cf80e26d9615b5eebf83c7909c5805dace49bb5695`嚗𥕢�撖澆�霈曄蔭�孵���唂 Breathing Idle嚗艻appy Idle �其��芣毽�典��齿鰵撉冽沲�� Source Avatar��
### �瑕戊閫坿𠧧�曹澈 Humanoid Walking 霂𦠜鱏嚗�2026-10-25嚗�
- `AIClient/AgentScripts/DiagnoseSharedHumanoidWalk.cs`嚗䥪ipeline �𠉛氖憸���㗇�Avatar����尿�選���甅�曹澈Walking��oot IK撘��喉�撟園�朞��祆��nimator�嗆���霂���ixFootIK隞��摮媂an.controller/walk��oot IK���嚗峕�蝏苷�摮䀹迨�滚歇�讐��批��剁�VerifyApplied�典����鈭扳綉�嗅膥憭齿瓲��鍂�瑕㦤�臬�isDirty=true�嗆����踺��
- `Tools/output/lmgirl_tpose_studio/shared_walk_audit/{avatars,baseline,controller_verification,fix,validation}.json` 銝� README.md嚗𡁏芋�见���尿�踴��125�孵𢆡雿𣈯��瑯����喳��𤾸笆瘥𢛵����睲耨�孵��批��煺漣�批��典��賂��券�𥪯蛹�曹澈�其�鈭文��桅�����剖�憭滨緵嚗䔶��舀鰵皜豢�韏���硋戊摮拍�蝡坔𢆡�颯��
### 憟喳酋 TokenRig GLB 撖澆枂撟嗅紡�� Unity FBX嚗�2026-10-25嚗�
- `Tools/model_tools/bl_export_lmgirl_tokenrig_fbx.py`嚗帋��匧�local.glb撖澆枂41撉沙BX嚗�龪�滚��滚歇撉峕𤣰�蹱��芋摰峕㟲�牐�蝖株恕�嘥�嚗���典��孵�銝哨�隞𤾸�UV韐游㦛���䭾�韐典僎撋��嚗𤤿𡠺蝡𢱕BX�齿鰵撖澆��詨笆�牐����蝥扼����溻��V���GLB靽脲�銝滚���
- `AIClient/AgentScripts/ImportLmGirlTokenRigFbx.cs`嚗䦧nity Pipeline摰𡁜�撖澆��祉�girl_tokenrig�桀�嚗��撱旗Pbr�鞱捶��斐�曉��砌��芾澈Humanoid Avatar嚗𥕦銁PreviewScene雿輻鍂摰鮋�Man.controller撉諹��曹澈Walking��125��甅銝擧⏛�整����典��砍�摰嫣�銝��湔𧒄�垍�閬��嚗𥕢�靽格㺿�碶�摮条鍂�瑕㦤�胯��
- 颲枏枂霂湔�����改�`Tools/output/lmgirl_tpose_studio/rig_mixamo41/fbx/README.md`��export_verification.json`��unity_validation.json`��
## �箸艶�煺漣暺䁅恕瘚��銝擧�霂閙����2026-10-26嚗�
- `Tools/scene_component_pipeline.py`嚗帋� HomeCamp 摰噼��曇楝�𣂼����銝��蹱��㦤�臬����霂餃� manifest嚗峕�銵� Studio 雿擧芋/UV��lender �条��𡃏� 130% �嗡��� UV �誯𢒰嚗𥟇𣈲��蘨霂� `--dry-run`嚗峵omeCamp �笔�����坔�摰孵�鋆���
- `Doc/Design/Scene/SceneModelProduction.md`��.cursor/rules/aigame-basics.mdc`����� manifest 銝𡒊��埝�蝷箏�甇仿�霈斗�蝔页���蟮璅∪��交��墧�銝齿㺿�踺��
- TownSquare 瘚贝��箸艶��挽霈∪㦛��葉�港辣���撅𧼮�雿�/璉���/�㰘蝸�𡁏𧋦銝擧𤣰�����歇�𣳇膄��omeCamp 雿輻鍂��楝�臬��踵�蝏� Pipeline 蝘餃� `Assets/Bundles/Scenes/Common/{lamp,bench}/`嚗灷UID �𣬚緵�匧㦤�臬��其�����
- Art package refresh completed (2026-10-26): after explicit user approval, saved LmGirlAnimationLab.unity through Unity Pipeline and rebuilt configured Art. Resource version `ed2f1ad97b67ca77f0681ec1b1e96bf8`; 270 bundles, 53095474 bytes. StreamingAssets and local CDN bundle SHA256 values match the build, manifest MD5 and all version pointers match; current package manifests, report and filenames contain no TownSquare. No new Console errors during this build. Receipt: `Tools/output/scene_cleanup/art_refresh_receipt.json`; entry: `AIClient/AgentScripts/RefreshSceneArt.cs`. Historical Art version archives remain preserved.
+131 -14
View File
@@ -9,18 +9,6 @@
| 资源路径 | 简要说明 |
| --- | --- |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/TownSquare.prefab` | 小镇广场拼装体;Pipeline `BuildTownSquare.Run`;运行时地址 `TownSquare`;物件 Y 取地表碰撞高度 |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/TownSquare.unity` | 可进游戏的广场场景(相机约 28° 俯斜 + 方向光) |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/ground/` | 广场地表;减面 800;XPbr;Prefab 带非凸 MeshCollider |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/shop/` | 红顶店铺;减面 1797;XPbr |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/tree/` | 树;减面 1498;XPbr |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/lamp/` | 路灯;减面 500;XPbr |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/board/` | 告示牌;减面 800;XPbr |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/fountain/` | 两层喷泉;减面 1798;XPbr |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/bench/` | 长椅;减面 699;XPbr |
| `AIClient/Assets/Bundles/Scenes/Town/TownSquare/bush/` | 灌木花箱;collapse 卡住后体素重网格,减面 436;XPbr |
| `Tools/output/townsquare_3d/` | TownSquare 混元高模 GLB(不进 Bundle) |
| `Tools/output/townsquare_game/` | TownSquare 减面/烘焙中间输出(不进 Bundle) |
| `Tools/output/caocao_3d/caocao.glb` | 曹操混元高模(约 5 万面,不进 Bundle) |
| `Tools/output/caocao_game/` | 曹操减面/烘焙/XPbr 中间输出(不进 Bundle) |
| `AIClient/Assets/Bundles/Characters/Human/CaoCao/` | 人物 CaoCao;Pipeline `SetupCharacter.SetupCaoCao`;运行时地址 `CaoCao` |
@@ -450,10 +438,45 @@ Kimodo 动作的休息姿势。从 Kimodo 行走 BVH 的 OFFSET 取出,单位
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/ground/` | 8303面Studio地表;预算调整后在130%容差内跳过末级减面,表面仍未通过目视,只保留审核,未用于交付场景。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/GroundSurface.asset` / `GroundSurface.prefab` | 五步后的编辑收尾:Pipeline制作并持久化2三角面连续地表,36×42m、非凸MeshCollider;正俯视地表贴图另绘,非原Studio UV。25/25地表射线通过。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/{backdrop,tree_card,flower_card}.{png,mat}` | 湖泊/瀑布/城堡远景与透明树木/花边图片面片,Pipeline导入和保存;Unlit、无碰撞、不投影。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.prefab` / `HomeCamp.unity` | Pipeline持久化独立场景与总Prefab,31处布局;实际拼装9987三角面。复用旧TownSquare路灯/长椅;旧树/灌木因黑斑未使用。未加入Build Settings,尚未接入首页或真机性能验收。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.prefab` / `HomeCamp.unity` | Pipeline持久化独立场景与总Prefab,31处布局;实际拼装9987三角面。复用Common路灯/长椅;旧树/灌木因黑斑未使用。未加入Build Settings,尚未接入首页或真机性能验收。 |
工具:`Tools/homecamp_model_pipeline.py`、`Tools/model_tools/bl_decimate_homecamp_uv.py`、`bl_repair_homecamp_surface.py`、`AIClient/AgentScripts/BuildHomeCamp.cs`。中间件 `Tools/output/homecamp_studio/{ground,mainhouse,cottage,fountain}/`;验证 `Tools/output/homecamp_review/verification.txt`。与源模型同名的`.meta`/材质由Unity生成,无手写Unity序列化资源。
### HomeCamp v2 美术精修(2026-10-28)
按 `Doc/Design/Scene/SceneReviewGeneration.md` 阶段 5 重做光照与材质,未新增模型分件。全部由 `BuildHomeCamp.BuildLookDev` → `Build` → `Bake` 经 Unity Pipeline 生成,参数见 manifest `lookDev`。技术验收 TECH PASS,美术六轴评分未达标(ART FAIL,见 `qa.artReview`)。
| 路径 | 用途、来源与状态 |
| --- | --- |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/ground_terrain.mat` | 地表材质,使用 XWorld/XTerrain,石板层和草地层由控制图混合,石板 3.2m 重复一次;接收阴影,不投影。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/GroundSurface.asset` / `GroundSurface.prefab` | 更新为 42×42m、2 三角面,加 uv2 供光照图使用;非凸 MeshCollider,地表射线 25/25 通过。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/{tree_card,flower_card}.mat` | 由 Unlit 改为 Simple Lit AlphaClip 0.55,投影并接收阴影。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/HomeCampVolume.asset` | 全局后处理:Neutral 色调映射、曝光 −0.05、对比度/饱和度 +12、色温 +6、Bloom 0.3、暗角 0.18。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/HomeCampLighting.lighting` | 光照烘焙设置:Subtractive、GPU 渐进烘焙、每米 10 texel、最大 1024、非方向性、AO。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp/` | 烘焙产物:LightingData、1 张光照图、反射探针;烘焙 25 秒。喷泉自动生成的第二 UV 有 436 texel 重叠,画面未见瑕疵,记为已知问题。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/review_scale.mat` | 1.6m 灰色比例胶囊用材质,只在审核场景中使用(默认隐藏,不在 Prefab 内)。 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.prefab` / `HomeCamp.unity` | 58 处布局,拼装后 11236 三角面:右侧房屋改为镜像实例,新增 2 棵树、1 盏路灯、1 张长椅,24 处花丛;Mixed 主光、三色环境光、线性雾、全局 Volume,静态物体已烘焙。 |
| `AIClient/Assets/Bundles/Shaders/XShader/{XTerrain,HomeCampXPbr}.shader` | ForwardLit Pass 增加 `#pragma multi_compile_fog` 以支持场景雾;共享 XPbr 未改动。 |
`BuildHomeCamp.cs` 新增 `BuildLookDev`、`Bake`、`Capture`、`BuildProps`、`CaptureProps` 入口,审核图见 `Tools/output/homecamp_review/`。
### HomeCamp v2 B/C 道具(2026-10-28)
用户授权后经混元网页 50k → Studio 低模/UV → Blender 烘焙与条件减面;`BuildHomeCamp.BuildProps` 导入 XPbr Prefab。根节点绕 Y 180° 以适配场景 +Z 正面。三盆 `flowerpots` 组合因减面丢面积放弃,拆为单盆 `flowerpot` 多实例。
| 路径 | 用途与面数 |
| --- | --- |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/fence/` | 木栅栏段,1055 面 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/stall/` | 黄白遮阳水果摊,2500 面 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/flowerpot/` | 单盆陶盆绿植,799 面;场景内约 10 实例成簇 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/rocks/` | 苔藓石堆,600 面 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/steps/` | 石台阶,1198 面 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/cypress/` | 柏树,1500 面 |
| `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/bush/` | 圆灌木(v2 简化叶团),1800 面 |
| `HomeCamp.prefab` / `HomeCamp.unity` | 更新为 87 处布局、47489 三角面;TECH PASS,ART FAIL(材质 3) |
回执 `Tools/output/homecamp_studio/<part>/production.json`;四向审核 `Tools/output/homecamp_review/props_sheet_all.png`。
## Unity 角色动画对比观看场景(2026-10-23)
- 独立场景:`AIClient/Assets/Review/CharacterAnimationLab/CharacterAnimationLab.unity`;整套展示 Prefab:同目录 `Generated/CharacterAnimationLab.prefab`。通过 Unity Pipeline 制作并保存;菜单 `Tools/Characters/Open Animation Comparison` 打开后 Play。未接入首页或修改 Build Settings。
@@ -491,4 +514,98 @@ Kimodo 动作的休息姿势。从 Kimodo 行走 BVH 的 OFFSET 取出,单位
### 五步 Studio 流程的 FBX 收尾回归资源(2026-10-24)
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/production/`:隔离复制最终 `model_ex.glb` 与五通道图,经真实 `bl_prepare_studio_trial.py` → `bl_convert.py` 收尾,得到 `static/LmGirlTpose.fbx`、`xpbr/LmGirlTpose.fbx`。两者 4205 顶点/4999 三角面,完整场景默认重新导入均站立;FBX 节点旋转 0/缩放 1,UV 不变。用于修复验收,未覆盖历史原件及 Unity 已绑定模型。
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/regression/{boy_from_glb,girl_from_glb,girl_repeat_1,girl_repeat_2,girl_from_legacy}.fbx`:共用导出器的双角色、旧版输入和重复转换回归;男孩 3698 顶点、女孩 4205 顶点。原点均为脚底中心、UV 保留、位置往返误差小于 0.00000009m;同目录 results.json 记录验收。
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/regression/{boy_from_glb,girl_from_glb,girl_repeat_1,girl_repeat_2,girl_from_legacy}.fbx`:共用导出器的双角色、旧版输入和重复转换回归;男孩 3698 顶点、女孩 4205 顶点。原点均为脚底中心、UV 保留、位置往返误差小于 0.00000009m;同目录 results.json 记录验收。
### LmGirl 原路径静态 FBX 重新生成(2026-10-24)
- 按用户要求,使用修正后的 v2 导出器从最终 `model_ex.glb` 重新生成并覆盖 `Tools/output/lmgirl_tpose_studio/static/LmGirlTpose.fbx`。4205 顶点/4999 三角面,UV hash `6359447fc86be05dacaeab6661341633e97c5b84643681fcf5449b190668dff4` 不变;场景 Y-up、节点旋转 0/缩放 1。默认重新导入在 Blender Z-up 世界中竖直站立、脚底中心原点误差小于 0.000001m,身高 1.174174m。新 FBX SHA256 `f424d6121f03134272b77b4f1b161889cf7133e8f6e65e7861ba7e916e918193`。
- 旧错误 FBX 与旧导出回执已保存在 `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/legacy/{LmGirlTpose.fbx,static_export.json}`,供历史对照;先前“原件不覆盖”的记录现由本条用户授权的重新生成取代。现有 Unity 绑定模型和 XPbr 目录未修改。
### 小男孩静态 FBX 轴向修正并原路径重导(2026-10-24)
- `Tools/output/campguide_studio/static/CampGuideStudio.fbx`:按用户要求,从最终 model_ex.glb 经共用 v2 导出器重新生成并覆盖。3698 顶点/3000 三角面,UV hash `1556e0235295cd8822f0fc427d88066624efb4493c53c5a715fd2744fb6dc9b8` 保留;Y-up、FBX 节点旋转 0/缩放 1,完整场景默认重新导入为站立,身高 1.1348386m,脚底中心误差小于 0.00000008m。新 FBX SHA256 `3090095ba100ea2ce4bc20ea1cedb81acc7f0c0dd109a9637f09380feda67c6b`。
- 旧 FBX 与导出回执备份在 `Tools/output/campguide_studio/axis_pipeline_audit/legacy/{CampGuideStudio.fbx,static_export.json}`;旧文件被轴向验收拒绝,确认与女孩相同的额外节点旋转问题。此次仅重导静态输入,未修改 Unity 的网站绑定模型、骨架和动画。
### 朝向描述更正:腾讯原高模与当前静态 FBX(2026-10-24)
- 双侧带纹理渲染确认:CampGuideStudio 与 LmGirlTpose 的腾讯原始高模和当前 `Tools/output/{campguide_studio,lmgirl_tpose_studio}/static/*.fbx` 的解剖正面均为 Y-up 场景坐标的 **+Z**,不是此前登记中声称的 -Z。当前 FBX 保留高模朝向,v2 修复的是横躺与额外 X 旋转,没有进行水平 180° 正面校准;项目 -Z 正面验收尚未通过。此条更正此前相关 -Z 表述。
- 原始高模与各 Studio 目录 model.glb 的 SHA256 一致,结论来自高模/最终 FBX 同侧相机的正背面贴图渲染。本轮未旋转或重新写出 FBX。比较回执 `Tools/output/character_front_audit/comparison.json`;两角色 static_export/mesh_receipt 的 fbxAxes 已补 anatomicalFront=+Z、projectFrontConforms=false。
### +Z 项目标准生效(2026-10-24)
- 用户指定项目正面改为局部 +Z。CampGuideStudio 与 LmGirlTpose 当前静态 FBX 的实际 +Z 正面现已符合新约定,无需绕Y翻转;先前“未满足项目-Z”的结论仅适用于旧标准。两份 FBX 文件内容与哈希保持不变。
- 其它历史登记中的 -Z 描述是资产自身旧绑定空间,保留兼容;没有把旧网格、骨架、动作和已有场景批量迁移。当前规则入口 `Config/Art/ModelConvention.json`,验证回执见 `Tools/output/character_front_audit/project_convention_validation.json`。
### 女孩 TokenRig 局部约束版 FBX(2026-10-25)
- `Tools/output/lmgirl_tpose_studio/rig_mixamo41/fbx/LmGirlTokenRig.fbx`:由同目录上级 `lmgirl_local.glb` 导出,41骨、4999三角面、最多4骨影响;保留原GLB层级、网格、UV、局部约束版权重,不使用网站权重、不重新推理。源GLB没有材质,按原UV恢复静态角色color/normal/roughness/metallic并嵌入FBX。导出FBX SHA256为 `39efe941a530f706a3108873364e05f150ba3e0e06444188125d1a9cf2c19ce8`。
- Unity正式导入副本 `AIClient/Assets/Bundles/Characters/Human/test/girl_tokenrig/LmGirlTokenRig.fbx`:Humanoid/Create From This Model,有效LmGirlTokenRigAvatar;Y-up、底面中心、局部+Z正面、米制,导入根旋转0/缩放1。材质同目录 `LmGirlTokenRig.mat`,Test/XPbr,纹理引用本目录独立副本。未覆盖网站girl模型、历史评审资产或用户场景。
- Blender往返4207顶点,Unity因角点法线/UV拆分为4216顶点,三角面4999不变;几何误差<0.000000232m,骨头位置误差<0.000000368m,权重误差<0.000000299,UV和层级保持。实际Man.controller共享Walking、Foot IK开启,125点采样无脚踝交叉,间距9.65~13.30cm。FBX仅绑定静态姿势,不内置动作;角色Animator使用自己的Avatar,Walking仍使用其男孩源Avatar。
- 回执 `Tools/output/lmgirl_tpose_studio/rig_mixamo41/fbx/{export_verification,unity_validation}.json`;此处只验收当前Walking与脚踝排序,不承诺其他动作、鞋面碰撞、接地零滑步。
## 人形小熊 LittleBear 高模(2026-10-26)
- `Tools/output/littlebear_3d/littlebear.glb`:由 `Doc/Design/Character/LittleBear/littlebear_tpose.png` 经混元官网图生3D、50k档生成的原创人形小熊高模,中间件不入正式包。任务 `99750b85df0c4086a96a3fb93e06d81e`。后续走Studio低模/UV、1024²烘焙和固定Mixamo骨架+TokenRig只预测权重;本条只登记已生成高模,不表示蒙皮与Unity验收已完成。
## 人形小熊 LittleBear 完整资源(2026-10-26)
- `AIClient/Assets/Bundles/Characters/Human/LittleBear/`:原创棕色双足人形小熊,3000三角面、1024² XPbr,展示身高1.2m;Y-up、脚底中心原点、局部+Z正面,导入根旋转0/缩放1。`LittleBear.prefab` 为动画角色,`LittleBear_Static.prefab` 为T-pose静态版本;含静态/蒙皮FBX、材质、base/mix贴图、独立控制器与验收地面材质。
- 制作:标准正交T-pose图→混元官网50000面高模→Studio低模/UV 5813面→Blender1024五通道烘焙→保留UV减到3000面。按小熊体型拟合现有Mixamo41骨,TokenRig仅预测权重;恢复原骨名、层级、骨轴及休息矩阵,做头部/熊掌/四肢局部清理和裆部连续过渡。未使用参考模型网站权重。
- `Tools/output/littlebear_studio/rig_mixamo41/{prepared.blend,source.glb,rigged_raw.glb,LittleBear_Rigged.blend,LittleBear_Rigged.glb,LittleBear_Rigged.fbx}`:固定骨架输入、原始预测、收尾及导出中间件。1930顶点、41骨、最多4影响;FBX往返几何误差<0.00000024m、骨位置误差<0.00000028m、权重误差0,UV与父子层级保持。
- `AIClient/Assets/Bundles/Scenes/Review/LittleBearReview.unity`:独立验收场景。两个Prefab已追加到角色验收manifest;独立导入、Avatar、250点动作采样及Motion切换通过。总清单ValidateOnly遇到已有CaoCao.prefab缺失,未重建总览场景。当前仅验证Idle/Walk,未运行Play Mode或接入业务。
- 复现工具:`Tools/littlebear_character_pipeline.py`、`Tools/model_tools/bl_littlebear_rig.py`、`Tools/run_littlebear_tokenrig.py`、`AIClient/AgentScripts/BuildLittleBear.cs`。完整来源、哈希、验收和限制见 `Doc/Design/Character/LittleBear/production_receipt.json`。
## 公共场景组件与测试清理(2026-10-26)
| 路径 | 用途与来源 |
| --- | --- |
| `AIClient/Assets/Bundles/Scenes/Common/lamp/` | HomeCamp 在用路灯,500 三角面、XPbr;从已退役测试内容经 Unity Pipeline 整目录迁移,保留 FBX/贴图/材质/Prefab GUID 与依赖。原资源按旧模型流程生成,本次未重生成。 |
| `AIClient/Assets/Bundles/Scenes/Common/bench/` | HomeCamp 在用长椅,699 三角面、XPbr;同上迁移并保留引用。 |
TownSquare 的总场景、总 Prefab 和其余专用模型、设计图、生产中间件及工具已按要求删除;原测试场景不再作为可用资源登记。新场景组件默认流程见 `Doc/Design/Scene/SceneModelProduction.md`。
## Bot 共享动作测试资源(2026-10-26)
- `AIClient/Assets/Bundles/Characters/Human/Common/Prefabs/{XBot,YBot,XBot25,XBot41}.prefab`:Unity Pipeline基于现有同名FBX创建的可复用人形Prefab,各用自身有效Humanoid Avatar。XBot/XBot25/XBot41共用XBot.controller,YBot使用YBot.controller,Root Motion关闭。25/41骨源模型的单位差异由Prefab根约99.3倍均匀缩放适配,不改原模型与蒙皮。
- `AIClient/Assets/Review/BotAnimationLab/BotAnimationLab.unity`:独立四角色2×2动作测试场景,全部角色、机位、平台、灯光和UI均离线制作并保存;当前测试菜单与打开场景使用本入口,原LmGirl对比内容保留。场景统一展示高度1.6m,含单角色聚焦和手部放大。
- `AIClient/Assets/Review/BotAnimationLab/Generated/*.mat`:Pipeline创建的四角色彩色/关节深色、统一灰模和地面预览材质,仅供测试场景,不覆盖源模型材质。
- 配置、骨映射、动作验证与生成入口见 `Doc/ResDesc_Animation.md`「Bot 动作测试与25/41骨共享控制器」及 `Tools/output/bot_animation_lab/`。
### lm_bear 肩部黑影隔离烘焙试验(2026-10-27)
- `Tools/output/bake_quality_audit/{legacy,adaptive}/model_baked.glb`:同一LLM3D任务 `15c1acb655d14f2c876bf6fbfbd047b6` 的50000面高模、5177面Studio低模和原UV进行隔离重烘;两版均取消烘焙后法线偏置,cage分别约0.06014m/0.007156m。均为诊断中间件,不替换原任务或游戏模型。
- `Tools/output/bake_quality_audit/strength035_review/normal_strength_preview.glb`:原已烘焙低模仅将Normal Map Strength调为0.35后重新导出的临时预览,几何和UV不变。肩颈/腿间黑块明显减轻,但微表面细节也减弱;不是已修复投射问题的正式生产模型。
- 原高模、原任务产物、共享后端脚本保持不变。检查和受控试验入口 `Tools/model_tools/bl_audit_bake_quality.py`、`bl_trial_studio_bake.py`;完整证据、推荐方案和限制见 `Tools/output/bake_quality_audit/findings.json`。
### HomeCamp v2 草地打散(2026-10-28)
- AIClient/Assets/Bundles/Scenes/Town/HomeCamp/ground_tile_grass_dark.png 与更新后的 ground_control.png / ground_terrain.mat:XTerrain 第 2 层深绿斑块;房屋下沉、阴影柔化后重烘焙。ART PASS。
### HomeCamp cottage v2 遮阳棚侧屋(2026-10-28)
- `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/cottage/`:v2 重跑五步产物,3500 面 XPbr;场景内作为 `HouseLeft`,替代主屋左实例。旧 v1 中间件已归档。
### HomeCamp DGX 阔叶树与花丛(2026-11-03)
- `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/shadetree/`:糖果风阔叶树,1999 三角面、1024² XPbr。DGX Hunyuan3D 2.1 任务 `d3ab9669392d47b3920a8270fd18aaff`,本地减面烘焙;Y-up、底面中心、局部 +Z。首版导出横躺,已离线绕 X 扶正后再导入。竖屏水平视角约 29°,`|x|>=11` 的旧卡片位在画面外。现只留 `TreeBackLeft`(-5.6, 10.4,高 6.2)和 `TreeBackRight`(6.2, 9.6,高 5.7),朝向不同。屋后更远的两张树卡片仍在。
- `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/flowercluster/`:贴地白花黄花丛,794 三角面、1024² XPbr。DGX 任务 `9f17c8eb580944e08d85038a843b70f8`。近景草地 `ClusterNearL`、`ClusterNearR`、`ClusterPathL`、`ClusterPlaza` 四处直立;喷泉环 `FountainCluster0`–`5` 六处把正面(+Z 花瓣)朝向镜头。花瓣是低模块面,侧面比正面更碎。广场其余花边仍是卡片。
- 中间件:`Tools/output/homecamp_dgx/`、`Tools/output/homecamp_studio/{shadetree,flowercluster}/`。回执 `production.json`。静物未绑骨。Unity `BuildHomeCamp.BuildProps` → `Build` → `Bake`(29 秒,1 张光照图)。
### 孤立残留资产清理与模型校验修复(2026-11-03)
- 孤立资产清理:通过 Unity Pipeline delete_asset 正式移除无任何引用的 9 月底测试残留目录 AIClient/Assets/Bundles/Characters/Animal/rhino/ 及其对应元数据。
- 基础角色 Prefab 恢复:通过 install_character_bundles.py 与 SetupCharacter.SetupCaoCao / SetupLmGirl 重新安装并生成 AIClient/Assets/Bundles/Characters/Human/CaoCao/CaoCao.prefab 与 AIClient/Assets/Bundles/Characters/Human/LmGirl/LmGirl.prefab,使 Doc/Design/Character/character_unit_review_manifest.json 覆盖的全部 27 个角色单元校验全部通过(PASS subjects=27)。
### HomeCamp 场景道具减面与 Shader 实例化优化(2026-11-03)
- AIClient/Assets/Bundles/Shaders/XShader/HomeCampXPbr.shader:ForwardLit Pass 补充 #pragma multi_compile_instancing,打通 URP 前向光照通道的 GPU 实例化变体。
- AIClient/Assets/Bundles/Scenes/Town/HomeCamp/{bush,flowerpot,cypress,fence}/:
- ush 减面至 648 面、 lowerpot 减面至 279 面、cypress 减面至 800 面、 ence 减面至 450 面,全部保留原始 UV 和烘焙纹理映射;
- 材质全面开启 enableInstancing = true;
- 贴图上限设为 512 且开启纹理压缩。
- AIClient/Assets/Bundles/Scenes/Town/HomeCamp/HomeCamp.prefab / HomeCamp.unity:
- 拼装三角面降至 44,381 面;光照贴图重新烘焙(28秒),TECH PASS。
### 通用 XPbr 着色器合批与雾效补全(2026-11-03)
- AIClient/Assets/Bundles/Shaders/XShader/XPbr.shader:ForwardLit Pass 补全 #pragma multi_compile_fog 与 #pragma multi_compile_instancing,打通 URP 前向通道的雾效变体与 GPU Instancing 变体支持,使全工程通用角色与静态资产支持场景雾融合与批量硬件合批。
+95 -10
View File
@@ -32,15 +32,6 @@
| 韏��頝臬� | 蝞�閬�秩�� |
| --- | --- |
| `Doc/Design/UI/Casual/casual_ui.png` | 頧餅𠹭隡煾𤦭蝡硋� UI 霈曇恣�橘�gpt-image-2.5��--aspect-ratio 9:16`���瘚� 940�1672����� `Doc/Design/ui_design.jpg`��滲�賢� |
| `Doc/Design/Scene/TownSquare/town_square.png` | 蝞��訫���嘀�箸�餉�霈曇恣�橘�憭帋犖瘣餃𢆡蝛箏𧑐嚗㚁�gpt-image-2.5��1:1`���瘚� 1254�1254��滲�賢� |
| `Doc/Design/Scene/TownSquare/ground.png` | TownSquare ��辣繚�啗”嚗𢶷pt-image-2.5��1:1`��1254�1254������餉���滲�賢� |
| `Doc/Design/Scene/TownSquare/shop.png` | TownSquare ��辣繚摨烾唍嚗�滯憿嗡誨銵剁�嚗𢶷pt-image-2.5��1:1`��1254�1254������餉���滲�賢� |
| `Doc/Design/Scene/TownSquare/tree.png` | TownSquare ��辣繚�𡢅�gpt-image-2.5��1:1`��1254�1254������餉���滲�賢� |
| `Doc/Design/Scene/TownSquare/lamp.png` | TownSquare ��辣繚頝舐�嚗𢶷pt-image-2.5��2:3`��1024�1536������餉���滲�賢� |
| `Doc/Design/Scene/TownSquare/board.png` | TownSquare ��辣繚�羓內�䕘�gpt-image-2.5��1:1`��1254�1254������餉���滲�賢� |
| `Doc/Design/Scene/TownSquare/fountain.png` | TownSquare ��辣繚�瑟�嚗�舅撅��撖寥��餉�嚗㚁�gpt-image-2.5��1:1`��1254�1254������餉���滲�賢� |
| `Doc/Design/Scene/TownSquare/bench.png` | TownSquare ��辣繚�踵�嚗𢶷pt-image-2.5��1:1`��1254�1254������餉���滲�賢� |
| `Doc/Design/Scene/TownSquare/bush.png` | TownSquare ��辣繚�峕銁�梁拳嚗𢶷pt-image-2.5��1:1`��1254�1254������餉���滲�賢� |
| `Doc/Design/Character/CaoCao/caocao.png` | 頧餌�撟餅𣳿�滚�頨怨挽霈∪㦛嚗峕迤�� T Pose嚗𢶷pt-image-2.5��2:3`���瘚� 1024�1536��滲�賢� |
| `Doc/Design/Character/LmGirl/lm_girl.png` | LmGirl �刻澈����㦛嚗峕迤�� T Pose��滲�賢�嚗𤤿鍂�瑟�靘𨥈��其�瘛瑕��曄� 3D |
| `Doc/Design/Character/LmCat/lm_cat.png` | LmCat 蝡嗵�����㦛嚗𣬚滲�賢�嚗𤤿鍂�瑟�靘𨥈��其�瘛瑕��曄� 3D |
@@ -560,6 +551,27 @@
銝𡃏膩�曆�鈭娍郊璅∪����憪贝��乓���撣����蝏�蝙�函𠶖����餉扇�蚜omeCamp�嗡�皜��嚗𥕦��滨𡠺蝡见㦤�臬��芣𤜯�W�擐㚚△�峕艶��
### HomeCamp v2 �啗”���韐游㦛銝𤾸恣�詨㦛嚗�2026-10-28嚗�
- `Doc/Design/Scene/HomeCamp/ground_tile_{stone,grass}_source.jpg`嚗𡁜�蝵� GenerateImage �����迤靽航��單踎銝舘��唳��橘�雿靝蛹�删�韐游㦛����乓��
- `Doc/Design/Scene/HomeCamp/ground_tile_{stone,grass}.png` �� `AIClient/Assets/Bundles/Scenes/Town/HomeCamp/` 銝见��齿�隞塚�1024簡 �删�韐游㦛嚗𣬚眏 `Tools/homecamp_ground_textures.py` ���嚗�器蝻睃� 32px �滚�餈�腹嚗𣬚𨺗�踹��硔����圈�鈭桀漲靚�𠧧嚗㚁�Unity 銝剛挽銝� Repeat���蝻押����穃��� 4嚗䔶�銝� XTerrain ��洵 0/1 撅���
- `Doc/Design/Scene/HomeCamp/ground_control.png` �� Unity �����辣嚗�512簡 �啗”�批��橘�R �𡁻�銝箇𨺗�選�G �𡁻�銝箄��堆�嚗諹��� 42m �圈𢒰嚗𡁏五��嘀�箏��滚𢰧撠讛楝嚗諹器蝻睃蒂�芸ㄟ嚗𥕦�銝��𡁏𧋦���嚗���� `Tools/output/homecamp_review/ground_layers.json`��
- `Tools/output/homecamp_review/{homecamp_portrait,homecamp_tall,homecamp_scale_reference}.png`嚗鯝2 �条��𡒊��箏��箔�皜脫�嚗�1080�1920 / 1080�2400 / 撣� 1.6m 瘥𥪯��嗅�嚗剹��
- `Tools/output/homecamp_review/compare_portrait.png`嚗𡁜���㦛 `home_camp.png` 銝� v2 皜脫�撌血𢰧撟嗆���笆瘥𥪜㦛嚗𣬚鍂鈭𤾸�頧渲�����
### HomeCamp v2 �匧𧑐�𤘪袇韐游㦛嚗�2026-10-28嚗�
- Doc/Design/Scene/HomeCamp/ground_tile_grass_v2_source.jpg嚗𡁜�蝵� GenerateImage �𤥁𠧧憭𡁏��𦯀膳閫���唳��整��
- Doc/Design/Scene/HomeCamp/ground_tile_grass.png / ground_tile_grass_dark.png �� Unity ���嚗𡁏��匧㓤銝擧楛蝏輯��𤘪�蝻� 1024簡嚗匤omecamp_ground_textures.py ���嚗𥟇綉�嗅㦛 G/B �����
### HomeCamp v2 B/C �枏�霈曇恣�橘�2026-10-28嚗�
- `Doc/Design/Scene/HomeCamp/{fence,stall,rocks,steps,cypress}.png`嚗𡁶蒾摨訫�隞嗅㦛嚗��蝵� GenerateImage ���� `home_camp.png`嚗𥕦�閫垍蒾摨閖�朞�嚗𥟇毽��㦛�� 3D 颲枏���
- `Doc/Design/Scene/HomeCamp/bush.png`嚗鯝2 蝞��𣇉��笔蠏�Y��剁�v1 蝣𤾸蠏撖潸稲 Studio �X㺭憭望綉�𡡞�蝏矋���
- `Doc/Design/Scene/HomeCamp/flowerpot.png`嚗𡁜���榊���銝厩�蝏�� `flowerpots` �曉��擧�隞園�蝏塩��
- `Tools/output/homecamp_review/props_sheet_all.png`嚗帋�隞園��瑕��穃恣�豢𣄽�整��
- `Tools/output/homecamp_review/compare_portrait.png`嚗𡁜鉄 B/C �枏��𡒊�����/皜脫�撖寞��整��
### SOMA �嗵铜皜��撖寧��橘�2026-10-23嚗�
`Tools/output/campguide_studio/rig_soma/audit/{baseline,hand_cleanup}_{side,back}.png`嚗�4 撘� 512�640 Blender Cycles �唳芋霂𦠜鱏�橘��� `Tools/model_tools/bl_render_soma_comparison.py` 隞亦㮾�𣬚㮾�箝����匧� Walk 1 蝘鍦�憪踵����僐��鍂鈭擧�颲��憪𧢲��滚�隞������券�撅��典蔣�滨���𧋦嚗𥕦𢰧�见��箇�閫��憸��畾讠�隞齿��整����� Unity �鞱捶嚗𤩺迤撘誩㦤�舫��嗅㦛��
@@ -596,4 +608,77 @@
### FBX 頧游��嗅偏�𧼮�韐游㦛嚗�2026-10-24嚗�
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/production/bake_maps/*.png`��production/static/LmGirlTpose_{color,normal,ao,metallic,roughness}.png`嚗𡁜��嗅�鈭娍郊�条��曄鍂鈭𡡞�蝳餅𤣰撠曉�敶𡜐�銝漤��啁��踺��
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/production/xpbr/LmGirlTpose_{base,mix}.png`嚗𡁶�摰� bl_convert.py 隞𦒘�餈啣㦛����� 1024簡 XPbr 韐游㦛嚗𣬚鍂鈭𡡞�霂�耨甇� FBX �擧�韐刻蓮�V��舀迤撣詨��琜��芣𤜯�X迤撘讛斐�整��
- `Tools/output/lmgirl_tpose_studio/axis_pipeline_audit/production/xpbr/LmGirlTpose_{base,mix}.png`嚗𡁶�摰� bl_convert.py 隞𦒘�餈啣㦛����� 1024簡 XPbr 韐游㦛嚗𣬚鍂鈭𡡞�霂�耨甇� FBX �擧�韐刻蓮�V��舀迤撣詨��琜��芣𤜯�X迤撘讛斐�整��
### LmGirl �齿鰵撖澆枂�滚��蹱��斐�橘�2026-10-24嚗�
- `Tools/output/lmgirl_tpose_studio/static/LmGirlTpose_{color,normal,ao,metallic,roughness}.png` �誩�頝臬� FBX �齿鰵撖澆枂隞擧𠳿�� bake_maps ��甅憭滚�嚗峕𧊋�齿鰵�条�嚗𥕦歇�� UV 靽脲�銝滚���
### 撠讐琸摮拚�撖潛��滚��蹱��斐�橘�2026-10-24嚗�
- `Tools/output/campguide_studio/static/CampGuideStudio_{color,normal,ao,metallic,roughness}.png` �誯��� FBX �滚紡隞擧𠳿�� bake_maps ��甅憭滚�嚗𥕢��坔� UV嚗䔶��齿鰵�条���
### �笔�擃䀹芋銝𡡞��� FBX ��迤�� Z �孵�閫�㦛嚗�2026-10-24嚗�
- `Tools/output/character_front_audit/{CampGuideStudio,LmGirlTpose}{,_high}_from_{plus_z,minus_z}.png`嚗�8 撘� 512�640 Blender Workbench 蝥寧�皜脫�嚗���思� Y-up �箸艶 +Z嚗�-Z 銝支儒閫����蝏���� FBX 銝舘�霈臬�憪钅�璅~��+Z 靘批��曄內�賊�嚗�-Z 靘找蛹�屸�嚗𤤿鍂鈭擧凒甇�圾�硋��烐�餈堆��墧鰵憓墧虜�讐��胯��
### Mixamo Walking Avatar 靽桀�撖寞�嚗�2026-10-24嚗�
- `Tools/output/campguide_studio/playback_audit/before_comparison.png`嚗�1440�640 Unity �𠉛氖 PreviewScene �毺�皜脫�嚗�椰銝� Generic �罸爸撉潦��葉銝箏� Humanoid��𢰧銝� CopyBoyAvatar嚗𥕦�銝�撣�10/30蝘𡜐��航��� Humanoid �𡁻�蝧餅���
- `Tools/output/campguide_studio/playback_audit/comparison.png`嚗𡁶�鈭� Walking 摨𠉛鍂靽桀��𡒊���葷撖寞�嚗𥕦椰銝� Generic��葉銝箏��滚歇靽桀� Humanoid��𢰧銝粹�蝳� CopyBoyAvatar嚗��銝方��尿�蹂��氬���摰⊥䰻皜脫�嚗䔶��𥕦遣銝𡁜𦛚 UI �碶耨�孵��滚㦤�胯��
### �曹澈 Walking �� Foot IK 撘��喳笆瘥䈑�2026-10-25嚗�
- `Tools/output/lmgirl_tpose_studio/shared_walk_audit/foot_ik_comparison.png`嚗�1600�720 Unity �𠉛氖 PreviewScene �毺�皜脫�嚗��銝�0.2667蝘埝郊���隞𤾸椰�啣𢰧銝箇琸摮拙��哨�撘��涌oot IK��戊摮拙��哨�撘��涌oot IK���銝��唳芋撅閧內憟喳酋�𡁻�鈭文���耨甇��銝滢耨�孵��滨鍂�瑕㦤�胯��
### 憟喳酋 TokenRig FBX �滚�韐游㦛銝𡡞��嗅㦛嚗�2026-10-25嚗�
- `AIClient/Assets/Bundles/Characters/Human/test/girl_tokenrig/LmGirlTokenRig_{base,mix}.png`嚗𡁜� `Tools/output/lmgirl_tpose_studio/xpbr/LmGirlTpose_{base,mix}.png` ��𡠺蝡见��穿�瘝輻鍂�遌V��𧊋�齿鰵�条�嚗𣬚鍂鈭擧鰵FBX��est/XPbr�鞱捶��ase雿輻鍂sRGB嚗龧ix雿輻鍂蝥踵�批紡�伐���憭�1024��
- `Tools/output/lmgirl_tpose_studio/rig_mixamo41/fbx/unity_walking.png`嚗�1080�800 Unity�𠉛氖PreviewScene�毺�皜脫�嚗𡦀alking 0.2667蝘𡜐�撌虫蛹敶枏�蝵𤑳��唳芋��𢰧銝箸鰵TokenRig韐游㦛����其�FBX�嘥���斐�曉��曹澈Animator�剜𦆮撉峕𤣰嚗䔶�雿靝蛹�芸������艇�澆笆�扼��
### 鈭箏耦撠讐� LittleBear 撱箸芋����㦛嚗�2026-10-26嚗�
- `Doc/Design/Character/LittleBear/littlebear_tpose.png`嚗𡁜��𥕦㨃�𡁏��脖犖敶W��𠺪�甇�𢒰甇�漱��� T-pose����讠征���頨怠��鳴�1024�1536 RGB嚗𥕦�蝵� imagegen ���嚗�★�桃��曇��祆𧊋�滨蔭�滚𦛚撖�𤨎嚗剹��鍂鈭擧毽��㦛��3D��𤐄摰鐝ixamo撉冽沲�嗵铜嚗𥕦�閫㰕GB���𡁻���253��𤐄摰朞㘚���蝷箄��𡃏挽霈∟秩�舘��𣬚𤌍敶� `design_prompt.txt`��
### 鈭箏耦撠讐� LittleBear �条�韐游㦛銝𡡞��嗅㦛嚗�2026-10-26嚗�
- `Tools/output/littlebear_studio/bake_maps/` 銝� `static/LittleBear_{color,normal,ao,metallic,roughness}.png`嚗𡁏毽��50k擃䀹芋�条��訕tudio UV��1024簡鈭娪�𡁻��整��
- `Tools/output/littlebear_studio/xpbr/LittleBear_{base,mix}.png` �� `AIClient/Assets/Bundles/Characters/Human/LittleBear/LittleBear_{base,mix}.png`嚗𡁻★�娣Pbr�枏�銝擧迤撘誩紡�亙��穿�base銝漳RGB��ix銝箇瑪�改�瘝輻鍂Studio UV嚗𢏺NG�䭾��讠憬��
- `Tools/output/littlebear_studio/rig_mixamo41/{high,static,rigged_rest}_{front,back,three_quarter}.png`嚗鋳lender�毺�蝥寧�摰⊥䰻�橘��詨笆擃䀹芋�������嗵铜隡烐�憪踵���甇���W�+Z�嘥���
- `Tools/output/littlebear_studio/review/{idle,walk}.png`嚗�960�1000 Unity�𠉛氖PreviewScene�毺�皜脫�嚗䔶蝙�刻��淅Pbr���銝��箔���𢆡雿𦦵㮾雿㵪��其��祉�韏��撉峕𤣰����啣�銝𡁜𦛚UI��
## 瘚贝��箸艶�曄�皜��嚗�2026-10-26嚗�
TownSquare �餉����蝐餃�隞嗉挽霈∪㦛撌脤�瘚贝���捆�𣳇膄嚗𣬚宏�文笆摨𥪜虾�典㦛��蒈霈啜��omeCamp 蝏抒賒雿輻鍂��楝��/�踵�韐游㦛�誩��望芋�贝��� `AIClient/Assets/Bundles/Scenes/Common/{lamp,bench}/`嚗峕𧊋�啣�����曄���
### Bot �其�瘚贝�UI銝𡡞��嗆⏛�橘�2026-10-26嚗�
- `Doc/UIPrefabCreater/UI_BotAnimationLab.json` �� `AIClient/Assets/Bundles/UI/Prefab/UI_BotAnimationLab.prefab`嚗�1080�1920嚗�抅鈭擧𠳿�𧜵mGirl瘚贝�UI�澆��嫣蛹�𥕦𢆡雿栶���閫坿𠧧��偘�橘��𣂼葷嚗讛�摨佗��笔漲嚗讛��阡𢒰�選�蝏誯★�埃SON頧祆揢�其�Unity Pipeline���嚗���每ommon銋嘥悍�嘯prite嚗峕瓷�㗇鰵憓噼斐�整��
- `AIClient/Assets/Screenshots/BotLab_{Walk,Attack01}.png`嚗䦧nity Pipeline�沌lay Mode�閗繮��1080�1920�屸𢒰撉峕𤣰�橘�����曄內XBot��Bot��Bot25��Bot41�𥡝��脩�銵諹粥�峕𤫇��1���銝��𣇉㮾雿滚尿����其�撉諹�撣�����蝑整��𧒄�湔遬蝷箏��𡁶鍂�其��剜𦆮嚗䔶�餈𥕦�甇��Bundles��
### lm_bear �条�暺穃蔣霂𦠜鱏韐游㦛銝𤾸笆瘥𥪜㦛嚗�2026-10-27嚗�
- `Tools/output/bake_quality_audit/lm_bear/*.png`嚗�800�800 Blender Cycles�𠉛氖�毺�皜脫�嚗屸�璅~��歇�条�雿擧芋����剜�蝥踴����厩�摨閗𠧧���撖澆枂瘜閧瑪�唳芋銝𡡞�蝞埈�蝥輻�璅∪笆瘥𢛵��
- `Tools/output/bake_quality_audit/{baseline,legacy,adaptive,strength035}_review/low_lit_full.png`嚗𡁜��箔�����匧�16�瑟𧋦皜脫�嚗���思蛹�毺�����𡝗��怎漣瘜閧瑪�讐蔭��憬撠㷓age銝𥪜�瘨��蝵柴������蝥踹撩摨�0.35����其��坔�銝�5177�W�雿蓥�Studio UV��
- `Tools/output/bake_quality_audit/{legacy,adaptive}/bake_maps/*.png`嚗𡁻�蝳駁���1024簡 normal嚗𥯤o嚗䓤iffuse嚗蓞etallic嚗蓤oughness鈭娪�𡁻����cage�孵��典��箏�雿���惩仍�烐��訫�嚗䔶�雿靝蛹甇���踵揢����𡏭��𣬚𤌍敶閙覔 `findings.json`嚗𥟇𧊋雿輻鍂�笔㦛�碶耨�暹焵�㚚䔮憸塩��
### HomeCamp cottage v2 霈曇恣�橘�2026-10-28嚗�
- `Doc/Design/Scene/HomeCamp/cottage.png`嚗鯝2 �賢��桅翧璉帋儒撅页�GenerateImage嚗𥟇毽����乓��1 撌脣�獢���桀���
- `Tools/output/homecamp_review/cottage_sheet_v2.png`嚗𡁜��穃恣�豢𣄽�整��
### HomeCamp DGX �𥪜蠏�睲��曹�嚗�2026-11-03嚗�
- `Doc/Design/Scene/HomeCamp/shade_tree.png`嚗𡁶��𣈯�暺誩��𥪜蠏�穃���㦛嚗�1024�1536��𧋦�� Qwen-Image Turbo嚗屸��澆�����穃�隞嗅㦛嚗�㦛��鸌甈� `40d127f1cae5440786743a8097e5a2aa` 蝚� 0 撘𨬭��鍂鈭� DGX �曄�蝵烐聢嚗䔶�餈� Bundle��
- `Doc/Design/Scene/HomeCamp/flowercluster.png`嚗朞斐�啁蒾�梢��梢��蠘�銝𥕦���㦛嚗�1024�1024���銝��曉��滚𦛚嚗峕鸌甈� `5c57876e8c534488907d6190673e2d18`��鍂鈭� DGX �曄�蝵烐聢嚗䔶�餈� Bundle��
- `Tools/output/homecamp_review/shadetree_{front,side,back,perspective}.png`��flowercluster_*.png`嚗䦧nity �𥕦�蝏�辣憸����
- `Tools/output/homecamp_review/homecamp_portrait.png`嚗𡁜��𦒘舅璉菟��嗆�����臬�憭��銝䜘��𪃾瘜厩㴓�凋�銋见��滨��嗵�蝡硋��駁𢒰��
### 隡嗘撈甇��3D擃睃�韐沃I�硋���漣嚗�2026-11-03嚗�
- AIClient/Assets/Bundles/UI/Texture/Prototype/proto_pet_{0..9}.png嚗𡁜��芣迤撘譍�隡渡� 256�256 �𤩺�擃睃�韐� 3D �硋��橘��� AgentScripts/BuildPetPortraits.cs �券�蝳� PreviewScene 銝剖�頧賢笆摨娍迤撘� Companion Prefab嚗峕� 3/4 靘扯澈��雿唾�閫鉝����硋��穃��㗇葡�橒��踵揢������雿�/�孵��笔��牐�雿𤘪葡�橒�蝏� TextureImporter 霈曄蔭銝� Single Sprite 撟嗥眏 UiSpriteAtlasGenerator.GenerateAll �瑟鰵�枏��� UI_PrototypeAtlas.spriteatlas��
- AIClient/Assets/Screenshots/pet_portraits_upgrade_comparison.png嚗𡁜��芯�隡湔鰵�扯��誩僎�鍦笆瘥𥪜㦛嚗���雴蛹甇�� 3D 皜脫��硋�嚗䔶��雴蛹�批��见�雿蓥��硋�嚗剹��
### HomeCamp 隡睃�撖寞��橘�2026-11-03嚗�
- AIClient/Assets/Screenshots/homecamp_optimization_comparison.png嚗帋��硋��� HomeCamp 蝡硋��駁𢒰撟嗆�撖寞��橘�撌佗�隡睃��� 53,120 �a��曉�嚗�𢰧嚗帋��硋� 44,381 �U��PU Instancing �舐鍂��斐�曉�蝻拐��吔���
+16
View File
@@ -59,3 +59,19 @@
| --- | --- |
| `Doc/Design/Sound/MixReview/{menu_ui,skill_bank,battle_1x,battle_2x,overlap_stress}.wav` | 5份离线试听,17/16/26/26/8秒,PCM16/48kHz/立体声。`Tools/build_audio_mix_review.py` 按正式音频、Pipeline音源参数及第20关T2轨迹重建;不改正式文件,不加归一化/限幅器。五份样例零越界,4倍过采样最高峰-3.47dBFS;主观听审未声称通过。 |
| `Doc/Design/Sound/MixReview/*_float.wav`、同名JSON、`validation.json`、`unity_snapshot.json`、`unity_recovery.json` | 5份浮点母带保留原增益与越界检查依据;事件/源哈希/峰值/RMS/输出哈希、正式音量和编辑器恢复回执。Unity实录尝试超时,没有实录交付;试听属于离线重建。详见同目录 `Production.md`,不进入Bundle。 |
## 全局音频规格移动端深度优化(2026-11-03)
通过 Unity Pipeline AgentScripts/OptimizeAudioSettings.cs 对项目全量 29 个音频资源(UI 音效 10 个、战斗技能 9 个、敌人受击 8 个、BGM 2 个)执行移动端最佳实践优化:
1. **单声道与 ADPCM 高效压缩(针对 27 个 SFX 单发短音效)**:
- 开启 orceToMono = true:消除此前双声道冗余采样,短音效内存直接砍半(50%)。
- 设置 compressionFormat = AudioCompressionFormat.ADPCM:解压几乎零 CPU 开销,包体相比未压缩 PCM 减少约 75%。
- 设置 loadType = AudioClipLoadType.DecompressOnLoad:确保战斗和 UI 触发时零延迟响应。
- 关闭 3D 空间计算(3D: false):UI 与通用 2D 反馈音效直达,消除不必要的空间声场运算。
2. **长循环 BGM 流式播放**:
- 设置 loadType = AudioClipLoadType.Streaming:长背景音乐改为按需流式读取,不再预先占用 RAM 内存。
- 保留立体声( orceToMono: false),采用 Vorbis 0.75 质量压缩,关闭 3D 空间计算。
3. **全量核验**:
- OptimizeAudioSettings.Verify() 与 BuildUiSfx.Verify() 验证通过,29 个音频资产全部符合移动端运行时标准。
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -75,5 +75,5 @@ Prefab / 导入设置须遵守 `UNITY-GUIDE.md`:Agent 不手改 `.prefab`,
- `UiSafeArea.jslib` 使用微信逻辑像素归一化,与 Unity 物理像素/DPR 解耦;旧客户端回退 getSystemInfoSync 和胶囊行预留。AOT 组件独立保留在 `Assets/AOT/link.xml`,不会被 HybridCLR Gen All 覆盖。
- JSON→Prefab 解析优先使用 `assets.sprites` 中的明确路径,声明的 Sprite 缺失即生成失败;支持 `Bg/` 等独立目录。当前营地背景为 `Assets/Bundles/UI/Bg/home_camp.png`,不属于图集输入目录。
- `RawImage` 支持 `material`、`color`、`raycastTarget`。ExplorerStage 明确引用 `Assets/Bundles/UI/Material/HomeExplorerCutout.mat`,材质和 Shader 随 Prefab 依赖进入 Art;运行时不再通过 Shader.Find 查找抠底着色器。材质不可用时隐藏角色预览,避免显示相机底色。
- 启动 GameplayBootstrap 只初始化 UI,不自动加载 TownSquare/CaoCao 预览世界;角色相关资源和按玩法加载的战斗场景保留。
- 启动 GameplayBootstrap 只初始化 UI,不自动加载 测试场景/CaoCao 预览世界;角色相关资源和按玩法加载的战斗场景保留。
- 验证入口:`Tools/verify_ui_safe_area.js`;`AIClient/AgentScripts/VerifyHomeMobileUi.cs` 分步准备/启动/截图/恢复,避免长时间等待屏幕背缓冲。回执和普通屏、刘海屏、安卓长屏截图在 `Tools/output/home_mobile/`。
+1 -1
View File
@@ -53,7 +53,7 @@ YooAsset 3.0.6 的 `FileSystemParameters.CreateFileSystem` 使用 `Type.GetType`
## 主界面移动端修复产物(2026-10-22 20:49)
启动不再自动加载 TownSquare/CaoCao。主界面角色预览材质通过 Prefab 依赖进入 Art,顶部和底部布局使用设备/微信安全区,详见 `UI_AutoGen_Overview.md`。
启动不再自动加载 测试场景/CaoCao。主界面角色预览材质通过 Prefab 依赖进入 Art,顶部和底部布局使用设备/微信安全区,详见 `UI_AutoGen_Overview.md`。
三个屏幕布局与按钮命中、GPU 抠底、实际启动器无 3D 预加载检查通过;8 组微信窗口/胶囊/旧接口/DPR 用例通过。原 Boot 场景已恢复。
新底包已导出到 `AIClient/Build/WeChat/Base/minigame/`,构建成功并确认原生/JS 安全区桥接均包含。新首包为 `e33b1380f2e627d5.webgl.data.unityweb.bin.txt`(14,785,194 字节)。本次业务 UI 和热更代码有实际修改,需部署对应 Art/DefaultPackage 更新;相对上一构建仅 3 个 Art bundle、1 个热更 rawfile 及相应清单变化。