Adsense

2013年9月18日水曜日

Secondlife のボーンとメッシュ

リグ入りメッシュ (Rigged Mesh) 触って、作ってみて、自分なりにリグ入りメッシュについてまとめてみようと思いました。たぶん、2年くらい悶々としながら触っていたと思いますw なお、具体的な rigged mesh の作成手順ではなくて、概念的なもの、私がこれまで(もしかしたら今も?)誤解して理解できていなかったことをまとめています。ですので、知っている人にとっては「何、悩んでるの?」という内容であるのでご注意(というかスルー)してください。

リグ入りメッシュとは、簡単にいうとアバター用のアニメーションと一緒に動くメッシュのことです。そのために、リグ入りメッシュにはボーンとの関連付け情報がなければいけません。じゃないとただのお人形さんです。それをセカンドライフで体に装着しても、お人形を持っている・つけている状態になります。

メッシュはなんとなく理解できると思います。でも、ボーンってなーに?そして、この2つがどう関連付けられているのかを理解するのは、私にとっては難しいものでした。
両者の関連付けはウェイトでしょ?とググればでてくるわけですが、実はそれだけでもなく、ここを理解するのに相当な時間がかかりました。

また、使用する 3DCG ツールによっては用語が違ったりします。私は Blender を使っているので、セカンドライフ用語と Blender 用語の関連付けにも時間がかかりました。Blender ではボーンで構成された骨格のことを Armature と呼びます。また、スケルトン(Skelton)と呼ぶツールもあります。

 

ボーンって何?

そもそもセカンドライフで「ボーン」ってどれ?ということです。セカンドライフ(インワールドでビューワーのインベントリー(持ち物)とでもいいましょうか)には単体でボーン(Armature) はありません。アップロードしたメッシュにボーンが入っているのかな?と思っていたら、それも正確ではありませんでした。セカンドライフの中ではシェイプがボーンに近いのですが、シェイプには以下が含まれます。

  • ボーンの長さ情報
  • ボーンの位置情報
  • デフォルトの人間型アバターメッシュ
  • 人間型アバターメッシュの部分的太さ(サイズ)を変えるボリューム情報
  • アタッチメントの位置情報(イヤリングとか、どこにつけるかの場所)

(参照) http://blog.machinimatrix.org/avastar/the-second-life-skeleton/

当たり前ですよね。シェイプの編集のシェイプ スライダーを使ってこれまでずーっとやってきたことです。

リグ入りメッシュを使う場合、ほとんどが全身や一部をアルファ マスクで透明にします。これにより「デフォルトの人間型アバターのメッシュ」を消しているんですよね。ただし、ボーンは見えません>< でも、確実にそこに存在するのです!

以下は Blender と Avastar というセカンドライフ リグ入りメッシュ作成支援アドオンでみた Shape になります。この場合は「ボーン」(Armature)は目で確認できます。

Avastar
http://blog.machinimatrix.org/avastar/

shape
(髪とスカートのメッシュは非表示にしています)

リグ入りメッシュのアバターを装着する場合でも、かならずシェイプは必要です。あとでご紹介する「ジョイント ポジション付きのリグ入りメッシュ」を使う場合はシェイプの流用をしないで、それ用のシェイプを新規作成して使ったほうがいいでしょう。(blank shape などが同梱されている場合が多いです) そのリグ入りメッシュ用のボーンとして、ですね。フルメッシュアバターじゃなくて洋服などのジョイント情報なしのリグ入りメッシュはその必要はありません。

でも、、、よく自分でもやっちゃってるのが、ばけもの屋さんの動物アバターを装着して、その後アウトフィットで通常のアバターに戻る、、、と、この世のものとは思えない物体が出現、、、w
これ、Shape を変えても元に戻らないこともあり、ログインしなおさないと「ジョイント(ボーンの付け根、関節)」の位置がリセットされないことも多いですね。

