Replace TownSquare with HomeCamp art and land humanoid bots, LittleBear, and LmGirl review assets.
Co-authored-by: Cursor <cursoragent@cursor.com>
@@ -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。
|
||||
|
After Width: | Height: | Size: 1.2 MiB |
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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并归还池,禁止把旧轨迹带到下一次播放。
|
||||
|
||||
|
||||
@@ -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."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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。
|
||||
|
||||
|
After Width: | Height: | Size: 486 KiB |
|
After Width: | Height: | Size: 831 KiB |
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 844 KiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 384 KiB |
|
After Width: | Height: | Size: 272 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 493 KiB |
|
After Width: | Height: | Size: 430 KiB |
|
After Width: | Height: | Size: 510 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 521 KiB |
|
After Width: | Height: | Size: 523 KiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 219 KiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 683 KiB |
|
After Width: | Height: | Size: 408 KiB |
@@ -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。
|
||||
@@ -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 规则。
|
||||
|
||||
|
Before Width: | Height: | Size: 973 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 884 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 930 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 1.0 MiB |
@@ -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"
|
||||
}
|
||||
@@ -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 变体支持。
|
||||
|
||||
@@ -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按钮及进度指针、前后逐帧、速度、聚焦、材质、视角、循环攻击检查通过。已目视复核四版行走和攻击截图;不等同零滑步、全动作无穿插或缺失手指自由度的保证。
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 变体支持,使全工程通用角色与静态资产支持场景雾融合与批量硬件合批。
|
||||
|
||||
@@ -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 �舐鍂��斐�曉�蝻拐��吔���
|
||||
|
||||
@@ -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 个音频资产全部符合移动端运行时标准。
|
||||
|
||||
@@ -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/`。
|
||||
|
||||
@@ -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 及相应清单变化。
|
||||
|
||||