2012年

6月

02日

Blender2.63系のスクリプト一新のお知らせ

Blender2.63用のMQO/MMDスクリプトを更新しました。

大きな更新は3点です。内容は以下のようになっています。

●モーフ対応

pmd、pmx共に表情読み込みに対応しました。pmxは頂点モーフのみ有効です。ShapeKeyで操作できるようにしています。

また、モーフに対応するためにファイル読み込みの方法を変更し、若干読み込み速度が向上しています。

 

例えば、材質を16分割ずつでメッシュを作成する処理をやめました。最近のBlenderって材質が16個以上割り当てられても問題ないんですね。

 

ShapeKeyの登録名は分かりやすいように(表情の種類)+(表情名)にしております。

●MMDスクリプトの統一

「pmd_script」と「pmx_script」を一つにまとめました。これにより、スクリプト名やメニューの名前が変わっています。

pmd、pmxの読み込みは一つのメニューで行えるようになっています。出力も同じようになっていますが、pmxの出力は対応していません。

●メモリリークについて

今回Blender2.63対応のスクリプトを全て更新した理由がコレです。

 

Blender2.63からモデルを読み込んだ後にメモリリークが出力されるようになりました(旧バージョンのBlenderでは出力されなかった)。調べてみた結果、Blenderの既存メソッドを使うとメモリリークが発生することがわかりました。

 

●メモリリークの発生を確認出来たメソッド一覧

bpy.ops.mesh.faces_shade_smooth :面にスムージングをかけるメソッド

bpy.ops.mesh.remove_doubles :重複頂点を削除するメソッド

bpy.ops.object.armature_add :アーマチュアオブジェクトを新規追加するメソッド

bpy.ops.object.shape_key_add :シェイプキーを新規追加するメソッド

 

これらのメソッドを別の処理に置き換えてリークが発生しないように修正はしましたが、インポート設定の「重複頂点の削除」が使えなくなっています。

 

Blenderに「bpy.ops.mesh.remove_doubles」と同じ機能でメモリリークが発生しないものがあれば復活すると思います。私は見つけることが出来ませんでした。

 

これらの理由によりインポート画面に若干の変更を加えています。MMDスクリプトには新たに座標系の選択項目を加えました。

出力設定にも同様のものを入れています。

 

入力では「Right-Hand(右手座標系に変換して読み込む)」 OpenGL仕様

出力では「Left-Hand(左手座標系に変換して書き込む)」 DirectX仕様

 

このように設定することをオススメします。

これで残すは「剛体」、「ジョイント」、「モーション」となりました。

 

物理演算はもう少し掛かると思うので、先にvmdインポーターの開発を進めるつもりです。

まぁ気長にお待ちください。

 

追記

pmd出力に頂点モーフを反映させておくのを忘れておりました・・・

先にコチラをやってしまおうと思います。

コメントをお書きください