このことから、リグ入りメッシュで、かつジョイント付(メッシュ アップロード時の指定であります)のメッシュを装着した時は、その時のシェイプのボーンの形状がメッシュに登録されているジョイントの位置に強制的に変更されるらしい、ということがわかります。(シェイプ変えても戻らないことがあるのは困ったものですが、、、)

じゃぁ、もし、フルメッシュ アバタ―で、ジョイントなしでアップロードしたらどうなるか、、、。または、アップしたらなんか関節の位置が曲がってる、、、Blender でメッシュをみていたバランスと明らかに違う(顔が大きいとか)、、、これはボーンとメッシュの関係、「リグ入り (rigged)」の意味を理解する必要がありました。

 

ウェイトとボーンとメッシュの関係

メッシュは数多くの「頂点」で構成されています。正確には頂点  (vertex) と辺 (Edge) と面 (face) からですが、ものすごい数の頂点で作らています。
上のセカンドライフのアバター メッシュの頂点数は 4,736 あります。(実は人型のメッシュモデルとしては少ない方です)

shapevertex

メッシュが動くということは、これらの頂点が動くことに他ならないわけですが、数千、数万の頂点を1個1個管理するわけにはいかないので、「頂点グループ (Vertex Group)」というものを使います。

また、Blender の中でボーン(Armature)の動きを使ってメッシュ オブジェクトを変形させるために「Armature モディファイア」を使います。(Armature を使って mesh をポージングさせる、とイメージするといいかも)モディファイアとはメッシュの形状や属性などを変形・変更するための様々な便利ツールの集まりです。

ペアレント(ペアレンティング)という、メッシュと Armature を関連付ける機能があります。Ctrl+P がショートカットになります。ペアレントすると Armature モディファイアがメッシュに適用され、指定したボーン(Armature)の各ボーンの名前(mHead や mChest など)を使って頂点グループがメッシュに自動的に作成されます。

この時のペアレントのオプションで「ウェイト」の指定方法を選ぶことができます。
ウェイトとは、各頂点それぞれがもっている「重みづけ」で、その頂点が属している頂点グループと「同じ名前のボーン」が動いた時にどのくらいの強さで追随するか、という数値です。0は全く動かない、1が最高、という範囲で指定します。頂点によっては複数の頂点グループに属しているものもあります。肘やひざなどにある頂点はその代表例でしょう。

ペアレント時 [Armature Deform] でのウェイト付けのオプションは3つあります。

  • まったくウェイトをつけない、頂点が登録されていない空の頂点グループを作成 [With Empty Groups]
  • エンベロップという armature 形状(丸いお団子のような形)を使ったウェイト付け [With Envelop Groups]
  • Armature の位置から自動ウェイト[With Automatic Weight]

ウェイトがつくと、各部位のボーンと同じ名前の頂点グループに、そのボーンのそばにある(ウェイト付けされた)頂点が登録されます。

Blender の中で、Armature を [POSE Mode] にして各ボーン を動かすと、ウェイト付けされているメッシュが追随していきます。うまくウェイト付けされていない頂点はそのままその場所に残ったり、または、ボーンから離れているところでもウェイト付けされると動いたりします。

ウェイト付けがおかしい場合には POSE Mode のまま Mesh オブジェクトを選んで、 [Weight Paint] でウェイトを塗りなおして調整します。ウェイトを塗ることを「スキニング(skinning)」と呼ぶようです。

こうやってウェイト調整したメッシュをセカンドライフにアップロードするわけですが、アップロードできるのは「メッシュ」のみで、Armature そのものはアップロードできません。Avastar エクスポーターは Armature を選択しなくてもいいのですが、標準の Collada エクスポーターは Mesh と Armature の両方を選択する必要があります。この場合、両方エクスポートしているような気もしますが、でも、上述のようにセカンドライフにアップロードした後は「シェイプ」が Armature の役割を果たしています。
リグ入りメッシュとしてアップローダーの読み込みに成功したメッシュ(Collada ファイル)はアップロードオプションの「Include skin weight」と「Include joint positions」がチェック可能な有効状態になります。ちなみにこのオプション2つともはずすと、単なるお人形としてアップされます。

