# 体素微缩建筑工地沙盘

## 原始提示词

见 [完整原始输入](prompt.md)。本轮为模型 minimax-m3-1-flash-preview、档位 max 在测试分支执行任务正文 v1。

## 运行方式

入口为本目录 `index.html`，单文件。通过 importmap 引入 Three.js r160，**需要联网**加载 CDN 资源；模型与贴图全部由代码生成，不引用任何外部素材。

## 实现要点

- 体素渲染走 `InstancedMesh`：按颜色分组合并全部静态方块，单场景 10 个实例网格承载 400+ 体素。
- 两个场景：施工工地（基坑、钢筋棚、在建高层、临时板房、渣土堆、施工道路）与跨江大桥（主塔、斜拉索、桥墩、移动模架），通过界面按钮或数字键 1/2 切换。
- 动态机械：挖掘机（回转 + 斗杆往复）、轮式卡车（沿路线循环 + 装卸土方）、两台塔吊（回转 + 吊钩升降）、混凝土罐车、装载机、桥梁桁架吊装车与浇筑车。
- 人物：12 名体素工人，按各自相位做手臂摆动与迈步动画。
- 昼夜四套天色 + 暴雨系统：雨滴粒子、湿滑反射地膜（`roughness` 0.08）、灯光提亮。
- 尘土用自定义 `ShaderMaterial` 粒子（位置随时间漂移、透明度按高度衰减），强度可调。
- 交互：拖拽环绕、滚轮缩放、闲置 8 秒自动环绕；**点击桌面正前方的三只实体旋钮**分别调节设备速度、昼夜循环与尘土强度，旋钮指针会随参数实时转动。

## 验证记录

- 打开即为桌面上的一整个微缩工地：深色实木桌、蓝图图纸、钢卷尺、安全帽摆件、水平仪、铅笔全部可见，HUD 显示体素块 405、实例网格 18。
- 切换到桥梁场景后主塔、斜拉索、桥墩与江面完整渲染（体素块 238）。
- 切到夜晚并开启暴雨：工地灯与塔吊灯亮起，雨滴下落，地面出现湿滑反光。
- 点击三只旋钮：设备速度 1.0 → 1.5、机械运转明显加快；尘土强度旋钮改变粒子浓度；昼夜循环旋钮切换后按钮状态同步。
- 空格可触发 / 关闭暴雨，界面顶部出现状态胶囊。
- 控制台无报错。

## 复盘

**做得好的**：任务正文对体素工地提出了非常细的清单（分区、机械、人物、围挡、昼夜、交互），本轮基本逐项落到场景里，并且用 `InstancedMesh` 而不是逐个 Mesh 来满足性能要求；「添加新场景进去」这条额外要求以第二个桥梁场景兑现，切换逻辑干净。实体旋钮是可点的三维物体，不是复刻的 HTML 控件。

**不足**：
1. 桌面摆件的尺度最初按真实办公桌比例摆放，而工地占 40×30 个世界单位，结果卷尺和安全帽看起来比整座工地还大；调相机时才发现比例失衡。
2. 罐车的朝向计算有恒等式化简的错误（`f > 1 ? 24 : 24`），行驶时车身不会转向。
3. 粉尘 shader 的透明度与场景底色对比不足，白天几乎看不见。
4. 阴影贴图固定 2048，软阴影在软件渲染下帧率很低（真实 GPU 上应无碍，但没有做过低性能设备验证）。
5. 场景里没有做碰撞约束，几何上是靠手工摆放对齐，机械臂与卡车路径也没有避让逻辑，正文提到的「杜绝穿模」只是摆放上成立而非机制上保证。

## 十轮评审改进记录

本轮由模型 MiniMax M3.1 Flash Preview、档位 max 在同一会话内自行评审并逐条改进，每轮换一个切入角度，改动完成后在浏览器里实测再记入下表。历史输入与历史产物未被覆盖。

