各ソフトによるSDEF変形の差異
さて、fc2は記事更新を怠るとトップに広告が出てしまうので、更新がてらに小ネタを。
今回はMMD関連ツールなどでのSDEF変形の差異について少しだけ触れます。
私はプログラミングが出来る訳でもなく、また3DCGに詳しい訳でもなく、更に言えばSDEF変形というものを本質的に理解しているとは言い難い状態での説明ですので、各々、他サイトなどでの情報を踏まえて検討材料としてください。
【前提】
今回は、MikuMikuDance・PMXEditor・MikuMikuMoving・keynote(metasequoia plug-in)での比較です。
検証モデルとして、mqdlさんのIAxモデルを使用させて頂きます。
keynoteでのデータは持ってませんので、実質的な変形具合の検証ではkeynoteは使いません。
また、PMX仕様にSDEF変形が搭載された時に、極北Pとmqdlさん、そして時折樋口さんを交えて「ある程度」の摺合せがあった(と思われる。うろ覚え)のですが、厳密な部分でご本人同士がすり合わせたかどうかは分かりません。
基本的には、それぞれの各ソフト制作者が仕様をベースに、どうプログラムしているかは分かりません。
ですので、完全互換が取れている訳でもないので、動作に差異があるのは至極当然とも言えます。
そして、各ソフトでの開発環境の違いなども影響している場合があります。
【SDEF変形とは】
計算方法とか技術的な事はサッパリではありますし、何気にその辺りの技術的解説をしている日本語ページは少ないです。「SDEF」で検索するとMMD関連が多く出てくるのが現状です。
では結果としてどういう違いがあるのかは、mqdlさんが分かりやすく説明されていますので、こちらを参照下さい。
mqdl | sdef と bdef の違い
http://mqdl.jpn.org/sb.cgi?eid=69
上記ページ内でも説明されている通り、曲げ・捩り時に潰れにくい変形をする計算方法、と覚えればひとまずは大丈夫です。
特に円柱形の形状をしたもの、人体であれば腕や足などで使うと、綺麗に折れ曲がってくれます。
今回、検証で使わせて頂くIAxモデルにも多用されていますので、参考にしてみると良いでしょう。
【PMX仕様におけるSDEFの制約】
ここから先は、モデリング上での専門事項がいくつか出てきます。個別に説明するとかなり長くなるので、簡略化している場合もある事をご了承ください。
またSDEF変形はPMXフォーマット限定です。PMDでは設定できません。
まず、PMX仕様上でのSDEFの制約ですが、
・関連のウェイトボーンが2つ | 1つの場合はBDEF1固定/SDEFはBDEF2,BDEF4から変換可能
・関連のウェイトボーンが親子関係
(PMXエディタ readme.txtより抜粋)
とあります。
ですので、腕などにSDEFを適用しつつ、捩りボーンや多段化を行う場合には付与属性(回転付与・移動付与)を使用するなどの一工夫が必要となります。
プラグインなどで一気に多段化してしまうと、変形がおかしくなってしまったりするので要注意です。
(エディタの「多重付与構造」の項目を参照に。readme.txt内を検索してください)
さて、PMXではこれらの制限がある訳ですが、
本来のアルゴリズムとしてはSDEFのウェイトボーンが必ずしも親子関係である必要はない
のです。
ではなぜ、わざわざPMX仕様では親子関係の縛りがあるかというと…
正直女子中学生の頭ではなかなか理解できてないというか、そもそもSDEFの基礎すら分かってません。
基本的には、ボーンではなく空間上にて親子というか隣の配置になっていればいいだけであって、ボーンそれ自体が親子である必要性がない、という理解をしています。
PMXでの変形処理では、
ボーンのグローバル変化量と、ウェイトで設定されている(見かけ上の)親ボーンのローカル回転量を参照している
…との事で、やり方次第では完全な親子関係を持っているボーンでなくとも正しく変形できなくはないが、変形機構に詳しく無い人にはややこしくなるだけなので、シンプルに仕様上「親子関係縛り」にしているとの事です。
(…で、合ってるのかな?)
metasequoiaのkeynoteではこの制限はなく、ボーンの親子関係に関わらずSDEFの設定ができます。
当然ながら、連続してない離れた頂点に設定しても意味はありません。
【実際の変形の差異】
現時点では、PMD/PMXフォーマットのモデルデータを作成するには、metasequoia+keynoteもしくはPMDEditor/PMXEdtiorを使用するのがメジャーではあります。
(Blenderでもエクスポートできるようですが、どこまで互換が取れるかは未確認。基本的にはPMDEditor/PMXEditorなどで最終調整が必要?)
今回検証で使わせて頂くIAxモデルは、Keynoteからの出力がベースになってると思われます。
公開されているデータはPMXのみなので、metasequoia上での変形確認は行いません。

