﻿[タイトル]
Blender2Pmd
[バージョン]
importer 3.10 exporter 3.12
[動作環境]
Blender2.49b
Python2.6
(Blender2.49b & Python2.6.6で動作確認)


[使用方法]
・import_2_pmd.py,export_2_pmd.py,pmd_2.pyをblenderのスクリプトフォルダに入れ、Blenderを起動します。
・メニューの「ファイル」から「Import」または「Export」を選択すると「PMD file for MMD」の項目があるので選択することで使用できます。
・書き出すファイル名と同じ名前の設定ファイル(.xml)を使うことで、PMDファイルの詳細を設定することができます。
（インポート時にはエクスポート用の設定ファイルが生成されます）
・TGAファイルの透過を正常に表示させるため、インポート後にボタンウィンドウのテクスチャパネル[F6]よりImageタブの"Premul"ボタンをONにしてください。
・XMLファイルを利用しない場合デフォルト表情名は”Basis”にしてください。(無い場合は表情が書き出されません)

[使用上の注意]
［重要]
	ファイル上書きの確認をしません。
	‐Import時には(ファイル名).xml、Export時には(ファイル名).pmdのファイルを生成します。
	‐書き出す時に元のPMDファイルを上書きしてしまうことが考えられます。十分に注意してください
［注意］
	Armtureに連結されていない部分の挙動は保障されていません。
	マテリアルの設定されていない頂点があると書き出しに失敗します。
	インポート直後にエクスポートを行った場合、法線のデータが無くなります。
	－(解決方法)一度メッシュのエディットモードに入り、どれか頂点を選択すれば直ります。

・完全な変換ツールではありません
	‐Blenderで作成できるモデルをそのままPMDに、またその逆が出来るというものではありません。あくまで補助的なものです。
	‐専用のモデル編集ツールによる最終調整を行うことをお勧めします。

・シェーダーの情報は欠落します
	‐PMDとBlenderのシェーディングの解決の方法の整合が取れなかったので放置しました。

・インポート時にマテリアルの統合を行います。
	‐同じ値を持つマテリアルは同一のものとして統合されます。
	‐16を超えたマテリアルが割り振られている面はマテリアル0番になります(デフォルト)

・エクスポート時に面UVから頂点UVへ変換するためのプロセスが入っています。
	‐繰り返しテストは行っていますが、予期しない事態になることも想定されます。バックアップをとってください。
	‐テクスチャを利用していない部分に対しては加工は行われません。

・エクスポート時に面を三角に分割します。
	‐かなり適当に分割するので場合によっては予期しない形状になります。
	‐あらかじめ手動で分割することをお勧めします。

・オブジェクト基準点を統一しておいてください。
	‐出力前に各メッシュ、Armtuerの基準点を統一してください(方法は後述)
	‐基準点が異なると正しく出力できない場合があります。
	
・その他動作保障がありません、保存のほかにバックアップを取ってください。
	‐エラー処理なんて組んでません(´∀｀)　落ちても泣かないで済むよう対応お願いします。


[更新履歴]
2011/02/27 exporter 3.12
・原点を移動したときに法線データがおかしくなるバグ修正
2011/01/26 exporter 3.11
・UVが消えるバグ修正
2011/01/25 importer 3.10 exporter 3.10
・もろもろ報告のあったバグを修正
・多オブジェクトの書き出しのバグを修正
2010/09/12 exporter 3.03
・ボーンやマテリアルがない場合も書き出せるように修正
2010/09/12 importer 3.04
・先のないボーンの処理分岐にて無効クラスがあったバグ修正
2010/09/05 importer 3.03
・バグ修正 捻りボーンの書き出し部分
2010/09/04 importer 3.02　exporter 3.02
・各種バグ修正 ジョイント設定/IK設定など
2010/08/30 importer 3.01　exporter 3.01
・各種バグ修正
2010/08/30 importer 3.00　exporter 3.00 
・ソースの大幅リニューアル
－過去のバージョンとの整合性が無くなりました。
－XMLファイルのレイアウト変更
－剛体情報のXMLへの保存を追加
－Japanese.xmlの廃止
importer
・取り込み時の初期状態を変更
－Face＞smooth=onに変更
－各コンストレイントをMMD準拠のものを設定するように。
－－それに伴いボーンの回転弄ってるので注意してください。
－マテリアル１６個制限は継続中
exporter
－XMLによるボーン属性の指定が増えました。

