GOB (ZBrush + Blender アドオン)のインストールと簡単な使い方

インストールメモ投稿です。
GoBとは、Blender用のアドオンで、他DCCソフトではGoZと呼ばれる物です。そしてGoZとはGo ZBrushというような意味でDCCツールとZBrush間でモデルを楽にインポート＆エクスポートするプラグインの総称のようなものです。GoZは他にMaya用、Max用、シネマ3D用、Houdini用などがあります。（なお自作するのは難しくなさそうです。）
https://github.com/JoseConseco/GoB/
http://docs.pixologic.com/user-guide/zbrush-other-programs/goz/about-goz/

# 環境
2020/11下旬での新しめの環境での例となります。

* Windows 10 PRO
* Blender2.90.1
* ZBrush2021.1.2

# インストール手順
以下、インストラクションのテキストに則って対応していますが、ビデオなども併せて確認すると冗長な部分もありそうです。

## Blender アドオンのインストール

* GitHubからリリース版ZIPをダウンロード。 https://github.com/JoseConseco/GoB/releases/tag/v3_3_8
* 前のバージョンのGoBが入っていればAddon panelで選択して一度アンインストール
* GitHubからダウンロードしたZIPファイルが"GoB-3_3_8.zip" などの名称になっていたら "GoB.zip" に変更。(という指示があったが、必要ないかもしれない）
* Addon panelで上記ZIPファイルを選択しインストール、次回起動時がら有効になるよう設定にする。
* これで、Blenderのヘッダ部分にZBrush用のimport/exportボタンが表示されるようになる。
* ボタンにテキストを表示するオプションを有効にした方が最初は分かりやすい。 
* インポートエクスポート時にモデルの上下が逆にならないよう、上下の反転チェックを有効にする必要があった。

![214852.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/e86690b9-38de-bafc-c4c9-463d7eb20bbf.jpeg)
![ 233533.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/310b87c1-5067-6017-e3e6-3e9d7bf9165b.jpeg)

## ZBrushへのGOBのインストール

* `C:/Users/Public/Pixologic/GoZApps` (Macでは `/Users/Shared/Pixologic/GoZApps`) 以下に、アドオンのZIP内に存在する "Blender" フォルダをコピーする。(Blenderフォルダ内にはGoZ_Info.txtファイルが存在する。）
* `C:\Program Files\Pixologic\ZBrush {バージョン名}\Troubleshoot Help\GoZ_for_ZBrush_Installer_WIN.exe` を実行する。(という指示があったので従ったが、ZBrushを再起動するか、GoZのリセットボタンを押すだけでいいかもしれない。）
* ZBrushを再起動(動画インストラクションでは管理者権限での起動を推奨、自分は通常ユーザーで対応しました。)しGoZを実行するとblender.exeのパスが自動検索される。見つからない場合場所を聞いてくるので、正しく設定する。

インストラクション動画(英語) https://www.youtube.com/watch?v=ToIZXWm1BfE (2020/05/07)
おそらく1バージョン前の物の解説なので、その前提で。

# テスト実行

* BlenderとZBrushを立ち上げる。ZBrushは適当なサブツールを配置して、スカルプトモードにしておく。
* Blender側で適当なモデルを配置、選択する。
* Blender側でExportボタンを押すと、ZBrush内のサブツールがBlender上の選択モデルに *入れ替わる*
* ZBrush側でGOZボタンを押す。
* Blender側ですでにImportボタンが有効な場合、この時点でZBrushで選択されているるサブツールがBlender側に *追加* される
* Blender側でImportボタンが無効状態な場合は、有効に切り替える。このタイミングでZBrushの選択サブツールがBlender側に *追加* される

2度目以降のやり取りでは同じ名前の物が存在すると上書きされる模様。

## マニュアルに注意点と書いてあるもの

* ZBrushでは同名のサブツールが持てるが、Blenderでは同名のオブジェクトを持てない。Blenderへのインポート時に同名別メッシュの上書き消失に注意。
* ZBrushでは面単位グループ化をするがBlenderでは頂点でグループ化が行われる。ここの変換には現在バグがあるのでポリグループが失われることがある。。※ポリグループに関しては頂点グループを使うのでなく、面マップ・面セットを使う設定にした方が良いようです。（後述）
* ポリペイント(頂点カラー)の持ち方も2つのソフトで事なる。ZBrushは面に関係なく頂点カラーが持てるが、Blenderの頂点カラーは面ごとに1つとなる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/ee73a82b-868c-9a97-ffda-4d2be7c42975.png)
エディットモードで面マップを作成し、ZBrushに転送した様子。ポリグループ化している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/5d9460e6-18f0-b342-5b1c-abbdb01c8e06.png)
頂点カラー(鼻の青い部分)はとりあえず入出力できてはいる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/9ea7b3f6-bf48-84cf-c20d-91968f8e9061.png)
ZBrushから送られてきた頂点カラー。まだ詳しく調査していないが、ZBrushのサブディブレベルは一番下の物が転送されてくる模様。

