制作日記: MODOのヒートバインディングについて

スキニングでつまづく

由水桂さんのアニメーションチュートリアルを始めました。まだ最初の数十分しか進めてませんが、進むテンポや解説の粒度が初心者の自分にもわかりやすい感じがあります。

現在最初のスケルトン作成を終えスキニングの作業に入ったところです。作業にはオリジナルモデルを使用しているのですが、ジオメトリがまずいみたいで、ヒートでのバインド時にエラーが出てうまくいかず作業が止まりました。

エラー内容はこちら。

メッシュトポロジエラー: エッジは2つ以上のポリゴンからは共有できません。

……?

1つのエッジが2つのポリゴンと接続することが異常なはずがないので、おそらく"over 2 polygons"か"more than 2 polygons"を"2つ以上"と誤訳されたか、原因が別にあるのでしょう。

マニュアルの確認

公式のマニュアルを確認してみます。マニュアルを見るとヒートにはいくつかの制約があることがわかりました。以下はマニュアルの引用です。

引用: バインドとセットアップモード - MODO ONLINE HELP

• Heat (ヒート) - メッシュアイテムのトポロジとジョイントの相対関係を考慮したバインド方法です。バインドするメッシュアイテムが以下の条件を満たしている場合、これがもっとも優れたバインド方法になります。
• メッシュアイテムがひとつの塊であること。ただし眼窩のような穴があっても構いません。
• メッシュアイテムがポリゴンのみで形成されていること。どのポリゴンにもつながっていない頂点やエッジやカーブが残っていると、うまくいきません。
• 頂点、エッジ、ポリゴンを複数のコンポーネントが共有していないこと (多様体モデルであること)。
• すべてのジョイントがメッシュアイテムの内部に埋もれていること。
ヒート で バインド を行ったときにエラーが発生すると、ポップアップにエラーメッセージが表示されます。それが意図しないメッシュ上の不具合であれば、ほとんどの問題は Mesh Cleanup (メッシュクリーンアップ) コマンドで解決できます。エラー箇所は、このコマンドを終了したときにハイライトされるので、その部分を修復してください。もうひとつ、Solver Error (ソルバーエラー) と表示されるエラーがあります。これは、同じメッシュアイテムレイヤーに複数のメッシュが含まれている場合、とくに、それらが重なっているときに発生します。
わかりやすい例としては、2 つのプリミティブ球体が同じレイヤー内で重なっている場合です。このようなソルバーエラーは、メインのメッシュにだけウェイトを与えることで解決できます。たとえばキャラクタの場合なら、目や髪の毛や衣服といった他の要素はすべて別のレイヤーに移して、皮膚アイテムだけをバインドするようにします。

相対関係というのは、原文ではrelative positionとなっていたので、絶対位置の距離だけを考慮するのではなくメッシュの形状を考慮してジョイント間がどれぐらい離れているかを計算するということでしょう。その下に条件が列挙してあります。

  • メッシュアイテムがひとつの塊であること
    • 塊、つまり、体積がない板ポリのような形状は想定されていないようです。
  • メッシュアイテムがポリゴンのみで形成されていること。どのポリゴンにもつながっていない頂点やエッジやカーブが残っていると、うまくいきません。
    • ところで原文ではpolygonalという単語が使われていました。一般にn-gonはpolygonalに含まれるんでしょうか。
  • 頂点、エッジ、ポリゴンを複数のコンポーネントが共有していないこと (多様体モデルであること)。

    • 最初のエラーメッセージはこの制約に引っかかったことを示すエラーでしょう。
    • 多様体ジオメトリには以下のようなものがあるようです。
      • 閉じた形状になっていない
      • 隣接するポリゴンの法線が逆方向
      • 複数のコンポーネントが頂点やエッジのみで接続されている
        • たとえば2つのキューブが1つの頂点または1つのエッジだけでくっついているような形状
        • 接続部に体積がないので一つ目の条件も満たしません。
      • 1本のエッジに3つ以上のポリゴンが接続されている
        • 最初に書いたエラーメッセージはこれのことですね
        • 調べ方: 3つ以上のポリゴンで共有されているエッジの数はこちらで確認できます。 「状態 > エッジ > ポリゴンで」を開き、3以上を確認 https://i.gyazo.com/5a6812dc9d2e6acddbed45488889ffb6.png
  • すべてのジョイントがメッシュアイテムの内部に埋もれていること。

