Blenderモーション状態検査 は何をしますか?
使用タイミング
- Blenderキャラクターのアニメーションがねじれている、ミラーリングされている、平坦化されている、オフセットしている、または足滑りを起こしている。
- インポートしたアバター、アーマチュア、またはリターゲットしたモーションが期待したポーズと一致するかどうかをユーザーが尋ねている。
- レンダリング結果と、ボーン、バウンディングボックス、接触点、向きベクトルなどの構造化された事実を比較する必要がある。
- モデルがキャラクター、小道具、Proxyメッシュ、コントロールリグ、または壊れたインポートのいずれであるかを判断するワークフローに依存している。
基本原則
アニメーション付きの3Dアセットをスクリーンショットだけで判断しないでください。スクリーンショットは確認のための証拠ですが、軸の規則、ボーン名、オブジェクトスケール、ローカルトランスフォーム、ペアレント化されたメッシュ、マテリアルスロット、フレームごとの接触状態は隠されています。
最初にBlenderの構造化された状態を抽出し、その後ビューポートのスクリーンショットまたはレンダリングを使用して、事実が示唆する内容を確認します。
仕組み
- モーションを判断する前に、クリーンなシーンとアセットのベースラインを確立します。
- Blenderのインタプリタ内で実行するエクスポーターまたはBlender Pythonを使用して、Blenderから構造化された事実を抽出します。
- 接触、方向、スケール、リターゲットエラーを最も明らかにしそうなフレームをサンプリングします。
- 測定された事実を、ユーザーの期待するポーズ、方向、地面、レンダリング目標と比較します。
- 確認された事実、推定される原因、必要な修正を分けた簡潔なレポートを返します。
検査ワークフロー
-
シーンをインベントリする。
- メッシュ、アーマチュア、エンプティ、カメラ、ライト、モディファイア、ペアレント関係、非表示オブジェクトをリストアップする。
- アバターを判断する前に、キャラクターメッシュとヘルパー/プロキシ形状を分離する。
- オブジェクト空間とワールド空間のバウンディングボックスを記録する。
-
スケルトンを特定する。
- アーマチュア名、ポーズボーン、ボーンヘッド/テール、ロール、ペアレントチェーン、コンストレイント、リストポーズの軸を取得する。
- 腰、背骨、首、頭、肩、肘、手、太もも、膝、足首、足などの意味的なボーンをマッピングする。
- 左右のペアの欠落や異常な命名規則をフラグする。
-
前方、上、側面の軸を決定する。
- 骨盤、背骨、肩、腰、頭、足を一緒に使用し、単一のメッシュ法線に依存しない。
- ローカルアーマチュア軸をワールド軸およびインポートされたファイルの規則(glTFのY-up対BlenderのZ-upなど)と比較する。
- 顔/頭/足の方向がルートモーションと矛盾する場合、ミラーリングまたは逆方向インポートの可能性をマークする。
-
アニメーションフレームをサンプリングする。
- 最初、中間、接触、空中、極端なフレームを検査する。
- ルート位置、ルート方位、骨盤の高さ、体幹の傾き、手足の方向、足のクリアランス、メッシュの範囲を記録する。
- 長いまたは速いモーションの場合は、反転、着地、回転、衝突、床接触の周辺をより密にサンプリングする。
-
リターゲットを非難する前にモデルの整合性を確認する。
- アニメーションを適用する前に、クリーンなベースライン形状を確認する。
- ユーザーが明示的に修復を要求しない限り、元のメッシュ、マテリアル、アーマチュア、スキニングを保持する。
- 説明のつかない球状の塊、巨大なProxyメッシュ、または押しつぶされたボディは、そうでないと証明されるまでインポート/選択の問題として扱う。
-
接触とモーションの問題を診断する。
- 地面貫通:フレームごとに、最も低い足または靴の頂点を床の高さと比較する。
- 足滑り:接地フレーム全体での足のワールド位置を比較する。
- 脚交差:左右の太もも、膝、足首、足の左右の順序を比較する。
- ねじれ損傷:ボーンのスイング方向と、四肢軸周りのロール/ツイストを分離して比較する。
- スケールのずれ:アニメーション適用時とクリーンベースラインのメッシュ範囲を比較する。
-
意見の前に事実を報告する。
- フレーム番号、オブジェクト名、ボーン名、ワールド座標、しきい値を含める。
- 確認された障害と視覚的な疑念を分離する。
- 構造化された状態が見るべきものを説明した後にのみ、スクリーンショットを添付する。
推奨レポート形式
## Blenderモーション検査
### シーンインベントリ
- キャラクター候補:
- アーマチュア:
- ヘルパー/プロキシオブジェクト:
- カメラ/ライト:
### 方向
- ワールド上方向:
- キャラクター前方:
- ルート方位:
- ミラー/逆方向リスク:
### ベースラインの整合性
- クリーンメッシュ範囲:
- アニメーション適用メッシュ範囲:
- マテリアル/スキン保持:
- 疑わしい非キャラクターメッシュ:
### フレーム所見
| フレーム | 所見 | 証拠 |
| --- | --- | --- |
| 1 | クリーンベースラインポーズ | 腰/背骨/足が整列 |
| 96 | 足が床を貫通 | left_foot min_z = -0.04 |
### 判定
- 合格/不合格:
- 必要な修正:
- レンダリング準備完了:
例
足滑りを伴う歩行サイクル
シナリオ:リターゲットされたキャラクターが歩行サイクル中に滑っているように見えるが、正面カメラアングルでは足の接触が判断しにくい。
ワークフローを適用:
- シーンをインベントリ:キャラクターメッシュ
HeroBody、アーマチュアHeroRig、地面Floor、非表示のProxyメッシュなし。 - スケルトンを特定:意味的な足は
foot.Lとfoot.R、腰はpelvis、ルートボーンはroot。 - アニメーションフレームをサンプリング:フレーム1、18、24、30、42、48を接地している瞬間の周辺で検査。
- 接触とモーションの問題を診断:接地フレーム中の足のワールド位置を比較。
抽出された事実:
| フレーム | 事実 | 証拠 |
|---|---|---|
| 18 | 左足が接地 | foot.L min_z = 0.004、つま先とかかとが両方床付近 |
| 24 | 左足が接地中に滑る | 6フレームで foot.L x = 0.21 -> 0.28 |
| 30 | 骨盤が前方に動き続ける | pelvis y = 1.14 -> 1.31 |
判定:レンダリング準備不合格。モーションはフットロックのクリーンアップまたはリターゲットコンストレイントの見直しが必要。ボディメッシュのプロポーション変更は不要。
逆方向にインポートされたキャラクター
シナリオ:静止フレームではキャラクターは正しく見えるが、アニメーションの移動方向が期待と逆方向。
ワークフローを適用:
- 前方、上、側面の軸を決定:頭、胸、足、ルートモーションを比較。
- アニメーションフレームをサンプリング:フレーム1と移動経路の中間点を検査。
- 意見の前に事実を報告:ルート方位とモデルの向きを別々に含める。
抽出された事実:
| フレーム | 事実 | 証拠 |
|---|---|---|
| 1 | キャラクターの顔がワールド -Y を向いている | neck から head へのベクトルが -Y を示す |
| 72 | ルートモーションがワールド +Y に移動 | root y = 0.0 -> 2.8 |
| 72 | 足は視覚的に移動方向と逆向きのまま | つま先ボーンが -Y を指す一方、変位は +Y |
判定:逆方向インポート、またはリターゲットの前方軸不一致の可能性。アニメーションカーブを編集する前に、インポート/リターゲットの軸マッピングを修正すること。
実用的なしきい値
- Blenderのデフォルトのメートル単位を想定します。シーンの単位スケールが別の値を示している場合は除きます。
- 地面貫通が1~2cmを超える場合は、床が柔らかいか意図的にスタイライズされていない限り、目に見えるものとして扱います。
- 突然のスケール変化が5%を超える場合は、リグ、コンストレイント、またはトランスフォーム継承の問題の可能性が高いとします。
- 空中で反転したモーション中に左右の足首の左右順序が逆転する場合は、後で回復しても脚交差のリスクとして扱います。
- ルート方位が1フレームで30度以上ジャンプする場合は、ソースモーションにスナップターンが含まれていない限り、不審なものとして扱います。
アンチパターン
- 明示的にメッシュ修復がタスクでない限り、ポーズを合わせるためにボディプロポーションを変更しないでください。
- クリーンベースラインを記録する前にベイクしないでください。
- 1つのレンダリングカメラアングルをポーズが正しいことの証明として使用しないでください。
- ヘルパーオブジェクトがキャラクターの一部ではない理由を記録するまで削除しないでください。
- 頭、足、体幹、ルートモーションを一緒に確認せずに、アバターが+Y、-Y、+X、または-Xを向いていると想定しないでください。
ツールに関する注意
Blenderの状態エクスポーターが利用可能な場合は、メッシュ、アーマチュア、ポーズボーン、マテリアル、接触点、バウンディングボックス、サンプリングされたアニメーションフレームを含むJSONを推奨します。エクスポーターがない場合は、Blender本体を通じて小さなBlender Pythonスクリプトを実行してください。例えば blender --background scene.blend --python collect_motion_state.py です。bpy は通常のシステムPythonインタプリタでは利用できないためです。