3DCGで何をどう作るか考え中

ZbrushとBlenderの使い方、ヒント、コツなど。たまにZbrushプラグイン開発も。

クリース付きメッシュをZbrushとBlenderとで往復させるワークフロー

(約 8,200文字の記事です。)

f:id:yamato-tsukasa:20201229015326p:plain

クリース付きメッシュをZbrushとBlenderを往復させる具体的なワークフローの紹介。クリースなしメッシュだとGoBでそれなりに簡単に往復できていたが、ここにクリース付きメッシュになるだけでとてもワークフローが複雑化・肥大化する。現状でGoBではクリース付きメッシュを扱えないためだ。

そして更にBlender側でリグ&ウェイトによるポージングを実施しているとそこに更に制限が加わるため、全体としては複雑になる。ツールを使い分ける必要があり、それが複雑化する。

一言で「このときにこのツールをこうすればいい」というようにはいかない。「この場合にはこれ、その場合にはそれ」というように条件分岐が発生する。

そこまでしてもZbrushとBlenderとでクリース付きメッシュを往復させる価値があると思った人はトライしてください。現状、私が作ることができた唯一のワークフローです。

GoBアドオンでクリース付きで往復できないの?

これはGoBアドオンのスレッドで定期的に上がってくるリクエストですが、メンテナンス者のKromar氏は毎回「かなり難しい。いつか調べてみるよ」という回答に留まっています。開発の実現性はゼロとは言いませんが、もし実現を望むならばそれを欲する人自身が開発に参加するべきでしょう。他者に何かを要望するだけで手に入るものがあるとは限りません。

ワークフローの全体像

これを見るだけで頭が痛くなる(笑)

(細かく見なくていいです。へぇ~程度で流してOK。順を追って細部を解説します。)

f:id:yamato-tsukasa:20201229012112p:plain

とはいえ、流れは大きく2つに別れる。Blender上でリグ入りポージング中か否か。

基本となる考え方「同期」

キーワードは「同期が取れた状態」です。

同期が取れた状態とは、ZbrushとBlenderとの両者で「クリース箇所が一致していてトポロジやポリグループ状態が一致している」状態です。

なお、スカルプトではトポロジを変更しない(頂点数を変更しない)ため、スカルプト操作では同期の状態が維持されます。

そして重要な事は、同期が取れている状態ではGoBの往復が可能です。(Zbrush側でのクリースの復元にはYT GoB ReCreaserを使います。)なので、基本的には「同期を取ってGoBメインで往復させる」事になります。もちろんFBXでの往復でも可能な場合があります。

  1. クリースありのメッシュについては、一度FBX経由でZbrushとBlenderとのメッシュ状態の同期を取る
  2. 同期が取れた後は基本的にGoBアドオンでの往復+YT GoB ReCreaserでのクリース復元でメッシュの形を一致させる
  3. クリース編集など「Blender側で操作してZbrushに反映させるべき操作内容」については、FBX+YT Quick Importerでメッシュ状態の同期を取る

クリース編集、トポロジ編集は同期を破壊する編集になるため、必ずその後に同期を取る必要があります。この同期の取り方はほぼBlenderからZbrushという一方通行になります。同期が取れた後はGoBを利用して相互に往復できます。

GoBと各種ツールとの関係

これまではクリースだけが(GoBで転送できないために)同期を取れない項目であったので、多くのユーザーが「クリースを利用しないワークフロー前提」でGoBが往復に便利、という事になっていました。ですがクリースが入ると事情が変わるわけです。。。

今回、Better Fbx ExporterとYT Quick Importerとで「クリースについても同期を取れるようになった」ために、一度同期を取ってしまえばそれ以後のワークフローにおいてこれまで通りGoBを使えばいいですし、同期が取れた状態ではYT GoB ReCreaserがGoB利用時にクリースを復元させるため、実質的にクリースありのメッシュについてもGoBで便利に往復可能となりました。

Better FBX Importer & Exporter - Blender Market

