97ac0f71f5
https://assetstore.unity.com/packages/tools/generative-ai/synaptic-ai-pro-natural-language-control-for-unity-336030
642 lines
15 KiB
Plaintext
642 lines
15 KiB
Plaintext
=====================================
|
|
Synaptic AI Pro v1.1.7 開発計画
|
|
=====================================
|
|
|
|
## 現在の v1.1.7 (完了済み)
|
|
- execute_menu_item Tool
|
|
- InstanceID Support
|
|
- Start MCP Server Menu (パス空白対応、ポート重複チェック)
|
|
- MCP Auto-Retry System (30リトライ、最大5分)
|
|
|
|
=====================================
|
|
追加予定1: ボーン基盤システム(必須)
|
|
=====================================
|
|
|
|
## 目的
|
|
ボーンの認識・操作・階層理解を可能にする基盤。
|
|
これがあれば「衣装フィット」「アニメーション制作」両方が可能に。
|
|
|
|
## ボーン基盤ツール (10個)
|
|
|
|
### 1. unity_get_skeleton_hierarchy
|
|
スケルトン全体の階層構造を取得
|
|
```
|
|
入力: gameObjectName
|
|
出力: {
|
|
rootBone: "Armature",
|
|
boneCount: 65,
|
|
hierarchy: {
|
|
"Hips": {
|
|
localPosition: [0, 1, 0],
|
|
localRotation: [0, 0, 0, 1],
|
|
children: ["Spine", "LeftUpperLeg", "RightUpperLeg"]
|
|
},
|
|
"Spine": {
|
|
parent: "Hips",
|
|
children: ["Chest"],
|
|
...
|
|
}
|
|
},
|
|
isHumanoid: true,
|
|
humanoidMappings: { // Humanoidの場合
|
|
"Hips": "Hips",
|
|
"Spine": "Spine",
|
|
"LeftHand": "Hand_L", // 実際のボーン名との対応
|
|
...
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2. unity_find_bones
|
|
名前やパターンでボーンを検索
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
pattern: "Hand", // 部分一致
|
|
// または
|
|
regex: "^Left.*", // 正規表現
|
|
// または
|
|
humanoidBone: "LeftHand" // Humanoidマッピングから
|
|
}
|
|
出力: {
|
|
matches: [
|
|
{ name: "LeftHand", path: "Armature/Hips/Spine/.../LeftHand" },
|
|
{ name: "RightHand", path: "..." }
|
|
]
|
|
}
|
|
```
|
|
|
|
### 3. unity_get_bone_info
|
|
特定ボーンの詳細情報
|
|
```
|
|
入力: gameObjectName, boneName
|
|
出力: {
|
|
name: "LeftHand",
|
|
path: "Armature/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand",
|
|
parent: "LeftForeArm",
|
|
children: ["LeftHandIndex1", "LeftHandMiddle1", ...],
|
|
localPosition: [0.25, 0, 0],
|
|
localRotation: [0, 0, 0, 1],
|
|
worldPosition: [1.5, 1.2, 0],
|
|
worldRotation: [...],
|
|
humanoidMapping: "LeftHand" // Humanoidの場合
|
|
}
|
|
```
|
|
|
|
### 4. unity_set_bone_transform
|
|
ボーンの位置/回転を設定
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
boneName: "LeftHand",
|
|
localPosition: [0.25, 0, 0], // オプション
|
|
localRotation: [0, 45, 0], // オイラー角 or クォータニオン
|
|
worldPosition: [...], // ワールド座標指定も可
|
|
worldRotation: [...]
|
|
}
|
|
```
|
|
|
|
### 5. unity_get_bone_chain
|
|
ボーンチェーン(連鎖)を取得
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
startBone: "LeftShoulder",
|
|
endBone: "LeftHand"
|
|
// または
|
|
startBone: "Hips",
|
|
depth: 3 // 3階層下まで
|
|
}
|
|
出力: {
|
|
chain: ["LeftShoulder", "LeftArm", "LeftForeArm", "LeftHand"],
|
|
totalLength: 0.65, // メートル
|
|
transforms: [...]
|
|
}
|
|
```
|
|
|
|
### 6. unity_copy_bone_pose
|
|
ボーンのポーズをコピー
|
|
```
|
|
入力: {
|
|
sourceObject: "Avatar_A",
|
|
targetObject: "Avatar_B",
|
|
boneMapping: "auto", // 自動マッピング or 手動指定
|
|
bones: ["all"] // または特定ボーンのみ
|
|
}
|
|
```
|
|
|
|
### 7. unity_reset_bone_pose
|
|
ボーンをT-Pose/A-Pose/バインドポーズにリセット
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
pose: "bind" // "bind", "tpose", "apose"
|
|
bones: ["all"] // または特定ボーンのみ
|
|
}
|
|
```
|
|
|
|
### 8. unity_mirror_bone_pose
|
|
左右のポーズを反転コピー
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
direction: "left_to_right" // or "right_to_left"
|
|
}
|
|
```
|
|
|
|
### 9. unity_get_humanoid_muscles
|
|
Humanoidのマッスル値を取得
|
|
```
|
|
入力: gameObjectName
|
|
出力: {
|
|
muscles: {
|
|
"LeftArm.Arm Down-Up": 0.5,
|
|
"LeftArm.Arm Front-Back": -0.2,
|
|
"Spine Front-Back": 0.1,
|
|
...
|
|
}
|
|
}
|
|
```
|
|
|
|
### 10. unity_set_humanoid_muscles
|
|
Humanoidのマッスル値を設定
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
muscles: {
|
|
"LeftArm.Arm Down-Up": 0.8,
|
|
"Spine Front-Back": 0.3
|
|
}
|
|
}
|
|
```
|
|
|
|
=====================================
|
|
追加予定2: アニメーション制作システム
|
|
=====================================
|
|
|
|
## 目的
|
|
ボーン基盤を使ってアニメーションを作成・編集
|
|
|
|
## アニメーション制作ツール (10個)
|
|
|
|
### 1. unity_create_animation_clip
|
|
新規アニメーションクリップを作成
|
|
```
|
|
入力: {
|
|
name: "Walk",
|
|
savePath: "Assets/Animations/Walk.anim",
|
|
length: 1.0, // 秒
|
|
frameRate: 30,
|
|
looping: true
|
|
}
|
|
```
|
|
|
|
### 2. unity_add_keyframe
|
|
キーフレームを追加
|
|
```
|
|
入力: {
|
|
clipPath: "Assets/Animations/Walk.anim",
|
|
time: 0.5, // 秒
|
|
property: "LeftUpperLeg/localRotation",
|
|
value: [30, 0, 0], // オイラー角
|
|
// または
|
|
bone: "LeftUpperLeg",
|
|
attribute: "rotation",
|
|
value: [30, 0, 0]
|
|
}
|
|
```
|
|
|
|
### 3. unity_add_pose_keyframe
|
|
現在のポーズ全体をキーフレームに
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
clipPath: "Assets/Animations/Walk.anim",
|
|
time: 0.0,
|
|
bones: ["all"] // または特定ボーンのみ
|
|
}
|
|
```
|
|
|
|
### 4. unity_get_animation_curves
|
|
アニメーションカーブを取得
|
|
```
|
|
入力: clipPath
|
|
出力: {
|
|
curves: [
|
|
{
|
|
path: "LeftUpperLeg",
|
|
property: "localRotation.x",
|
|
keyframes: [
|
|
{ time: 0, value: 0, inTangent: 0, outTangent: 0 },
|
|
{ time: 0.5, value: 30, ... }
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### 5. unity_set_animation_curve
|
|
アニメーションカーブを編集
|
|
```
|
|
入力: {
|
|
clipPath: "Assets/Animations/Walk.anim",
|
|
path: "LeftUpperLeg",
|
|
property: "localRotation.x",
|
|
keyframes: [...]
|
|
}
|
|
```
|
|
|
|
### 6. unity_preview_animation
|
|
アニメーションをプレビュー(指定時間のポーズを適用)
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
clipPath: "Assets/Animations/Walk.anim",
|
|
time: 0.5,
|
|
// または
|
|
frame: 15
|
|
}
|
|
```
|
|
|
|
### 7. unity_blend_animations
|
|
複数アニメーションをブレンド
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
animations: [
|
|
{ clip: "Idle", weight: 0.3 },
|
|
{ clip: "Walk", weight: 0.7 }
|
|
]
|
|
}
|
|
```
|
|
|
|
### 8. unity_retarget_animation
|
|
アニメーションを別のアバターに転送
|
|
```
|
|
入力: {
|
|
sourceAvatar: "Avatar_A",
|
|
targetAvatar: "Avatar_B",
|
|
sourceClip: "Assets/Animations/Walk.anim",
|
|
outputPath: "Assets/Animations/Walk_Retargeted.anim",
|
|
boneMapping: "auto"
|
|
}
|
|
```
|
|
|
|
### 9. unity_create_animation_from_poses
|
|
複数ポーズからアニメーションを生成
|
|
```
|
|
入力: {
|
|
gameObjectName: "Avatar",
|
|
poses: [
|
|
{ name: "Pose1", time: 0.0 },
|
|
{ name: "Pose2", time: 0.5 },
|
|
{ name: "Pose3", time: 1.0 }
|
|
],
|
|
outputPath: "Assets/Animations/Generated.anim",
|
|
interpolation: "smooth" // "linear", "smooth", "step"
|
|
}
|
|
```
|
|
|
|
### 10. unity_bake_animation
|
|
アニメーションをベイク(全フレームにキーフレーム生成)
|
|
```
|
|
入力: {
|
|
clipPath: "Assets/Animations/Walk.anim",
|
|
outputPath: "Assets/Animations/Walk_Baked.anim",
|
|
frameRate: 30
|
|
}
|
|
```
|
|
|
|
=====================================
|
|
追加予定3: 衣装フィッティング機能
|
|
=====================================
|
|
|
|
## 背景
|
|
- VRChat界隈で「もちふぃったー」(¥2,500) が人気
|
|
- しかし「変換プロファイル」が必要で限定的
|
|
- Synaptic AIなら自然言語で柔軟に対応可能
|
|
|
|
## 新規ツール (5-7個)
|
|
|
|
### 1. unity_analyze_armature
|
|
ボーン構造を解析して一覧化
|
|
```
|
|
入力: gameObjectName (アバターまたは衣装)
|
|
出力: {
|
|
boneCount: 65,
|
|
hierarchy: "Hips > Spine > Chest > ...",
|
|
boneNames: ["Hips", "Spine", "Chest", ...],
|
|
isHumanoid: true
|
|
}
|
|
```
|
|
|
|
### 2. unity_map_bones
|
|
2つのアーマチュア間でボーンをマッピング
|
|
```
|
|
入力: sourceArmature, targetArmature
|
|
出力: {
|
|
mappings: {
|
|
"Hips": "Hips",
|
|
"Spine": "Spine",
|
|
"Chest_Upper": "Chest", // 名前違いも推測
|
|
...
|
|
},
|
|
unmapped: ["ExtraBone1", "ExtraBone2"],
|
|
confidence: 0.95
|
|
}
|
|
```
|
|
|
|
### 3. unity_transfer_mesh_weights
|
|
メッシュのボーンウェイトを転送
|
|
```
|
|
入力: sourceMesh, targetArmature, boneMapping
|
|
出力: {
|
|
success: true,
|
|
verticesProcessed: 12450,
|
|
bonesRemapped: 65
|
|
}
|
|
```
|
|
|
|
### 4. unity_fit_clothing_to_avatar (統合ツール)
|
|
衣装をアバターにフィットさせる(自動処理)
|
|
```
|
|
入力: clothingObject, targetAvatar, options
|
|
options: {
|
|
adjustScale: true,
|
|
transferWeights: true,
|
|
preserveShapeKeys: true
|
|
}
|
|
出力: {
|
|
success: true,
|
|
fittedObject: "Clothing_Fitted",
|
|
warnings: ["ChestBone slightly misaligned"]
|
|
}
|
|
```
|
|
|
|
### 5. unity_adjust_clothing_fit
|
|
フィット後の微調整
|
|
```
|
|
入力: clothingObject, adjustments
|
|
adjustments: {
|
|
"Chest": { scale: 1.1, offset: [0, 0.02, 0] },
|
|
"Hips": { scale: 0.95 }
|
|
}
|
|
```
|
|
|
|
### 6. unity_create_clothing_prefab
|
|
フィット済み衣装をプレハブ化
|
|
```
|
|
入力: clothingObject, prefabPath, includeAvatar
|
|
出力: {
|
|
prefabPath: "Assets/Prefabs/Avatar_WithClothing.prefab"
|
|
}
|
|
```
|
|
|
|
### 7. unity_detect_mesh_clipping (オプション)
|
|
メッシュの貫通箇所を検出
|
|
```
|
|
入力: meshA, meshB
|
|
出力: {
|
|
clippingAreas: [
|
|
{ bone: "Chest", severity: "high", vertices: 234 },
|
|
{ bone: "LeftArm", severity: "low", vertices: 12 }
|
|
]
|
|
}
|
|
```
|
|
|
|
=====================================
|
|
実装アプローチ
|
|
=====================================
|
|
|
|
## Unity側 (C#)
|
|
|
|
### ボーンマッピングロジック
|
|
```csharp
|
|
// Humanoid標準ボーン名でマッチング
|
|
Dictionary<string, string> StandardBoneNames = new() {
|
|
{"Hips", "Hips"}, {"Spine", "Spine"},
|
|
{"Chest", "Chest"}, {"UpperChest", "Chest_Upper"},
|
|
// ... VRChat標準ボーン名も含む
|
|
};
|
|
|
|
// 類似度スコアでマッチング
|
|
float GetBoneNameSimilarity(string a, string b) {
|
|
// Levenshtein距離 + 部分一致スコア
|
|
}
|
|
```
|
|
|
|
### ウェイト転送ロジック
|
|
```csharp
|
|
void TransferBoneWeights(Mesh source, Mesh target, Dictionary<string, string> boneMap) {
|
|
var sourceWeights = source.boneWeights;
|
|
var targetWeights = new BoneWeight[target.vertexCount];
|
|
|
|
// 最近傍頂点からウェイトをコピー
|
|
for (int i = 0; i < target.vertexCount; i++) {
|
|
int nearestSourceVertex = FindNearestVertex(target.vertices[i], source.vertices);
|
|
targetWeights[i] = RemapBoneWeight(sourceWeights[nearestSourceVertex], boneMap);
|
|
}
|
|
|
|
target.boneWeights = targetWeights;
|
|
}
|
|
```
|
|
|
|
=====================================
|
|
もちふぃったーとの差別化ポイント
|
|
=====================================
|
|
|
|
| 機能 | もちふぃったー | Synaptic AI |
|
|
|------|--------------|-------------|
|
|
| プロファイル | 必要 | 不要(AI解析) |
|
|
| 対応アバター | 限定 | 汎用 |
|
|
| 処理場所 | Blender経由 | Unity内完結 |
|
|
| カスタマイズ | GUI操作 | 自然言語 |
|
|
| 微調整 | 限定的 | 「胸だけ大きく」等 |
|
|
| 価格 | ¥2,500 | Synaptic Pro内包 |
|
|
| 処理時間 | 5-60分 | 数秒〜数分 |
|
|
|
|
=====================================
|
|
ユースケース例
|
|
=====================================
|
|
|
|
## ボーン操作
|
|
|
|
### ボーン確認
|
|
```
|
|
User: 「このアバターのボーン構造を見せて」
|
|
|
|
Claude:
|
|
1. unity_get_skeleton_hierarchy で全体構造取得
|
|
2. 階層ツリーとボーン数を報告
|
|
```
|
|
|
|
### 特定ボーン検索
|
|
```
|
|
User: 「左手のボーンを探して」
|
|
|
|
Claude:
|
|
1. unity_find_bones で pattern: "Left" + "Hand" 検索
|
|
2. マッチしたボーンとパスを報告
|
|
```
|
|
|
|
### ポーズ調整
|
|
```
|
|
User: 「左腕を上げて」
|
|
|
|
Claude:
|
|
1. unity_find_bones で humanoidBone: "LeftUpperArm" 取得
|
|
2. unity_set_bone_transform で rotation 調整
|
|
```
|
|
|
|
## アニメーション制作
|
|
|
|
### 基本アニメーション
|
|
```
|
|
User: 「手を振るアニメーションを作って」
|
|
|
|
Claude:
|
|
1. unity_create_animation_clip で新規クリップ作成
|
|
2. unity_set_bone_transform で開始ポーズ設定
|
|
3. unity_add_pose_keyframe で 0秒にキーフレーム
|
|
4. unity_set_bone_transform で手を上げたポーズ設定
|
|
5. unity_add_pose_keyframe で 0.5秒にキーフレーム
|
|
6. unity_set_bone_transform で手を下げたポーズ設定
|
|
7. unity_add_pose_keyframe で 1秒にキーフレーム
|
|
8. 完成報告
|
|
```
|
|
|
|
### 歩行サイクル
|
|
```
|
|
User: 「歩行アニメーションを作って」
|
|
|
|
Claude:
|
|
1. unity_create_animation_clip (looping: true)
|
|
2. 4つのキーポーズを作成:
|
|
- 0.0s: 右足前
|
|
- 0.25s: 通過
|
|
- 0.5s: 左足前
|
|
- 0.75s: 通過
|
|
3. unity_add_pose_keyframe で各ポーズをキーフレーム化
|
|
4. ループ設定確認
|
|
```
|
|
|
|
### アニメーション転送
|
|
```
|
|
User: 「このアニメーションを別のアバターに適用して」
|
|
|
|
Claude:
|
|
1. unity_get_skeleton_hierarchy で両方のボーン構造確認
|
|
2. unity_retarget_animation で転送実行
|
|
3. プレビューして確認
|
|
```
|
|
|
|
## 衣装フィッティング
|
|
|
|
### 基本フロー
|
|
```
|
|
User: 「この衣装をアバターにフィットさせて」
|
|
|
|
Claude:
|
|
1. unity_get_skeleton_hierarchy で両方のボーン構造を解析
|
|
2. unity_map_bones でボーンマッピング作成
|
|
3. unity_fit_clothing_to_avatar で自動フィット
|
|
4. 結果を報告
|
|
|
|
User: 「胸の部分がきついから少し余裕を持たせて」
|
|
|
|
Claude:
|
|
5. unity_adjust_clothing_fit で微調整
|
|
```
|
|
|
|
### 高度なフロー
|
|
```
|
|
User: 「この衣装、3サイズ(S/M/L)のバリエーション作って」
|
|
|
|
Claude:
|
|
1. フィット実行
|
|
2. unity_adjust_clothing_fit で S(-10%), M(基準), L(+10%) 作成
|
|
3. unity_create_clothing_prefab で各プレハブ化
|
|
```
|
|
|
|
=====================================
|
|
開発優先度
|
|
=====================================
|
|
|
|
## Phase 0: ボーン基盤(最優先)
|
|
- [ ] unity_get_skeleton_hierarchy
|
|
- [ ] unity_find_bones
|
|
- [ ] unity_get_bone_info
|
|
- [ ] unity_set_bone_transform
|
|
- [ ] unity_get_bone_chain
|
|
|
|
## Phase 1: ボーン操作
|
|
- [ ] unity_copy_bone_pose
|
|
- [ ] unity_reset_bone_pose
|
|
- [ ] unity_mirror_bone_pose
|
|
- [ ] unity_get_humanoid_muscles
|
|
- [ ] unity_set_humanoid_muscles
|
|
|
|
## Phase 2: アニメーション基盤
|
|
- [ ] unity_create_animation_clip
|
|
- [ ] unity_add_keyframe
|
|
- [ ] unity_add_pose_keyframe
|
|
- [ ] unity_preview_animation
|
|
|
|
## Phase 3: アニメーション拡張
|
|
- [ ] unity_get_animation_curves
|
|
- [ ] unity_set_animation_curve
|
|
- [ ] unity_blend_animations
|
|
- [ ] unity_retarget_animation
|
|
- [ ] unity_create_animation_from_poses
|
|
- [ ] unity_bake_animation
|
|
|
|
## Phase 4: 衣装フィット
|
|
- [ ] unity_analyze_armature (Phase 0のツールで代替可能かも)
|
|
- [ ] unity_map_bones
|
|
- [ ] unity_transfer_mesh_weights
|
|
- [ ] unity_fit_clothing_to_avatar
|
|
- [ ] unity_adjust_clothing_fit
|
|
- [ ] unity_create_clothing_prefab
|
|
- [ ] unity_detect_mesh_clipping
|
|
|
|
=====================================
|
|
想定工数
|
|
=====================================
|
|
|
|
- Phase 0: 3-4日 (最重要基盤)
|
|
- Phase 1: 2-3日
|
|
- Phase 2: 3-4日
|
|
- Phase 3: 3-4日
|
|
- Phase 4: 3-4日
|
|
- テスト/調整: 3-4日
|
|
- 合計: 約3-4週間
|
|
|
|
## バージョン分割案
|
|
- v1.1.7: Phase 0 + Phase 1 (ボーン基盤)
|
|
- v1.1.8: Phase 2 + Phase 3 (アニメーション)
|
|
- v1.1.9: Phase 4 (衣装フィット)
|
|
|
|
=====================================
|
|
ツール数サマリー
|
|
=====================================
|
|
|
|
| カテゴリ | ツール数 |
|
|
|---------|---------|
|
|
| ボーン基盤 | 10 |
|
|
| アニメーション | 10 |
|
|
| 衣装フィット | 7 |
|
|
| 合計 | 27 |
|
|
|
|
現在: 350ツール → v1.1.9完了後: 377ツール
|
|
|
|
=====================================
|
|
注意点
|
|
=====================================
|
|
|
|
1. SkinnedMeshRendererのみ対応(MeshRendererは対象外)
|
|
2. Humanoidリグ推奨(Generic対応は限定的)
|
|
3. シェイプキー(BlendShape)は別途保持が必要
|
|
4. VRChat SDKとの互換性確認必要
|
|
5. AnimationClip作成はエディタAPI必要(ランタイム不可)
|
|
6. Humanoidマッスル操作はAnimator/Avatar必須
|