今回のエントリは検証がメインだ。以前フィギュア番号について調べた時、検証過程をすっとばして結果だけを書いたので、今回は丁寧に書いてみのだが……案の定、激しく冗長になってしまった。結論だけを知りたい方は、今回はナナメ読みして次回のエントリを待っていただければと思う。
Poserでは、ほとんどあらゆるものに外部名と内部名という二種類の名前が付けられていることは、たぶん多くの方がご存知だろう。特性パレットで表示させれば、ほとんどのオブジェクトは名前を変更することができる。ここで変更できるのが外部名である。内部名は特性パレットで外部名の上に表示されている名前である。こちらはいわば隠しパラメータのようなもので、セットアップルームでボーンを操作するときと、ある特殊な状況を除いては自分で変更することはできない。また、カメラやライト、それからパラメータパレットの各ダイヤルなどは、内部名そのものが表示できないようになっている。
外部名は自分で付け変えられる名前なので、自分の分かりやすいように命名すればいい。エンコーディングさえ正しければ、日本語が混じっていたって動作上は別段問題ない(実は内部名も結構大丈夫だったりする)。ただし、内部名も外部名も、一つだけ命名に大きな制約がある。それは内部名にしろ外部名にしろ、同一シーン上または同一フィギュア内のオブジェクトには、同じ名前を重複して付けることができないという点である。
この「同じ名前を重複して付けることができない」というのは、オブジェクトを名称だけで管理しているPoserの大原則である(まあ内部的にはID振ってると思うけど)。名前でしかものを識別できないのだから、同じ名前のオブジェクトがシーン上に存在すれば、どっちがどっちだか区別できなくなってしまう。なので、無理矢理同じ名前をつけようとすると、Poserは警告ウィンドウを出して勝手に名前を変更してしまう。
フィギュアの場合は、そのフィギュアに属する全てのオブジェクトにフィギュア番号を付加することで区別を行っている。従って、一つのフィギュア内での重複はできないが、フィギュアが異なれば内部名・外部名ともに同じ名前を使用することが可能である。フィギュアを何体読み込もうが、headはhead、腰部は腰部で名前が変わることはない。ただし、フィギュアそのものの外部名は重複することができない。まあフィギュア名が重複できてもフィギュアリストが見にくくなるだけなので、これは当然の処置だろう。
ところが小道具の場合はそうはいかない。小道具はフィギュアにペアレントすることもできるが、通常はシーンの最上位、ユニバースの直下に配置される。すると当然同じファイルをロードすれば同じ名前が付いてしまうことになる。
そこでPoserは、小道具の名前の後ろに自動的に数字を付加する事で、名前の重複を避けている。これを仮に識別番号と呼ぶことにしよう(←なんて呼ぶのか知らない)。
識別番号の書式は環境によって、またライブラリからのロードとインポートによる新規作成とで命名規則が異なる。さらに内部名と外部名によっても異なる。このヘンがもうイヤになるぐらいややこしい(笑)。
まずは、ライブラリからロードした場合を見て行こう。P6Jの場合。
そいでもってP7Eの場合。
次に、Wavefront OBJ形式でインポートを行った場合。読み込んだファイル名がそのまま内部名・外部名となる。P6Jの場合。
さらにP7Eの場合。
このように、内部名は自分の識別番号から順番に、外部名はライブラリからロードした時は必ず1から、ロードされる度に一つずつ増えて行く。注意しなければならないのは、フィギュア番号とは異なり内部名が必ず1から始まるわけではないこと、さらに"_1"も" 1"も日本語版・英語版共に同じく識別番号として機能するのに、アンダーバーとハイフンの数字は共存できることである。
眩暈を感じたところで、次にフィギュアにペアレントされている場合を見て行こう。小道具がフィギュアにペアレントされている状態には二通りの状況が考えられる。一つはフィギュアに小道具をペアレントしたままそのフィギュアをライブラリに登録し、再びロードした場合。服に初めからついているボタンなどはこれに当たる。もう一つはロードされた時に自動的に選択フィギュアのパーツにペアレントされるよう、あらかじめ設定がされている場合だ。アクセサリやDCなどはこの設定がされている場合が多い。
まずは、ライブラリ内のフィギュアに小道具がペアレントされている場合。
落ち着いて見て行こう。外部名はいずれの場合も、元々のキャラクターファイル内で持っていた識別番号から順番にプラス1されているのがわかる。なので、これは問題ないだろう。注目するべきは内部名だ。どちらも一体目は元々の名前、二体目にはプラス1された名前が付き、以降は変化がない。なぜ一体目と二体目の間で変化が起こるのだろう?
今回用いたフィギュアは新規作成したシーンに一体目にロードしたので、当然フィギュア番号は1番ということになる(フィギュア番号の法則については過去ログ参照のこと)。では、フィギュア番号が異なればどうなるだろうか? キャラクターファイルをエディタで開き、フィギュア番号 ":1" を検索して ":2" に置き換えてみる。
今度は二体目までは元々の番号、三体目以降はプラス1された識別番号が内部名についている。
ということは、ロードされた時点で新しく割り振られるフィギュア番号が、ペアレント先フィギュアの元々のフィギュア番号を越えた場合にプラス1した内部名、それまでは元々の内部名が使用されるということになる。なぜこのような法則になるのだろうか。
疑問点をひとまず置いておいて、次にシーンにロードした時点で自動ペアレントされる小道具の場合を見て行こう。
外部名はもう面倒くさいしMATの動作には関係ないので省略する。ちなみにこの場合何故かP7でも識別番号が "_1" じゃなくて " 1" になってたりする(統一しようという気はないのだろうか……)。
フィギュアは先にロードされているので、フィギュア番号は1から4まで順番に付加されている。しかし、やはり一体目と二体目ので数字がプラスされている。一度ロードされてしまえば、元のフィギュア番号の情報は上書きされ失われてしまうわけだから、要因として考えられるのはロードした小道具内にしかない。となれば、小道具ファイル内で指定されている、ペアレント先のフィギュア番号が鍵になっていることがわかる。
これを ":2"に書き換えて同様に読み込んでみる。
今度はやはり、二体目と三体目の間で番号がプラス1された。
ということは、フィギュアにペアレントされる小道具の内部名は、元々のファイル内で指定されているペアレント先のフィギュア番号を、越えたフィギュアにペアレントされる場合に数字が変わる……
と、思いきや。
ペアレント設定のある小道具は、元々のペアレント先のフィギュア番号が何番であろうとも、ロード時に選択されているフィギュアにペアレントされるようになっている。今までは1番から順番にロードしていったのだが、これを逆に4番のフィギュアからペアレントされるようにロードしてみると、番号が変わってしまった……いや、変わらなかったのだ。
いろいろ試してみたのだが、もういい加減しんどくなったので図は省略することにする(笑)。最終的に得られた結論は、
「Poserは小道具がロードされた時、新たなペアレント先のフィギュア番号に関わらず、元々のペアレント先のフィギュア番号のフィギュアがシーン内に存在するかを確認し、そのフィギュア内に同名の小道具が存在した場合は識別番号を繰り上げる」
というものである。
元々のペアレント先が1番だった場合を考えてみよう。最初に小道具をロードした時、シーン内の1番のフィギュアにはまだ何も存在しない。従って小道具は元の名前のままフィギュアにペアレントされることになる。この時選択していたフィギュアが1番だったら、ペアレント先は当然1番である。次に、同じ小道具をロードすると、再びPoserは1番のフィギュアを確認する。そこには既に同名の小道具が存在する。なので今回ロードされた小道具は、最初に読み込まれた小道具の名前にプラス1した識別番号が振られる。というわけである。
この法則はペアレント設定が施されていないプロップにも当てはめることができる。ペアレント設定がない場合、元々の小道具が属する階層はユニバースで、新たに配置される階層もユニバースである。ユニバース内に同名の名前があればプラス1し、まだ同じ名前があればさらにプラス1……と繰り上げていく。ちなみにユニバース内や同一フィギュア内で小道具同士をペアレントしても、きちんと同名のチェックはされる模様である。
さて。
長々と検証を繰り返して、ようやく小道具の識別番号の命名法則が明らかにできたわけだが、これが何を意味するのだろうか。
小道具はロードされる時、ロード順や元々の記述によって勝手に内部名まで変わってしまう。それをアイテムの製作者側が完全にコントロールするのは不可能に近く、仮にできたとしても確実なのは最初にロードされる小道具一つだけ、そういうことなのだろうか。だとしたら、MATファイルで確実にアクセスできる小道具は一つだけ、ということになってしまう。
長くなってしまったのでこの辺で小休止。次は、今回検証から外したNull番号を使用したケースと、実際にMATファイルを作る場合や小道具の内部名が変わることで起こる現象について、軽くまとめられたらなあと思う。