关于 morph-ppt-3d
morph-ppt-3d 扩展 morph-ppt,提供使用 .glb 模型和 Morph 转场制作 PowerPoint 演示文稿的指导,面向演示文稿创作者。它补充模型发现流程,以及视觉设计和版式检查规则。
主要功能
- 01.glb 兼容性指导
- 023D 模型发现流程
- 03模型许可提醒
- 04配色方案与字体组合
- 05文本、对比度与演讲者备注规则
- 06视觉元素检查点
适用场景
- 01围绕 3D 模型制作演示文稿
- 02为演示主题寻找合适模型
- 03应用一致的演示文稿样式
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ iofficeai/ officecli --skill morph-ppt-3d安装后在 Claude Code 中输入/morph-ppt-3d确认已加载。
详细介绍
Morph PPT — 3D 扩展
本技能扩展了 morph-ppt。morph-ppt 的所有规则(命名、重影、设计、验证)完全适用。
本文件涵盖3D 专属内容,以及一套增强的设计系统,将 morph-ppt 的美学与具体的配色方案、字体搭配和布局质量准则相结合。
环境准备
如果缺少 officecli:
- macOS / Linux:
curl -fsSL https://d.officecli.ai/install.sh | bash - Windows(PowerShell):
irm https://d.officecli.ai/install.ps1 | iex
运行 officecli --version 进行验证(如果 PATH 尚未生效,请打开新的终端)。如果安装失败,请从 https://github.com/iOfficeAI/OfficeCLI/releases 下载二进制文件。
适用场景
- 用户需要一个包含
.glb3D 模型和 Morph 过渡效果的.pptx。
3D 模型兼容性检查(生成前)
- 仅支持
.glb格式。如果用户提供的是.fbx/.obj/.blend/.usdz/.gltf,请让其先转换为.glb(例如通过 Blender 导出)。 - 如果用户没有模型,请遵循下方的模型查找流程。
- 所有文件(
.glb、.pptx、构建脚本)必须位于同一工作目录中。
模型查找流程(用户没有模型时)
当用户给出了主题但没有 .glb 文件时,应主动帮助其找到匹配的模型,而不只是列出网站。
第 1 步:理解主题并建议模型方向
根据用户的主题,建议适合的 3D 模型类型:
| 主题类型 | 模型建议 | 示例 |
|---|---|---|
| 产品/品牌 | 实际产品或相似产品 | "咖啡品牌" → 咖啡杯、咖啡机、咖啡豆 |
| 动物/角色 | 动物或吉祥物 | "狐狸吉祥物" → 狐狸 3D 模型 |
| 建筑/空间 | 建筑、房间或结构 | "新办公室" → 办公楼、室内空间 |
| 交通工具 | 交通工具本身 | "电动车发布" → 汽车、摩托车、自行车 |
| 食物/烹饪 | 菜品或食材 | "日本料理" → 寿司拼盘、拉面碗 |
| 科技/电子设备 | 设备本身 | "手机发布" → 手机、平板、笔记本电脑 |
| 自然/科学 | 相关主体 | "太阳系" → 行星、太阳、地球 |
| 抽象概念 | 象征性物体 | "团队合作" → 拼图、齿轮、桥梁 |
告诉用户:"您的主题是 [X]。我建议使用 [描述] 的 3D 模型。以下是一些可以找到此类模型的免费来源:"
第 2 步:搜索模型(由 Agent 驱动)
主动代表用户搜索模型。 不要只列出网站,而是真正找到候选模型。
搜索策略(按顺序尝试):
-
网络搜索与主题匹配的免费 GLB 模型:
Search: "[topic keyword] 3d model glb free download" Example: "fox 3d model glb free download" -
Sketchfab API(搜索无需认证):
curl -s "https://api.sketchfab.com/v3/search?type=models&q=[keyword]&downloadable=true&archives_flavours=glb" \ | python3 -c " import json, sys data = json.load(sys.stdin) for m in data.get('results', [])[:5]: print(f\"Name: {m['name']}\") print(f\"URL: https://sketchfab.com/3d-models/{m['slug']}-{m['uid']}\") print(f\"Likes: {m.get('likeCount', 0)}, License: {m.get('license', {}).get('label', 'unknown')}\") print() " -
Poly Pizza(可直接下载 GLB,全部免费):
# Search results page — parse for download links curl -s "https://poly.pizza/api/search/[keyword]" 2>/dev/null -
Khronos glTF-Sample-Assets(保证可用,始终可获取):
# Direct download — no auth, no API, always works curl -L -o model.glb "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/[ModelName]/glTF-Binary/[ModelName].glb"可用模型:Duck、Fox、Avocado、BrainStem、CesiumMan、DamagedHelmet、FlightHelmet、Lantern、Suzanne、WaterBottle 等。
第 3 步:向用户展示候选模型并请求确认
向用户展示 2–3 个模型选项,包括:
- 模型名称和来源
- 预览链接(Sketchfab URL 或说明)
- 许可证信息
- 该模型为何适合其主题
示例回复:
Based on your topic "fox mascot", here are some models I found:
1. Fox (Khronos sample)
Direct download, guaranteed compatible
Why: clean fox model, good for mascot/character decks
2. Low Poly Fox (Poly Pizza)
URL: https://poly.pizza/m/xxx
License: CC0 (completely free)
Why: low-poly style, good fit for clean minimal design
3. Cartoon Fox (Sketchfab)
URL: https://sketchfab.com/3d-models/fox-xxx
License: CC BY 4.0 (free, commercial use ok)
Why: expressive face, high detail
Which one do you want? I'll download it and start building.
在下载前等待用户确认。 未经询问不得下载。
第 4 步:下载已确认的模型
用户确认后,直接下载:
# For Sketchfab (if user has the download URL)
curl -L -o model.glb "[download_url]"
# For Khronos samples (always works)
curl -L -o model.glb "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Assets/main/Models/Fox/glTF-Binary/Fox.glb"
下载完成后,进行验证:
- 文件存在且不为空
- 文件扩展名为
.glb - 文件大小小于 50MB
如果 Sketchfab 要求登录才能下载,请告诉用户:
"下载此模型需要登录 Sketchfab。你可以从页面获取 .glb 文件并分享给我。或者我可以先用 Khronos 示例模型做一个演示版本?"
第 5 步:当用户说“随便”/“你决定”/“做个演示就行”时
不要随便抓取一个模型。 首先引导用户明确 PPT 主题:
好的!模型由我来处理,但先确认一下主题方向,好让模型与内容匹配:
- 科技/产品:耳机、手机、机器人……
- 动物/角色:可爱宠物、卡通角色……
- 建筑/空间:建筑、室内、城市……
- 食物/生活方式:菜肴、日常物品……
- 其他:直接告诉我你的想法
请选择一个方向,或直接给我一个主题关键词。
用户确认方向后,再搜索并推荐模型。
第 6 步:当用户想自己查找模型时
提供具体的网站链接,并附上逐步指引:
推荐的 3D 模型网站:
- Sketchfab(最大的 3D 模型平台)
- 链接:https://sketchfab.com/search?q=[keyword]&type=models&downloadable=true
- 筛选步骤:搜索关键词 → 勾选 "Downloadable" → 格式选择 "glTF" → 按 "Likes" 排序
- 下载时,选择 glTF (.glb) 格式
- 注意:部分模型需要免费注册后才能下载
- Poly Pizza(全部为免费低多边形模型)
- 链接:https://poly.pizza/
- 全部采用 CC0 许可 — 点击 Download 即可直接获得 .glb 文件
- 最适合:极简或卡通风格的演示
- Sketchfab 热门分类
- Free3D(通用免费模型网站)
- 链接:https://free3d.com/3d-models/glb
- 注意:使用前请检查许可类型
- TurboSquid Free(专业模型网站的免费板块)
下载完成后,请将 .glb 文件分享给我。如果下载的是 .gltf 文件夹,请使用 Blender 将其转换为 .glb。
第 7 步:当用户提供关键词并要求 Agent 搜索时
搜索前先提醒 token 成本:
我可以帮你搜索,但网络搜索会消耗额外的 token。你希望选择哪种方式:
A. 由我搜索 — 我使用 Sketchfab API 并推荐 2-3 个选项(会消耗少量 token) B. 自助查找 — 我提供搜索链接和筛选步骤,你自行挑选后分享给我(不消耗额外 token)
选 A 还是 B?
如果用户选择 A,则继续执行第 2 步(由 Agent 驱动的搜索)。 如果用户选择 B,则继续执行第 6 步(自助指引)。
许可提醒
在确认下载前,务必提醒:“下载前请检查模型许可。CC0 / CC BY = 可免费使用;CC BY-NC = 仅限非商业用途。”
视觉设计系统(4.0 增强)
morph-ppt 提供基础设计规则。本节从 PPT Creator 中补充具体的配色方案、字体搭配和版式质量规则,为 AI 提供更丰富的变化与更可靠的约束。
配色方案(每份演示文稿选一种,或混合使用)
选择与主题氛围相匹配的配色,不要默认使用通用蓝色。
| 配色方案 | 主色 | 辅色 | 强调色 | 正文颜色 | 次要/说明文字 |
|---|---|---|---|---|---|
| Coral Energy | F96167(珊瑚色) | F9E795(金色) | 2F3C7E(藏青) | 333333 | 8B7E6A |
| Midnight Executive | 1E2761(藏青) | CADCFC(冰蓝) | FFFFFF | 333333 | 8899BB |
| Forest & Moss | 2C5F2D(森林绿) | 97BC62(苔绿) | F5F5F5(奶油色) | 2D2D2D | 6B8E6B |
| Charcoal Minimal | 36454F(炭灰) | F2F2F2(米白) | 212121 | 333333 | 7A8A94 |
| Warm Terracotta | B85042(赤陶色) | E7E8D1(沙色) | A7BEAE(鼠尾草绿) | 3D2B2B | 8C7B75 |
| Berry & Cream | 6D2E46(莓红) | A26769(灰玫瑰) | ECE2D0(奶油色) | 3D2233 | 8C6B7A |
| Ocean Gradient | 065A82(深蓝) | 1C7293(青蓝) | 21295C | 2B3A4E | 6B8FAA |
| Teal Trust | 028090(青色) | 00A896(海沫绿) | 02C39A(薄荷绿) | 2D3B3B | 5E8C8C |
| Sage Calm | 84B59F(鼠尾草绿) | 69A297(桉树绿) | 50808E | 2D3D35 | 7A9488 |
| Cherry Bold | 990011(樱桃红) | FCF6F5(米白) | 2F3C7E(藏青) | 333333 | 8B6B6B |
规则:
- 一种颜色占主导(视觉权重 60-70%),1-2 种辅助色调,一种强调色
- 浅色背景:正文使用正文颜色,说明文字使用次要颜色
- 深色背景:正文使用辅色或
FFFFFF,说明文字使用次要颜色 - 如需更多灵感,可浏览
../morph-ppt/reference/styles/INDEX.md,其中有 50 多种视觉风格,按氛围分类(深色、浅色、暖色、鲜艳、黑白)。阅读style.md了解设计理念,参考build.sh了解实现方式。学习其思路,不要照搬坐标
字体搭配(每份演示文稿选一种)
| 标题字体 | 正文字体 | 适用场景 |
|---|---|---|
| Georgia | Calibri | 正式商务、金融 |
| Arial Black | Arial | 醒目营销、产品发布 |
| Calibri | Calibri Light | 简洁企业风、极简风 |
| Cambria | Calibri | 传统专业风 |
| Trebuchet MS | Calibri | 亲和科技风、初创企业 |
| Impact | Arial | 醒目标题、主题演讲 |
| Palatino | Garamond | 优雅编辑风、奢侈品 |
| Consolas | Calibri | 开发者工具、技术文档 |
硬性规则(强制执行,无例外)
H4:正文最小 16pt: 所有正文、卡片内容和项目符号文字必须 >= 16pt。"内容放不下"不是理由——应减少文字、拆分幻灯片或减少卡片数量。例外:图表坐标轴标签(<=12pt)、简短副标签(<=14pt,最多 5 个词)、脚注。
H6:深色背景对比度:
当幻灯片背景亮度 < 30%(例如 1E2761、36454F、000000)时,所有正文、卡片内容、图表标签和图标填充都必须使用白色(FFFFFF)或近白色(亮度 > 80%)。深色背景上绝不能将中灰色或暗淡色用作正文。
H7:必须包含演讲者备注: 每张内容幻灯片(非标题页或结束页)都必须包含演讲者备注。使用:
officecli add deck.pptx '/slide[N]' --type notes --prop text="..."
视觉元素检查点
每 3 张内容幻灯片,至少有 1 张必须包含非文本视觉元素:
| 视觉类型 | 实现方式 |
|---|---|
| 彩色圆形中的图标 | ellipse 形状 + 居中的文字/数字叠加 |
| 彩色色块 | 带填充的 preset=roundRect |
| 大号统计数字 | size=64, bold=true,下方配小号标签 |
| 图表 | --type chart(柱状图/饼图/折线图) |
| 渐变背景 | background=COLOR1-COLOR2-180 |
| 形状组合 | 圆形 + 连接线构成的图示 |
纯文字幻灯片仅适用于:引语、代码示例、纯表格。
3D 模型插入规则
每张幻灯片都要重新添加模型,切勿克隆
morph_clone_slide 会将模型复制为冻结的 XML。被克隆的模型无法参与 Morph。
每张幻灯片都必须独立调用 add --type 3dmodel,并使用相同的 name 属性。
⚠️ 关键:如果克隆了一张已包含 3D 模型的幻灯片,旧模型的 XML 也会被一并复制。这会在新幻灯片上产生两个同名的 model3d 元素。PowerPoint 无法处理这种冲突,并会在修复过程中删除模型内容。
如果必须为场景角色克隆幻灯片,在添加新模型之前,请先立即移除克隆出的模型:
# After cloning slide 1 to slide 2:
officecli remove deck.pptx '/slide[2]/model3d[1]' # remove the frozen clone
officecli add deck.pptx '/slide[2]' --type 3dmodel ... # add fresh model
推荐做法:完全不要克隆包含 3D 模型的幻灯片。 先创建所有空白幻灯片,然后在每张上重新添加模型。
# Slide 1
officecli add deck.pptx '/slide[1]' --type 3dmodel \
--prop path=model.glb --prop 'name=!!model-hero' \
--prop x=16cm --prop y=1cm --prop width=16cm --prop height=16cm \
--prop roty=0
# Slide 2
officecli add deck.pptx '/slide[2]' --type 3dmodel \
--prop path=model.glb --prop 'name=!!model-hero' \
--prop x=0.5cm --prop y=1cm --prop width=18cm --prop height=17cm \
--prop roty=50
可控属性
| 属性 | 作用 | 说明 |
|---|---|---|
x, y | 幻灯片上的位置 | 标准幻灯片坐标 |
width, height | 框架尺寸 | 模型在此框架内渲染 |
name | 形状名称 | 各幻灯片之间必须保持一致,才能实现 Morph |
roty | Y 轴旋转(度) | 主要叙事轴 |
rotx | X 轴倾斜(度) | 范围 -25 到 +40。参见“镜头语言”一节 |
rotz | Z 轴翻滚(度) | 很少需要 |
请勿手动设置
meterPerModelUnit— 根据 GLB 包围盒自动计算preTrans— 为模型居中自动计算camera的深度/位置 — 自动计算以适配模型- 切勿对任何 3D 变换参数使用
raw-set
模型与内容的布局
核心原则:模型就是主角
模型应当像演示文稿的主角,而不是侧边栏装饰。 文字为模型服务;模型不应只是装饰文字。
尺寸对比规则(强制)
相邻幻灯片的模型区域面积比必须 >= 1.5 倍或 <= 0.67 倍。
面积按 width × height 计算。如果第 N 张的模型为 16×15=240 cm²,则第 N+1 张必须 >= 360 或 <= 160。
切勿在连续幻灯片上使用相近的尺寸。 这是提升视觉张力的最重要规则。
| 尺寸等级 | 宽度 | 高度 | 面积(约) | 适用场景 |
|---|---|---|---|---|
| XL(出血) | 28-36cm | 22-28cm | 600-1000 | 特写,模型超出幻灯片边缘 |
| L(主视觉) | 18-24cm | 15-19cm | 270-456 | 标题页、结束页、戏剧性时刻 |
| M(分栏) | 13-17cm | 12-16cm | 156-272 | 带文字的标准内容页 |
| S(点缀) | 5-10cm | 5-10cm | 25-100 | 数据密集页,模型作为图标 |
版式模式(6 种)
A — 模型在右,内容在左(内容页) 内容位于 x=1-14cm。模型位于 x=15-20cm,宽度 14-18cm。
B — 模型在左,内容在右(与 A 交替使用) 模型位于 x=0-2cm,宽度 14-18cm。内容位于 x=18-32cm。
C — 模型居中,文字叠加(标题页/结束页) 模型居中且尺寸较大(18-24cm)。文字位于幻灯片顶部或底部。
D — 模型位于角落小图,内容为主(数据页) 模型为 5-10cm,位于任意角落。内容占据其余空间。
E — 模型作为背景(冲击/引语页) 模型为 XL(28-36cm),居中,并被幻灯片边缘部分裁切。 文字直接叠加在模型区域上,使用高对比度颜色。 模型成为“画布”,文字位于模型所占空间之内。
# Pattern E: model fills slide as backdrop
officecli add deck.pptx '/slide[N]' --type 3dmodel \
--prop path=model.glb --prop 'name=!!model-hero' \
--prop x=-2cm --prop y=-2cm --prop width=38cm --prop height=24cm \
--prop roty=45 --prop rotx=10
# Text overlaid on model
officecli add deck.pptx '/slide[N]' --type shape \
--prop 'name=#sN-quote' --prop text="Key insight here" \
--prop x=3cm --prop y=7cm --prop width=28cm --prop height=5cm \
--prop size=44 --prop bold=true --prop color=FFFFFF --prop fill=none
F — 模型出血边缘(过渡/预告页) 模型部分移出屏幕之外(x 或 y 为负值,或 x+width > 33.87cm)。 只可见模型的一部分,暗示画面之外还有更多内容。
# Pattern F: model bleeds off right edge
officecli add deck.pptx '/slide[N]' --type 3dmodel \
--prop path=model.glb --prop 'name=!!model-hero' \
--prop x=20cm --prop y=-1cm --prop width=24cm --prop height=22cm \
--prop roty=70
版式递进
同一版式不得在连续幻灯片上重复使用。示例:
Slide 1: C (centered hero, L)
Slide 2: E (backdrop close-up, XL) ← 1.5x+ area jump
Slide 3: A (model right, M) ← pull back
Slide 4: F (bleed edge, L) ← push in
Slide 5: D (small corner, S) ← dramatic pull back
Slide 6: B (model left, M) ← grow
Slide 7: C (centered closing, L) ← push in
文本版式安全(必须遵守)
文本框不得相互重叠,也不得与模型框重叠。
规则:
- 标题与正文不得冲突。 如果标题换行为 2 行,正文的
y值必须考虑标题的实际高度,而非计划高度。安全公式:body_y = title_y + title_height + 0.5cm - 固定高度的文本框具有风险。 如果文本内容超出预期长度,将会不可见地溢出。请使用充足的高度:标题
3-4cm,正文6-8cm,项目符号8-10cm。 - 模型框与文本框之间的间距 >= 1cm。 计算方式:若模型位于
x=15cm,则文本的x + width必须 <=14cm。 - 在 C 版式(模型居中 + 文字叠加)中: 文字应放在幻灯片顶部(
y=0.5-2cm)或底部(y=14-17cm),而不要放在模型所在的垂直中部(y=3-13cm)。 - 每张幻灯片制作完成后,核对坐标:
officecli get deck.pptx '/slide[N]' --depth 1 # Check: no two shapes share overlapping x/y/width/height ranges
模型出血指南
并非每个模型被裁切后都好看。 出血(E/F 版式)最适合以下情况:
- ✅ 对称物体(球体、头盔、瓶子)——任何裁切方式看起来都很有意图
- ✅ 大型平面物体(汽车、建筑)——局部视图暗示尺度
- ✅ 裁切的是非关键部分(背景、底座、支架)
出血不适合以下情况:
- ❌ 角色/动物模型——裁掉耳朵、尾巴或四肢会显得残缺
- ❌ 小型精细模型——裁切会丢失想要展示的细节
- ❌ 被裁切的部分恰恰是最具辨识度的特征
对于角色/动物模型(如狐狸、鸭子、牛油果): 在所有幻灯片上保持模型完整可见。使用尺寸变化(L→M→S)来营造节奏,而不是出血裁切。改用 rotx 来获得角度变化。
镜头语言
三种工具协同工作:roty(环绕)、rotx(俯仰)、width/height(缩放)。
镜头类型(每套演示文稿需使用 >= 3 种不同类型)
| 镜头 | 尺寸 | rotx | 适用场景 |
|---|---|---|---|
| 建立镜头 | L(18-24cm) | 0-5 | 标题、引言、结束页 |
| 四分之三侧面展示 | L(16-20cm) | 5-10 | 主视觉、第一印象 |
| 特写 | XL(28-36cm),裁切 | 0-10 | 功能重点、细节 |
| 俯视 | M(13-17cm) | 25-40 | 结构、概览 |
| 仰视 | L(16-20cm) | -15 至 -25 | 力量感、戏剧性 |
| 侧面轮廓 | M(13-16cm) | 0 | 外形、剪影 |
| 过肩镜头 | S(5-10cm) | 10-15 | 数据密集型,模型作为点缀 |
Content-Driven Camera
让镜头与幻灯片内容相匹配:
- "Front design" → 特写,
roty=0,XL 裁切 - "Side profile" → 侧面,
roty=90,M - "Internal structure" → 俯视,
roty=30, rotx=35,M - "Power/authority" → 仰视,
roty=20, rotx=-20,L - "Data & specs" → 过肩视角,
roty=60,S 置于角落
Rotation Rules
- 相邻 roty 差值:30-90°(< 30 会抖动,> 90 会让人迷失方向)
- 整体 roty 方向必须保持一致(不要来回切换)
- rotx 范围:-25 至 +40。相邻 rotx 差值 <= 20
- 全部幻灯片的总环绕角度:180-360°(从各个方向展示模型)
Example Shot Plan
| Slide | Shot | roty | rotx | Size | Pattern |
|---|---|---|---|---|---|
| 1 | 三四分之一正面主视图 | 30 | 8 | L 20×17 | C |
| 2 | 特写 | 0 | 5 | XL 30×24 | E |
| 3 | 侧面 | 80 | 0 | M 15×14 | A |
| 4 | 俯视 | 120 | 35 | M 14×13 | B |
| 5 | 仰视 | 170 | -20 | L 20×18 | F |
| 6 | 过肩视角 | 220 | 10 | S 8×7 | D |
| 7 | 全景建立镜头 | 320 | 5 | L 20×17 | C |
Workflow Integration with morph-ppt
Phase 2 additions (Planning)
在 brief.md 中添加一个 Model Choreography Table:
| Slide | Pattern | Size Tier | Model x,y,w,h | roty | rotx |
|---|---|---|---|---|---|
| 1 | C | L | 7,0.5,20,17 | 30 | 8 |
| 2 | E | XL | -2,-2,38,24 | 0 | 5 |
| ... | ... | ... | ... | ... | ... |
进入构建阶段前,验证面积比规则(相邻行之间 >= 1.5 倍)。
Phase 3 additions (Build)
由于模型无法克隆,构建脚本与标准 morph-ppt 有所不同:
- 先创建所有幻灯片(设置背景并添加 morph 过渡)
- 在第 1 张幻灯片上添加场景演员(
!!scene-*),然后克隆幻灯片以保持 morph 连续性 - 在每张幻灯片上重新添加 3D 模型(名称相同,roty/位置不同)
- 为每张幻灯片添加内容形状,并让前一张的内容以幽灵形式保留
model_positions = [
{"slide": 1, "x": "7cm", "y": "0.5cm", "w": "20cm", "h": "17cm", "roty": 30},
{"slide": 2, "x": "-2cm", "y": "-2cm", "w": "38cm", "h": "24cm", "roty": 0},
{"slide": 3, "x": "16cm", "y": "1cm", "w": "15cm", "h": "14cm", "roty": 80},
# ...
]
for pos in model_positions:
run("officecli", "add", OUTPUT, f"/slide[{pos['slide']}]", "--type", "3dmodel",
"--prop", f"path={MODEL}", "--prop", "name=!!model-hero",
"--prop", f"x={pos['x']}", "--prop", f"y={pos['y']}",
"--prop", f"width={pos['w']}", "--prop", f"height={pos['h']}",
"--prop", f"roty={pos['roty']}")
Phase 4 additions (Verification)
完成标准 morph 验证后,还需额外检查:
- 每张幻灯片恰好包含一个
model3d元素 - 所有模型的
name属性相同 - 相邻幻灯片的模型面积比 >= 1.5 或 <= 0.67
- 没有两张连续的幻灯片使用相同的布局模式
File Placement Rule
所有文件必须位于同一工作目录中。
交付物(恰好 4 个文件,不多不少):
.glb模型文件(deck 中使用的 3D 模型)- 输出的
.pptx - 构建脚本(可重复运行)
brief.md
不要创建额外文件,例如 outline.md、quality-report.md、test-report.md 等。所有规划内容写入 brief.md,所有验证输出打印到标准输出。多余文件会让用户困惑。
不要把模型文件分散放到无关的路径中。