自分がバインドを試したメッシュは、エラーメッセージにあるような不正なジオメトリは確認できませんでしたが、髪に板ポリを使用していたので確かにヒートの要件を満たしていませんでした。

また、その下に注意書きがありますが、同じレイヤーにプリミティブ球体を2つ重ねるだけでソルバーエラーが起こるそうです。

要件の検証

いくつか気になるパターンを確かめてみました。

条件に合わなくてもエラーにならなかったり、エラーメッセージが不適切なように見受けられるケースがありました。

今回エラーにならなかったパターンももっと複雑になってくるとエラーになったりするのかもしれないことにご注意ください。

n-gonが存在する場合

https://i.gyazo.com/320a8b916d9b6212e8549f0e14da8aed.png

  • エラーなし

1本のエッジに3つ以上のポリゴンが接続されている場合

https://i.gyazo.com/772edf0414c29fc0c01dd8451c3f0cc4.png

  • エラーあり
    • メッシュトポロジエラー: エッジは2つ以上のポリゴンからは共有できません。

確かに3つのポリゴンと接続しているエッジが存在することを確認できました。

https://i.gyazo.com/a15c9f4cc228b62a4dc4e4d961c82b6f.png

それならばと1枚ポリゴンを削除して無理矢理2つのポリゴンと接続する形に変更してみました。

https://i.gyazo.com/19b9d9540f95202571c17c89fe64ca16.png

3つ以上のポリゴンと接続するエッジは0と表示されています。

閉じてない形状が不正である判定されることを期待しましたが、同じエラーメッセージが出ました。

開いた形状の場合

https://i.gyazo.com/184425a226be6b5cccc154c73f7d1141.png

  • エラーなし

同じレイヤーにプリミティブ球体が2個重なって存在する場合

https://i.gyazo.com/2cdd8cb73625f5f979979bbc05ee9ece.png

  • エラーなし

ソルバーエラーを期待しましたが出ませんでした。複雑に重ねると出るのかもしれません。

浮遊頂点が存在する場合

画像省略。

  • エラーあり
    • メッシュトポロジのエラーを検出しました。ウェイトをつける前に「メッシュクリーンナップ」コマンドを実行してみてください。

隣接するポリゴンの法線が逆方向を向いてる場合

ポリゴンを2枚反転してみました。

https://i.gyazo.com/531321e074069a478216069379b9dc46.png

  • エラーあり
    • メッシュトポロジエラー: エッジは2つ以上のポリゴンからは共有できません。

ジョイントがはみだしている場合

https://i.gyazo.com/88f7a54478aa557ad69a2012c791bb24.png

  • エラーなし

結論

条件を満たしていなくてもエラーにならなかったり、エラーメッセージが合っていなかったり、よくわからないケースがいくつか見られました。

複雑なコンポーネント群をまとめてバインド!といった使い方ではなくて、連続した1つの閉じた塊のコンポーネントごとにレイヤーを分けてバインドする、みたいに細かく限定的に使用していくのが無難なように思いました。

制作日記とポエム

ポエム

きっかけはよく覚えていないけど、最初にかこみき先生のメタセコ本を通じてモデリングを始めた。 そこを起点にするとモデリング歴は4年ほどになるが、そのうちの3年ほどは挫折を繰り返し、仕事で時間もあまり取れていなかったのもあってほとんど成長できていなかった。

転機になったのはスカルプトの楽しさに気付いた2年前の坂井孝介先生(@Lens_eye)のこのSculptris講座だった。 http://yokalab.jp/blog/post/196/

