mcpField
S
scenario-orbit-views

scenario-orbit-views

github.com/scenario-labs创意与媒体1.2k400 次安装1 天前更新
代码仓库

关于 scenario-orbit-views

scenario-orbit-views 用于从单张参考图制作角度一致的多视图图像,面向需要角色或物体视图集的创作者。它以本地 Blender 网格和相机布局固定轮廓、比例与透视,再由图像模型重绘。

主要功能

  1. 01从单张图片生成无纹理 3D 网格
  2. 02用 Blender 渲染多角度灰模布局
  3. 03以原图为参考重绘各视图
  4. 04可选去背景并添加棚拍阴影
  5. 05通过 MCP 工具执行生成步骤

适用场景

  1. 01为角色制作多角度参考图
  2. 02生成俯视及环绕视图
  3. 03制作透明背景的视图集

MCP 相关

图像模型、图生 3D 等生成步骤通过 Scenario MCP 工具完成;Blender 渲染及布局脚本在本地运行。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-orbit-views

安装后在 Claude Code 中输入/scenario-orbit-views确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
scripts/
compose_layout.py
match_view.py
render_grounded.py
studio_shadow.py

详细介绍

场景环绕视图

概述

让图像模型“从背后展示”时,模型会猜测几何形状,各个角度的尺寸、姿势和接地效果也会有所偏差。可靠的方法是在中间加入 3D 步骤:将主体重建为无纹理网格,为每个摄像机渲染灰色黏土布局,然后让具备参考图能力的图像模型根据原图为每个布局重新上色。网格固定了轮廓、比例和透视;原图则提供身份特征、颜色和质感。连接方式和核心生成循环:参见 scenario 技能。图像转 3D 模型的选择:scenario-3d。背景全景图:scenario-skyboxes。如果此处提到的相关技能不在可用技能中,请让用户安装它(npx skills add scenario-labs/skills --skill <name>);在无人值守的情况下,请根据工具架构继续操作,并指出缺少的技能。

Blender 步骤在本地 Shell 中运行,需要 Blender 4.x 或更高版本;所有生成操作都通过 MCP 工具完成。在首次付费步骤之前检查是否安装了 Blender(在 macOS 上,通常位于 /Applications/Blender.app/Contents/MacOS/Blender,而不在 PATH 中)。如果未安装,请让用户安装;或者在无人值守的情况下停止并报告:没有 MCP 工具能从指定摄像机渲染网格。

快速参考

步骤方法
源图片单个主体,完整身体并留有边距,背景纯色,摄像机位置已知(略高于视线水平,转动约 30 度)
网格使用 recommend 推荐图像转 3D 模型,仅生成几何体(无需纹理),使用 asset_download 下载 GLB
世界环境使用与艺术风格一致的天空盒全景图,视点四周为平坦开阔的地面
摄像机零位先运行 render_grounded.py --search,再运行 match_view.py,并通过目视确认
布局运行 render_grounded.py,然后运行 compose_layout.py:每个摄像机都包含背景、黏土模型和真实投射阴影
上传使用 upload_asset 并提供 file_size,PUT 各个分片,再调用 upload_asset_complete;每个布局上传一次
重新上色使用具备参考图能力的图像模型,设置 referenceImages: [layout, source],使用下方的提示词
无背景对重新上色后的画面使用背景移除模型,然后运行 studio_shadow.py
等待jobs_wait 每次最多接受 32 个 ID;使用 pending_job_ids 再次调用

所有四个脚本都由 Agent 在本地 Shell 中运行,而非由 MCP 服务运行。render_grounded.py 在 Blender 中运行(blender -b --factory-startup --python render_grounded.py -- ...);其他三个脚本需要安装 Pillow 和 numpy 的 Python 环境。不带参数运行时,每个脚本都会打印用法说明。

