Files
Genarrative/docs/technical/MATCH3D_RODIN_ASSET_TAB_2026-05-10.md
2026-05-11 16:15:48 +08:00

3.0 KiB
Raw Blame History

抓大鹅 Rodin 3D 素材 Tab 接入方案 2026-05-10

1. 范围

本方案用于把抓大鹅结果页调整为多 Tab 工作台,并新增 3D素材 Tab。该 Tab 专门服务抓大鹅玩法内物件、奖励、障碍等 3D 素材的 Rodin 生成试验。

本次复用已有 Hyper3D Rodin Gen-2 后端安全代理,不新增 SpacetimeDB 表;草稿生成链路会把 Rodin 模型转存到 OSS并通过 Match3D 作品 profile 的 generatedItemAssets 恢复。不得把 Hyper3D API Key、上游下载 URL 或本地 Data URL 写成正式资产真相。

2. 页面结构

抓大鹅结果页拆为三个 Tab

  1. 作品信息:承接封面、游戏名称、标签、简介。
  2. 玩法配置:承接题材、消除次数、难度、参考图与局内数量摘要。
  3. 3D素材:展示 Rodin 素材列表,点击列表项进入详情生成页。

3D素材 Tab 的列表布局参考 RPG 结果页角色列表:移动端纵向卡片,桌面端多列紧凑卡片;卡片展示素材名和状态。详情页只保留模型预览、素材名称和 重新生成 按钮。

3. Rodin 任务边界

前端只维护当前页面内的临时重新生成任务状态;草稿生成得到的正式模型资产从 generatedItemAssets.modelSrc 恢复:

  1. 素材槽位名称。
  2. 模型预览。草稿生成的 /generated-match3d-assets/... GLB 必须通过同源 /api/assets/read-bytes 由后端换签并读取字节,前端再转成 Blob URL 后交给 Three.js GLTFLoader避免浏览器直接 fetch OSS 签名 URL 时被 CORS 拦截。
  3. 图生模型参考图只作为重新生成的隐藏输入来源,不在详情页展示。上传图片在前端直接读成 Data URL草稿生成的 /generated-match3d-assets/... 图片必须通过 /api/assets/read-bytes 转成 Data URL 后提交给 Hyper3D。
  4. Hyper3D taskUuidsubscriptionKey 仅用于重新生成过程,不在详情页展示。
  5. 查询到的状态、进度与下载文件列表仅作为内部状态,不在详情页展示。

正式资产链后续再接:

  1. 下载文件转存 OSS。
  2. asset_object 确认。
  3. asset_entity_binding 绑定到 Match3D 作品或物件槽位。

首版不得把上游下载 URL 直接写入 Match3D profile也不得把 Data URL 持久化到 SpacetimeDB。

4. 接口复用

继续使用既有前端 client

src/services/hyper3dModelGenerationService.ts

对应后端路由:

POST /api/assets/hyper3d/text-to-model
POST /api/assets/hyper3d/image-to-model
POST /api/assets/hyper3d/status
POST /api/assets/hyper3d/download

请求参数默认使用:

geometryFileFormat = glb
material = PBR
quality = medium
meshMode = Quad
previewRender = true
conditionMode = concat

5. 验收

建议执行:

npm run check:encoding
npm run test -- src\components\match3d-result\Match3DResultView.test.tsx
npm run typecheck

真实 Rodin 生成会消耗 Hyper3D Credit只在本地私密环境配置 HYPER3D_API_KEYRODIN_API_KEY 后手动验证。