Zbrushのサブツールに直接FBXなどを転送するプラグイン「YT Quick Importer」 - YAMATO Tools - BOOTH



【Blenderでリグポージングしていない場合】

早速ワークフローを見てみましょう。まずはシンプルな「メッシュのみの加工」の場合を見てみよう。

メッシュのみの加工でZbrushとBlenderとを往復する

メッシュのみの加工ならばBlenderのウェイト値の制限がないため割とシンプルだ。

f:id:yamato-tsukasa:20201229012318p:plain

制限事項

BlenderからZbrushへは何の問題もない。Better Fbx ExporterでFBXを出力し、YT Quick ImporterでZbrushに送ればメッシュの転送が完了する。これで同期が取れる。

制限があるのは逆にZbrushからBlenderへのFBX出力だ。というのもBlenderではFBXインポートでは新規作成のオブジェクトとして受け取ることになり、メッシュへの上書きができない。

  1. FBXでは既存のメッシュに上書き置換できない(ZbrushからBlenderへのオブジェクトの上書きはできない)
  2. Blenderでインポート前に同名オブジェクトを削除するか、インポート後にリネームする

要するに手動で同名メッシュへの上書き相当の変更をする必要がある。でも制限事項はそれくらい。

スカルプトで往復する場合はクリースの有無が分かれ目

クリースがなければGoB往復で問題ない。クリースがある場合にはいくつか選択肢がある。

FBXで往復する場合には問題ない。Blender側で上記のような「オブジェクトの事後処理」をすれば問題ない。

f:id:yamato-tsukasa:20201229012712p:plain

クリースがある場合には基本的にはFBXでの往復が第一候補になる。事後処理の手間だけが発生するが、シンプルで分かりやすい。

クリースがある場合でもGoBを使うことも可能だ。ただし「BlenderからZbrushへ」の場合と「ZbrushからBlenderへ」の場合で選択肢が変わる。というのも、GoBではクリース情報の移動はないので、あくまでもメッシュの形状の転写になる。

最初にFBXで同期が取れた後は、ZbrushからBlenderへ送る場合には、Blender側にクリースがあればクリース情報が残ったまま形状が転写されるので疑似的にZbrushからBlenderにクリース付きメッシュが送られたように見える。これはこれで問題ない。

ただし逆にBlenderからZbrushへのクリース付きメッシュは転送できない。Zbrush側でクリース情報が消える。そこでYT GoB ReCreaserを使うことで、Zbrush側にあったクリースを復元することができる。同期が取れていればYT GoB ReCreaserが使えるのだ。

YT GoB ReCreaserを使っても結果としてはFBX+YT Quick Importerを使った結果と同じになるので、よく分からない人はFBXでの往復をオススメします。それで同期が取れます。

YT GoB ReCreaserは癖の強いツールになってしまった。(使い手に使い方の制限を強いる部分が多いため。)YT GoB ReCreaserの出番は「トポロジ変更・クリース変更がない状態でのBlenderとZbrushとのクリース付きメッシュの往復」だろう。でもそれってどういう状況?ってのを説明するのにここまで長くなるわけだ(笑)

要するに「同期が取れているか否か」をきちんと理解できていないと使いにくいツールということになります(笑)逆に理解できているとGoB往復と同じ使用感になります。最短の手間です。



はい、ここまででリグなしのシンプルなメッシュについて、クリース付きメッシュをZbrushとBlenderとで往復するワークフローの説明が終わりました。

……、ちょっと面倒臭いよね(笑)GoBがクリース情報を受け渡しできない点がややこしさを強調しています。そしてFBXではBlender側がオブジェクトの上書き置換できないこともややこしさを強調しています。ZbrushではGoBでもYT Quick Importerでも上書き置換できています。

このように両者の特性は全く逆な部分があるので、両者の連携で発生する「ねじれ」が更にややこしくしています。

ですから、両者のメッシュの同期が取れているかどうかが、理解の上でとても重要です。



