エクスポーターメモ
code:task
Task
1. Current Work: ANMインポート機能の改善が完了しました。これには、キーフレームの読み込み、prev_offset によるソート、Duration と重複キーのスキップによるマッピング、クォータニオンの連続性確保、オイラー角のアンラッピング、そして自動的なMayaオイラーフィルタの適用が含まれます。
2. Key Technical Concepts:
ANMファイルフォーマット (ヘッダー、キーフレーム構造)
Maya API (MPxCommand, MFnAnimCurve, MQuaternion, MEulerRotation, MPlug, MFnTransform, MItDag)
クォータニオンとオイラー角の変換
キーフレームデータの圧縮/非圧縮形式
ボーンの階層構造とHAnimBoneNoアトリビュート
3. Relevant Files and Code:
rwioMayaPlugin/importAnmCmd.h: ANMヘッダー、キーフレーム、ボーンアニメーションのデータ構造定義。
rwioMayaPlugin/importAnmCmd.cpp: ANMファイルの読み込み、キーフレームの処理、Mayaシーンへのアニメーション適用ロジック。特に、キーフレームのデータ構造や、圧縮/非圧縮データの扱い方が参考になります。
4. Problem Solving:
ANMインポート時の様々な問題(クラッシュ、回転フリップ、重複キー)を解決し、堅牢なインポーターを構築しました。
5. Pending Tasks and Next Steps: ユーザーは、既存のANMインポーターの実装を参考に、ANMエクスポーターを作成する新しいタスクを求めています。
新しいタスクの指示文章: 「既存のANMインポーター(importAnmCmd.cpp)の実装を参考に、MayaシーンのアニメーションデータをANMファイル形式でエクスポートする新しいプラグインコマンド exportANM を実装してください。
このエクスポーターは、以下の要件を満たす必要があります。
1. 新しいコマンドの作成: exportAnmCmd.h と exportAnmCmd.cpp を作成し、exportANM という名前の新しいMPxCommandを登録します。
2. 引数の定義: エクスポート先のファイルパスを指定するためのフラグ(例: -f, -file)をサポートします。
3. アニメーションデータの収集:
Mayaシーン内のHAnimBoneNoアトリビュートを持つボーン(ジョイント)を特定します。
各ボーンのtranslateX, translateY, translateZ, rotateX, rotateY, rotateZアトリビュートからキーフレームデータを収集します。
アニメーションの開始時間、終了時間、フレームレートを考慮し、必要なすべてのキーフレームをサンプリングまたは直接取得します。
4. ANMデータ構造への変換:
収集したキーフレームデータを、importAnmCmd.h で定義されている ParsedAnmHeader および ParsedAnmKeyframe と互換性のある形式に変換します。
回転データは、Mayaのオイラー角からクォータニオンに変換し、必要に応じて圧縮形式(RwCompressedKeyFrame)または非圧縮形式(RwKeyFrame)で格納できるようにします。
previousFrameOffset の値を適切に計算します。
5. ANMファイルの書き出し:
ANMヘッダーとすべてのキーフレームデータをバイナリ形式でファイルに書き出します。
RwCompressedKeyFrameCustomData の書き出しも考慮します(もし必要であれば、インポート時のカスタムデータブロックを参考にします)。
6. エラーハンドリングとログ出力: 適切なエラーチェックとMayaのスクリプトエディタへの情報出力を行います。このタスクは、インポーターの処理を逆に行うものであり、ANMファイルフォーマットの理解とMaya APIの操作に関する知識が求められます。」