示例:一个角色的八个视图加俯视图

  1. 使用 upload_asset 上传用户的图片(或生成一张纯色背景、镜头位于上方的图片), 然后调用 upload_asset_complete。

  2. 使用用户的描述(“untextured mesh from one image”)推荐一个图像转 3D 模型;如果用户设置了预算,再提供 max_cost_cu。然后调用 model_schema_get,再使用 dry_run=true 调用 model_run 估价(图像转 3D 任务很昂贵;dry run 会拒绝缺少必需图像的负载,因此在源图尚不存在前为整个链路报价时,会按任意已上传的图片估价),接着设置 wait=false 并调用 jobs_wait。使用 asset_download 下载 GLB,并用 curl -L 保存。

  3. 使用 search 查找天空盒模型(target="models",query="skybox",public=true,正如 scenario-skyboxes 所示;recommend 不支持天空盒,可能会返回边缘无法拼接的通用图像模型),并生成一张与图片风格相符的全景图,提示词为 “视点位于开阔空旷地面的中央,站立视角,地面清晰可见且环绕四周,无人”。下载该图。

  4. 运行 blender ... render_grounded.py -- --glb hero.glb --out search --search,然后运行 python3 match_view.py hero.png search/cameras.json。最上排的方位角和仰角分别为下文的 <az> 和 <el>;将对应的 search/search_az..._el...png 与图片并排打开进行确认,因为正面和背面可能会得到相似的分数。

  5. 运行 blender ... render_grounded.py -- --glb hero.glb --pano world.png --out views --az0 <az> --elev <el> --only 00,02,04,06,08,10,12,14,top (眼睛高度环上有 16 个摄像机,彼此相隔 22.5 度;--height 设置全景图中的视点高度,--yaw 转动世界,--zoom 调整取景)。键值从摄像机零开始计数,而不是从主体正面开始,因此如果源图有旋转,键值 08 会显示同一旋转角度下的背面;如需让视图与主体正面垂直,请输出到另一个 --out,并将 --az0 设为搜索结果中主体正对摄像机的帧。然后运行 python3 compose_layout.py views。检查每个布局图:灰模必须站在地面上,阴影应位于其下方。

  6. 上传每个 layout_<key>.jpg。推荐一个用于参考图引导重绘的图像模型,并检查其 model_schema_get 是否列出 referenceImages(1024 方形尺寸、高质量档位和不透明背景效果不错)。使用 dry_run=true 为一张图估价(报价仅涵盖一个视图:启动任务前乘以视图数量),然后针对每个视图启动一个 model_run,设置 wait=false、referenceImages: ["<layout asset>", "<source asset>"],并使用以下提示词:

    图像 1 是精确的最终画面:一个纯灰色黏土质感的 3D 模型站在已完成背景的地面上,带有真实投影,视角与所需摄像机角度完全一致。图像 2 是 {kind} 的原始设计参考。将灰色黏土模型重绘为 {what},在身份、设计、材质和颜色上与图像 2 匹配:{details}。{finish}。严格遵循黏土模型:轮廓、姿势、比例、画面中的位置和大小,以及摄像机角度均保持不变。{ground};保留图像 1 中的投影。保留图像 1 的背景:地点、构图、透视和地平线均保持不变,采用 {background style} 风格,清晰且细节丰富。根据场景为 {kind} 布光:{light}。不得残留灰色黏土质感,不得添加其他角色或物体,不得出现文字。

    {ground} 用于描述接触关系,例如“她的靴子恰好踩在黏土模型双脚接触地面的潮湿鹅卵石上”。对于图片中看不到的部分(例如背后的盾牌、包袋数量),请添加一行说明。

  7. 按每批不超过 32 个调用 jobs_wait。对每个结果调用 asset_download,并生成包含所有视图的联系表。仅重新生成失败的视图;使用相同提示词重新运行通常就能修复偶发问题。

  8. 透明素材集:使用 recommend 推荐背景移除模型,从 model_schema_get 读取其图像字段,在每个重新绘制素材的 ID 上运行该模型(而不是重新进行一次 studio 重绘),然后下载,接着运行 python3 studio_shadow.py views/clay_<key>.png cut_<key>.png studio_<key>.png。此脚本会输出抠图覆盖了多少黏土主体,以及主体有多少部分落在抠图之外:如果某个视图与其他视图差异很大,或有角落未清理干净,就说明主体部分丢失或背景残留,需要重新进行背景移除。

常见错误

  • 在纯色背景上分别重绘每个角度:测试中,各视图的缩放比例偏差达 7% 到 53%。应重绘已固定好的布局,并抠出同一帧。
  • 将主体合成到纯色背景照片上:主体会显得悬浮,且地平线不会随相机移动。穹顶地面能从上方和下方呈现真实透视效果。
  • 添加第三张参考图,例如同一角度的上一视图:它的错误也会被复制(有一次运行在每个背面视图中都多出一个包)。除非确认额外参考图没有问题,否则只保留两张。
  • 对已完成的视图进行“harmonize”处理:这会重新裁切画面,破坏与黏土模型的对齐。
  • 跳过相机零位:这样视图 00 就与用户最初提供的图片不匹配。
  • 将模型 ID 或价格写死:使用 recommend 进行发现,用 dry_run=true 查询价格。
  • 向 jobs_wait 传入超过 32 个 ID,或轮询 job_get。
  • 不查看就相信视图:检查联系表,确认没有多余肢体、左右侧错误或残留灰色黏土。

评论

支持 Markdown