## 手元で確認できたバグだったり仕様だが混乱する挙動

* Blender側設定で前後反転のチェックも入れた方が、正しい向きでモデルがエクスポートできるのだが、インポート時に左右が不正に反転してしまう不具合がでた。
* ZBrush へのエクスポート時に面の表裏が反転してしまう事があった。
* Blenderの面マップはZBrushへポリグループとして送られるが面セットは送られない。これは現在の仕様である模様。ZBrushのポリグループはデフォルトの設定では面マップとして持ってきた上で面セットにも変換される。非対称になっているので混乱する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/c1dc17ba-3a6b-29bf-11dc-d1a88e2be61c.png)
挙動はオプションで調整できる。グループの取り扱い辺りは今後も調整が入りそうなので、この記事に関してはあくまでv3.3.8の挙動であることに注意。

* 同名オブジェクトのやりとりをしていると、グループ情報か頂点カラーかテクスチャ情報だが以前の編集時の古いものが使われてしまう事があった。Blender再起動と、オブジェクト名変更で解消された。
* マスクとテクスチャに関しては現状うまくソフト間でやり取りできていない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/bc323ea7-1a4a-fc79-d902-ef9b5ba8f79f.png)
公式ビデオ(2020/5)によると、頂点の数に変化がない場合、ZBrushに再エクスポートした結果が反映されないらしい。この例ではエディットモードでキューブを足して再エクスポートしている。うまく最新の結果が得られない場合は試したい。（手元の検証ではそんな事をしなくても更新されている。）


# その他

* Blenderからのエクスポート時は対象オブジェクトが選択されてないと何も起こらない。作業後選択が選択が外れがちなので注意。
* ZBrush側、GoZボタンでは選択サブツールのみをエクスポートするが、その横に "全て"、"見えている物だけ" をエクスポートするボタンがある。複数サブツールをエクスポートする場合後者２つを使った方がよい。
* GoZ_Info.txt内にはインポート、エクスポートの設定が記述されている。混乱を招くのでお勧めはしないが、そのうち反転に関するパラメータをすべて手作業でTrueに書き換えたほうが妙な反転トラブルが少なく利用できた。(Blender側アドオン設定では上下反転のチェックだけが入った状態。)

```text
EXPORT_FLIP_Y =	TRUE
EXPORT_FLIP_Z =	TRUE
IMPORT_FLIP_Y =	TRUE
IMPORT_FLIP_Z =	TRUE
```

# まとめと参考

マスクとテクスチャのやりとりがうまくいかないが、最新のBlender2.9系で2.8用のアドオンを試しているので、そのせいもあるかもしれない。グループ周りはまだ仕様に変更が入るようと思われるので、その前提で使った方が良い。メッシュ形状のやりとり自体は実用レベルと思う、

面マップと頂点グループでは内部処理の取り扱いが違い、 **面ベースの方がよりZBrushと親和性が良い** との事。対応バージョンのBlenderであれば頂点より面マップを使うのが吉。

というか、面セットをZBrushに送りたい。。

>Face Sets have not yet been exposed to python so it can not be accessed yet

現状のBlenderではプログラム的にどうにもならないとの事のようです。今後解決するでしょう。

# その他

筆者による Houdini + Goz に関する Qiita 投稿もあります。 
https://qiita.com/harayoki/items/4c2e6aedf96112d55c55

この記事を書いた時点では筆者は面セットを理解して実際にBlenderで利用していますが、面マップはほぼ利用していません。
面マップの作製や削除・用途については下記記事が参考になります。
https://qiita.com/tukimi_negitoro/items/3ffaa7377ba73481f9f1