あら可愛い…
さて、このモデルさんですが、先述の通り多くの場所でSDEF変形が適用されています。

肘周りや足周り、そして胴の部分などにもSDEFの設定がされています。
PMXEditorでこのモデルを状態検証すると

と、でます。
つまりこれがPMX仕様上での「親子関係にないSDEFウェイト」となります。
どのあたりが不正ウェイトになってるかというと、分かりやすいのはこの部分です。

つまり腰回りですね。
ウェイト情報を見ると、この頂点は親側が「6:上半身」、子側が「85:下半身」となっています。それぞれのボーンの親は「5:センター」ですので、上半身と下半身は親子関係にはありません(親戚ではありますね)
これが上記でもあるように、空間上では近くはあるけど直接の親子ではない関係という事になります。
PMXEditorのTransformViewで変形確認を行うと、当然ながらPMX仕様での計算となりますのでこのように正しく変形は出来ません。

ところが、MMDで変形させると…

と、SDEF変形としては正しい結果が得られます。
そしてMikuMikuMovingでは…

PMXEditorのTransformViewと近似値的な変形結果となっています。
(細かい部分での差異は見られます)
つまり、不正SDEFウェイトの処理として
PMXEditor : 仕様通り
MikuMikuDance : 不正SDEFウェイトの場合、独自処理として別途SDEF変形を適用
MikuMikuMoving : 仕様通り
という流れではないかと推測しています。
MMMでは更に、上半身2も動かすと…

参照情報が崩れるのか、大幅にズレていってしまいます。
【つまり】
本質的にSDEF変形では「親子関係である」必要性はないものの、PMXでの仕様上では親子関係にある必要性があるという事になります。
MMD限定であるならば、Keynoteなどを使いこういった(PMXに対して)特殊なSDEF変形を組み込む事は可能ですが、互換性は失われる可能性が大きいという事です。
仕様に準じるかどうかは、各開発者・各モデラー次第でしょう。
IAxさんをMMMなどで動かしたい、という方は、一度PMXEditorでIAxさんを呼び出し、
編集メニュー → 頂点 → 「不正なSDEFをBDEF2化」
のコマンドを実行するだけで、不正SDEFのみBDEF化されます。
IAxモデルの場合、肘や膝部分はきちんと親子関係になってるので、その部分はSDEFのままで綺麗なまま変形させる事が維持できます。

胴回りであれば、BDEF2化しても素人目には大きな差異は見られないかも…?

