制作日記: MODOのACSで追加で衣服をバインドしたい

前回までCharacterBoxでセットアップを行っていましたが、ACSを用いたセットアップも試してみました。裸の状態でバインドしうまくセットアップ出来たのですが、最近バストアップの静止画を撮影したいと思うことが増えたのでそろそろ服を着せたいと思い、既存のバインドメッシュに新しいメッシュを追加する方法を調べていたところ、2013年頃フォーラムにてACS開発者のLukaszさんが下のように回答しているのを見つけました。

Clothed character in ACS
https://community.foundry.com/discuss/topic/77748

要約すると

  • ACSが1つのバインドメッシュしか扱えないこと
  • 複数のレイヤーにわけて作業を行い、最後に一つのメッシュレイヤーにまとめる必要があること
  • 面倒だけど最初に身体だけウェイトを設定し、ウェイト調整ツールで衣服に身体と同じウェイト値を設定するとうまくいくという提案

上のようなこと書いてあり、諦めて1つのメッシュにまとめてからバインドするかと思ってたんですが、2016年頃の別の投稿を見つけました。投稿者は同じくLukaszさんです。関連部分のみ意訳した文章を載せておきます。

New to ACS a couple of questions
http://community.foundry.com/discuss/topic/120397

(意訳)

衣服のウェイトは分けて設定することができます。
衣服に本体と同じウェイトマップ名を使用しているという条件で、
メインのACSバインドメッシュに衣服のメッシュをコピー&ペーストすればうまくいくでしょう。
私はモデリング時は衣服のメッシュを分けて管理し、最後にACSバインドメッシュレイヤーにコピー&ペーストします。

もし衣服がボディラインにぴったりと追従する場合は、最初に本体と一緒にバインドしてから、
バインドされたジオメトリを新しいメッシュレイヤーにコピー&ペーストし、
それを衣服としてモデリングし、バインドメッシュのレイヤーにコピー&ペーストして戻すということも出来るでしょう。

本体同様に衣服を変形させるための別のスケルトンは必要ないと思います。
MODOではひとつのデフォーマで複数のメッシュを駆動できますので、
別々の衣服のメッシュを直接デフォーマに接続する方がおそらく簡単です。
別々のメッシュレイヤーに衣服メッシュを保持したい場合はこの方法でやります。
衣服に影響を与えるすべてのデフォーマに衣服のメッシュを接続するだけです。

身体本体と同じウェイトマップ名を使用していれば、一つのデフォーマで複数の別レイヤーのメッシュを動かせる、らしいです。文中のコピペの操作がどういう操作かいまいちわからなかったんですがやるべきことはわかったので試しにやってみました。MODO歴まだ3ヶ月ぐらいの初心者なので見当はずれのことを書いてしまっている可能性がありますので間違ってたらごめんなさい。もし何かあればご指摘いただけるとありがたいです。

環境

下準備

現在、身体だけをバインドした状態です。ここから胸部のボーンに肩紐が追従するように設定してみます。

f:id:cignoir:20170812004737p:plain:w300

ウェイトマップ作成

1. 肩紐用ウェイトマップ作成

ACSがChestのボーンに自動で設定したウェイトマップ名と同じ名前で、肩紐のメッシュレイヤーに新規ウェイトマップを作成します。 キャラクタ名に「Doll」と付けていたので「Doll__Chest (Bind)」となっていました。

f:id:cignoir:20170812004822p:plain:w300

2. 肩紐メッシュのプロパティでウェイトマップに新規作成したマップが設定されていることを確認

f:id:cignoir:20170812004844p:plain:w300

3. ウェイト調整ツールで適当にウェイトを設定

f:id:cignoir:20170812004908p:plain:w300

4. Chestのデフォーマ(Influence)に肩紐メッシュを関連付け

f:id:cignoir:20170812004949p:plain:w300

スケマティックビューで見るとこういう状態です。

f:id:cignoir:20170812005051p:plain:w300

5. ACSの胸部のコントローラを動かして確認

f:id:cignoir:20170812005118p:plain:w300

ちょっとわかりにくいですが、身体と一緒に別メッシュレイヤーにある肩紐が動かすことができました。

ただし、今回はメッシュとデフォーマとボーン(ロケータ)がすべての1つずつのケースだったのでうまくいきましたが、複数のボーンの影響をうけるメッシュをうまく設定出来るのか疑問です。1つのデフォーマに複数のメッシュを関連付けたところで、メッシュには1つのウェイトマップしか設定出来ない(?)からです。こちらは何かわかったら追記しておきます。

おまけ

X座標が負の頂点を選択するスクリプトをTD SDKで書き直しました。eval祭りな実装よりはるかにシンプルに記述出来て拡張もしやすいし便利。

import modo

with modo.Mesh().geometry as geo:
    for v in geo.vertices:
        if v.position[0] < 0:
            v.select()