Sculptrisの講座なのに「Sculptrisは落ちまくってつらいので、早くZBrushを買いましょう(笑」 という感じで講座が終わったのが面白くて忘れられない。 それからしばらくしてZBrushを購入し、何度目かわからないがモデリングを開始し紆余曲折を経て現在に至る。

最近は仕事の傍ら平日は2,3時間、土日は暇があるだけモデリングに時間を割いている。 睡眠不足の日々はきついけど、モデリング自体は純粋に楽しいので継続できる。

その甲斐あってか、1ヶ月前の制作途中のスクリーンショットを見ると、 恥ずかしくて変な声が出て消し去りたくなる程度には急勾配でスキルアップ出来ている感がある (それほどに今まで成長出来ていなかったことも意味している)。

やっと自分もモデリングの世界の扉をノックぐらいは出来ただろうかと思うと嬉しくなる。 同時に名刺代わりになるような作品がまだないことに焦りのようなものを感じ始めていた。

そんな中、先日人造三さん(@jinzo3go)のtwitterアカウントを知り、作品を拝見した。 人造三さんは2年間ひとつの作品にこだわり続け日々試行錯誤を重ねていて、 その徹底的に自分の作品と向き合う姿勢が心底すごいと思った。 それを見てから、自分が抱いた焦りの正体は見栄や、承認欲求が先走っていることの表れだということに気付いた。

「いついつまでに何々を作りたい」 この期限を定めているのは他でもない自分自身だ。

「名刺代わりの看板を掲げたい」 看板を掲げるのは外にアピールするためだ。

いや、承認欲求が悪いと言いたいわけではなくて、承認欲求は原動力として重要ではあるが、目的であってはいけないということだ。 作品の質と正面から向き合えていないという一番大事な部分が欠けていては感性が育たないという点で危険だ。

もっとちゃんと自分の作品と向き合う。 完成は数年後でもいいから自分の求めるものを信じてそこに近づける努力をする。 そうしてこそ感性は培われていくものだろうと思う。

かこみき先生、坂井先生、人造三さんをはじめ、みなさんありがとうございます。

作業計画見直し

モデリングがある程度片付いてからリギングの勉強に入る予定だった。 そのため、ここまでポーズ確認やそれに伴う身体のバランス調整を一度もせずに服作りに着手していた。

しかし、例えば髪や服の揺れモノは動きを強調するために重要なパーツだがあくまで人間の動きに付随するものだ。 人間の美しいポーズやアニメーションは裸体が基本なはずだ。

着衣して構成が複雑になるとそれらの作業は格段に難しくなるというのもあるので まずはシンプルに裸(か下着か水着)で美しいポーズとアニメーションを作ってみよう。

そこでおかしなところがたくさん出てくるはずなので、モデルを調整し、また何度も試す。 この試行錯誤をやりやすくすることが統合ツール購入を検討した最大の要因だった。

そのことを踏まえて、計画を立て直す。

  • 髪と服は一旦保留する
  • 身体のリトポロジ
  • 骨肉を意識した加飾
  • 決め顔作り
    • フェイシャルモーション前提でフラットな顔にしていた
    • ポーズを作る前に自分が一番作りたい顔を作る
  • UV展開、ペイント
  • リギング
  • ポーズ付け
  • 調整

直近の作業の流れはこんな感じで行こう。

制作日記 レース生地など

靴作り直し

f:id:cignoir:20170710033153p:plain:w300

靴やガーター、ちょっとしたアクセサリにもスニーカー動画の学びが活かされています。

ただ時間がかかりすぎてるのでもっと数をこなしてスピードを上げていきたいです。

ゴスっぽさ

ゴスを基調にまとめていってますが、モノトーンにするか、うるさすぎない程度に彩りを足して行くかで迷ってます。

f:id:cignoir:20170710033223p:plain:w300

色を変更出来るレース生地マテリアルの作り方

レース生地の作り方を探したけど探し方が悪いのか見つからず。

我流になりますがとりあえず下の方法でやりたいことが出来たので参考までに。

1) 背景真っ黒のレースのテクスチャを用意するか作る
  • 背景が透過されている場合は別レイヤーで背景を黒にして合成して作る

f:id:cignoir:20170710033758p:plain:w150

2) ペイントツールで輝度を透明度に変換して生地部分を透過させる

f:id:cignoir:20170710033853p:plain:w150

クリスタでやりました。

3) MODOのマテリアルレイヤー追加で画像を読み込む

https://i.gyazo.com/426474dcd75eb8d634d2264b4e786290.png

