关于 scenario-orbit-views
scenario-orbit-views 用于从单张参考图制作角度一致的多视图图像,面向需要角色或物体视图集的创作者。它以本地 Blender 网格和相机布局固定轮廓、比例与透视,再由图像模型重绘。
主要功能
- 01从单张图片生成无纹理 3D 网格
- 02用 Blender 渲染多角度灰模布局
- 03以原图为参考重绘各视图
- 04可选去背景并添加棚拍阴影
- 05通过 MCP 工具执行生成步骤
适用场景
- 01为角色制作多角度参考图
- 02生成俯视及环绕视图
- 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.mdscripts/compose_layout.pymatch_view.pyrender_grounded.pystudio_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 环境。不带参数运行时,每个脚本都会打印用法说明。
示例:一个角色的八个视图加俯视图
-
使用
upload_asset上传用户的图片(或生成一张纯色背景、镜头位于上方的图片), 然后调用upload_asset_complete。 -
使用用户的描述(“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保存。 -
使用
search查找天空盒模型(target="models",query="skybox",public=true,正如scenario-skyboxes所示;recommend不支持天空盒,可能会返回边缘无法拼接的通用图像模型),并生成一张与图片风格相符的全景图,提示词为 “视点位于开阔空旷地面的中央,站立视角,地面清晰可见且环绕四周,无人”。下载该图。 -
运行
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与图片并排打开进行确认,因为正面和背面可能会得到相似的分数。 -
运行
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。检查每个布局图:灰模必须站在地面上,阴影应位于其下方。 -
上传每个
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}用于描述接触关系,例如“她的靴子恰好踩在黏土模型双脚接触地面的潮湿鹅卵石上”。对于图片中看不到的部分(例如背后的盾牌、包袋数量),请添加一行说明。 -
按每批不超过 32 个调用
jobs_wait。对每个结果调用asset_download,并生成包含所有视图的联系表。仅重新生成失败的视图;使用相同提示词重新运行通常就能修复偶发问题。 -
透明素材集:使用
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。 - 不查看就相信视图:检查联系表,确认没有多余肢体、左右侧错误或残留灰色黏土。