【Blenderでリグポージング中である場合】

そしてもし、Blender側でリグ入りポージング中のメッシュをZbrushでスカルプトしようとすると、更に制限が増えてややこしくなります。覚悟して下さい(笑)ただし同期の概念が分かれば割とすぐに理解できます。

制限事項

f:id:yamato-tsukasa:20201229015326p:plain

リグポージング中だと、ウェイト値の保持が重要になるが、Zbrush側では当然ウェイト値を保持できないので、必然的に「Blender発Zbrush着」という一方通行の作業の流れにならざるを得ない部分が出てくる。それに加えて上記の「クリース有無」が関わってくるので、複雑になる。

  1. Better Fbx Exporterが必須
  2. ウェイト値はBlender上でしか保持されない
  3. Zbrush側でトポロジ変更できない(GoBでウェイト値がなくなる)
  4. (BlenderへのFBXインポート後にウェイト値の転送作業、オブジェクトのリネーム、不要なオブジェクト削除が必要)

トポロジ変更とクリース変更はBlenderからZbrushへの一方通行がオススメ(同期しやすいので)

まずBlender側のクリース情報をZbrushに渡すためにもBetter Fbx Exporterが必須。これなしには何もできない。ウェイト値はBlender上でしか保持されないため、トポロジ変更などはBlender上でしか行えない。もしZbrush上でトポロジ変更してGoBするとウェイト値が消えてポージングの意味がなくなる。

もしZbrushでトポロジ変更した場合、FBX経由で一度Blenderにインポートし、ウェイト値の転送などをすれば何とかなるだろうが、その手間は発生するし、ウェイト転送後のウェイト具合の確認も必要になる。その手間を考えるくらいなら最初からBlender上でトポロジ変更した方が早い。なので実質的に「トポロジ変更はBlender上でのみ」行うことになる。

また同様の理由でクリースの編集もわざわざZbrush上で行わないでBlender上で編集し、FBX経由でZbrushのメッシュにYT Quick Importerで転送したほうが早い。もちろん手間を惜しまないならば逆にZbrushからBlenderへも移植は可能だし、トポロジが一致していればウェイトの転送結果は一致することになるので、可逆性という意味ではありなのだが、手間がかかるだけなのでオススメしない。



つまりリグポージング中のメッシュを扱う場合には、まずは一度FBXなどで同期を取った後に、トポロジとクリース変更についてはBlenderで操作してZbrushにFBXで戻して同期を取る、という流れになる。ここでも両者の同期を取ることが重要だ。

ポリグループ編集

GoBでの往復時にはフェイスマップを編集すればZbrush側に反映される。もしFBXでZbrushに送るならばマテリアル編集でZbrushに反映される。いずれにせよ、同期先のZbrushのポリグループとBlender側のフェイスマップまたはマテリアル領域が一致していればどちらで往復させても問題は発生しない。(もちろん誤ったタイミングでフェイスマップ・マテリアル領域をZbrush側に反映させればポリグループ領域が上書き変更されることは確かだが。)

これも最初に同期を取っていれば、以後はどちらを編集して反映させるかは大した問題にならない。GoBメインならばフェイスマップを操作すればいいし、FBXでの再同期を取る場合にはマテリアル領域を調整すればZbrush側に反映される(同期が取れる)。

ただしポリグループについてはGoBかFBXかで、Blender側の見た目との不一致が起こる。FBX主体の「マテリアルカラー」は見えるが、GoBで往復されるフェイスマップ見えない(なおGoB Ver.3.3.8ではスカルプトモードにすればフェイスセットで見ることはできるが領域編集はできない仕様)。目には見えないフェイスマップ+GoBでの往復の方が多いはずなので、気になる人はZbrushからのFBXでの同期を取ることになるが、手間の割にメリットが少ないのであまりオススメしない。ポリグループについては「その領域が維持されること」それ自体に意味があり、Blender側での操作はフェイスマップ編集になるだろう。Blender側でマテリアルカラーがうっとうしければ手動で削除でいいだろう。