さて、ユーザーとしてはMMDとMMM、PMXEditorそれぞれの互換を取ってほしいという要望も多いでしょうが、冒頭辺りにも書いた通り、開発者同士の交流こそあれど、考え方や組み方はそれぞれ異なります。
また、開発環境なども異なるので、「MMDで出来てるのに、なんでMMMで出来ないの?」というよくある疑問もあるでしょうが、プログラミングにおいては環境や構築方法、場合によってはコンセプトが違うので言う程簡単ではない、という所でしょうか。
互換を取ろうとするのであれば、それぞれがソースを公開、もしくはそれぞれでやり取りする必要はありますが、元々仕様段階から異なっているので組み込めばOKという単純な話ではありません。
(軽トラにフェラーリのエンジンを単純に積み替えただけでは動かない。 過去にIK計算方法を樋口氏が一部公開したものの、PMXEditor側・MMM側ではそれを適用させるのに難儀し、また厳密に言えば完全一致するようには動作していないという過去もある)
MMMでいえば、シェーダー2.0で、さらにGPU演算と環境が異なるので、変形機構の組み込みはかなり難儀している状況でもあるようです。
MMMでSDEF変形が出来るようになったのは丁度昨年の今頃ではあるのですが、その時点で様々な問題点のフィードバックはなされていますが、改善にはかなり手間がかかるとの回答もありました。
現時点で、MMMでのPMX2.1仕様にあるQDEF変形の実装もされていない理由の一つでもあるのではないか、と推測しています。
各開発者が高額宝くじに当たり、晴れてニート生活が出来るようになったら改善される可能性が増えるかもですが…(笑)
これらの理由もあり、SDEF変形は多用されているとは言い難い状況ではありますが、一応上記に上げたソフト上では使えますし、何よりSDEF変形の特徴である「潰れない変形」は魅力的です。
IAxモデルは、どの部分にSDEFを適用させると効果的かがよくわかるモデルでもありますので、是非ともお家に迎えて構造解析してみてください。
(髪の一部や服などにも適用されてて面白いです)
モデル入手はこちらから。
【謝辞】
樋口優さん 極北P mqdlさん pironさん
今回はMMD関連ツールなどでのSDEF変形の差異について少しだけ触れます。
私はプログラミングが出来る訳でもなく、また3DCGに詳しい訳でもなく、更に言えばSDEF変形というものを本質的に理解しているとは言い難い状態での説明ですので、各々、他サイトなどでの情報を踏まえて検討材料としてください。
【前提】
今回は、MikuMikuDance・PMXEditor・MikuMikuMoving・keynote(metasequoia plug-in)での比較です。
検証モデルとして、mqdlさんのIAxモデルを使用させて頂きます。
keynoteでのデータは持ってませんので、実質的な変形具合の検証ではkeynoteは使いません。
また、PMX仕様にSDEF変形が搭載された時に、極北Pとmqdlさん、そして時折樋口さんを交えて「ある程度」の摺合せがあった(と思われる。うろ覚え)のですが、厳密な部分でご本人同士がすり合わせたかどうかは分かりません。
基本的には、それぞれの各ソフト制作者が仕様をベースに、どうプログラムしているかは分かりません。
ですので、完全互換が取れている訳でもないので、動作に差異があるのは至極当然とも言えます。
そして、各ソフトでの開発環境の違いなども影響している場合があります。
ソフト | シェーダー | 変形計算 | 開発環境 |
MikuMikuDance | 2.0 | CPU | C++ |
PMXEditor | 3.0 | CPU | C# |
MikuMikuMoving | 2.0 | GPU | C# |
【SDEF変形とは】
計算方法とか技術的な事はサッパリではありますし、何気にその辺りの技術的解説をしている日本語ページは少ないです。「SDEF」で検索するとMMD関連が多く出てくるのが現状です。
では結果としてどういう違いがあるのかは、mqdlさんが分かりやすく説明されていますので、こちらを参照下さい。
mqdl | sdef と bdef の違い
http://mqdl.jpn.org/sb.cgi?eid=69
上記ページ内でも説明されている通り、曲げ・捩り時に潰れにくい変形をする計算方法、と覚えればひとまずは大丈夫です。
特に円柱形の形状をしたもの、人体であれば腕や足などで使うと、綺麗に折れ曲がってくれます。
今回、検証で使わせて頂くIAxモデルにも多用されていますので、参考にしてみると良いでしょう。
【PMX仕様におけるSDEFの制約】
ここから先は、モデリング上での専門事項がいくつか出てきます。個別に説明するとかなり長くなるので、簡略化している場合もある事をご了承ください。
またSDEF変形はPMXフォーマット限定です。PMDでは設定できません。
まず、PMX仕様上でのSDEFの制約ですが、
・関連のウェイトボーンが2つ | 1つの場合はBDEF1固定/SDEFはBDEF2,BDEF4から変換可能
・関連のウェイトボーンが親子関係
(PMXエディタ readme.txtより抜粋)
とあります。
ですので、腕などにSDEFを適用しつつ、捩りボーンや多段化を行う場合には付与属性(回転付与・移動付与)を使用するなどの一工夫が必要となります。
プラグインなどで一気に多段化してしまうと、変形がおかしくなってしまったりするので要注意です。
(エディタの「多重付与構造」の項目を参照に。readme.txt内を検索してください)
さて、PMXではこれらの制限がある訳ですが、
本来のアルゴリズムとしてはSDEFのウェイトボーンが必ずしも親子関係である必要はない
のです。
ではなぜ、わざわざPMX仕様では親子関係の縛りがあるかというと…
正直女子中学生の頭ではなかなか理解できてないというか、そもそもSDEFの基礎すら分かってません。
基本的には、ボーンではなく空間上にて親子というか隣の配置になっていればいいだけであって、ボーンそれ自体が親子である必要性がない、という理解をしています。
PMXでの変形処理では、
ボーンのグローバル変化量と、ウェイトで設定されている(見かけ上の)親ボーンのローカル回転量を参照している
…との事で、やり方次第では完全な親子関係を持っているボーンでなくとも正しく変形できなくはないが、変形機構に詳しく無い人にはややこしくなるだけなので、シンプルに仕様上「親子関係縛り」にしているとの事です。
(…で、合ってるのかな?)
metasequoiaのkeynoteではこの制限はなく、ボーンの親子関係に関わらずSDEFの設定ができます。
当然ながら、連続してない離れた頂点に設定しても意味はありません。
【実際の変形の差異】
現時点では、PMD/PMXフォーマットのモデルデータを作成するには、metasequoia+keynoteもしくはPMDEditor/PMXEdtiorを使用するのがメジャーではあります。
(Blenderでもエクスポートできるようですが、どこまで互換が取れるかは未確認。基本的にはPMDEditor/PMXEditorなどで最終調整が必要?)
今回検証で使わせて頂くIAxモデルは、Keynoteからの出力がベースになってると思われます。
公開されているデータはPMXのみなので、metasequoia上での変形確認は行いません。

