morph-ppt-3d について
morph-ppt-3dは、.glbモデルとMorphトランジションを使ったPowerPoint作成の手引きを、morph-pptに追加するスキルです。プレゼン制作者向けに、モデル探しの手順とビジュアルデザイン・レイアウトの確認基準を示します。
主な機能
- 01.glbの互換性ガイド
- 023Dモデル検索ワークフロー
- 03モデルライセンスの注意事項
- 04カラーパレットとフォントの組み合わせ
- 05文字・コントラスト・発表者ノートの規則
- 06ビジュアル要素の確認ポイント
活用シーン
- 013Dモデルを使った資料の作成
- 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 モデル |
| 建築/空間 | 建物、部屋、または構造物 | 「新しいオフィス」→ オフィスビル、内装 |
| 車両/交通 | 車両そのもの | 「EV 発表」→ 車、自動二輪車、自転車 |
| 食べ物/料理 | 料理または食材 | 「日本食」→ 寿司の盛り合わせ、ラーメンの丼 |
| テクノロジー/ガジェット | デバイス | 「スマートフォン発表」→ スマートフォン、タブレット、ノート PC |
| 自然/科学 | テーマとなる対象 | 「太陽系」→ 惑星、太陽、地球 |
| 抽象的な概念 | 象徴的なオブジェクト | 「チームワーク」→ パズルのピース、歯車、橋 |
ユーザーには次のように伝えます:「あなたのトピックは [X] です。[説明] の 3D モデルを使うことをおすすめします。モデルを探せる無料のソースはこちらです。」
ステップ 2:モデルを検索する(エージェント主導)
ユーザーに代わって積極的にモデルを検索してください。 ウェブサイトを列挙するだけでなく、実際に候補を見つけてください。
検索方法(次の順に試してください):
-
トピックに合う無料の 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:ユーザーがキーワードを提示し、エージェントに検索を依頼する場合
検索の前に、トークンコストについて伝えてください。
検索できますが、ウェブ検索には追加のトークンを使用します。どちらをご希望ですか?
A. 私が検索する — Sketchfab API を使って検索し、2~3 件の候補をおすすめします(少量のトークンを使用します) B. 自分で探す — 検索リンクとフィルター手順を案内します。ご自身で選んで共有してください(追加トークンは不要です)
A と B のどちらにしますか?
ユーザーが A を選んだ場合は、ステップ 2(エージェントによる検索)に進みます。 ユーザーが B を選んだ場合は、ステップ 6(ユーザー自身で探す手順の案内)に進みます。
ライセンスに関する注意
ダウンロードを確定する前に、必ず次の注意を伝えてください。「ダウンロードする前にモデルのライセンスを確認してください。CC0/CC BY は無料で使用できます。CC BY-NC は非営利目的でのみ使用できます。」
ビジュアルデザインシステム(4.0 拡張)
morph-ppt は基本的なデザインルールを提供します。このセクションでは、PPT Creator の具体的なカラーパレット、フォントの組み合わせ、レイアウトの品質ルールを追加し、AI により多くの選択肢と、より確かな指針を提供します。
カラーパレット(デッキごとに1つ選ぶか、組み合わせます)
テーマの雰囲気に合ったパレットを選びます。汎用的な青を安易に選ばないでください。
| パレット | プライマリ | セカンダリ | アクセント | 本文テキスト | 淡色/キャプション |
|---|---|---|---|---|---|
| コーラルエナジー | F96167(コーラル) | F9E795(ゴールド) | 2F3C7E(ネイビー) | 333333 | 8B7E6A |
| ミッドナイトエグゼクティブ | 1E2761(ネイビー) | CADCFC(アイスブルー) | FFFFFF | 333333 | 8899BB |
| フォレスト&モス | 2C5F2D(フォレスト) | 97BC62(モス) | F5F5F5(クリーム) | 2D2D2D | 6B8E6B |
| チャコールミニマル | 36454F(チャコール) | F2F2F2(オフホワイト) | 212121 | 333333 | 7A8A94 |
| ウォームテラコッタ | B85042(テラコッタ) | E7E8D1(サンド) | A7BEAE(セージ) | 3D2B2B | 8C7B75 |
| ベリー&クリーム | 6D2E46(ベリー) | A26769(ダスティローズ) | ECE2D0(クリーム) | 3D2233 | 8C6B7A |
| オーシャングラデーション | 065A82(ディープブルー) | 1C7293(ティール) | 21295C | 2B3A4E | 6B8FAA |
| ティールトラスト | 028090(ティール) | 00A896(シーフォーム) | 02C39A(ミント) | 2D3B3B | 5E8C8C |
| セージカーム | 84B59F(セージ) | 69A297(ユーカリ) | 50808E | 2D3D35 | 7A9488 |
| チェリーボールド | 990011(チェリー) | FCF6F5(オフホワイト) | 2F3C7E(ネイビー) | 333333 | 8B6B6B |
ルール:
- 1色を視覚的な比重の60~70%にし、補助色を1~2色、アクセントカラーを1色使います
- 明るい背景では、本文に本文テキストの色、キャプションに淡色を使います
- 暗い背景では、本文にセカンダリまたは
FFFFFF、キャプションに淡色を使います - さらにアイデアを得るには、
../morph-ppt/reference/styles/INDEX.mdをご覧ください。雰囲気別(暗色、明色、暖色、鮮やか、白黒)に整理された50種類以上のビジュアルスタイルがあります。デザイン哲学についてはstyle.md、実装の参考についてはbuild.shを読んでください。手法を学び、座標をそのままコピーしないでください
フォントの組み合わせ(デッキごとに1つ選ぶ)
| 見出しフォント | 本文フォント | 最適な用途 |
|---|---|---|
| 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枚にはテキスト以外のビジュアル要素を含めてください:
| ビジュアルの種類 | 実装 |
|---|---|
| 色付きの円内のアイコン | 楕円の図形+中央に配置したテキスト/数字のオーバーレイ |
| 色付きのブロック | 塗りつぶし付きの preset=roundRect |
| 大きな統計数値 | size=64, bold=true、下に小さなラベル |
| グラフ | --type chart(縦棒/円/折れ線) |
| グラデーション背景 | background=COLOR1-COLOR2-180 |
| 図形の組み合わせ | 図解用の円+コネクター |
テキストのみのスライドが許可されるのは、引用、コード例、純粋な表の場合のみです。
3D モデルの挿入ルール
スライドごとにモデルを新規追加する — クローンは絶対にしない
morph_clone_slide はモデルを固定された XML としてコピーします。クローンされたモデルは Morph できません。
各スライドで、同じ name プロパティを指定して add --type 3dmodel を個別に呼び出す必要があります。
⚠️ 重大:3D モデルを含むスライドをクローンすると、古いモデルの XML もコピーされます。その結果、新しいスライドに同じ名前の model3d 要素が2つ作られます。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 を使います。
カメラの表現
3つのツールを組み合わせます:roty(回転)、rotx(傾き)、width/height(ズーム)。
ショットの種類(1つのデッキで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 to -25 | 力強さ、ドラマ性 |
| サイドプロフィール | M (13-16cm) | 0 | フォームファクター、シルエット |
| オーバー・ザ・ショルダー | S (5-10cm) | 10-15 | データが多いページ、アクセントとしてのモデル |
コンテンツに合わせたカメラ
スライドの内容に合わせてショットを調整します。
- 「正面デザイン」→ クローズアップ、
roty=0、XL でトリミング - 「側面」→ サイド、
roty=90、M - 「内部構造」→ 俯瞰、
roty=30, rotx=35、M - 「パワー/権威」→ ローアングル、
roty=20, rotx=-20、L - 「データと仕様」→ 肩越し、
roty=60、隅に S
回転ルール
- 隣接するスライド間の roty の差:30~90°(30°未満は細かく揺れ、90°超は方向感覚を失わせます)
- roty の全体的な回転方向は一貫させます(行ったり来たりしない)
- rotx の範囲:-25~+40。隣接するスライド間の rotx の差は 20 以下
- デッキ全体の回転角:180~360°(モデルをすべての側面から見せます)
ショットプランの例
| スライド | ショット | roty | rotx | サイズ | パターン |
|---|---|---|---|---|---|
| 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 |
morph-ppt とのワークフロー統合
フェーズ 2 の追加項目(計画)
brief.md に モデルの演出テーブルを追加します。
| スライド | パターン | サイズ階層 | モデル 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 倍以上)を満たしていることを確認します。
フェーズ 3 の追加項目(ビルド)
モデルは複製できないため、ビルドスクリプトは標準的な morph-ppt とは異なります。
- すべてのスライドを先に作成します(背景とモーフトランジションを設定)
- スライド 1 にシーンアクター(
!!scene-*)を追加してから、モーフの連続性を保つためにスライドを複製します - 各スライドに 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']}")
フェーズ 4 の追加項目(検証)
標準的なモーフ検証の後、さらに次の項目を確認します。
- 各スライドに
model3d要素が 1 つだけある - すべてのモデルの
nameプロパティが同じ - 隣接するスライド間で、モデルの面積比が 1.5 倍以上または 0.67 倍以下
- 連続する 2 枚のスライドで同じレイアウトパターンを使用していない
ファイル配置ルール
すべてのファイルを同じ作業ディレクトリに置く必要があります。
成果物(ちょうど 4 ファイル。それ以上は作成しないでください):
.glbモデルファイル(デッキで使用する 3D モデル)- 出力
.pptx - ビルドスクリプト(再実行可能)
brief.md
outline.md、quality-report.md、test-report.md などの追加ファイルは作成しないでください。計画はすべて brief.md に記載し、検証結果はすべて標準出力に出力します。余計なファイルはユーザーを混乱させます。
関連のないパスにモデルファイルを分散させないでください。