4) テクスチャレイヤータブのアルファチャンネルを「アルファのみ」に設定

https://i.gyazo.com/05dce0ac7d1d2c159411f0e0a7d9bcd3.png

5) 画像のエフェクトを「透過量」に設定

https://i.gyazo.com/fbf36923746a158bddb7809c57d1764d.png

6) マテリアルでレースの色を設定

https://i.gyazo.com/6a5221ee9f92a4f7b3a32f54a8eee2c3.png

7) レンダリング

https://i.gyazo.com/ab5ffb844c6253629c6899c08229e61d.png

MODOスニーカー学び

スニーカーチュートリアル動画の内容を一通り写経したので学びをメモ。

自分自身の備忘録、または誰かの購入時の参考になれば。

www.modo3d.jp


一般

  • エッジスライスでエッジの付け足し
  • [ループスライス]で角を立たせる
    • SDiv状態だと意図せず際に寄り過ぎたりする
    • 両端にエッジループを入れたいときは対称モード
  • エッジを選択して[プッシュ]で溝を作る
  • エレメントモード(Tキー)でマグネット風の編集
    • 右クリックで影響範囲指定可
  • [チューブ]で紐を作る
  • センタリング全体で原点配置
  • ポリゴンのブリッジで穴あけ
    • エッジやポリゴンを選択して[放射状に整列]で円を作る
    • 厚みのある形状で表と裏に同じトポロジの円系のポリゴンを配置し選択後ブリッジ
  • フォールオフ(リニア)を使って柔軟に形状を編集出来る
  • ペンツールの四角形作成にチェックを入れてワンクリックで四角形配置
  • エッジのスライドで段差を作る
  • 2つのエッジまたはポリゴンを選択し、↑↓キーまたはLキーでループ選択
  • ポリゴンを選択し、Shift+↑↓で選択領域の拡縮
  • Ctrl+Shift+ポリゴンのダブルクリックで閉じた領域を一括選択
  • プリミティブ作成時、中央付近のポイントをドラッグで、その方向に引き延ばせる

リトポロジ

  • トポロジモードでベースメッシュから別パーツを作成
  • ベースメッシュにカーブスライスで任意の切れ目を入れる
    • 選択後、非選択を非表示にしリトポロジのベースメッシュとして使う

UV

  • エッジを選択して切り込みを入れて展開
    • 後から縫合することで歪みが少なく展開できる
  • UVパックで島を敷き詰める
  • UVフィットでフィットさせる
  • 先端を除いたチューブなどは[形状を保持しないUVフィット]で綺麗に矩形にできる
  • エッジを選択
    • 選択部分(=オレンジ)、つながっている対応するエッジ(=青紫)で表示される
    • 移動と縫合で島をくっつけたり出来る
  • 格子状のテクスチャでUVのテスト
    • 伸びすぎてたらUVのスケールを調整
    • 裏返って表示されていたらUV反転
  • モデルのベンドツールを使って島の形状を曲げる

※11.1からUV編集画面の構成が結構変わったので注意

レンダリング

  • サーフェイスシェーダのノイズで柔らかい質感
  • イメージベースのスカルプト
  • バンプとディスプレイスメントの使い分け
  • スティッチ(縫い目)作成
    • 別メッシュで縫い目をイメージしたカーブを作成
    • カーブの上に縫い目をペイント → ディスプレイスメント
  • 画像をスタンプ
  • カメラの設定の触り
    • 細かいパラメータの設定については、値が読み上げられただけで動画からは学べなかった

成果物

f:id:cignoir:20170702160710p:plain

お手本通りに綺麗には出来なかったけど、主目的だった靴紐も作れたし モデリング全般の基本的なことも体系的にちゃんと学べて夢が広がりました。

楽しい ✌(‘ω'✌ )三✌('ω’)✌三( ✌'ω')✌

追記

そのままの勢いで学びを活かしてビスチェを作り直しました。

https://i.gyazo.com/126a9f2bc456636f29a8d14960200a13.png https://i.gyazo.com/402e3fcb1ccd4b3fbbb46b7a7b929312.png