じゃ、「リグ入りメッシュ」の「リグ」っていったい何なんでしょう?
私が長い間理解できていなかったのは、この「リグ」の意味でした。

 

Rigging って...

結局は「リグ入り」といっても “Rig” というモノは存在しない、、、?
Maya を使っている人は「何を悩んでいるかわからない」かもしれませんね。
どうやら、メッシュに対して、ボーンをいれて Armature を構成したり、ボーンをつなげて Joint を構成したり、Vertex Group を作って、ウェイトを入れたり、、、こういうメッシュを動かす設定・作業のこと、またはそのために使用するものの総称を「リグ」もしくは「リギング」というもの、と理解しました。

http://3dnchu.com/archives/rig-it-right-jp/

そう考えると、セカンドライフでの rigged mesh のアップロード オプションで指定できる「Skin Weight」と「Joint Positions」が、SL で言うところの Rig である、と考えても、当たらずとも遠からず、でしょうか。このチェックボックスが有効になっていれば、それはリグ入りメッシュであり、そのためには 3Dツール側でそれなりの作業・設定をしなければならないわけですから。その作業が「リギング」だった、、、というわけで、その作業が行われたメッシュが「Rigged Mesh」と考えてもよさそうです。

 

Rig と Shape の関係

まとめです。

Rig 入りメッシュは「Skin Weight」(ウェイト)を持っています。ウェイトをもった頂点は、ウェイト付けされているボーンに影響されます。セカンドライフではボーンはシェイプに含まれており、シェイプ編集によるボーンの長さと位置(スライダーの数値)でメッシュ(頂点)の形状を変更できるものがあります。影響がある26個のボーンを「組み合わせて」使うシェイプ調整項目は Rig 入りメッシュにも有効です。たとえば身長や腕や足の長さなどです。シェイプ調整でボーンによる変化ではなく、セカンドライフ デフォルト アバターの ShapeKey (Morphs) による頂点移動による調整項目は Rig 入りメッシュには有効ではありません。(鼻が高くなるなど)

もうひとつの Rig である「Joint Positions」をアップロード時に含めた場合は、Blender でメッシュに関連づけた Armature のジョイント(膝や肘などの間接)の位置もアップロードされ、装着したときにシェイプの同名のジョイント(ボーン)位置を上書きします。極端な例としては人型シェイプが4つ足歩行の動物のような関節・ボーン形状 (Blender で使っていた Armature と同じ形状)を持ったものになります。
また、人型であっても、セカンドライフのシェイプスライダーでは調整できないような体型(膝下が長いアニメキャラ体型など)も Joint Position を変更しなければオリジナルのバランスに近くなりません。膝の位置が極端にシェイプから離れているメッシュなどは、膝のメッシュがシェイプの膝の位置に移動しようとして曲がってしまったり、見た目でわかるほど汚く頂点が移動します。基本的に Blender で Armature を動かしたメッシュは With Joint Positions でアップロードすることになります。また、人型であっても、Armature が違うとセカンドライフ内のアニメーションを使うと明らかにおかしいものになります。

なお、セカンドライフのデフォルトアバター向けの服やスカートなどは、そのままシェイプのジョイントを利用するので独自の Joint Positions を考慮しなくてもいいですし、たとえばアニメヘッドなども Joint Positions をオプションでつけなくても大丈夫の場合があります。(分割が適切に行われていれば、ということと、私の経験からは Alpha 切り替えの表情付けスクリプトを入れる場合は、ジョイント オフしなければ画面描画がちらつくなどの問題があります。)

今の理解はこういう感じです。

長文・駄文におつきあいくださいましてありがとうございます。何等かのお役に立てれば幸いです。