ZBrushからエクスポートした.objファイルを(もっと)調べてみた

この記事は、以下のようなものを含んでいます

  • ZBrushから書き出した.objファイルの調査 (polypaintについて)
はじめに

以前、ZBrushからエクスポートした.objファイルがどのようにpolygroupを保存していたのかについて調べました(記事)が、結局、.objファイル標準の機能であるグループ機能が利用されていました。

今回は、.objファイルがサポートしていない色の情報(polypaint)をどのようにして保存しているのかについて調査してみました。

ZBrushから書き出した.objファイルの調査

早速、ZBrushから.obj形式でエクスポートを行ってみます。今回も記事公開時点で最新版のZBrush 2018.1を利用しています。

今回はZBrushでのpolypaintの情報がどのように保存されているのかを調べるため、前回同様極限まで簡単なメッシュとして立方体を作成し、2つの頂点に赤と青を塗ってみました。

これを書き出した.objファイルをテキストエディタで開いてみます。

.objファイルのコメント部分に、

The following MRGB block contains ZBrush Vertex Color (Polypaint) and masking output as 4 hexadecimal values per vertex. The vertex color format is MMRRGGBB with up to 64 entries per MRGB line.

上記ファイル中のコメント行から引用

と、思いっきり明記してあります。日本語訳すると、

以下のMRGBブロックには、ZBrushのバーテックスカラー(polypaint)および、マスクの情報が1頂点あたり4つの16進数で記録されています。バーテックスカラーはそれぞれMMRRGGBBの形式で記録してあり、1行あたり最大で64頂点分記録されています。

日本語訳(意訳)

バーテックスカラー及びマスクと説明されていますが、マスクというのは、『polypaintの色が塗ってなければffffff(白色)』という意味のようです。

具体的に、上記のファイルを例に說明すると、

の部分がvertex colorの情報に対応します。わかりやすいように1頂点ごとにスペースを挟むと、

となり、 1番目の頂点が(R,G,B) = (0x04, 0x12, 0xff) = (4, 18, 255)で青色、3番目の頂点が(R,G,B) = (0xff, 0x04, 0x04) = (255, 4, 4)で赤色だということがわかります。MMっていうのは何なんでしょうか…。半透明度のアルファでも無いし…。マテリアルの何かなのかなぁ…。

ではここで、3番目の頂点を(R,G,B) = (0x04, 0xff, 0x04) = (4, 255, 4) (緑色)に書き換えて保存し、ZBrushでインポートしてみます。

予想通り、赤色だった部分が緑色になりました。

ちなみにですが、#MRGB行は#から始まるコメント行なので、他の3Dソフトに読み込んだ場合は正しく読み込まれるとは限りません。私個人、研究でもよく使う3Dモデルビューワー(+簡易的なレタッチソフト)のmeshlabだと適切に読み込んでバーテックスカラー付きでファイルを開くことができます。

半分宣伝にはなりますが、この、.objにバーテックスカラーを埋め込む方法は私が開発しているZBrushプラグインでも内部的な処理で利用しています。