Replace TownSquare with HomeCamp art and land humanoid bots, LittleBear, and LmGirl review assets.
Co-authored-by: Cursor <cursoragent@cursor.com>
@@ -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 |