あら可愛い…
さて、このモデルさんですが、先述の通り多くの場所でSDEF変形が適用されています。

肘周りや足周り、そして胴の部分などにもSDEFの設定がされています。
PMXEditorでこのモデルを状態検証すると

と、でます。
つまりこれがPMX仕様上での「親子関係にないSDEFウェイト」となります。
どのあたりが不正ウェイトになってるかというと、分かりやすいのはこの部分です。

つまり腰回りですね。
ウェイト情報を見ると、この頂点は親側が「6:上半身」、子側が「85:下半身」となっています。それぞれのボーンの親は「5:センター」ですので、上半身と下半身は親子関係にはありません(親戚ではありますね)
これが上記でもあるように、空間上では近くはあるけど直接の親子ではない関係という事になります。
PMXEditorのTransformViewで変形確認を行うと、当然ながらPMX仕様での計算となりますのでこのように正しく変形は出来ません。

ところが、MMDで変形させると…

と、SDEF変形としては正しい結果が得られます。
そしてMikuMikuMovingでは…

PMXEditorのTransformViewと近似値的な変形結果となっています。
(細かい部分での差異は見られます)
つまり、不正SDEFウェイトの処理として
PMXEditor : 仕様通り
MikuMikuDance : 不正SDEFウェイトの場合、独自処理として別途SDEF変形を適用
MikuMikuMoving : 仕様通り
という流れではないかと推測しています。
MMMでは更に、上半身2も動かすと…

参照情報が崩れるのか、大幅にズレていってしまいます。
【つまり】
本質的にSDEF変形では「親子関係である」必要性はないものの、PMXでの仕様上では親子関係にある必要性があるという事になります。
MMD限定であるならば、Keynoteなどを使いこういった(PMXに対して)特殊なSDEF変形を組み込む事は可能ですが、互換性は失われる可能性が大きいという事です。
仕様に準じるかどうかは、各開発者・各モデラー次第でしょう。
IAxさんをMMMなどで動かしたい、という方は、一度PMXEditorでIAxさんを呼び出し、
編集メニュー → 頂点 → 「不正なSDEFをBDEF2化」
のコマンドを実行するだけで、不正SDEFのみBDEF化されます。
IAxモデルの場合、肘や膝部分はきちんと親子関係になってるので、その部分はSDEFのままで綺麗なまま変形させる事が維持できます。

胴回りであれば、BDEF2化しても素人目には大きな差異は見られないかも…?

さて、ユーザーとしてはMMDとMMM、PMXEditorそれぞれの互換を取ってほしいという要望も多いでしょうが、冒頭辺りにも書いた通り、開発者同士の交流こそあれど、考え方や組み方はそれぞれ異なります。
また、開発環境なども異なるので、「MMDで出来てるのに、なんでMMMで出来ないの?」というよくある疑問もあるでしょうが、プログラミングにおいては環境や構築方法、場合によってはコンセプトが違うので言う程簡単ではない、という所でしょうか。
互換を取ろうとするのであれば、それぞれがソースを公開、もしくはそれぞれでやり取りする必要はありますが、元々仕様段階から異なっているので組み込めばOKという単純な話ではありません。
(軽トラにフェラーリのエンジンを単純に積み替えただけでは動かない。 過去にIK計算方法を樋口氏が一部公開したものの、PMXEditor側・MMM側ではそれを適用させるのに難儀し、また厳密に言えば完全一致するようには動作していないという過去もある)
MMMでいえば、シェーダー2.0で、さらにGPU演算と環境が異なるので、変形機構の組み込みはかなり難儀している状況でもあるようです。
MMMでSDEF変形が出来るようになったのは丁度昨年の今頃ではあるのですが、その時点で様々な問題点のフィードバックはなされていますが、改善にはかなり手間がかかるとの回答もありました。
現時点で、MMMでのPMX2.1仕様にあるQDEF変形の実装もされていない理由の一つでもあるのではないか、と推測しています。
各開発者が高額宝くじに当たり、晴れてニート生活が出来るようになったら改善される可能性が増えるかもですが…(笑)
これらの理由もあり、SDEF変形は多用されているとは言い難い状況ではありますが、一応上記に上げたソフト上では使えますし、何よりSDEF変形の特徴である「潰れない変形」は魅力的です。
IAxモデルは、どの部分にSDEFを適用させると効果的かがよくわかるモデルでもありますので、是非ともお家に迎えて構造解析してみてください。
(髪の一部や服などにも適用されてて面白いです)
モデル入手はこちらから。
【謝辞】
樋口優さん 極北P mqdlさん pironさん
- 関連記事
スポンサーサイト