2013年

12月

13日

【Bender2.69】MMDスクリプト更新のお知らせ

更新対象:mmd_script_268(Blender2.68~2.69)

スクリプトバージョン:1.2.0

①バグ報告

●PMXモデルの頂点ウェイト出力

影響を受ける頂点グループ全てを出力する処理が、コードの記述ミスのせいで「最初に影響を受ける頂点グループだけを頂点グループ数だけ書き出す」という酷いことになっていたので修正をしました。

 

誤)

#とある頂点の影響値

vertex_weights = [0.1, 0.2, 0.25, 0.3]

 

#ファイル書き込み

for active_weight in vertex_weights:

    file.writeFloat(vertex_weights[0])

 

正)
#ファイル書き込み

for active_weight in vertex_weights:

    file.writeFloat(active_weight)

PMXモデルのインデックスのバイトサイズと有効値

PMXはヘッダで頂点・テクスチャ・材質・骨・表情・剛体のインデックスデータをどの基本データ型で取り扱うのかが記述されているのですが、この部分の仕様を読み違えてました。

 

各インデックスのバイトサイズは必ず1、2、4のいずれかが設定されていて、各インデックス事に以下のようになっています。頂点インデックス以外は同じ設定です。

 

※以下、PMX仕様.txtから引用

バイトサイズが1の場合
インデックス データ型 対象範囲
頂点 unsigned byte 0 ~ 255
テクスチャ signed byte 0 ~ 127
材質 signed byte 0 ~ 127
signed byte 0 ~ 127
表情 signed byte 0 ~ 127
剛体 signed short 0 ~ 127
バイトサイズが2の場合
インデックス データ型 対象範囲
頂点 unsigned short 256 ~ 65,535
テクスチャ signed short 128 ~ 32,767
材質 signed short 128 ~ 32,767
signed short 128 ~ 32,767
表情 signed short 128 ~ 32,767
剛体 signed byte 128 ~ 32,767
バイトサイズが4の場合
インデックス データ型 対象範囲
頂点  signed int 65,536 ~ 2,147,483,647
テクスチャ signed int 32,768 ~ 2,147,483,647
材質 signed int 32,768 ~ 2,147,483,647
signed int 32,768 ~ 2,147,483,647
表情 signed int 32,768 ~ 2,147,483,647
剛体 signed int 32,768 ~ 2,147,483,647

で何を間違ってたのかというと、頂点インデックスを他のインデックス同じように取り扱っていたので、形状破綻を引き起こす恐れがありました。

 

PMXモデルの入出力共に共に共通してる処理なので致命的なミスでした。

修正を施したので今後は破綻することは無いでしょう(おそらく)。

②新機能&新仕様

●表情(ShapeKey)の表示パネル設定

オブジェクトのメッシュパネルにカスタムプロパティを追加しました。

ShapeKeyをどの表示パネルへ追加するか、ここで設定することが出来ます。

 

インポートの時は自動で設定するようにしています。

ここで設定したShapeKeyデータは表情の表示枠へも反映されます。

 

なお、このパネルはオブジェクトモードでのみ有効です。

(基本データキーの追加、及び複数の表示パネルへの多重登録は出来ません)

●頂点エッジの設定

メッシュをエディットモードにすると、頂点エッジを編集するカスタムプロパティが表示されます。大雑把ではありますが、ここで頂点エッジの有効化・無効化が出来ます。

 

・新規

クリックすると、全ての頂点にエッジデータを追加します。メッシュの頂点エッジが設定されてない場合のみ押せます。

 

・Enabled

クリックすると、選択中の頂点のエッジ倍率を1.0に設定します。

 

・Disabled

クリックすると、選択中の頂点のエッジ倍率を0.0に設定します。

●MMD材質の設定

マテリアルパネルにMMDパラメータ用のカスタムプロパティを追加しました。

 

●読み込み
材質リスト(.txt)を読み込みます。


周囲光の色
MMDマテリアルのAmbient値

 

スペキュラー

MMDマテリアルの反射強度

 

チェックを外すと硬さ(specular_hardness)、チェックを入れるとコチラのパワー(power)を反射強度と認識します。

 

MMDでは反射強度0.0が設定可能なのに対し、Blenderでは0.0は扱えなかったのでその為だけに新たに用意しました。


●表示

MMDマテリアルの表示フラグ


●辺

MMDマテリアルのエッジ


●テクスチャ

MMDマテリアルのトゥーン&スフィア

 

デフォルトにチェックすると既存のtoon1~toon10、外すと独自トゥーンが設定できます。

●拡散色の扱い

材質にテクスチャが設定されている場合、ディフューズとアルファ値はテクスチャ側のものを優先するようにしました。

 

Diffuse RGB

 

Diffuse Alpha

 

材質側のディフューズを優先したい場合は、上図のディフューズパネルの「カラー」と「アルファ」のチェックをそれぞれ外してください。

●ボーン表示枠

Blenderのボーングループをボーンの表示枠として扱うようにしました。

特別枠の[Root]ボーン枠は出力時に自動作成するのでここで設定する必要はありません。

MMDスクリプトの今後について

元々私のスクリプトは、当時自分の環境でマトモに動かせるスクリプトが無かったので自分用に開発を始めたものでした。ところが今年に入ってsugianyさんの「blender_mmd_tools」という新しいMMDスクリプトが公開されました。

 

