Files
worldmodel/plans/CrowdRoom/00_overview.md
T
gaojie 1ea74b46da
Sync to site1 / sync (push) Has been cancelled
chore: update CrowdRoom categories from worldmodel to CrowdRoom
2026-05-21 02:20:22 +08:00

211 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "CrowdRoom · 总览(v0.1"
date: 2026-05-20
draft: false
tags: ["CrowdRoom", "众包", "3D 重建", "机器人", "隐私", "iOS"]
categories: ["CrowdRoom"]
---
# CrowdRoom · 总览(v0.1
> **一句话定义**CrowdRoom 是「**RoomPlan 版的 Sketchfab + Pinterest**」——人人用 iPhone 扫一个房间,传到云端就有可在浏览器里 360° 把玩、分层切换、换家具换材质、Remix 再创作的 3D 房间社区。
本章是 CrowdRoom 的总览,与既有 [`plans/PRISM/00_overview.md`](../PRISM/00_overview.md) 对齐:PRISM 是「机器人空间记忆操作系统」,CrowdRoom 是它的**消费级前台与数据入口**——把"专业机器人技术栈"和"普通用户的手机"用一个社区粘合起来。
---
## 1. 产品定位
| 维度 | 描述 |
|------|------|
| 一句话 | "RoomPlan 版的 Sketchfab + Pinterest":扫房 → 上传 → 共享 → Remix |
| 内容形态 | 一个房间 = 一份 RoomPlan 源文件(`.usdz` + JSON+ 服务端转码出的 `.glb` + 4 层可切换图层 |
| 核心动作 | **Scan → Upload → View → Toggle Layers → Remix → Share** |
| 区别于 Sketchfab | 不是任意 3D 模型库,而是**结构化的真实房间**(带语义:墙/地/家具/材质) |
| 区别于 Polycam 社区 | Polycam 偏个人云盘,CrowdRoom 偏**公共内容流 + Remix 文化** |
| 区别于 ArcGIS | 不做专业 GIS 查询,**只做"分层显示/隐藏/替换"这种消费级图层操作** |
CrowdRoom 不和 PRISM 抢机器人场景,它解决的是「**怎么让 RoomPlan 数据从一个人的相册变成一个生态**」的问题。
---
## 2. 目标用户画像
| 画像 | 标签 | 典型行为 | 核心诉求 |
|------|------|----------|----------|
| **A · 扫房爱好者**Scanner | 极客、博主、Polycam 老用户、租房博主 | 周末扫家、扫民宿、扫展览,上传炫技 | 上传顺、出图快、获赞获关注 |
| **B · 灵感党**(Browser) | 室内设计学生、装修业主、ins/小红书图源党 | 不扫,只逛;收藏好看的房间作灵感板 | 浏览流畅、能搜风格、能收藏分组 |
| **C · Remixer**(创作者) | 设计爱好者、3D 玩家、UGC 创作者 | 拿别人扫的房间,换墙纸/换沙发/隐藏家具发"我的版本" | 操作低门槛、能版本对比、能 fork |
三类用户构成**采集 → 消费 → 再创作**的内容飞轮,对应 [`plans/iphone/iphone_simplified_plan.md`](../iphone/iphone_simplified_plan.md) 里"个人验证用 RoomPlan"的轻量场景,但把生产者从 1 人扩到 N 人。
---
## 3. 核心用户故事(MVP 范围内 8 条)
| # | As a | I want to | So that |
|---|------|-----------|---------|
| US-1 | 扫房爱好者 | 在 iOS App 里调用 RoomPlan 扫完房间一键上传 | 不用导出 USDZ 再手动传 |
| US-2 | 扫房爱好者 | 上传时给房间打标签(户型 / 风格 / 城市)并选择公开/私有 | 控制我作品的可见性与隐私 |
| US-3 | 灵感党 | 在浏览器里 360° 旋转、缩放、走进一个房间 | 不装 App 就能看 |
| US-4 | 灵感党 | 用复选框开关 **墙 / 地板 / 家具 / 材质** 四个图层 | 像 ArcGIS 那样按需查看结构或装饰 |
| US-5 | Remixer | 把家具图层里的某件家具替换为公共资产库里的另一件 | 不重新建模就能做"装修方案" |
| US-6 | Remixer | 把墙面/地面材质换成公共材质库里的另一种 | 快速试色 / 试材质 |
| US-7 | 任何用户 | 给一个房间点赞、评论、收藏到画板 | 形成社区互动 |
| US-8 | 扫房爱好者 | 上传前由 App 自动模糊照片中的人脸/身份证/品牌 logo | 默认隐私安全,不用我手工检查 |
> 故意**不包含**的 user stories:实时多人协同编辑、复杂 BIM/CAD 出图、专业 GIS 空间查询、跨房间拼接成楼层——见 §7 非目标。
---
## 4. 总体架构图
```mermaid
graph TD
subgraph CLIENT["客户端层"]
IOS["iOS App<br/>(RoomPlan SDK 采集 + 上传客户端)<br/>Swift / SwiftUI"]
WEB["Web 前端<br/>(浏览/分层/Remix)<br/>React + R3F + Three.js"]
end
subgraph BAAS["Supabase BaaS 层"]
AUTH["Auth<br/>邮箱/Apple/Google 登录<br/>JWT 下发"]
DB["Postgres<br/>rooms / layers / remixes /<br/>comments / likes 表"]
STG["Storage<br/>原始 .usdz + JSON<br/>+ 转码后 .glb"]
EDGE["Edge Functions<br/>上传回调 / 隐私脱敏触发 /<br/>排行榜聚合"]
end
subgraph WORKER["渲染与转码层"]
TRANS["Transcode Worker<br/>(USDZ → glTF/.glb +<br/>Draco/Meshopt 压缩)<br/>容器化 Node/Python"]
ASSET["Asset Library<br/>公共家具 .glb +<br/>PBR 材质贴图"]
end
subgraph CDN["分发层"]
EDGECDN["CDN<br/>(Cloudflare R2 / Bunny)<br/>直发 .glb 与缩略图"]
end
IOS -- "1. POST 上传 USDZ+JSON" --> STG
IOS -- "登录" --> AUTH
STG -- "2. 触发" --> EDGE
EDGE -- "3. 入队转码任务" --> TRANS
TRANS -- "4. 写回 .glb + layer manifest" --> STG
TRANS -- "5. 更新 status" --> DB
STG -- "公开资源" --> EDGECDN
WEB -- "查列表/详情" --> DB
WEB -- "登录" --> AUTH
WEB -- "拉 .glb / 贴图" --> EDGECDN
WEB -- "查公共素材" --> ASSET
ASSET --> EDGECDN
```
**关键说明**
- iOS App 是**唯一采集入口**RoomPlan 仅 iOS);Web 端只消费、不采集
- BaaSSupabase= Auth + Postgres + Storage + Edge Functions 一站式,避免自建后端
- Transcode Worker 与 Asset Library 是「服务器渲染/转码」的承载者,对应用户原话里的"服务器渲染"
- CDN 直发 `.glb`,Web 端实际渲染发生在**浏览器** GPU(Three.js),服务端不做实时渲染——这是消费级路线的关键性价比决策
---
## 5. 技术栈选型表
| 层 | 推荐 | 备选 | 一行理由 |
|----|------|------|---------|
| 移动端语言 | **Swift + SwiftUI + RoomPlan** | Flutter + 原生桥接 | RoomPlan 是纯 iOS API,原生 Swift 最薄 |
| Web 框架 | **React + Vite + TypeScript** | Next.js / SvelteKit | React 生态最厚,与 R3F 无缝 |
| 3D 渲染库 | **Three.js + React-Three-Fiber + drei** | Babylon.js / PlayCanvas | R3F 让"图层切换/换家具"用 React 组件思维直接表达 |
| BaaS | **Supabase** | Firebase / Appwrite | 开源、Postgres 底座、便于后续平滑迁移到自建 |
| 对象存储 | **Supabase Storage**(小流量)→ **Cloudflare R2**(量大后) | AWS S3 / Backblaze B2 | R2 零出口费,国内外访问都还行 |
| CDN | **Cloudflare** | Bunny.net / 阿里云 CDN | 与 R2 同栈、免费额度大 |
| 转码 Worker | **Node + `gltf-transform` + USD CLI**,跑在 **Fly.io / Railway 容器** | AWS Lambda(冷启动慢,pass | gltf-transform 做 Draco/Meshopt 压缩成熟;USD CLI 解 `.usdz` |
| 公共资产库 | **Google `<model-viewer>` Asset Pack + 自建 PBR 库** | Sketchfab API | 起步用免费 CC0 素材,避开版权 |
| CI/CD | **GitHub Actions**iOS 走 fastlane → TestFlightWeb 走 Vercel | GitLab CI | 学习成本低、与 Supabase 集成方便 |
| 监控 | **Sentry + Supabase Logs** | Datadog | 个人/早期项目够用 |
> 该表只列**MVP 默认选项**;具体表结构、API 端点、转码流水线细节由后续子任务(`01_data_schema.md` / `02_api_contract.md`)展开。
---
## 6. 与 PRISM 的关系:复用与边界
### 6.1 一句话定位
> CrowdRoom = **PRISM 的"消费级前台 + 数据入口"**。
> PRISM 解决"机器人怎么记住一个房间"CrowdRoom 解决"普通用户怎么把房间贡献出来、怎么消费别人的房间"。
> 两者共享同一份"RoomPlan → 结构化空间"的数据约定,但**生命周期、SLA、安全模型完全不同**。
### 6.2 复用点(CrowdRoom 直接受益于 PRISM 的既有设计)
| # | 复用项 | 来源 | 用法 |
|---|--------|------|------|
| R1 | **RoomPlan 数据格式约定**USDZ + JSON 双文件,墙/门窗/家具/尺寸字段) | [`plans/iphone/data_format_specification.md`](../iphone/data_format_specification.md) §2-§3 | CrowdRoom iOS App 直接采用同一份 JSON Schema,避免双标 |
| R2 | **RoomPlan 精度边界与扫描最佳实践** | [`plans/iphone/roomplan_accuracy_and_cad_export.md`](../iphone/roomplan_accuracy_and_cad_export.md) §1, §4.1 | 用于 App 内的扫描引导提示("慢速移动 0.3 m/s""清理杂物")和精度免责声明 |
| R3 | **导出转换链 USDZ ↔ glTF/DXF** | [`plans/iphone/roomplan_accuracy_and_cad_export.md`](../iphone/roomplan_accuracy_and_cad_export.md) §3 | Transcode Worker 复用其 Python/Swift 思路,CrowdRoom 只取 USDZ → glTF 一条 |
| R4 | **L3/L4 节点 + 属性的语义抽象**(房间是 L3、家具是 L4、`category/attributes/material` | [`plans/PRISM/03_data_schema.md`](../PRISM/03_data_schema.md) §3.2 | CrowdRoom 的"分层 = L1/L2/L3/L4 的简化映射":墙/地→L2 度量,家具→L4 语义节点;4 层图层是 PRISM 四层的**降维投影** |
| R5 | **简易方案的快速验证路径**(一人一机一周跑通) | [`plans/iphone/iphone_simplified_plan.md`](../iphone/iphone_simplified_plan.md) §五 | 直接借作 CrowdRoom MVP 的扫描端工时基线 |
### 6.3 暂不引入的 PRISM 特性(边界)
| 不引入 | 理由 | 何时再考虑 |
|--------|------|-----------|
| **Pipeline B 重定位** ([`05_pipeline_B_relocalization.md`](../PRISM/05_pipeline_B_relocalization.md)) | CrowdRoom 没有"机器人上线"的概念,无需 CLIP+ICP 握手 | 若未来做 AR Quicklook 多次访问对齐才需要 |
| **Pipeline C 在线感知** ([`06_pipeline_C_online_perception.md`](../PRISM/06_pipeline_C_online_perception.md)) | ZED 2i 不在消费端硬件清单里 | 永久不引入(消费级路线决策) |
| **Pipeline D 巩固 / Delta 差异记忆** ([`07_pipeline_D_consolidation.md`](../PRISM/07_pipeline_D_consolidation.md)) | 用户每次扫描视为**独立作品**而非同一空间的更新 | 若做"扫描日记/同一房间历史对比"功能再启用 |
| **KeyframeEvidence、Anchor、Delta 字段** ([`plans/PRISM/03_data_schema.md`](../PRISM/03_data_schema.md) §3.2.1) | 这些是为机器人翻案与巩固设计的,与社区浏览无关 | 永久不引入 |
| **Neo4j / Cypher 查询** | 消费级查询用 Postgres 全文索引足够 | 若引入"空间 SQL"P2)再讨论 |
| **PostGIS / 专业空间查询、LOD、楼层拼接** | 用户已明确划入 P2/未来 | 当单房间日活上 10 万级、用户主动要"按城市/按户型查询"才上 |
> **原则**CrowdRoom 是 PRISM 的**只写入口 + 只读消费**;它产出的数据可被 PRISM 后续 import 作为先验地图源("普通用户贡献先验"是诱人的长期愿景,但**不在 MVP 范围内**)。
---
## 7. MVP 范围与非目标
### 7.1 MVP 8 周内能交付(围绕 §3 的 8 条 user stories
| 模块 | 交付物 |
|------|--------|
| iOS AppTestFlight | RoomPlan 采集 + USDZ/JSON 导出 + 上传 + 标签 + 隐私脱敏(人脸模糊) |
| Web 前端 | 列表页 / 详情页 / R3F 渲染器 / 4 层图层切换 / 公共素材替换 / 评论点赞 |
| Supabase 后端 | Auth、`rooms / layers / remixes / comments / likes / assets` 7 张核心表、Storage 桶、上传回调 Edge Function |
| Transcode Worker | USDZ → `.glb`Draco 压缩) + 生成 `layer_manifest.json`4 层引用) |
| 公共资产库 | ≥ 30 件家具 `.glb` + ≥ 20 种 PBR 材质(CC0 来源) |
| 内容审核 | 上传时静态规则 + 人工 review 队列(暂不做 AI 审核) |
### 7.2 明确不做(MVP 外)
- ❌ Android / Web 端采集(RoomPlan 仅 iOS**且不引入 Android ARCore 替代**——避免数据双标)
- ❌ 实时多人协同编辑(Remix 走 fork 模型,不走 OT/CRDT
- ❌ 空间 SQL / 任意自定义图层 / PostGIS 查询(P2
- ❌ LOD、楼层拼接、跨房间空间索引(P2)
- ❌ 商品化(链接到电商)、付费墙、订阅
- ❌ 机器人接入 / PRISM Pipeline B-D 任何一项
- ❌ 自训练 3D 基础模型(家具识别一律用 RoomPlan 内置语义 + 公共资产匹配)
---
## 8. 风险与开放问题(≤ 5 条)
| # | 风险 / 开放问题 | 当前判断 | 待后续子任务回答 |
|---|----------------|---------|-----------------|
| RK-1 | **RoomPlan 仅 iOS 且需 LiDAR**iPhone 12 Pro+ | 接受为前提,等同于早期 Polycam 的市场范围;不做 Android 替代 | 是否在 Web 端也开放"上传第三方 USDZ"作为 PC 用户入口? |
| RK-2 | **`.usdz` 在 Web 端兼容性差**Three.js 无原生 USDZ loader | 服务端强制转 `.glb`Web 端**只见 glTF** | 转码失败率、`.usdz` 中嵌入纹理/动画的边界由 [`02_transcode_pipeline.md`](02_transcode_pipeline.md)(待建)回答 |
| RK-3 | **UGC 内容审核**:色情、违法建筑、他人住宅未授权扫描 | MVP 走"上传时声明 + 举报下架 + 人工 review";不上 AI 审核 | 法律边界(中国大陆 vs 海外)、举报响应 SLA 由 `10_governance.md`(待建)回答 |
| RK-4 | **隐私脱敏**:纹理里可能包含人脸、身份证、品牌 logo、镜子里的人 | 默认开启端侧 Vision 人脸检测 + 高斯模糊;镜面区域参考 PRISM `no_update_zone` 思想做警告 | 脱敏算法细节、用户能否关闭、是否服务端二次扫描由 `01_data_schema.md` + `09_privacy.md`(待建)回答 |
| RK-5 | **存储与带宽成本**:单个房间 `.usdz` 550 MB`.glb` 压后 1–10 MB;千用户日活即可烧光免费额度 | MVP 用 Supabase 免费额度 + Cloudflare R2 零出口费;设单用户上传配额 | 配额数值、冷热分层策略、缩略图分级由 `02_transcode_pipeline.md` 回答 |
---
## 9. 下一章预告
| 子任务 | 待产出 | 关注问题 |
|--------|--------|---------|
| `01_data_schema.md` | Supabase 7 张表 DDL、`layer_manifest.json` Schema、与 PRISM L1-L4 的字段映射 | RK-4 隐私字段、§6 R4 复用怎么落 |
| `02_api_contract.md` | REST/PostgREST + Edge Function 端点表 | 上传协议、转码回调、Remix fork API |
| `03_ios_app_plan.md` | iOS App 模块拆解 + 隐私脱敏实现 | US-1, US-2, US-8 |
| `04_web_app_plan.md` | Web 前端组件树 + R3F 图层渲染策略 | US-3~US-7 |
---
**章节版本**v0.1 · 草案
**关键收获**CrowdRoom 是 PRISM 的消费级前台;走 Supabase + Three.js + iOS-RoomPlan 的三件套路线;MVP 8 周覆盖 8 条核心 user stories;专业 GIS 与 PRISM Pipeline B/C/D 明确划在 MVP 之外。