作りたかった紐部分、ちゃんと作れました✌(‘ω'✌ )三✌('ω’)✌三( ✌'ω')✌

制作日記

靴紐の作り方を学ぶべく、動画を見ながらスニーカー制作にチャレンジ。

学び

  • 選択ポリゴンを放射状に整列するやり方で両面に円を作り、ポリゴンのブリッジで穴を空ける
  • ループスライスでエッジを立たせる
  • エッジスライスでメタセコのWキー的なことが出来る(ツール名忘る)
  • フォールオフ(リニア)

ここらへんの基本機能をあまり理解してなかったので良い学びがありました。ベベル大活躍。

解説早い

動画中のおっちゃんのアフレコ解説が丁寧でわかりやすいのはいいんですが超スピードで進むのでスロー再生必須です。一時停止だけだと停止回数多すぎて作業がまともに出来ないのでスロー再生必須。

https://i.gyazo.com/e00ee61117838062afb82ccb01e13e94.png

全10パートのうち3パートまで完了。

ちょっとファイトリーグやりすぎて時間がなくなったのでここまで……

緑単で県リーグうろついてます。

製作日記

進捗と試行錯誤の跡

MD

  • 自作のアバターに配置点を設定することができた

    • いままでやってなかったのでパターンの配置がつらかった
  • 今やってる連携時の設定

    • ポリゴン: 四角形
    • 粒子間隔: 40ぐらい
    • obj出力:
      • アバター出力
      • ☑ 結合する
      • ☑ 薄い
      • 単位: millimeter
        • MODO側でimportするときもmillimeter
  • ビスチェとスカートを組み合わせたドレス的な何か

▼ MD

https://i.gyazo.com/d697e900b9d0da40ea9058f4aa40373e.png

頂点に依存しない縫い合わせ(アイロンのアイコン群の左から3番目だったかな)とカット縫い合わせを学んでから格段に作業しやすくなったと思う

  • 紐とかリボンはどう作れば?

    • パイピングでチューブを作ることが出来るみたい
      • MODOでチューブ作った方がいいかもしれない
  • MDで作ったUVを壊さないように気をつける、または都度修復する

  • 矩形じゃないメッシュのUVを矩形にすると当然テクスチャが歪む
    • 単色なら問題にならない
    • テクスチャで柄入れるなら問題になる
    • ポリゴンの面積比は出来るだけ変えない方が良いだろう

MODO

https://i.gyazo.com/a82a45eb86b5e0f00474598c0a7ee772.png

実際に取り込んでみた図

リトポしてないそのままの状態(&一部SubDiv)。SubDivパワーでなんとか見れるけど、境界部分がガタガタなので前回の記事でちょろっと書いた外周のエッジを残してリトポする工程を踏まないと厳しいかなぁという感じ。

MODO トレーニングビデオ

オンラインストアで販売されている2つのビデオ教材を購入してみた。 どちらも1800円ほど。

  • MODOプロダクトチュートリアル スニーカー編」

    • 主に学びたいこと
      • かっちりめのデザインの作品のワークフロー
      • ひも作りのノウハウ
  • modo チュートリアルビデオ Game Modeling by ファブリカ」

    • 主に学びたいこと
      • ローポリモデル用のテクスチャ作成フロー
      • AOのベイク

直近で必要なスキルをそれぞれ学べそう。週末にやりたい。

4R8関連

その他

  • 靴ちゃんと作る
    • 紐のノウハウも学んでちゃんと作る
  • 耳作る
  • 顔モーフ(しばらく出来なそう)

テクスチャ作成フローをぼんやり考え中

やりたいこと

  • UV展開
  • ディテールをスカルプト
  • AOのベイク
  • ペイント

どうツールを組み合わせてどういう順番でやるのか定まっていない。

いまのところは

  • MODOでUV展開
  • GoZでZBrushに送る
  • ZBrushでディテールをスカルプト
  • ZBrushでポリペイント
  • ZBrushでポリポイントからテクスチャ作成
  • GoZでMODOに戻す

だいたいこんな感じになるのかなぁと考えてるのだけど、この場合AOのベイクはどこでやるのがいいのだろう。

