background

weldについて

2007年01月17日(Wed)

ちょっとした覚書。

weldは同じ頂点番号の頂点を異なるactorに属する面が共有している場合に、weldはそれぞれ異なるactorに存在する2つ以上の頂点が至近距離に存在する場合に、一方のactorの頂点を他方のactorの頂点に追従させる機能である。
これによってactorがどのように変形しても、面が「繋がっている」ように見せることができる。
同一の頂点番号に対して働くので、同座標にある異なる頂点間ではweldは実現しない。

weldはactorのbend(屈伸)およびシーンファイルのbendBodies(パーツ間をなめらかに表示)が有効であるときに機能する。

actorの階層構造には依存しないが、便宜上基準となる側のactorを親、追従する側の子と称する。
weldはcr2ファイル内において、階層構造の記述の後、displayOnの次の行から

  weld 《子側のactorの内部名》:《フィギュア番号》
    《親側のactorの内部名》:《フィギュア番号》

という形式で記述される。

通常セットアップルーム等でフィギュアを作成した場合、このweldツリー構造はフィギュアの階層構造をコピーする形で作成される。

Poserの基本小道具の平面詳細を、グルーピングツールでグループ分けして(ついでにマテリアルも分けて)下記のようなフィギュアを作成する。

070117-1

ここで、part B(内部名B)とpart C(内部名C)は、part A(内部名A)の子階層である。

partBを-Y方向に、part Cを+Z方向にそれぞれ移動させる。

070117-2

子側となるpart Bとpart Cの端の面が伸びている。パート間に新たな面が作成されるわけではなく、端の共通する頂点がpart Aの位置から移動していないことがわかる。
また、part Bとpart Cの間にはweldの指定がないので、パート間が分断されていてる。

そこで、part Cがpart Bに追従するようにcr2ファイルにweld指定を追加する。

060717-3

最初のフィギュアと同様にpart Bとpart Cを移動すると、part Cの左端の頂点がpart Bの位置に移動する。

070117-4

さて、weldは同一の頂点番号を持つ頂点において働く機能であるので、異なる座標にある頂点には働かない。では、もともとは同一の座標であったが、後からデフォーマ等で頂点が移動した場合は頂点はどのように扱われるだろうか。

そこで、part Aのみをデフォーマ(マグネット)で変形させ、そのオブジェクトをwavefrontOBJ形式で出力し、外部ソフトにインポートしてみた。

出力のオプションに「ポリゴングループに既存のグループを含める」オプションのみを適用し、その他のチェックを入れない場合と、「モーフターゲット(ワールド変換なし)」にチェックを入れた場合で比較する。

070117-5

オプション無しの場合は、子側の頂点が親側の頂点に追従している。

また、子階層をマグネットで変形させた場合も同様である。

070117-6

このことから、二つのことがわかる。

  • 子側のactorがモーフやデフォーマ等によって変形を加えられた場合、weld機能によって共通頂点は移動していないように見えるものの、内部の実際の処理としては移動している。
  • 出力オプションの「モーフターゲット(ワールド変換なし)」は、ワールド変換(軸回転・移動・拡大縮小など)を無効化するだけではなく、weldによる頂点の移動も無効化する。

poser上ではweldの効果を無効化するにはbendを無効にするしかない(するとモーフやデフォーマの効果も無効化されてしまう)ので、このオプションはモーフの効果だけを確認できる唯一の手段である。

まあ、だからなんだ、と言われたらそれまでの話なんだけど。kirakiraさんちで書かれていた自分の言いたかったこと、というわけで。

もう一つ。jointを別パートに適用させるやつ。

070117-7

part Bをz軸回転させた時に、影響範囲が他のパートに及ぶように設定する。デフォルトではpart Cはpart A-part B間の影響を受けない。そこで、part Aにある「part Bのz軸回転によるjoint」のチャンネルをpart Cにコピーする。

070117-8

しっかり追従するようになった。一つのactorに対して、複数のactorを追従させることも可能なようである。

ただし、この状態ではJPの設定ができない。なぜなら、part Bのz軸回転を調節することで値が変更されるのは、part B自身とpart Bのjoint内でotherActorとして指定されているpart Aのみだからである。この状態でJPを変更すると、part A・part Bは新しい設定になるが、part Cにはロードした時の設定が残ってしまう。

また、part BのotherActorに複数のactorを指定することはできないようだ。otherActor A:1とotherActor C:1を複数行に記述すると後の方の行が優先され、otherActor A:1 C:1などのように記述するとpart Bのjointチャンネルそのものが無効になってしまう。

マグネットの影響は複数のパーツに及ぶ事が可能なわけだから、技術的に不可能なわけではないと思うが……果たして。

こういう技術的な話、なかなか日本じゃ見かけない。知ってる人は知ってる事なんだろうけど、テキストとしてネットに上がることはあまりないようである。まあ調べるのも面倒だし、書くのも面倒だけど。それとも昔は存在したものの消失してしまったんだろうか。バージョンによってPoserの仕様が変わったとしても、「その時点でのPoserの話」または「その時観測された現象」ということで無いよりずっと有用な情報だと思うんだけどなー。

《2008.5.28 誤情報訂正》
Weldの条件を完全に誤解していたので訂正。
詳細は2008年5月28日付けの「Weldについて(再)」にて。

《2011.11.12追記》
一部のリンク先のコンテンツが破棄されたため、該当するリンクを削除しました。

スポンサーサイト







Menu

Profile

Kyotaro

確定名:Kyotaro
ネタを探しているらしい。

Categories

Calendar

12 | 2007/01 | 02
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

Comments

Archives

Track back

RSS feed

Links

Search

※2011年4月6日のサーバ障害の為、エントリのアドレスが以前のものからズレています。当Blogのエントリにリンクを張っておられた方は、お手数ですがアドレスのご確認をお願い致します。

※Internet Explorer非推奨。