コチラのスクリプトはPMD・PMXモデルの入出力はもちろん私のスクリプトでは未対応の「剛体」や「VMDモーション」にも対応しており、CrysisレンダーやMMDのカメラ・ライトの読み込みも出来るそうです。こちらのスクリプトを利用してみましたが、とてもキレイに読み込めました。

 

自分の環境で動く素晴らしいスクリプトが出てきた今、自分でスクリプトを組む必要もなくなりました。私のBlenderやMMDに関する知識不足のことも踏まえ、そろそろMMDスクリプトから手を引こうかと考えています(他のスクリプトに関しては続けるつもりです)。

 

今後MMDスクリプトについてどうするかじっくり検討してみようと思います。

 

sugianyさんのスクリプト紹介動画

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

コメント: 10
  • #1

    しばたろう (木曜日, 19 12月 2013 01:28)

    素晴らしいMMDスクリプトの公開ありがとうございます。BBSでもお世話になりました。
    自分は、ze10さんのMMDスクリプトでBlenderにインポートして、sugianyさんのmmd_toolsでcyclesのシェーダーを割り当てるという使い方をしてます。MMDのポーズデータが手元にある場合は、sugianyさんのスクリプトでインポートできるのは素晴らしいのですが、手作業でボーンを動かす場合は、ze10さんのスクリプトで読み込んだほうがアウトライナーの中で把握しやすいと思っています。

  • #2

    しばたろう (土曜日, 21 12月 2013 09:44)

    上のコメントは、スクリプトバージョン:1.2.0を使ってみる前に投稿したものでした。Mac版Blender2.69と併せて使うとモデルによってエラーが表示されます。例えば、MMD付属のミクver2ではエラーはline807,267,188,409の順に出ました。ユーザー設定からアドオンを一旦削除して、再び読み込んでも同じでした。手元のMMDモデルをいくつか試してみたら、エラーが出なかったのは雪ミクダヨーさんだけでした。

  • #3

    ze10 (土曜日, 21 12月 2013 11:58)

    >>しばたろう様

    ご報告ありがとうございます。
    Windowsで同モデルを試してみましたが、エラーは出ませんでした。
    おそらく文字コード関連のエラーだとは思うのですが、私は今Macの環境を持っていないので確かめることができない状態です。エラーが検出されたLineだけでなく、スクリプトファイルの名前までわかれば対処のしようもあるのですが・・・

    もしよろしければエラーメッセージをキャプチャして、メールかTwitterで送ってくださると助かります。

  • #4

    しばたろう (月曜日, 23 12月 2013 02:05)

    エラーメッセージをtwitterの48taroか、上記ホームページで確認いただければ幸いです。macのユーザー名(半角英小文字9文字)のみ消しています。

  • #5

    ze10 (月曜日, 23 12月 2013 14:04)

    確認できました。
    完全にプログラミングミスが原因でした・・・

    修正版出します。

  • #6

    しばたろう (月曜日, 23 12月 2013 18:17)

    ご確認ありがとうございました。
    以前のバージョンを手元に残してありますので、修正版は気長に待ちます。

    (Twitter上のエラー画面は、もう消しても良いですか?)

  • #7

    ze10 (火曜日, 24 12月 2013 02:27)

    はい、大丈夫ですよ
    画像ありがとうございました

  • #8

    Bancho (火曜日, 07 1月 2014 21:07)

    久しぶりに書き込みします…

    こちらも最近ではsugiany氏のスクリプトにほぼ移行しまくりですが、貴殿のスクリプトのおかげで「BlenderでMMD」体験をすることが出来ましたし、正常にインポートできないモデルを見つけるたびに不具合報告をしたのもいい思い出です…
    (それどころか最近ではBlender自体いじることすらご無沙汰に…)

  • #9

    cassia (日曜日, 12 1月 2014 18:47)

    今後も更新を切にお願いします。頂点編集はBlenderでやりたいのですが、BlenderのXファイル出力アドオンが面ごとに独立して頂点を出力するというあまりにお粗末なので、PMXEにデータを持っていくのに苦労してました。nullorempry様のスクリプトは、この点かゆいところに手が届き重宝しております。sugiany氏のスクリプトはすごいかもしれませんが、私にとっては、Blenderでレンダリングするのではなく、UVデータ付きのモデルデータがPMXEに持っていければ良いので、軽いnullorempry様のスクリプトがぴったりです。このたびも、Blender2.69に移行する際、更新されてなかったらどうしようかと思いました。用途に応じて住み分けていると考えれば良いのではないでしょうか。

  • #10

    ze10 (土曜日, 19 4月 2014 07:40)

    コメントの反映・返信が遅れて申し訳ありません。

    >>1 しばたろう様
    >>9 cassia様
    それぞれで長所と短所があるみたいですね
    sugianyさんのスクリプトでは出来ない点がこちらのスクリプトにあるなら、これからも開発を続けていく価値はあるかもしれません。

    参考にさせていただきます。

    >>8 Bancho様
    お久しぶりです。
    私も最近はBlenderに触ることが少なくなってきまして・・・
    自分用に開発を始めたはずなんですけど、いつの間にか使う機会が減っていく始末・・・まぁ仕方のないことですね