最後にMODOに戻した後にMODO側でAOをベイクしてポリペイントから生成したテクスチャとイラスト系ソフト上で合成する? そうするなら、ハイポリデータもMODOに持ち込まなきゃ?

チュートリアルビデオを参考にしよう。

もし普通はこうだよみたいなのがあればご指摘いただけると助かります。

早く表情を付けたいなぁ。

制作日記

前回の更新から2ヶ月ほど空きましたが、MODOを購入しずっとMODO処女作の制作に取り掛かっています。まだまだ機能の10%ほども使いこなせてないと思いますが、思いの外早く手に馴染んでいってくれてます。

MODO & Marvelous Designer

https://i.gyazo.com/6797f45f2e0a4dc0d317e4227bef7e88.png

今日はずっとMarvelous Designer(MD)とMODOの連携を試していました。MDで作ったobjのMODOへのインポートとリトポの過程上の記事が大変参考になりました。共有ありがとうございます!

参考記事

独自に調べた点は以下の通り

  • モーフマップがレンダリングされない

    • モーフインフルエンスを追加して解決
  • 展開されたメッシュをリトポの手順 vimeo.com

上の記事とほぼ同じ手順の海外の方の動画。服のパターンの外周部分を残しつつブリッジでリトポしていくのが参考になりました。

  • もっとリトポを簡単にしたい
    • MDの粒子間隔が出力メッシュの頂点数に影響することに気づく
    • 間隔を大きくするとシミュレーションは粗くなりますが頂点数も減ってリトポしやすくなります

髪の試行錯誤

ここ2ヶ月はMODOを試運転しながら、顔のバランス調整と、髪を作るフローを色々と試してました。

[ZBrush] ZSphere

  • 大まかな形を作るのは便利。数が増えると途中からZSphereの配置が難しくなる
    • 髪の流れは一番つけやすい
    • skin化後の加工が難しめ

[ZBrush] 各種ヘアブラシ

  • 一番直感的で好きな方法だけど、ぱっつんの前髪みたいな短冊型の髪の場合後処理がやや難しい
  • 短冊用のブラシを自作すればいいかもしれない

[MODO] ファー

  • 直方体オブジェクトのエッジをカーブに変換してファーのガイドとして使用するパターンを試しました

参考記事

この方法は自分の環境ではとにかく動作が重くて調整に時間がかかりすぎたので諦めました。

[MODO] ベベル

  • トポロジペン→厚み→ベベル
    • シンプルですが、最終的にはこれが一番作りたいものの路線に合っててしっくりきました

MODOスクリプト

まさかMODO内にスクリプトエディタが備わっているとは思いもせず感動しました。メタセコのSelectXシリーズをやりたかったので他のスクリプトを真似しつつ少し書いてみてます。下に挙げたものは基本的なやつで、X座標が負の頂点を選択するスクリプトですが結構よく使ってます。

select_half.py

import lx

fg = lx.eval("query layerservice layers ? fg")
verts = lx.eval("query layerservice verts ? all")

if verts is None:
    lx.out("No geometry")
else:
    for v in verts:
        pos = lx.eval("query layerservice vert.pos ? {0}".format(v))
        if pos[0] <= -0.00000001:
            lx.eval("select.element {0} vertex add index:{1}".format(fg,v))

これは確か公式のスクリプト置き場かどっかで見つけたやつを逐次実行でテストしながら簡単にしたやつです。見て分かる通り、eval祭りでpythonの意味ないじゃんって感じがあります。evalするぐらいならluaとかで直接実行した方が処理も速そうだし。

と思いながら色々調べてたらTD SDKっていうのを見つけました。

MODO’s TD SDK documentation — MODO TD SDK 0.0.1 documentation

あまり調べる余裕が今はないのでそのうちやろうと思いますが、python,perl系のスクリプトをこれで全部書き換えれば幸せになれそうな気がしますね。

トゥドゥ

  • 服作ったらMODOでUV展開
  • ZBrushでディテールを彫ってディスプレースメントマップ作成
  • 各種テクスチャ作成
  • Character Boxでリギングテスト
  • アニメーション

ブログの更新滞ると、一度に書く内容多くなりすぎて駄目な感じ。