コメント: 14
  • #1

    Bancho (土曜日, 02 6月 2012 20:20)

    怒涛の更新お疲れ様です。

    >メモリリーク
    BMESH搭載の弊害がまた一つ…
    以後のバージョンアップで解消されそうですが、どれぐらいのペースになるか…
    bpy.ops.mesh.remove_doublesは「メッシュ」メニュー内でも使われてるので、自作するか修正されるのを待つか…

    >先にvmdインポーターの開発を進めるつもりです。
    遂にVMD対応が進みますか。
    物理関係はBlenderで何とかなりそうですし。

  • #2

    Blender使い (土曜日, 02 6月 2012 21:57)

    お疲れ様です、早速使わせてもらいました。

    使用した感想をば。

    モーフだけ別のMeshに分けてimport出来ないのでしょうか。
    Tda_Append_MikuはFile容量が24Mほどでしたが、
    PMDEditorで分割してから読み込んでみたら、半分以下になりました。

    それとShapeKeyの登録名は他のImpoterとの整合性を考えて
    (表情の種類)はon/offできるといいがいかがでしょう。

  • #3

    ze10 (土曜日, 02 6月 2012 22:26)

    >>Bancho様

    なるほど、BMESHの影響ですか・・・
    2.64ではリークが直ってるといいなぁ


    >>Blender使い様
    ようやくリリースできました。遅くなって申し訳ないです。

    >モーフだけ別のMeshに分けて
    モーフに使われてる頂点だけを別メッシュ化ですか、出来るとは思いますけど、形状が破綻しそうですね・・・

    >登録名は他のImpoterとの整合性を考えて(表情の種類)はon/off
    「名前に『Eye』や『Eyebrow』を付けるのを切り替えが出来るようにする」という風に解釈しましたが、それでいいでしょうか?

  • #4

    Blender使い (土曜日, 02 6月 2012 23:06)

    >ze10様
    >形状が破綻しそうですね・・・
    なるほど、そうなりますか。

    >「名前に『Eye』や『Eyebrow』を付けるのを切り替えが出来るようにする」
    はい、そういうことです。

  • #5

    ze10 (土曜日, 02 6月 2012 23:09)

    >>Blender使い様
    わかりました。そのように対応します。

  • #6

    アロハ (日曜日, 03 6月 2012 13:47)

    VMDimporterお待ちしております!
    http://twitpic.com/9s8l6w/full
    http://twitpic.com/9s8sob/full

  • #7

    ze10 (月曜日, 04 6月 2012 22:40)

    >>アロハ様
    なるべく早くリリースできるようにします。

    これってBlenderの映像ですよね・・・
    今更ながら、Blenderってすげえな・・・・・・

  • #8

    ブレンディング (水曜日, 13 6月 2012 06:20)

    すみません、カスタム少女xMMDをやってる方ですが...
    TSO2PMXで変換されたモデルをインポートしようとしたら、なぜかウェイトが正常の読み込まれません。
    TSO2PMDは大丈夫です。TSO2PMXで変換されたモデルは4ボーンウェイトで塗られていますが、そこが問題の原因なのかな。4ボーンウェイトを正常にインポートする方法はないのでしょうか...

  • #9

    ze10 (土曜日, 16 6月 2012 01:29)

    >>ブレンディング様
    お返事が遅くなってしまい大変失礼いたしました。

    手持ちにある4ボーンウェイトのPMXモデルで試してみたのですが、私のほうでは残念ながら挙げられた現象は起こりませんでした。

    問題が発生したモデルをコチラに送っていただけるとデバッグしやすいのですが、いかがでしょうか?

    それと、ウェイトが正常に読み込まれてないことによりどのような不具合が起こっているのかキャプチャしていただけると助かります。

  • #10

    ブレンディング (土曜日, 07 7月 2012 02:50)

    こちらこそ大変遅くなってしまってすみません。
    画像やモデルのpmxファイルを用意しました。モデルのR-18部分は勝手に削除しておきましたがそこで何か問題がありましたら再アップしますので教えてください。dl先はこちらです:
    http://www.mediafire.com/?qq2nmsr6n9qhrl5
    リクエストしたキャプチャも作ってみたのでモデルと同梱しました。
    これで足りるのでしょうか。お手数お掛けしている上に返事が遅くて誠に申し訳ありません。

  • #11

    ze10 (土曜日, 07 7月 2012 14:56)

    >>ブレンディング様
    お久しぶりです。データのアップロードありがとうございます。

    モデルデータの解析をしたところ、ウェイト値が正常に読み込めない頂点には「同一のボーンが異なるウェイト値で複数回宣言されている」ことがわかりました。

    たとえばこのような感じです。

    ・不要ボーン削除.pmxの場合
    頂点番号110
    変換方式:BDEF4
    ボーン  ウェイト
    7    0.512321 ←ここで1回目の宣言
    7    0.236464 ←2回目が宣言されている
    4    0.203786
    8    0.047429

    上記の頂点の場合、最初に宣言されたウェイト値が無視され、結果ウェイトの崩壊につながったようです。

    このようなウェイト設定がMMDで通るとは想定外でした・・・無論私のスクリプトでは対処をしておりませんでした。

    次回のリリースまでに、重複宣言も正常に読み込めるように修正をしておきます。今のところの解決方法ですが、1頂点でのボーン番号の重複は避け、ウェイト値は一つにまとめてもらう他ないようです。

    ・修正の例
    頂点番号110
    変換方式:BDEF4
    ボーン  ウェイト
    7    0.748785
    4    0.203786
    8    0.047429
    0    0.000000

    大量の頂点の修正は容易ではないので、一応PMDEditorでボーンインデックスの重複を修正するスクリプトを組んでみました。

    もしよろしければご使用ください。

    https://skydrive.live.com/?cid=ce4c74eda2a73245&sc=documents&id=CE4C74EDA2A73245!154#cid=CE4C74EDA2A73245&id=CE4C74EDA2A73245!212&sc=documents

  • #12

    (火曜日, 04 9月 2012 11:45)

    2.63でインポートしたんですがテクスチャが読み込めないです。
    自分だけなんでしょうか。

  • #13

    ze10 (火曜日, 04 9月 2012 12:10)

    >>あ様

    テクスチャが読み込めない原因としては以下の3つが考えられます。
    ①パスの指定場所に画像ファイルが存在しない
    ②パスに指定された画像ファイルが壊れている
    ③テクスチャ名やパスに全角・日本文字が含まれている(Blenderを日本語化すれば問題ない)

    モデルを読み込んだ時にBlenderのDOSウィンドウにログを出力するようにしているので、テクスチャ読み込みに関するエラー情報も出力されているはずです。

    ソチラの方を確認してみてください。

  • #14

    (火曜日, 04 9月 2012 15:37)

    >>ze10
    ファイル名と日本語化で解決できました、
    ありがとうございます。