スカルプトで往復する場合はクリースの有無が分かれ目

f:id:yamato-tsukasa:20201229022259p:plain

もちろんクリースがなければこれまで通りのGoB往復で何も問題はない。なのでクリースの有無が重要になる。

クリースがある場合には、事前に両者で同期を取る必要がある。クリース付きメッシュで同期が取れている場合には、GoBの往復でメッシュの形状は互いに同期する。クリース編集をしないスカルプト作業では、GoBの往復だけでクリースもトポロジ形状も同期するので、事実上、同期している。

なので、もしクリース位置が同期していない状態で「Zbrush側でスカルプトを進めた場合」には、ちょっと面倒なことになる。メッシュの形状はGoB往復で同期ができるが、メッシュの形状が異なる状態でクリース位置だけを同期させることはできない。この場合には

  1. 目視でBlender側にクリースを追加する
  2. ZbrushからFBXでBlenderにメッシュを転送した後でウェイト値を転送、余計なオブジェクトを削除、リネームする

この二択になる。なので最初に同期を取っておくことが重要になる。(とはいえ、上記作業で復帰は可能だ。)

【まとめ】同期の概念を理解して作業をすればほぼ自由

GoBにクリースも送れる機能があれば良かったのに、とは思うが、現状でないものは仕方がない。今回、最初に説明したように、ZbrushとBlenderとで「メッシュの形状・クリース位置・ポリグループの同期」が取れた状態であれば、リグポージングの有無に関わらず、Better Fbx、YT Quick Importer、GoB、YT GoB ReCreaserの4つのツールを駆使して同期状態を保つことができる。

もちろんGoBのようにシンプルなワークフローであれば良かったが、各種の制約に付きワークフローの分岐ができてしまったが、それでも、これまでは不可能だった「クリース付きメッシュ」をZbrushとBlenderとで往復できるようになった事には、大きな価値があると思っている。

特にローポリ段階での造形の自由度UP

ローポリ編集はZbrushのみでもZModelerだけで完結させる手もある。だがBlenderで造形した方が効率的な場合もある。

クリースを使うのはハードエッジな造形なので、ハードエッジとトポロジとは大いに関わる。つまりローポリモデリングにおいてクリースが使えるかどうかは割と重要で、従来の古い手法のように「ループエッジでサンドイッチ」して疑似クリース化する手法では「トポロジが荒れる、もしくは望ましくないトポロジになってしまった」という経験がある人も多いだろう。

トポロジは本来、形を作るためにあるべきだが、そのトポロジをハードエッジ作成の手段として使ってしまうと、後々面倒なことになることが多かったのだ、経験上。

今回、BlenderとZbrushとを連携させることで、ローポリ、ハードエッジ、クリースをよりZbrushに導入しやすくなったわけだ。ZModeler以外の選択肢を導入できたことに意味がある。

ここにどれだけ価値があるか、分かる人にはどうか試して頂きたいワークフローだ。

もちろん当プラグインのご利用もお待ちしています(笑)

Zbrushのサブツールに直接FBXなどを転送するプラグイン「YT Quick Importer」 - YAMATO Tools - BOOTH

使い方サイトはこちら

指定したサブツールに直接FBXメッシュを転送するZbrush用プラグイン「YT Quick Importer」の使い方 - 3DCGで何をどう作るか考え中





今回の創作活動は約3時間30分(累積 約2,098時間)
(663回目のブログ更新)

筆者はAmazonアソシエイト・プログラムに参加しています。(AmazonアソシエイトとはAmazon.co.jpの商品を宣伝し所定の条件を満たすことで紹介料をAmazon様から頂けるという大変ありがたい仕組みのこと。)
以下のリンクを経由してAmazonで何かを買うと購入額の1~3%ほどのお小遣いが私に寄付されます(笑)

ZBrushでメカを作る! ZModeler超入門講座

ZBrushでメカを作る! ZModeler超入門講座