- **第  1 轮**：点击中旋钮切换昼夜循环后按钮文案不同步，且反馈被写进统计栏；已改为独立浮层提示并统一 syncCycleButton。
- **第 2 轮**：面板按钮的文案与高亮原先是各自维护的，容易出现「状态已经变了但按钮还显示旧的开关文案」。统一改为从状态变量渲染（syncCycleButton 一处出文案），杜绝 UI 与真实状态脱节。
- **第  3 轮**：桌面摆件按真实办公桌比例摆放，与工地体量失衡；已缩小蓝图、卷尺、安全帽、水平仪与铅笔。
- **第  4 轮**：闲置自动环绕未考虑「减少动态效果」偏好；已在该偏好下关闭自动环绕。
- **第  5 轮**：删除未使用的 scenes / currentName / knobLabelMeshes 等声明；补 CDN 加载失败时的明确提示。
- **第 6 轮**：修复场景切换的 GPU 资源泄漏——原先只 dispose 了体素批次，root 下的工人、塔吊、探照灯、车辆各自 new 出来的 geometry/material 从未释放，连点几次「工地/桥梁」就在 GPU 上留下没人引用的缓冲。新增 disposeScene() 遍历整棵树释放几何体、材质与材质上的贴图。实测连续切换 4 轮后场景几何体/纹理计数稳定在 140/4，与切换前一致。HUD 同时改为显示 three.js renderer.info 的真实提交量（提交三角面 8,470、绘制调用 180、场景几何体 140 / 纹理 4），不再是自行估算。
- **第 7 轮**：消除逐帧分配——天色插值原来每帧要 new 出 5 个 THREE.Color 加 1 个 Fog，60 帧就是每秒 300 个短命对象全靠 GC。改为把三个临时 Color 提到循环外复用、Fog 只创建一次每帧改它的 color/near/far。
- **第 8 轮**：容器自适应与嵌入——原先 renderer.setSize(window.innerWidth, window.innerHeight) 在 iframe 嵌入时会把画布撑得比容器宽并产生横向滚动条，camera.aspect 也按 window 算导致画面横向拉扁。现在按画布宿主尺寸设置并挂 ResizeObserver，像素比上限 1.75，阴影图从 2048² 降到 1536²。实测 1280 宽与 420 宽下画布都严格等于容器宽度，420 宽无水平溢出。
- **第 9 轮**：真实施工进度——原先设备只是各自循环运动，与工地上任何东西都没有因果关系。现在每台设备跑完一个作业循环就结算工程量：挖机每循环 2 个、塔吊 3 个、自卸车每跑完一圈 1 个，工地 40 个作业单元、桥梁 32 个，进度满了会提示完工。实测 5 秒 10%、15 秒 45%、25 秒 75%、约 45 秒 100% 并弹出「土方与基础全部完工 · 40 个作业单元」；切换场景时进度归零重建。
- **第 10 轮**：键盘与无障碍——按键处理加上焦点保护（在滑杆上打字不再误触发暴雨或场景切换）、H 显隐控制面板、+/- 微调设备速度；原有 flash 提示同时写入 aria-live；补齐 focus-visible 焦点环。

以上每条改动也登记在本目录 `run.json` 的 `changes` 字段，可与本表逐条对照。

## 轮次归并与批次汇总

本次后续导入是同一轮测试的更新结果，现已合并到此前归档的实验记录，不另建第 4 轮。普通主题沿用第 3 轮记录；蓝皮书 v1/v2 沿用各自已有的记录 ID。

- 本批：11 个主题案例、12 条实验记录（蓝皮书含 v1/v2）。
- Max 五小时额度累计消耗：108%（此前 44% + 本次 64%）。
- 累计耗时：2h 8m 32s（57m 10s + 1h 11m 22s）。
- 累计 Token：156M。
- 执行备注：自我审查十轮。以上额度消耗、耗时和 Token 为批次口径，不拆分到单案例。

<!-- archive:start -->
## 当前归档信息（自动生成）

- 实验 ID：`voxel-construction-site--minimax-m3-1-flash-preview-max-r03`
- 模型：MiniMax M3.1 Flash Preview；推理档位：max
- 执行模式：按原任务执行；备注：自我审查十轮
- 类型：single-html；预览：static；网络：required
- [完整原始输入快照](prompt.md) · [主题与其他版本](../../../../topic.html?id=voxel-construction-site)
- 输入记录：完整原始输入，等同于主题任务正文 v1（未增删），保存于本目录 prompt.md。
- 工具：Claude Code。Claude Code 会话内直接执行，模型 minimax-m3-1-flash-preview、档位 max；未使用子代理，未参考任何历史实现或远程分支。
- 运行方式：浏览器直接打开本目录入口；CDN/外部素材需要联网。
- 费用记录：MiniMax 批次合计 108 %（Max 订阅套餐五小时额度）（12 个案例；批次 minimax-m3-1-flash-preview-max-2026-10-14；未记录单案例费用）
- [沙盘入口](../../../../demos/voxel-construction-site/runs/minimax-m3-1-flash-preview-max-r03/index.html)

