meshyai について
Three.js ブラウザーゲーム向けに Meshy AI で 3D アセットを生成するエージェントスキルです。テキストや画像からのモデル生成、人型キャラクターのリギングとアニメーション、GLB の最適化、向きやスケールの検証に対応します。
主な機能
- 01テキストまたは画像から 3D モデルを生成
- 02人型キャラクターを自動リギング
- 03リギング済みキャラクターに歩行・走行アニメーションを追加
- 04GLB のテクスチャとメッシュを最適化
- 05モデルの向き、スケール、接地位置を検証
活用シーン
- 01ゲーム用のキャラクター、プロップ、背景モデルを作成
- 02参照画像から 3D キャラクターモデルを生成
- 03人型モデルにスケルトンと移動アニメーションを追加
- 04Three.js ゲーム用 GLB アセットを最適化して検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ playableintelligence/ game-creator --skill meshyaiインストール後、Claude Code で/meshyaiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
api-reference.mdrigging-pipeline.mdverification-patterns.md詳細
Meshy AI — 3D モデル生成、リギング、アニメーション
Meshy AI を使ったカスタム 3D モデルの生成と、Three.js ブラウザーゲームへの組み込みに精通しています。Meshy は、すべての 3D ゲームアセットの優先ソースです。テキストによる説明や参照画像から、必要なものをアートスタイルとゲーム向けトポロジーを統一して正確に生成します。
パフォーマンスに関する注意
- 各ステップに時間をかけてください。速度より品質が重要です。
- 検証ステップを省略しないでください。早期に問題を発見できます。
- 変更を加える前に、各ファイルの全体を読んでください。
- 生成後は必ず検証してください。向きやスケールを決めつけないでください。
参照ファイル
| ファイル | 説明 |
|---|---|
| api-reference.md | API エンドポイント仕様、ペイロード、レスポンス、タスクのステータス、アセット保持ポリシーの全容 |
| rigging-pipeline.md | fadeToAction パターンとコード例を含む、生成 → リギング → アニメーション → 組み込みまでの完全なパイプライン |
| verification-patterns.md | 自動方向チェック、自動スケール調整、床面への位置合わせのコードパターン |
Meshy を最初に使う理由
- ぴったり一致:ゲームに必要なキャラクター、小道具、背景を妥協せずに正確に生成できます
- 一貫したスタイル:同じ生成パイプラインで作成したすべてのアセットに、まとまりのある見た目を持たせられます
- カスタムキャラクター:名前のある個性、ブランドキャラクター、独自のクリーチャーなどを、すべて指定どおりに生成できます
- 完全なパイプライン:1 つのツールで生成 → リギング → アニメーションを実行できます
- ゲーム向け:ポリゴン数、トポロジー、PBR テクスチャを調整して、Three.js のパフォーマンスを最適化できます
フォールバックソース
MESHY_API_KEY が利用できず、ユーザーが設定を断った場合は、次の順にフォールバックします。
| フォールバック | ソース | 最適な用途 |
|---|---|---|
assets/3d-characters/ | 既成の GLB | すぐに使えるアニメーション付きヒューマノイド(Soldier、Xbot、Robot、Fox) |
find-3d-asset.mjs | Sketchfab、Poly Haven、Poly.pizza | 既存の無料モデルライブラリの検索 |
| プロシージャルジオメトリ | コード | 最終手段としての BoxGeometry/SphereGeometry |
認証
Meshy API を呼び出すには、すべて MESHY_API_KEY が必要です。3D アセットの作業を始める前に、必ずこのキーを確認してください。
ユーザーに尋ねる前に、キーがすでに存在するか確認してください。
test -f .env && grep -q '^MESHY_API_KEY=.' .env && echo "found"
見つかった場合は、set -a; . .env; set +a でエクスポートし、入力を求める手順は省略してください。
環境変数にも .env にもキーが設定されていない場合は、すぐにユーザーに尋ねてください。
最良の結果を得るため、Meshy AI でカスタム 3D モデルを生成します。30 秒で無料の API キーを取得できます。
- https://app.meshy.ai で登録します
- Settings → API Keys に移動します
- 新しい API キーを作成します
以下の形式でキーを貼り付けてください:
MESHY_API_KEY=your-key-here(キーは .env に保存され、この会話から自動的に伏せ字になります。)または、「skip」と入力して、代わりに無料のモデルライブラリを使用してください。
ユーザーがキーを提供した場合は、次のように使用します:set -a; . .env; set +a && node scripts/meshy-generate.mjs ...
ユーザーがスキップした場合は、フォールバックソース(キャラクターライブラリ → Sketchfab → Poly Haven)を使用して進めます。
CLI スクリプト — scripts/meshy-generate.mjs
依存関係なしの Node.js スクリプトです。タスク送信 → ポーリング → GLB ダウンロード → meta.json 書き込みまでの全工程を処理します。
テキストから 3D へ(完全なパイプライン)
テキストプロンプトから 3D モデルを生成します。プレビュー(ジオメトリ)→ リファイン(テクスチャリング)の 2 段階で処理します。
# Full pipeline: preview → refine → download
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode text-to-3d \
--prompt "a cartoon knight with sword and shield" \
--output public/assets/models/ \
--slug knight
# Preview only (faster, untextured — good for geometry check)
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode text-to-3d \
--prompt "a wooden barrel" \
--preview-only \
--output public/assets/models/ \
--slug barrel
# With PBR textures and specific polycount
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode text-to-3d \
--prompt "a sci-fi hover bike" \
--pbr \
--polycount 15000 \
--ai-model meshy-6 \
--output public/assets/models/ \
--slug hoverbike
画像から 3D へ
参照画像を 3D モデルに変換します。URL、ローカルファイル、base64 データ URI に対応しています。
# From URL
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode image-to-3d \
--image "https://example.com/character-concept.png" \
--output public/assets/models/ \
--slug character
# From local file (auto-converts to base64)
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode image-to-3d \
--image "./concept-art/hero.png" \
--output public/assets/models/ \
--slug hero
自動リギング(ヒューマノイドのみ — すべての二足歩行キャラクターで必須)
生成されたヒューマノイドモデルにスケルトンを追加し、歩行アニメーションと走行アニメーションの GLB を自動ダウンロードします。入力タスク ID は、完了済みの text-to-3d または image-to-3d タスクから取得します。
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode rig \
--task-id <meshy-task-id> \
--height 1.8 \
--output public/assets/models/ \
--slug hero
次の 3 つのファイルが自動的に生成されます。
hero.glb— スケルトン付きのリギング済みモデルhero-walk.glb— 歩行アニメーション(自動ダウンロード)hero-run.glb— 走行アニメーション(自動ダウンロード)
ヒューマノイドの場合は、必ず生成 → リギングを 1 つの不可分なステップとして連続実行してください。 ヒューマノイドキャラクターを静的モデルのままにしないでください。
制限事項: リギングは、手足が明確に定義された、テクスチャ付きのヒューマノイド(二足歩行)モデルでのみ機能します。動物、乗り物、抽象的な形状、テクスチャのないメッシュには対応していません。
アニメーション
リギング済みモデルにアニメーションを適用します。完了済みのリギングタスク ID とアニメーションアクション ID が必要です。
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode animate \
--task-id <rig-task-id> \
--action-id 1 \
--output public/assets/models/ \
--slug hero-walk
ステータスの確認
任意のタスクの現在のステータスをポーリングします。
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode status \
--task-id <task-id> \
--task-type text-to-3d # or: image-to-3d, rigging, animations
非ブロッキングモード
待機せずにタスクを送信します。パイプラインで便利です。
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode text-to-3d \
--prompt "a crystal sword" \
--no-poll
# Later:
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode status --task-id <id> --task-type text-to-3d
GLB の自動最適化
ダウンロードしたすべての GLB は、ファイルサイズを 80〜95%削減するため、scripts/optimize-glb.mjs によって自動的に最適化されます。パイプラインでは、テクスチャを 1024×1024 にリサイズして WebP に変換し、meshopt 圧縮を適用します。
- 最適化は、各 GLB のダウンロード(text-to-3d、image-to-3d、rig、animate)の後にデフォルトで実行されます
- 最適化をスキップして Meshy の未加工の出力を保持するには、
--no-optimizeを使用します - 最大テクスチャ寸法を変更するには、
--texture-size <n>を使用します(デフォルト:1024) - 初回の実行では、
npxが@gltf-transform/cliをダウンロードするため、時間がかかる場合があります gltf-transformを利用できない場合、スクリプトは警告を出して未加工のファイルを使用します
最適化された GLB は meshopt 圧縮を使用するため、実行時に MeshoptDecoder が必要です。テンプレートの AssetLoader.js には、これが自動的に含まれています。
# Skip optimization for a specific generation
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode text-to-3d --prompt "a barrel" --preview-only \
--no-optimize --output public/assets/models/ --slug barrel
# Custom texture size (e.g., 512 for mobile)
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode text-to-3d --prompt "a barrel" --preview-only \
--texture-size 512 --output public/assets/models/ --slug barrel
# Re-optimize an existing GLB directly
node scripts/optimize-glb.mjs public/assets/models/barrel.glb --texture-size 512
API リファレンス
エンドポイントの仕様、ペイロード、レスポンス、タスクのステータス、アセットの保持ポリシーについては、api-reference.md を参照してください。
クイックリファレンス:静的プロップ(リギング不要)
ヒューマノイド以外のアセット(小道具、風景、建物)では、リギングを省略します。
# Generate
MESHY_API_KEY=<key> node scripts/meshy-generate.mjs \
--mode text-to-3d --prompt "a wooden barrel, low poly game asset" \
--polycount 5000 --output public/assets/models/ --slug barrel
# Integrate with loadModel (regular clone, no SkeletonUtils)
const barrel = await loadModel('assets/models/barrel.glb');
scene.add(barrel);
生成後の検証(必須)
自動向きチェック、自動スケール調整、床面への位置合わせのコードパターンについては、verification-patterns.md を参照してください。
リギング:ヒューマノイドキャラクターでは必須
リギングのタイミング、fadeToAction パターン、統合コードの例を含む、生成 → リギング → アニメーション → 統合の全パイプラインについては、rigging-pipeline.md を参照してください。
プロンプト作成のヒント
良いプロンプトを使うと、より良いモデルが生成されます。
| 目的 | プロンプト | 理由 |
|---|---|---|
| ゲームキャラクター | "a stylized goblin warrior, low poly game character, full body" | "low poly" + "game character" = ゲームですぐに使えるトポロジー |
| プロップ | "a wooden treasure chest, stylized, closed" | シンプルで具体的な、単一のオブジェクト |
| 環境パーツ | "a fantasy stone archway, low poly, game asset" | "game asset" はクリーンなジオメトリを示します |
| 乗り物 | "a sci-fi hover bike, side view, clean topology" | "clean topology" = アーティファクトが少ない |
避けること:
- 1 つのプロンプトに複数のオブジェクトを含めること(「騎士 AND ドラゴン」など) — 別々に生成してください
- あいまいなプロンプト(「何かかっこいいもの」など) — スタイルや形状を具体的に指定してください
- 屋内や建築のシーン — Meshy は単一オブジェクトの生成に最適です
既存のパイプラインとの統合
Meshy で生成したモデルは、既存の 3D アセットパイプラインに組み込めます。
┌─────────────────────────────────────────────────────┐
│ 3D Asset Sources │
├──────────────┬──────────────┬───────────────────────┤
│ Free Libraries│ Character Lib │ Meshy AI │
│ find-3d-asset │ 3d-char-lib/ │ meshy-generate.mjs │
│ .mjs │ │ text/image → 3D │
│ │ │ rig → animate │
├──────────────┴──────────────┴───────────────────────┤
│ AssetLoader.js │
│ loadModel() / loadAnimatedModel() │
├─────────────────────────────────────────────────────┤
│ Three.js Game │
└─────────────────────────────────────────────────────┘
すべてのソースは public/assets/models/ に GLB ファイルを出力します。AssetLoader.js は GLB の生成元を問わず、すべて同じ方法で読み込みます。
トラブルシューティング
| 問題 | 原因 | 対処方法 |
|---|---|---|
MESHY_API_KEY が設定されていない | 環境変数がありません | ユーザーにキーを尋ねるか、export MESHY_API_KEY=<key> を実行します。無料のキーは https://app.meshy.ai の Settings -> API Keys から取得できます。 |
| タスクが PENDING のまま進まない | API キューの滞留、または無効なパラメーター | 2~3 分待ってからステータスを確認します。5 分経っても PENDING の場合は、キャンセルして、より簡潔なプロンプトまたは低いポリゴン数で再送信します。 |
| アセットのダウンロードで 404 が返される | Meshy がアセットを保持する期間は 3 日間のみです | 生成パイプラインを再実行します。タスクが成功したら、すぐに GLB をダウンロードしてください。public/assets/models/ にローカル保存します。 |
| リギングに失敗する、または壊れたスケルトンが生成される | モデルが明確な二足歩行の人型ではない、またはメッシュにテクスチャがありません | モデルがテクスチャ付きで、手足が見える人型であることを確認します。リギングは動物、乗り物、抽象形状、またはプレビュー専用(テクスチャなし)のメッシュでは機能しません。--pbr と「全身の人型」を指定するプロンプトを使って再生成します。 |
| 生成されたモデルがプロンプトに合致しない | プロンプトが曖昧、または複数のオブジェクトを含んでいる | 具体的で、単一オブジェクトを指定するプロンプトを使います。「ローポリ」「スタイライズド」「ゲームキャラクター」などのスタイルの手掛かりを含め、複数のオブジェクトを組み合わせないようにします。「プロンプトエンジニアリングのヒント」を参照してください。 |
チェックリスト
-
MESHY_API_KEYを確認済み — 未設定の場合はユーザーに尋ねた、またはユーザーがフォールバックに進むことを選択した - プロンプトが具体的(スタイル、ポリゴン数、単一オブジェクト)
- すべての人型キャラクターをリギング済み — 二足歩行モデルのリギングを省略しない
- 3 日間の有効期限前に GLB をダウンロード済み
- 生成後の検証を完了済み — 向き、スケール、床との位置合わせを確認済み
- Playwright のスクリーンショットを撮影済み — 向きと環境内への収まり具合を目視で確認済み
- モデルごとに Constants.js で
rotationYを設定済み(ほとんどの Meshy モデルではMath.PIが必要です) - 静的モデルでは
loadModel()(通常のクローン)を使用 - リギング済みモデルでは
loadAnimatedModel()(SkeletonUtils.clone)を使用 - クリップ名をログに記録し、アニメーションモデルに
clipMapを定義済み - 追跡可能性を確保するため、タスク ID を含む
.meta.jsonを GLB と同じ場所に保存済み -
npm run buildが成功