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