2009/09/27 exporter2.2
・想定環境を更新
＞Blender2.49b
＞Python2.6.2
になりました。
exporter
・書き出し時のメッシュ取得を一新
－元データに対して加工を行っていたのを廃止。
－－書き出し速度の向上、追加頂点の法線消えバグを解消。

2009/05/09　importer 2.12　exporter 2.11 
importer
・取り込み時の初期状態を変更
‐ボーン透過表示(X-Ray) ON
‐ボーン形状 オクテット>スティック
‐エンベロープ OFF
‐ボーンミラーエディット ON
exporter
・書き出し時にIK登録順が設定ファイルを無視していたのを修正。
2009/04/27　importer 2.11
・取り込み時の初期姿勢がおかしかった件を修正。
2009/04/20　importer 2.1 exporter 2.1 
・IKの仕様 再修正 たぶんこれで決定。
・複数メッシュの書き出しに対応。
2009/04/17　importer 2.0 exporter 2.0 
・仕様、ソースコードの改定


［Tips等］
・マテリアル１つに対して、テクスチャは１枚までしか対応してません。(PMD側の制約によります)
・PMDで利用できる頂点数は65535となってはいますが、利用するユーザーの環境によっては20000程度の頂点でも「かなり重たいモデル」となります。
‐10000前後に収めることをお勧めします。
・IKはリストの上から処理されるため、多段化する場合は注意が必要です。
‐(例)足IKよりつま先IKが前になるとつま先が明後日の方を向く。
・Modifierは出力に影響しません。Applyお願いします。
・テクスチャ名に２バイト文字を使わないことをお勧めします。(BlenderおよびMMDにて不具合が散見されます)
・テクスチャはマテリアル色に対して積算合成されます。
・基本的にボーンは親よりも子のほうが前にあると挙動がおかしくなります。
・逆にIK影響リストは「先端から」登録しないと暴れの原因になります。

［雑記］
＞トゥーンシェーダについて
　DirectXでのトゥーンシェーダの実現方法はテクスチャを使う方法が一般的で、MMDでも採用されているようです（推測）
　影の色に強く影響してくるのですが、トウーンテクスチャパターンはシステムに固定(限定的に追加はできます)なので、
PMDエディタなどで良い色合いのものを探してください。(既存のモデルを参考にされると良いでしょう)

＞オブジェクトの基準点の移動の仕方
　まず3Dカーソルを移動する。
１、テンキーの７
２、（0,0,0）付近で左クリック
３、shift+s＞"Cursor→Grid"クリック 3Dカーソルが中心に行ったことを確認。
４、テンキーの３
５、0,0,0付近で左クリック
６、shift+s＞"Cursor→Grid"クリック 3Dカーソルが中心に行ったことを確認。
　メッシュの場合：
７、エディットモード
８、ボタンパネル＞Editing(F9)＞Meshタブ"Center Cursor"ボタン押す。
　ボーンの場合：
７、オブジェクトモード
８、3Dビューの"Object"＞"Transform"＞"Center Cursor" と選択する。
（わかりにくい説明ですみませんorz）

＞UVについて
　BlenderのUVが面UVなのに対してPMDが頂点UVであることに起因します。
　同一頂点で異なるUV値を持つ面がある場合には頂点を増やすことで対応しました。
　
＞設定ファイルについて
　読み込み時に、（PMDファイル名).xmlという名前の設定ファイルを作成します。
　書き出し時に、書き出しフォルダに（PMDファイル名).xmlというファイルがあれば取り込みます。
　文字コードはUTF-8固定です。
　標準モデルを取り込んで、その後加工するのが楽かもしれません。

＞マテリアル色について
　各色について Diffuse * Light + Ambient と処理がされています。
　たとえば,Ambientを0.7に設定すると、標準のMMDのライト(0.6)でDiffuseが0.5以上で最大値(1.0)になります。
　結構あっさりMAXになるのでそのまま書き出すと真っ白なんてのはよくある話です。
（BlenderのAmbientの項目は%指定のようなので、MirrorColorで代用しちゃってますので、そもそも狙った色が出るはずもなく。）
　かなり控えめにAmbientの値は設定したほうが良いようです。

  
［最後に］
Blenderの仕様とか、PMDの仕様とか。私の知らないことが大量に在ります……
改変などに制限をつけるつもりはありませんが、改良点は共有していただけると幸いです。

なお、このプログラムを使って生じた損害の補填はできません。ごめんなさい。