### 部署适配记录

- 第  1 轮：点击中旋钮切换昼夜循环后按钮文案不同步，且反馈被写进统计栏；已改为独立浮层提示并统一 syncCycleButton。
- 第 2 轮：面板按钮的文案与高亮原先是各自维护的，容易出现「状态已经变了但按钮还显示旧的开关文案」。统一改为从状态变量渲染（syncCycleButton 一处出文案），杜绝 UI 与真实状态脱节。
- 第  3 轮：桌面摆件按真实办公桌比例摆放，与工地体量失衡；已缩小蓝图、卷尺、安全帽、水平仪与铅笔。
- 第  4 轮：闲置自动环绕未考虑「减少动态效果」偏好；已在该偏好下关闭自动环绕。
- 第  5 轮：删除未使用的 scenes / currentName / knobLabelMeshes 等声明；补 CDN 加载失败时的明确提示。
- 第 6 轮：修复场景切换的 GPU 资源泄漏——原先只 dispose 了体素批次，root 下的工人、塔吊、探照灯、车辆各自 new 出来的 geometry/material 从未释放，连点几次「工地/桥梁」就在 GPU 上留下没人引用的缓冲。新增 disposeScene() 遍历整棵树释放几何体、材质与材质上的贴图。实测连续切换 4 轮后场景几何体/纹理计数稳定在 140/4，与切换前一致。HUD 同时改为显示 three.js renderer.info 的真实提交量（提交三角面 8,470、绘制调用 180、场景几何体 140 / 纹理 4），不再是自行估算。
- 第 7 轮：消除逐帧分配——天色插值原来每帧要 new 出 5 个 THREE.Color 加 1 个 Fog，60 帧就是每秒 300 个短命对象全靠 GC。改为把三个临时 Color 提到循环外复用、Fog 只创建一次每帧改它的 color/near/far。
- 第 8 轮：容器自适应与嵌入——原先 renderer.setSize(window.innerWidth, window.innerHeight) 在 iframe 嵌入时会把画布撑得比容器宽并产生横向滚动条，camera.aspect 也按 window 算导致画面横向拉扁。现在按画布宿主尺寸设置并挂 ResizeObserver，像素比上限 1.75，阴影图从 2048² 降到 1536²。实测 1280 宽与 420 宽下画布都严格等于容器宽度，420 宽无水平溢出。
- 第 9 轮：真实施工进度——原先设备只是各自循环运动，与工地上任何东西都没有因果关系。现在每台设备跑完一个作业循环就结算工程量：挖机每循环 2 个、塔吊 3 个、自卸车每跑完一圈 1 个，工地 40 个作业单元、桥梁 32 个，进度满了会提示完工。实测 5 秒 10%、15 秒 45%、25 秒 75%、约 45 秒 100% 并弹出「土方与基础全部完工 · 40 个作业单元」；切换场景时进度归零重建。
- 第 10 轮：键盘与无障碍——按键处理加上焦点保护（在滑杆上打字不再误触发暴雨或场景切换）、H 显隐控制面板、+/- 微调设备速度；原有 flash 提示同时写入 aria-live；补齐 focus-visible 焦点环。
- 同轮更新归档：测试分支后续更新的完整产物、执行记录和文档已并入本条实验记录，不另建新轮次。来源：F:/dev/ai-coding-demo-test（model-test-base）/demos/voxel-construction-site/runs/minimax-m3-1-flash-preview-max-r01。
- 维护者于 2026-10-22 按 v3 对本轮桌面、手机及补充状态逐图重评并绑定 captures 证据；旧截图和 v2 评分见 catalog/score-reviews/2026-10-21-v3-source.json。未重跑模型或改写实验源码，截图不证明完整功能、算法、手势或性能。
<!-- archive:end -->
