![見出し画像](https://assets.st-note.com/production/uploads/images/15252825/rectangle_large_type_2_b25a007cb56f30b421e44e2dc66e44a9.png?width=1200)
モーフ名は前方不一致で15バイトまで
MMDにおけるモーフ名の長さに関する注意点。
基本として、モーフ名は15バイト以下が望ましい。前方不一致であれば、20バイトまで許容される。どんな場合も、20バイト超過は許容されない。
note:
以下ではMMDの仕様に関する非常に細かい話が続きます。
つまるところ「モーフ名は15バイトまで」あるいは「日本語7文字まで」を覚えておいてください。
仕様
仕様1
MMDの内部ではモーフを「探す」とき、
1. モーフ番号の若い順から
2. 前方15バイトぶんのモーフ名が一致するか
で探す。
仕様2
モーフ名が20バイトを超えるモーフは、直前に選択していたモーフのモーフ名を引き継ぐ。
仕様に起因する現象
仕様1
表情操作欄でモーフを選択した(すなわちドロップダウンリストから選んだ)場合、そのモーフ名のモーフを「探す」。通常は選んだモーフが当然選択されるが、
・選んだモーフよりモーフ番号が若く
・前方15バイトぶんのモーフ名が一致するような
モーフがある場合は、そのなかでモーフ番号の最も若いモーフが選択される。別のパネルであってもモーフ番号の最も若いモーフが呼びだされて選択される。
たとえばモーフ「あ」が2つ以上ある場合、表情操作欄でどの「あ」を選択しても、タイムライン上ではモーフ番号の最も若い「あ」が選択される様子を観察できる。また、どの「あ」に対して表示・操作・キー登録しても、モーフ番号の最も若い「あ」が表示・操作されるし、モーフ番号の最も若い「あ」にキー登録される。
また、VMDファイルの読み込みでもモーフを「探す」ので、モーフ番号の最も若いモーフにキーが読み込まれる。
例外はタイムライン上でモーフを直接選択した場合であり、これは「探さない」ので同一名のモーフが複数あっても個々のモーフを選択できる。しかも、タイムライン上での直接選択はそのモーフを呼び出す機能があると思われる。タイムライン上で選択したモーフが既に表情操作欄に表示されている場合、表情操作欄にその(本来の)モーフが呼び出され、モーフ番号の最も若いモーフとは独立に操作・キー登録できるようになる。この現象は謎だが、とにかく「モーフ番号の最も若いモーフしか操作できない」という前述の現象を回避できる。
同じ名前のモーフが複数あると最初のモーフしか操作できない問題に対して「表情操作欄でモーフを選択→そのモーフをタイムライン上で選択」すると操作できるという解答を手にしました。PMXeのない異世界に転生する予定の方は覚えておいてください。 pic.twitter.com/c3tUkI9o4C
— ましまし (@Mashimashi_mmd) October 2, 2019
たとえばモーフ「あ」が2つ以上あり、そのなかでモーフ番号がn番めに若い「あ」をn番めの「あ」とよぶことにする。2番めの「あ」を例に挙げると、
・表情操作欄ですでに2番めの「あ」を選択・表示している状態で
・このとき、内部では1番めの「あ」が呼び出され表示されている。
・タイムライン上で2番めの「あ」を直接選択し
・このとき、内部でも2番めの「あ」が呼び出され表示される。
・これは表情操作欄の数値が更新されるので観察できる。
・表情操作欄で2番めの「あ」を操作・登録すると、2番めの「あ」にキー登録できる。
ただし、キーのペーストはモーフを「探す」のでやはりモーフ番号の最も若いモーフにペーストされる。
仕様2
モーフ名が20バイトを超えるモーフは、直前に選択していたモーフのモーフ名を引き継ぐ(再掲)。したがって、モーフ名が20バイトを超えるモーフならびに直前に選択していたモーフとの間では仕様1と同じ現象が見られる。
すなわち、表情操作欄での数値は、直前に選択していたモーフの数値が表示される。数値を操作すると直前に選択していたモーフの数値が操作され、また登録すると直前に選択していたモーフに登録される。
対策:同じモーフ名を使わない
前述のとおり、MMD上では同じモーフ名(正確には前方一致)のモーフは数値を共有する。裏技的に共有させない方法も紹介したが、ふつう混乱のもとになるため同じモーフ名は使うべきでない。
しかし逆手に取れば、同一名のモーフを全部のパネルに入れればどのパネルからでもそのモーフを調整できる、ともいえる。全モーフを全パネルに入れておけば、使う人が「表情操作欄に表示しておきたいモーフ4つ」を自由に選べる。使いやすいかどうかは別として。
対策:モーフ名の長さは20バイト(15バイト)まで
20バイトを超えると「直前に選択していた別モーフ」の数値が適用されてしまい、もとのモーフを調整できないので20バイトは超えてはいけない。
15バイトは超えてもよいが、前方不一致にする。ただ、日本語8文字を超えてくるとモーフ名が表示欄から見切れてしまうので15バイト以内がMMDにも人にもやさしい。
バイト数については、基本的に以下のとおり。
・半角英数字記号は1バイト
・ひらがな漢字、半角カナは2バイト
・特殊文字は4バイト(絵文字🤔とか)※後段に注意書きあり
Shift-JISではないので、半角カナにしても1バイト節約できない点には注意が必要。
ただし、特殊文字(絵文字とか)は使ってはいけない。絵文字使う人はいないだろうけど。モデル名やモーフ名に絵文字を入れるとMMD上では名前全体が表示されなくなる。内部では名無しとして扱われているらしく、名無しのモーフとしてすべて同じモーフの扱いになるなどまたややこしい問題が起きる。まぁ、意図的に絵文字を埋め込むことで、Readme読めてPMXe使える人にだけモデルを使えるようにする安全装置にもできそう。
一応、モデル情報(読み込んだときに表示されるやつ)には絵文字を使うことができるし表示もされる。ただ、UIフォントなどPCの環境次第でいかようにも問題を起こせそうなのでやっぱり使わないでおきたい。
おしまい。