左記の動画で配布中の拙作PMXエクスポーターに関し、マニフェストに名称変換用の辞書を書く方法を説明します。これは、元々トラブル対処法で記事にしていたのですが、長くなったのでこちらに移しました。
ボーンやマテリアルなどの名称の変換
名称変換の対象
拙作エクスポーターは、ボーンなどの名称を変換してPMXにエクスポートすることができます。Blender上では英文字での名称を使い、PMXには日本語での標準的な名称をエクスポートしたい場合にこの機能を利用できます。名称変換の対象は次のとおりです。
- マテリアル
- ボーン
- モーフ関連のプロパティ(シェイプキー・ドライバー変数用のオブジェクトプロパティ・ポーズ・UVマップ)
- 剛体オブジェクト
- 剛体コンストレイント・オブジェクト
マニフェストファイル
名称変換を行うには、設定ファイルに辞書を用意することが必要です。拙作エクスポーターの設定ファイルはマニフェストと呼んでおり、ファイル名は「manifest.txt」固定です。拙作エクスポーターは、次の場所からマニフェストを探します。
- blendファイル内
- エクスポート先フォルダ内
blendファイル内にマニフェストを追加するには、Blenderのテキストエディターを使います(Shift + F11 でウィンドウを切り替えられます)。新規ファイルを追加して名称を「manifest.txt」とするか、外部のマニフェスト・ファイルを読み込んでください。
外部ファイルのままでマニフェストを使用する場合は、文字コードに注意してください。Windows環境ではShift_JISにする必要があります。
セクション
次に、マニフェストの簡単な例を示します。[DEFAULT]
dict: DICTIONARY
[男性モブ]
name: 男性モブ
info: MMD用男性モブモデル
モデリング: すわとう
[DICTIONARY]
neck: 首
head: 頭
eye: 目
右eye: 邪眼
upper_arm: 腕
マニフェストは、WindowsのINIファイルと同じようにセクションでグループ分けをします。セクション名は基本的に自由なのですが、二つだけ特殊な意味を持つセクションがあります。
- 名前がPMXファイル名※のセクション…エクスポーターが最初に読み込むセクション
- 名前がDEFAULTのセクション…キーの探索に失敗した場合に読み込むセクション
セクション名は半角ブラケットで囲み、[DEFAULT]のようにします。英大文字小文字を区別するので注意してください。
dictエントリ
マニフェストに名称変換用の辞書を指定するには、dictというキーをもつエントリを追加します。エントリは、キーと値のペアで構成されます。書式は次のとおりです。dict: 辞書セクション名「:」の左にキーを、右に値を書きます。dictエントリはキーをdictとし、値を辞書セクション名とします。
最初に示した例では、エクスポーターは、男性モブ.pmxをエクスポートする時に、[男性モブ]セクション内でキーを探索します。しかし、そこではdictキーは見つかりません。次に、[DEFAULT]セクション内でキーを探索します。そこではdictキーを見つけることができます。そしてdictエントリの指示に従って、[DICTIONARY]セクションを辞書セクションとして扱います。
辞書セクションは一つだけ指定できます。このため、辞書はボーンもマテリアルも共通となり、個別に辞書を切り替えるということはできません。
辞書セクション
エクスポーターは、ボーンなどの名称が辞書セクション内のキーに一致する場合に、そのエントリの値で名称を変換します。上記のマニフェストの例のうち、辞書セクションの部分だけ再掲します。
[DICTIONARY]この例では五つのエントリがあります。「:」の左にキーを、右に値を書くのは、他のセクションのエントリと同じです。
neck: 首
head: 頭
eye: 目
右eye: 邪眼
upper_arm: 腕
キーについては、(1)セクション内では重複できない、(2)英大文字小文字を区別しない、の2点に注意してください。
従って、「hair」と「Hair」と「HAIR」は同じキーであり、これらのキーが辞書セクション内に同時に存在するとエクスポート時にエラーが発生します。
ボーンと剛体オブジェクトの名称には、「upper_arm.L」「upper_arm.R」のように左右対称の名称や、「head_」のようにリーフボーン用の名称(拙作エクスポーターの独自仕様)があります。これらは、エクスポート・オプションの「Rename Bones」を有効にする場合、マニフェストに辞書がなくても、「左upper_arm」「head先」と変換されます。さらに辞書で名称変換するには、次のようにキーを指定します(青色部分)。
[DICTIONARY]
左upper_arm: 左目
右upper_arm: 右目
head: 頭
head先: 頭先
しかし、これでは辞書が大量に必要になって記述が大変です。そこで、名称のベース部分(上の例では「upper_arm」「head」)のキーがあれば、左右対称とリーフボーンもそれに応じた名称変換をするようにしました。上記の例は次のように簡略化できます。
[DICTIONARY]これで「upper_arm.L」「upper_arm.R」「head」「head_」は「左腕」「右腕」「頭」「頭先」と変換されます。
upper_arm: 腕
head: 頭
もちろん、簡略化せず、左右対称ボーンやリーフボーンを特別の名称に変換することもできます。
[DICTIONARY]この例では、「head」は「頭」と変換されますが、そのリーフボーンは「ハゲ」と変換されます。また「eye.L」は「左目」と変換されますが、「eye.R」は「邪眼」と変換されます。
head: 頭
head先: ハゲ
eye: 目
右eye: 邪眼