# Restaurant R1.0 · 短剧毛毡餐厅

用户已确认原餐区与独立后厨布局，并授权“确保表面是短剧视频中毛毡质感”后完成训练与上线。确认原文、执行范围及母版 SHA-256 见 design-approval.json。设计确认与 3DGS 技术验收分别记录；最新实际指标、已测项目和未测项目以 experiment-status.json 为准。

## 冻结设计

餐区 6 × 7.2 SU，三桌六席、原吧台与服务台、资料架及丫乌蛋演示台位置保持。原后门 R-BD 通入新增的 6 × 3.2 SU 独立厨房，厨房之后的 K-BD 才是室外后门。厨房有冷藏、洗涤、备菜、电灶、烤箱、油烟机和排烟管。建筑合计 6 × 10.4 SU，外围环境各两 SU。

材质基准为现有 public/media/video/film.mp4 的 3、15、30 秒画面：布艺细密短绒、柔和毡面、温润哑光木作。film-felt-01 加入 271,142 根真实弯曲毛纤维及多尺度纤维着色，覆盖桌布、坐垫、灯罩、绿色毡面与少量植物；墙面降低颗粒感，厨具保留清楚的功能轮廓和柔和反光。未把视频人物或文字烘进训练图。

Blender 母版和训练图保留全部纤维；GLB 网格对照使用 1/8 纤维，木纹、细微凹凸和间接照明为实时近似。网页中两种模式明确区分。所有门固定开启，玻璃单独保存；角色未进入训练，仅作为可开关的尺度检查。SU 是场景单位，本交付是影视场景设计，不是施工图。

## 文件交付

- restaurant-r001.blend：完整可编辑 Cycles 母版，包含程序材质和曲线毛纤维。
- web/restaurant-r1-design.zip：母版、GLB、八视图、图纸、冻结数据和复现脚本的一键下载包。
- restaurant-reference.glb / restaurant-glass.glb：几何对照及独立玻璃。
- restaurant-spec.json：尺寸、资产编号、坐标变换、材质与八个固定相机。
- renders/：八张同一母版的 1536 × 1024 日景图；drawings/：尺寸平面、四向立面、材质板。
- web/restaurant-r1.spz：真实 Brush 训练结果经 SplatTransform 3.4.1 转为 SPZ v3，保留 SH3。
- web/restaurant-r1.compressed.ply：可重新加载的压缩 Gaussian PLY，含 SH3；不是普通点云。两种网页文件有量化，不能当作全精度无损备份。
- formal-training-record.json：官方软件校验、完整参数、相机和每张图片哈希、退出状态、GPU 采样、训练时长和检查点哈希。
- validation/training-log.txt：原始 Brush 运行日志；cameras-train.json / cameras-val.json：精确相机参数。
- validation/comparison.html：48 张独立参考与重建图逐张对照。图像以无损 WebP 保存；comparison-01 至 06.jpg 为审阅接触表。
- validation/metrics.csv：各阶段逐图 PSNR / SSIM；selected-views.json 为所选检查点逐图分数。
- validation/web-quantization/：同一 GPU 渲染器比较完整 PLY 与网页 SPZ 的量化误差，不能代替 Spark 浏览器性能测试。
- validation/browser-performance.json、integrity.json、checksums.json：本机性能、结构与真实 Gaussian 数据完整性、交付校验。
- datasets/formal/：首轮 480 张训练图 + 48 张独立验证图，960 × 640 RGBA，初始化点及相机，仅本地保存。
- checkpoints/formal/：全精度训练 PLY 和阶段验证渲染，仅本地保存；所选全精度 PLY 路径见状态文件 sourceAsset。这些是高斯参数检查点，不包含优化器内部动量状态。

线上只发布浏览、下载母版和验证所需文件；训练图、全精度阶段 PLY 和软件工具留在项目本地。旧 smoke 记录仅属历史实验，不能用于 R1.0 技术验收。

