Skip to main content
场景模型可以用文字描述或 360° 全景图构建可探索的 3D 场景,即 .spz 格式的高斯泼溅。本指南走完整个流程:
  1. 创建:用 POST /v1/scenes/pano 根据描述文字创建场景。你会得到 .spz、生成的全景图,以及一个由带位姿图像组成的 initial 批次。
  2. 生成:用 POST /v1/scenes/generate 从你选定的相机生成新图像,它们成为一个 generated 批次。
  3. 重建:用 POST /v1/scenes/reconstruct 基于这两个批次重建场景,得到更新后的 .spz。
每一步都是异步任务:立即返回以 scn_ 开头的任务 ID,之后轮询 GET /v1/scenes/{task_id},直到状态为 ready。 设置 VIGGLE_API_KEY 后即可直接运行下方示例,无需其他输入。

准备工作

  • 在 Viggle 控制台创建 API 密钥,并导出为 VIGGLE_API_KEY。
  • 一段文字描述,最多 1000 个字符;或一张 360° 全景图的公开 URL。
  • 积分:无需——场景任务目前不消耗积分。

核心概念

  • 会话:每个请求都带一个由你自定的 sessionId(1–128 个字母、数字、_ 或 -)。一个会话包含一个场景及其图像批次,且同一时间只运行一个任务——同一会话中,请等上一个任务结束后再提交下一个。
  • 批次:会话中一组带位姿的图像。pano 生成 initial 批次,每次 generate 生成一个 generated 批次。generate 和 reconstruct 在 referenceBatchIds 中接收的就是它们的 batchId。
  • 相机:位姿是场景坐标系中的 4 × 4 相机到世界矩阵(c2w)。批次中的每张图像都附带其 c2w,因此选择新相机最简单的方法是移动一个现有相机。

构建、扩展并重建

脚本创建一个场景,保存 scene.spz 和 panorama.png,再从第一个视图向侧面平移 0.3 个单位的相机生成新视图,然后重建并保存 scene-v2.spz。
用任何支持 SPZ 高斯泼溅的查看器打开 scene.spz 和 scene-v2.spz。

响应

每次提交都会立即返回 processing 状态的任务:
轮询 GET /v1/scenes/{task_id},直到 status 为 ready、failed 或 cancelled。就绪后 result 包含哪些内容取决于操作: 每个 outputBatch.views[] 条目包含图像 url、相机 c2w 和 intrinsic。签名链接有效期为 3 小时,过期后再查询一次任务即可拿到新链接;任务结束后约 72 小时内可以查询。全部字段见查询场景任务。

使用自己的全景图

在第 1 步中把 prompt 换成 panoramaUri:
如需把全景图按指定位姿和比例放入你自己的世界,让所有相机都以你的坐标返回,请使用 POST /v1/scenes/custom-pano,并传入 panoramaC2w 和 metersPerUnit。

将结果保存到自己的存储

在任意请求中加上 spzOutputUrl,或带 spz、preview、panorama 的 outputUris,Viggle 就会用 PUT 把这些文件上传到你的地址。S3、R2 或 GCS 的预签名上传链接均可。上传到你地址的 .spz 不会由 Viggle 保留,结果中的 spz.url 即为你的地址。详见创建场景中的“上传到自己的存储”一节。

任务失败时

  • 提交时返回 409:该会话已有任务在运行。error.details.running_task_id 给出该任务,等它结束后再提交。
  • 任务以 INVALID_REQUEST 失败:模型拒绝了输入,例如使用了其他会话的批次。修正后再重试。
  • 任务以 PROCESSING_FAILED 失败,或状态为 cancelled:重新提交同样的请求。
  • 轮询时返回 404:任务 ID 错误、任务属于其他账号,或已超过 72 小时的保留期限。

创建场景

描述文字、全景图、参考图和质量。

生成场景视图

相机、投影方式、视场角和 seed。

重建场景

用你的批次重建 .spz。

查询场景任务

任务对象、结果字段和错误码。