ground-01 补充修订：首轮平均指标达标，但正面地台边缘仍有漂浮，因此新增 48 张完整场地远景和 16 张低位外沿视角，训练图合计 544 张；48 张独立验证图和母版不变。首轮分数和失败图保存在 validation/baseline。datasets/formal-ground-01 和 checkpoints/formal-ground-01 为本次补充训练目录。

detail-01 近景强化：在 ground-01 基础上增加 48 张 1600 × 1066 图（36 张餐桌、8 张厨房台面、4 张灯罩），训练图合计 592 张，验证集仍为原来的 48 张 960 × 640。为保留细密毛绒，增长阈值调整为 0.00001、增长比例 0.2、停止增长时间 20,000 步，仍限制 1,500,000 高斯和 30,000 总步数。所有变化记录在执行命令和数据清单中。

网页常规与精细画质保留完整高斯，轻量档使用 LoD。按 Brush 0.3 的原始 rasterizer 使用不补偿 opacity 的 covariance blur 0.3，对齐 Spark preBlurAmount=0.3、blurAmount=0，避免细高斯变透明。依据：[Brush project_visible.wgsl](https://github.com/ArthurBrussee/brush/blob/v0.3.0/crates/brush-render/src/shaders/project_visible.wgsl)。

玻璃使用独立透明合成，并用同一 GLB 的合并几何做深度遮挡，避免窗玻璃穿过墙面或油烟机。该深度代理只遮挡玻璃，不产生餐厅颜色，也不会替代 3DGS。开启玻璃时会额外加载网格资产；默认关闭。网格导出的程序材质底色由 restaurant_glb_palette.py 按冻结色板补回，几何缓冲与母版不变。

## 从交付母版复现

环境：Windows、RTX 5070 Ti 16GB、Blender 5.1.1；Python 3（评估需要 NumPy、Pillow）；Node >=22 用于 SplatTransform；网页使用 Spark 2.2.0。

1. 将交付的 restaurant-r001.blend 放在 modeling/restaurant-r001，保留 design-approval.json。formal 渲染与训练检查母版哈希，拒绝使用其他版本的批准记录。
2. 先运行 `blender --background --factory-startup --python-exit-code 1 --python scripts/modeling/restaurant_initialization.py`，从交付母版重建同一初始化点集，无需重新生成几何。再运行 `blender --background --factory-startup --python-exit-code 1 --python scripts/modeling/render_restaurant.py -- --mode review`
3. `blender --background --factory-startup --python-exit-code 1 --python scripts/modeling/render_restaurant.py -- --mode formal`，生成 480 + 48；相同母版中断后可加 `--resume`。
4. 初轮使用 `python scripts/modeling/train_restaurant.py --mode formal`。复现 ground-01 时，先运行 `blender --background --factory-startup --python-exit-code 1 --python scripts/modeling/extend_restaurant_coverage.py`，再运行 `python scripts/modeling/train_restaurant.py --mode formal --dataset formal-ground-01 --run-id formal-ground-01`。使用官方固定 Brush v0.3.0、种子 20260914、30,000 步、上限 1,500,000 高斯、15,000 步停止增长；每 5,000 步保存全精度 PLY，每 1,000 步输出验证图。下载软件前先验证官方 ZIP 校验值。
5. 复现 detail-01 时，再运行 `blender --background --factory-startup --python-exit-code 1 --python scripts/modeling/extend_restaurant_detail.py` 与 `python scripts/modeling/train_restaurant.py --mode formal --dataset formal-detail-01 --run-id formal-detail-01 --max-resolution 1600 --growth-threshold 0.00001 --growth-fraction 0.2 --growth-stop 20000`。随后运行 `python scripts/modeling/restaurant_deliverables.py --mode formal`，比较六个保存阶段，按独立验证平均 PSNR / SSIM 选择候选结果，再进行视觉检查。
6. `npm install --prefix .tools/splat-transform --save-exact @playcanvas/splat-transform@3.4.1`；`python scripts/modeling/finalize_restaurant.py --node PATH_TO_NODE_22_OR_NEWER`，生成网页 SPZ 与压缩 PLY。
7. `python scripts/modeling/restaurant_comparisons.py`，保存全部 48 个无损对照和审阅表。
8. `python scripts/modeling/verify_restaurant_web.py --node PATH_TO_NODE_22_OR_NEWER`，比较全精度 PLY 与 SPZ；再在 Spark 网页查看八个镜头、连续路线、玻璃和角色遮挡，并运行页面的 1080p 测量。
9. `python scripts/modeling/verify_restaurant.py`；`npm ci`；`npm run build`。prebuild 仅复制发布白名单；Git 推送、Vercel 部署及线上响应分别核验。

如单独重新导出 GLB，运行 `python scripts/modeling/restaurant_glb_palette.py` 恢复程序材质的基础色。执行 `python scripts/modeling/package_restaurant.py` 生成设计 ZIP。验证脚本写入新证据后，更新 checksums.json 中相应文件的真实 SHA-256，再执行发布前检查；不得改动批准母版的校验值来绕过版本门槛。

从源程序重新创建几何可运行 build_restaurant.py，它读取 modeling/house-v001/design-spec.json；原餐厅 13 件家具必须保持。Blender 重新保存可能产生新的二进制哈希，不能沿用旧哈希掩盖变化；正式复现优先使用交付母版。初始化点保存在 local-data/init.ply，训练数据制作时复制到 datasets/formal/init.ply；该文件及原始数据仅本地。GPU 并行训练不保证位级重现，比较内容、结构与指标，不要求新结果哈希相同。

## 坐标、指标与验收

Blender、相机 transforms、Brush PLY 使用同一 Z-up 世界。相机是 Blender/OpenGL camera-to-world；网页用 [x,z,-y] 转到 Three.js Y-up。GLB 已在导出时转换，PLY/SPZ 外层旋转 X -90°。回到总场景的平移为 [-14.8,5,0]。

正式评估为 48 个未训练相机、960 × 640。PSNR 在 sRGB RGB [0,1]、RGBA 黑底合成后逐图计算并取算术平均。SSIM 使用 11 × 11 高斯窗、sigma 1.5、总体协方差、有效区域和 RGB 通道均值。初始目标平均 PSNR ≥28 dB、SSIM ≥0.90；仍需检查最差视角，不能用平均值掩盖厨房、椅腿或门框缺陷。

GPU 采样来自整卡，包括桌面和浏览器，不是 Brush 独占显存峰值。浏览器按钮以实际 1920 × 1080 渲染 20 秒连续路径，排除前 2 秒预热。手机宽度界面检查与物理手机性能不是一回事；未实测的手机始终标记未测。完整技术通过仅在全部必需项目通过时记录，设计确认或部署成功不会自动改变技术验收。

## 官方工具来源

[Brush v0.3.0](https://github.com/ArthurBrussee/brush/releases/tag/v0.3.0) · [Spark](https://sparkjs.dev/docs/overview/) · [SplatTransform](https://github.com/playcanvas/splat-transform)

Brush 官方 ZIP SHA-256：b68e3e9cf052d51bf3ee30776fa5a364de7f2ba13b58443128ff797bb7bcfcd6。本项目以可重现模型、真实训练、独立验证和网页实测作为质量依据，不用工具名称代替验收结果。

## 本次桌面验收结果

592+48 视角、150 万高斯，训练 765.63 秒；平均 PSNR 37.485 dB、SSIM 0.98191。八镜头 SPZ 量化对比平均 40.099 dB。最终浏览器 1080p 连续路径、角色与玻璃开启，平均 60 FPS，P95 16.8 ms。本地资产加载约 4.8 秒，SPZ 34.41 MB，压缩 PLY 91.92 MB（十进制）。训练整卡显存采样最高 8369 MiB；不等于训练进程独占峰值。

桌面视觉与混合遮挡已检查；手机实机未测，formalAccepted 保持 false。详细方法、残余近似与截图见 design-qa.md；不声明无损毛纤维或物理手机已通过。
