CG 日記

Tips

modoのエッジウェイトをFBXに出力する方法

modoのエッジウェイトをFBXに出力する方法について書いてみたいと思います。

FBXファイルはメッシュやモーフ、スケルトン、アニメーションの他にも、頂点法線、選択セット、画像、コンストレイントなど3DCGに必要な様々なデータを格納することができるようになっており、サブディビジョンサーフェースの「エッジウェイト」の保存にも対応しています。

 

エッジウェイトとは

エッジウェイトサブディビジョンサーフェイスに重みづけし、鋭角なエッジを設定する機能です。例えばiPhoneのように曲線と直線で構成される機械的なモデルで、直線的なエッジを立てるときに便利です。MayaやMaxでは折り目(クリース)と呼ばれています。

modoには2種類のサブディビジョンサーフェイスが搭載されていますが、FBXにエッジウェイトを保存する場合はキャットマルクラークを使用します。

 

FBXファイルの出力結果

modoでエッジウェイトを設定したデータをFBX形式で保存してMayaとMaxで読み込むテストをしてみました。

テストに使用したエッジウェイトの画像です。キャットマルクラークは「頂点」「エッジ」2種類のウェイトを設定することができます。画像ではキューブ左側に頂点ウェイト、右側にエッジウェイトを設定しました。

左からウェイト値を-100、-50、0、10、20、30、40、50、100、200に設定しています。

modoはエッジウェイトとして-1000や1000のように好きな値を設定してFBXに保存/読み込みできますが、MayaとMaxではマイナス値に対応してないためファイル読み込み時にマイナスは無いものとして扱われます。

 

Maya

FBXファイルを開くと「折り目」の設定が読み込まれます。

polyCreaseでエッジや頂点の折り目の値が正しく読み込まれてるのが確認できます。

 

 

3ds Max

FBXファイルを開くと「折り目」の設定が読み込まれます。

エッジプロパティで「折り目」の値が正しく読み込まれてるのが確認できます。

 

 

エッジウェイトの検証はここまで、以降はキャットマルクラークのちょっとした解説です。

 

Catmull–Clark subdivisionとは

キャットマルクラーク(細分割曲面)は1978年に開発された歴史のあるサブディビジョンサーフェイスです。以前はアルゴリズムが特許で守られていたため、3Dソフトは独自にサブディビジョンサーフェイス機能を開発していました。このため使用する3Dソフトごとにサブディビジョンサーフェイスの結果が異なっていました。

2012年「OpenSubDiv」としてオープンソースライブラリとして公開され、Mayaや3ds Maxなど多くの3Dソフトが「OpenSubDiv」を追加しました。これによりどの3Dソフトを使用しても同じ見た目になるサブディビジョンサーフェイスを使用できるようになりました。

他の3Dソフトでモデルを読み込むときはFBXを使うことが多いと思いますが、キャットマルクラークを使用すればエッジウェイトの情報も受け渡し可能なので、modoでモデリングした状態と他の3Dに読み込んだ状態が一致するのが最大のメリットです。

 

そもそもエッジウェイトを使うのか問題

昔は3Dソフトごとに独自のサブディビジョンサーフェイス機能を開発していた経緯から、ソフトをまたぐ場合はエッジウェイトを使用する代わりに、エッジ付近にループスライスを追加して鋭角なエッジを立てることが多かったです。
ループスライスを追加するとエッジウェイトに比べてポリゴンは多くなりますが、エッジがラウンドされた感じが出るのでレンダリングしたとき好ましい場合があります。

ループスライスを使用してエッジを立てる例。

エッジウェイトを使用してエッジを立てる例。

 

サブディビジョンレベルによってエッジのRが変わる問題

キャットマルクラークは様々なソフトで採用されていますが、エッジウェイトに関しては使いやすいアルゴリズムだとは感じません。エッジウェイトがサブディビジョンレベルの影響を受けるため、ウェイト設定後にサブディビジョンレベルを変えるとエッジのRが変わってしまいます。

3Dソフトが独自に開発したサブディビジョンサーフェイスでは、このような問題が発生しにくいアルゴリズムになってたりします。古い時代に開発されたキャットマルクラークにはこのような問題もありますが、機械的な形状で便利に使えるしソフト間でエッジウェイトをやり取りできるので必要に応じて使うといいと思います。

 

参考

Tips

modoでパーティクルをサーフェースでうず状に動かす表現

modoでパーティクルをサーフェースに沿ってうず状に動かす表現について書いてみたいと思います。

 

スケマティックはこんな感じです。

 

スケマティックの右側は以前書いた「パーティクルをサーフェースに沿って動かす方法」と同じです。
今回はうず状にパーティクルを動かしたかったので、うず状のカーブを作成してSurface Particle GeneratorとReplicatorを使ってメッシュ表面に複製しました。
このカーブをMerge Meshesで1つのメッシュにまとめて、Curve Forceを使ってうず状のフォースを発生させています。

カーブを表示した状態。

パーティクルの軌跡は、プラグインの Particle Tracer X を使用してます。レンダリングはmodo標準の「カーブをレンダリング」を使用し、カーブの質感には「虹色マテリアル」を使用して金属っぽくしてます。

カーブをアニメーションさせても面白い表現が出来そうです。

 

ロゴでアニメーションしたやつ。

 

今回のパーティクルアニメーションはC4DのField Forceのデモ映像がかっこよかったのでまねしてみました。
Curve Forceは影響範囲が重なると相互に影響を受けてしまうため、Field Forceに比べると軌跡が交差してしまうのがちょっと残念です。綺麗な軌跡を描けるように、プロシージャルテクスチャからフォース生成するような機能追加して欲しいですね。

 

参考

https://twitter.com/GSG3D/status/1246071202772406272?s=20

Tips

ZBrushの基本操作

ZBrushで利用頻度の高い基本操作や、ツール操作をまとめたページです。

ZBrushはモディファイヤキー(Ctrl Shift Alt)を組み合わせて使用しますが、キー入力後に別のキーを押したり、キー入力後にキーをはなしたり、一般的なグラフィックソフトのショートカットに比べると複雑に感じます。
またトランスポーズのように、1つのツールに複数の異なる機能が組み合わさっていることもあるため、初見ではなかなか操作方法がわからないことがあります。

しばらくZBrushを使わないと操作を忘れてしまうので、画像つきでまとめてみました。

ビュー操作

キャンバスの3Dナビゲーションに関する操作です。

移動

  • Alt + キャンバスドラッグ

 

回転

  • キャンバスドラッグ

 

回転を90度に制限

  • Shift + キャンバスドラッグ

 

Z軸回転

  • Shift + キャンバスドラッグ 中に Shift をはなす

 

ズーム

  • Ctrl + キャンバス 右ドラッグ
  • Alt + ドラッグ中に Alt をはなす

 

メッシュに表示を合わせる

  • F

 

 

メッシュの表示/非表示

ポリゴンメッシュの可視性に関する操作です。

四角選択

  • Ctrl + Shift + ドラッグで表示
  • Ctrl + Shift + Alt ドラッグで非表示

 

全て表示

  • Ctrl + Shift + キャンバスクリック
  • Ctrl + Shift + A

 

表示反転

  • Ctrl + Shift + キャンバスドラッグ

 

なげ縄選択

  • Ctrl + Shift + ドラッグで表示
  • Ctrl + Shift + Alt ドラッグで非表示

 

ループ非表示

  • なげ縄選択でエッジをクリック

 

選択領域の移動

  • なげ縄や四角選択ドラッグ中に Shift + Space

 

表示の拡張と収縮

  • Ctrl + Shift + X
  • Ctrl + Shift + S

 

縁のみ表示

  • Ctrl + Shift + O

 

マスクされてないメッシュを非表示

  • 可視性の「Pt非表示」クリック

 

選択したポリグループのみ表示

  • Shift + Ctrl + メッシュクリック

 

選択したポリグループを非表示にする

  • Shift + Ctrl + ダブルクリック

 

選択したポリグループを非表示にする

部分的に表示されている場合の動作です。

  • Shift + Ctrl +クリック

 

 

マスキング

マスキングに関する操作です。

マスクペイント

  • Ctrl を押しながらペイントで追加
  • Ctrl + Alt を押しながらペイントで削除

 

マスク反転

  • Ctrl + キャンバスクリック
  • Ctrl + I

 

全てマスク

  • Ctrl + A

 

マスククリア

  • Ctrl + キャンバスドラッグ

 

四角マスク

  • Ctrl + キャンバスドラッグで追加
  • Ctrl + Alt + キャンバスドラッグで削除

 

なげ縄マスク

  • Ctrl +ドラッグ で追加
  • Ctrl + Alt + ドラッグ で削除

 

カーブマスク

  • Ctrl +ドラッグでカーブの描画を開始し、ドラッグ中に Alt + クリック でカーブ
  • カーブ描画中に Alt を2回押すと直線

 

マスク領域の移動

    • なげ縄や四角マスク使用中に Shift + Space

 

マスクのブラーとシャープ

  • Ctrl + メッシュクリックでブラー
  • Ctrl + Alt + メッシュクリックでシャープ

ブラーとシャープの強さは「環境設定」のトランスポーズサブパレットの「マスクブラー強度」「マスクシャープ強度」で設定することが出来ます。

 

 

ブラシ

ブラシに関する操作です。

ドローサイズ

  • S
  • ] 設定した単位で大きく
  • [ 設定した単位で小さく

 

焦点移動

  • O

 

Z強度

  • U

 

ZAddとZSubを切り替え

  • Alt

 

最後のストロークを再生

  • 1

 

ストロークの記録と再生

  • 3 記録ストローク
  • 2 記録されたすべてのストロークを再生

 

カーソルの下の色を選択

  • C

 

シンメトリ

  • X

 

背面マスク

厚みが薄いメッシュをスカルプトする場合に、背面のポリゴンに影響をあたえないようにします。

 

直線

  • クリック後に Shift + ドラッグ

 

マスクで直線で引きたい場合は Ctrl を押してマスクペンに切り替えた状態で、ストロークメニューの「レイジーマウス」をONにします。

  • Ctrl + クリック後に Shift + ドラッグ

 

 

ギズモ 3D

ギズモ3Dは一般的な3DソフトのようにXYZ 3軸の矢印(ギズモ)を使用してメッシュを編集する機能です。

基本操作

  • E R ギズモ 3Dを有効
  • Q ドローモードへ戻る
  • Y  トランスポーズに切り替え

 

ギズモをサーフェス法線に合わせて再配置

  • Alt + クリック

 

ギズモを回転

  • Alt + ドラッグ

 

位置や回転のリセット

 

複数のSubToolを編集

  • 複数のサブツール アイコン

 

トポロジカルマスキング

トポロジーの繋がりを加味したマスキングです。

  • Ctrl + メッシュドラッグ

 

ポリグループをマスク

隣接するポリグループをクリックするとブラーになります。

  • Ctrl + クリック

 

複製

  • Ctrl + ドラッグ

 

等間隔複製

  • Ctrl + ドラッグ 中に Ctrl をはなし、そのままドラッグ

 

ネガティブメッシュ複製

ダイナメッシュの減算に使用するメッシュとして複製します。

  • Ctrl + Alt + ドラッグ

 

ポリゴン押し出し

  • マスクしてる状態で Ctrl +ドラッグ

 

膨張

  • Ctrl + ギズモ中心の四角ドラッグ

 

クリッピング

  • Ctrl + スケール軸ドラッグ

 

 

トランスポーズ

トランスポーズはギズモ3Dが追加される前からあるトランスフォーム編集ツールです。トランスポーズにしかできない操作があります。

  • トランスポーズの切り替えは W E をクリック後に Y
  • トランスポーズのリングはアクションラインに沿うようにドラッグして操作します

共通操作

アクションラインを再配置

  • メッシュクリックでサーフェス法線に合わせて再配置
  • 軸をクリックするとアクションラインの方向が切り替わる

 

ビューをZ軸回転

  • Ctrl + 終点の白色リング ドラッグ

 

描画中にアクションラインを移動

  • ドラッグ中に Space

 

描画後にアクションラインを移動

  • アクションラインをドラッグ
  • 中央のオレンジ色リングをドラッグ

 

アクションラインを15度ずつスナップ

  • Shift + ドラッグ

 

アクションラインの始点/終点の変更

  • 始点のオレンジ色リングをドラッグ

 

トポロジカルマスキング

  • Ctrl +メッシュドラッグ
  • CtrlShift +メッシュドラッグでマスク追加

 

移動モード

移動モードを使用したリングの動作です。

  • 始点 ドラッグ : 平面化
  • 中心 ドラッグ : 移動
  • 終点 ドラッグ : ストレッチ
  • 終点 右ドラッグ : 膨張

 

移動軸を制限

  • Shift + 中心の白色リング ドラッグ
  • アクションライン描画中に Ctrl クリックで描画を確定し、そのまま Shift

 

ベンド

  • Alt + 中心の白色リング ドラッグ

 

複製

  • Ctrl + ドラッグ
  • Ctrl + ドラッグ中に Shift を押すと移動軸を制限

 

ネガティブメッシュ複製

ダイナメッシュの減算に使用するメッシュとして複製します。

  • Ctrl + Alt + ドラッグ

 

ポリゴン押し出し

  • マスクしてる状態で Ctrl + 中心の白色リング ドラッグ

 

ポリゴンの分離

  • マスクしてる状態で Ctrl + 終点の赤色リング ドラッグ

 

スケールモード

スケールモードを使用したリングの動作です。

  • 始点/終点ドラッグ : 均一スケール
  • 中心ドラッグ : 垂直スケール

 

エッジループを作成してデフレート/インフレート

  • マスクしてる状態で Ctrl + 中心白色リングドラッグ

 

特殊なスケーリング

  • Alt + ドラッグ

 

回転モード

回転モードを使用したリングの動作です。

  • 始点/終点 ドラッグ : 回転
  • 中心 ドラッグ : Z軸回転

 

スナップ回転

  • Shift +ドラッグ

 

ツイスト

  • Alt + ドラッグ

 

メッシュ操作

ポリゴンメッシュに関する操作です。

メッシュの削除

 

メッシュの分割

  • サブツール「分割」の「マスク箇所を分割」「非表示分割」

 

レイヤー

レイヤーに関する操作です。

レイヤーでスカルプトした結果を部分的に消す

  1. レイヤーを作成してスカルプトする
  2. スカルプトしたレイヤーをOFFの状態で「MT格納」をON
  3. レイヤーをONに戻す
  4. 新規レイヤーを作成
  5. Morph ブラシを使用してスカルプトする

 

 

 

 

ポリグループ

ポリグループに関する操作です。

マスクからポリグループ作成

 

ZModelerのポリグループを適用

ブラシでZModelerを選択し、Space でメニュー表示して「ポリグループを適用」を選択します。

  • ポリゴンクリックでポリゴンに適用
  • エッジクリックでループ適用
  • Alt +ドラッグでペイント適用
  • クリック中に Alt でポリグループの色を変更

 

ポリグループの境界を滑らかにする

  • 変形の「ポリッシュ(グループ)」

 

 

参考

http://docs.pixologic.com/user-guide/keyboard-shortcuts/shortcuts-by-category/

Tips

ZBrushで作成したディスプレイスメントマップをmodoで使用する方法

ZBrushで作成したディスプレイスメントマップをmodoで使用する方法について書いてみます。使用バージョンはmodo 14.0、ZBrush 2020.1.4です。

 

ZBrushでディスプレイスメントマップを作成する方法

ディスプレイスメントマップ作成 オプション

ZBrushからディスプレイスメントマップを出力する場合の設定です。「スケール」1、「中央値」0.5であることが重要です。それ以外のオプションは必要に応じて設定します。

 

 

アダプティブ

アダプティブはポリゴンの領域計算が正確になります。しかし、このオプションは信頼性が低く大きな解像度では不要という情報を見かけます。使用するデータに合わせて見比べるのがよさそうです。

 

DPSubPix

DPSubPixはサブピクセルの精度で、値を上げると滑らかなピクセルになります。4が望ましいですが値を高くするとレンダリング時間が長くなります。高解像度のメッシュ(16mil以上)や、マップサイズが2048以下と小さい場合は2でも十分なようです。

中央値

ディスプレイスメントの押し出し基準となる値です。16bit画像はマイナス値を持つことが出来ないので、中央値がディスプレイスメントしないグレー色、凸が白色、凹を黒色のピクセルとして出力されます。

 

垂直反転

垂直反転はUVのV軸を反転します。modoからGozを使用してZBrushにメッシュを転送した場合、UVはmodoのUV方向と一致します。objやfbx形式でメッシュをインポートした場合はUVが「垂直反転」します。必要に応じて使用します。

 

マップを作成してエクスポート

「ディスプレイスメントマップ作成」で作成されるマップは16bitフロート固定です。16bitでも十分な結果が得られますが、32bitのマップが必要な場合は「マップを作成してエクスポート」を使用します。

 

32Bit

32bitをONにすると32bitフロート画像でファイル出力することができます。OFFの場合は16bit画像として出力します。32bit出力する場合は「3チャンネル」「32Bit」ONにして「マップを作成してエクスポート」を実行します。

「3チャンネル」がOFFの場合はグレースケールのファイルとして出力されるのですが正常です。しかし、「マップを作成してエクスポート」を使用した場合は以下の問題があります。

  • tif形式を使用した場合、壊れたtifが出力されます。
  • exr形式を使用した場合、Rチャンネルにマップを書き込むためmodoに読み込んだとき赤い画像になってしまいディスプレイスメントとして使用することができません。

マルチマップエクスポーター」はtifのグレースケール出力が正常に動作してるので、基本的にマップ作成はマルチマップエクスポーターを使用するのがいいと思います。UDIMを使用したモデルのマップを作成するときもマルチマップエクスポーターを使用します。

 

modoのメッシュにディスプレイスメントマップを適用する場合のマップ作成

modoで作成したメッシュをZBrushでスカルプトしてマップを作成し、そのマップをmodoのメッシュに適用する場合はモーフターゲットを使用した状態でディスプレイスメントマップを作成する必要があります。

ZBrushからGoZでmodoに転送したメッシュを使用する場合、この作業は必要ありません。

 

モーフターゲットを使用したマップの作成方法

  1. モーフターゲットサブパレットで「MT格納」をクリック
  2. 「インポート」を使用して元のメッシュを読み込みます
  3. 「切り替え」でモーフターゲットの状態になってることを確認して「ディスプレイスメントマップ作成」を行います

 

ZBrushで「ディバイド」したりスカルプトした場合、低SubDivのメッシュも変形します。このため元のメッシュにディスプレイスメントマップを設定する場合は、元のメッシュとスカルプトで変形したメッシュとの差をなくす必要があります。

モーフターゲットを使用してマップを作成することで、元のメッシュで正しい変形結果を得られるディスプレイスメントマップを作成することができます。

 

オリジナルメッシュ
立方体と平面

 

スカルプトしたメッシュ SubDiv7
立方体のみスカルプトで凹凸を作成

 

スカルプトしたメッシュの SubDiv1
スカルプトの影響で低SubDiv時のメッシュが変形している

 

モーフターゲットを使用しない状態で作成したディスプレイスメントマップ。立方体の角が膨らんでしまいます。

 

モーフターゲットを使用した状態で作成したディスプレイスメントマップ。ZBrushと同じ形状でレンダリングできます。

 

 

modoでディスプレイスメントマップを設定する方法

ZBrushから出力したディスプレイスメントマップをmodoで使用する方法です。modoでディスプレイスメントマップを正しくレンダリングするにはいくつか設定が必要です。

  • 画像レイヤーとマテリアルを設定
  • サブディビジョンをCatmull-Clarkにする
  • UV補間をリニアにする

 

画像レイヤーとマテリアル設定

画像が16bitと32bitで設定方法が異なります。

 

16bit画像

画像レイヤーで「下限値」「上限値」にZBrushのディスプレイスメントサブパレットの「強度」×100を設定し、マテリアルの「ディスプレイスメント距離」を500 mmに設定します。これはGoZを使用したときに設定される方法と同じです。

デフォルトのレンダリング設定だとポリゴンが荒いので、レンダー設定の「ディスプレイスメント評価間隔」に小さい値を設定します。「ディスプレイスメント評価間隔」は小さいほど良好な結果になりますが、レンダリング時間が長くなります。

ZBrushのディスプレイスメントサブパレットの「強度」の値。「強度」はZBrushが作成する画像ファイル名にも追加されます。

 

32bit画像

画像レイヤーの「下限値」-100%、「上限値」100%に設定して、「ディスプレイスメント距離」を500 mmに設定します。ただし、マップに保存されている値が1より大きい場合、デフォルトではディスプレイスメントがクランプされてしまいます。

 

このような場合はチャンネルビューポートで「source High」の値を高く設定します。「source High」はプロパティに表示されないチャンネルなので、ちょっと不親切ですね。

 

ディスプレイスメント距離の「500 mm」という値は、modoのレンダラーが使用するディスプレイスメントの基準値と思われます。

3Dソフトはソフト内で使用する基準となる大きさがあり、modoの場合は1 mが基準になっています。ディスプレイスメントマップには何センチのように絶対的な距離が保存されているわけではないので、ディスプレイスメントの押し出し方向 ±500 mm の基準値+マップの値でディスプレイスメントされます。

 

 

サブディビジョンをCatmull-Clarkにする

modoには2種類のサブディビジョンが搭載されています。modoオリジナルのサブディビジョン(Tab)と、Catmull-Clarkサブディビジョン(Shift+Tab)です。
ZBrushの「ディバイド」はCatmull-Clarkサブディビジョンを使用しているので、ZBrushからディスプレイスメントマップを出力してmodoで使用する場合は、Catmull-Clarkサブディビジョンを使用すると形状が一致します。

下の画像はmdooのCatmull-Clarkサブディビジョン(白色)と、ZBrushでディバイドしたメッシュ(赤色)を同じ位置に重ねてレンダリングしたものです。形状が一致してるのが確認できます。

まだら模様に見えるのはレンダラーの特性によるものと思われます。ポリゴンが同じ位置にある場合どちらのポリゴンを前面にレンダリングするか優先順位がポリゴンごとに変わっているため、まだら模様が発生しています。Dキーを使用して細分化したメッシュや、ジオメトリキャッシュを比較すると頂点位置が一致していることが確認できます。

 

MayaのArnoldでメッシュスムーズプレビューをレンダリングした画像、同じく形状が一致してます。

ZBrushのSubDiv4はmodoの「レンダーレベル」3に対応します。同様にMayaのMesh Smoothも3になります。

 

UV補間をリニアにする

modoはサブディビジョンをONにしている場合、UVマップに対してもサブディビジョンを適用します。ZBrushから出力したマップを使用する場合は、メッシュのプロパティで「リニア UV」をONにします。

 

ZBrushのマップ作成オプションに「スムーズUV」というオプションがありますが、modoでUVを一致させるには「スムースUV」をOFFの状態でマップを作成する必要があります。

 

ZBrushの「スムーズUV」は他のソフトでも基本OFFがいいように思います。3dsMaxはOpenSubdivモディファイヤにUV補間に関するオプションがあります。Mayaも同様にUV境界のスムーズ設定があるのですが、ZBrushの「スムーズUV」とは計算が一致しません。ZBrushの「スムーズUV」と同じような補間が出来るのは、Arnoldの「pin_borders」が近いように思います(試したけど微妙にずれる気がする)。

 

メッシュの比較

modoでディスプレイスメントマップを適用したモデル(白色)と、ZBrushから出力したハイメッシュ(青色)の比較です。だいたい同じような形状になってるのが確認できます。

 

 

ノーマルマップを作成/使用する方法

おまけでZBrushからノーマルマップマップを出力する場合の設定です。

 

Gozで読み込んだ法線マップはカラースペースの設定が「デフォルト」になってます。この状態だと法線マップによるシェーディングがおかしな状態になることがあります(カラーマネジメントの設定によります)。そんな時はカラースペースを「リニア」にすると解決します。

 

 

参考

ZBRUSH DISPLACEMENT IN MODO

modoのチュートリアル。
http://www.xuanprada.com/blog/2014/7/30/zbrush-displacement-in-modo

このチュートリアルではマップ作成時に「中央値」0、modoのレイヤー設定では「下限値」0%「上限値」100%、「ディスプレイスメント距離」1mに設定しています。

私の記事で「中央値」0.5を使用したのは16bitと32bit画像で共通して使用する設定にするためです。Arnoldと設定を合わせたい場合は「中央値」0の方がいいかもしれません(ArnoldのScalar Zero Valueで合わせられる気もします)。

 

ACCURATE DISPLACEMENT WORKFLOW

ディスプレイスメントの基本的から解説されてます。
https://www.cggallery.com/tutorials/displacement/

Tips

modoとZBrushを併用する場合の注意点

modoとZBrushを併用する場合の注意点について書いてみます。

ZBrushは他の3Dソフトに比べて独自の制限や動作があります。全てZBrush内で作業が完結するのであれば問題ないかも知れませんが、modoで作成したモデルをZBrushに読み込んで使用すると高確率で制限につまずいてしまいます。基本的な仕様について書いておきます。

 

三角、四角ポリゴン以外は使用しない

ZBrushは三角、四角ポリゴンで構成されるポリメッシュのみ使用可能です。五角形以上のいわゆるN-gonはGoZしても面が生成されることがなく、穴が開いた状態になります。modoのカーブもN-gon扱いになるようです。

 

三角、四角しか使えないのはやや不便に感じますが、メモリ使用量を少なくし処理速度を早くするための仕様ではないか?ということらしいです。

 

UV座標の0.0、1.0上に頂点を配置してはいけない

ZBrushは0.0、1.0上の頂点を結合してしまい、正常なマップが作成できなくなります。3DソフトのプリミティブはUV空間を広く使うように展開されていますが、プリミティブをZBrushに持ち込んで使用する場合は注意が必要です。

 

UVを少し小さくスケールすると、UVを正しく使用することができます。

 

 

マルチUVに対応してない

ZBrushはマルチUV、複数のUVデータの読みこみに対応していません。modo、3dsMax、Mayaなど多くの3Dソフトは1つのメッシュに複数のUVマップを作成することができますが、ZBrushでは読み込めるUVマップは1つに制限されています。

  • modoから複数のUVマップを持ったデータをGoZした場合は、どれか1マップ転送されます。メッシュの一部にしかUVがない場合、UVは転送されません。
  • MayaからGoZした場合は「既定のUVセット」のみ転送されます。
  • 3ds MaxからGoZした場合は「マップチャンネル 1」を転送します。

ZBrushでマルチUVを使用したい場合にはUDIMのように、1つのUVマップにメッシュを配置して使用します。

 

 

久々にZBrush使おうとすると毎回基本的なところを忘れてしまうので、忘れないようにメモしておこうと思いました。

Tips

modoのIntel Open Image Denoise使ってみた

modo 14.1から追加されたIntel Open Image Denoise使ってみた。modoには何種類かデノイズが搭載されてますが、Intel Open Image Denoiseは他のデノイズに比べて良好な結果が得られます。

特に新しく搭載されたmPathはパストレーサーであるため、以前から搭載されている放射度キャッシングを使用したランダラーに比べてノイズが多く発生します。mPathとデノイズの組み合わせは効果的そうです。
(放射度キャッシングを使用しない場合はモンテカルロパストレースを行うので、設定によっては以前からあるレンダラーでもデノイズは有効です)

 

比較

デノイズなし

 

Intel Open Image Denoiseあり。屈折ラフネスやソフトシャドウのノイズが綺麗に除去されます。

 

デノイズなし

 

Intel Open Image Denoiseあり。反射のサンプリングが足りなくてノイズになってるピクセルが綺麗になってます。

 

デノイズの比較

ついでなので、各デノイズを比較してみました。Intel Open Image Denoiseが一番実用的だと思います。

 

デノイズなし

デノイズのテストに使用したシーン、レンダラーはmPathで「最高品質」は8サンプルと低めに設定しました。レンダリング時間は4分、全体的にノイズがのってます。

左の円柱はバンプを使用した質感で、右2つはディスプレイスを使用。

 

サンプリングを256に上げた画像、レンダリング時間は8分。デノイズを使用していないため正確なレンダリング結果と言えます(参考用)。

 

Occlusionマテリアル「オクルージョンレイ」12。「最高品質」8サンプル。

 

Occlusionマテリアル「オクルージョンレイ」256。「最高品質」256サンプル。

 

Intel Open Image Denoise

Intel Open Image Denoiseはディープラーニングベースのノイズ除去フィルターで、デノイズの中で最も良好な結果が得られました。

右下のメタルな質感で、細かな凹凸がデノイズによって筋状の流れになってしまってます。左の円柱のスペキュラが強い部分が若干ぼけてる。

 

NVIDIA OptiX

NVIDIA OptiX AI-Accelerated DenoiserはAIとGPUを使用したデノイズです。Intel Open Image Denoiseに比べると若干ノイズが残りやすいようです。左のバンプを使用した質感と相性がよくないようです。

 

AMD AI

AMD AI-accelerated denoisingは機械学習を使用したGPU対応のデノイズです。 様々なフィルターを搭載したライブラリであるためか、全体的にデノイズの品質はよくないです。

 

AMD Wavelet

複数の画像(カラー、サーフェース法線、深度、サーフェースID)を使用するデノイズフィルターです。デフォルト設定だとフィルターが強すぎるようです。

 

AMD Bilateral

複数の画像(カラー、サーフェース法線、深度、サーフェースID)を使用してバイラテラルによるデノイズを行うフィルターです。バイラテラルはAfterEffects等にも搭載されてるエッジを残すようにブラーするフィルターです。

 

AMD Median

従来のよくあるデノイズフィルターのようです。

 

デノイズは細かなテクスチャやバンプが苦手なようです。また、オクルージョンのような単色の画像では、よいデノイズが得られませんでした。デノイズは短いレンダリング時間でそこそこの結果が得られるので、テストレンダリングに最適だと思いました。

デノイズはあくまで近似のため、サンプリングを上げてレンダリングした方が正確なレンダリングになります。またHDRがクランプされることもあるようなので、使えるシーンで効果的に使っていきたいですね。

 

参考

Tips

modoでランダムにパーティクルを動かす方法

modoでランダムにパーティクルを動かす方法について書いてみます。

 

グリッド

サンプルファイル

 

スケマティックはこんな感じ。

Particle Operatorに「ID」「位置(R/O)」「位置」の3つの特性を追加します。Randomize IDを追加して、パーティクルIDの範囲を「最小値」-0.5「最大値」0.5に設定します。

条件式ノードを追加してパーティクルを3つのグループに分けます。このグループはXYZ軸のいずれかの1方向に移動するためのもので、条件がTrueの場合はパーティクルID値を出力し、Falseの場合は0を出力します。
TrueのときはパーティクルID値ではなくてもよくて適当に値を出力すれば移動し、Falseの場合は0を出力して移動しないという処理にしてます。

演算ノードで「位置(R/O)」と条件式の出力値を足して「位置」に値を戻します。こうすることで毎フレームパーティクルIDの値が「位置」に加算され続けます。

最後に Randomize IDのキーにキーフレームを設定して、一定間隔でパーティクルIDのランダムシードをアニメーションします。パーティクルIDがランダムに変わるため、パーティクルの移動方向もランダムに変わるという仕組みです。

 

電子回路

電子回路のように動くパーティクルです。

サンプルファイル

 

スケマティックはこんな感じ。移動する軸が少ないので単純です。

ユーザーチャンネルにグラディエントチャンネルを追加して、Gradient Scaleノードでパーティクルが移動するタイミングと移動量を制御してます。角度で計算してるものではないので、見た目がそれっぽければOKという作りです。

 

条件式が使えるとパーティクルの制御に幅が出て面白いですね。TheGridというアセンブリも公開されているので、より高度なことがしたい場合は使ってみるといいかもしれません。

 

参考

Tips

Oculus Questでmodo VR使ってみた

Oculus QuestとOculus Linkを使用してmodo VR使ってみた。使用方法は簡単です。Oculus Linkを使用してPCにQuestを接続した状態でmodoを起動し、VRタブをクリックするとQuestにmodoのビューポートが表示されます。

グラフィックボードがGeForce RTX 2060で画面解像度3840×2160で表示すると描画が崩れてしまうため、2560×1440表示で使用して画面キャプチャしました。

VRを使用した感想は没入感があって思いのほか楽しいです。modoVRはツールUIがVR専用のため、ツールパレットを覚え直しになるのが面倒でVRをモデリングに使用したいとは思いませんでしたが、モデル確認に使用するのはアリだと思いました。

 

教室

Webのホームに使用してるモデルです。未調整ですが意外といい感じに見えました。

 

キャラクターモデル

現在モデリングしてるオリジナルキャラです。サブディビを使用したポリゴン数の多いモデルのためか、モデルに接近したときに描画遅延が発生しました。影やポリゴン描画の精度が落ちるようです。

フィギュアを見るようにモデルを確認できるのが楽しい。

 

modo VRの練習

画面の回転やズームは一般的なVR操作なので普通に使えます。モデルの編集は難しいですが、モデルビューワと割り切って使うには十分楽しめそう。

 

Oculus Questのディスプレイは2,880×1,600 (片目1,440×1,600) なので、もう少し低い解像度で表示してもよかったかもしれません。modo起動したままPCの画面解像度を変更したらPCがフリーズしたので細かなテストはしませんでした。

VRゴーグルがあるなら一度試してみると楽しいかもしれません。

Tips

modoでUDIMを使う方法

modoのUDIMの使い方について書いてみます。AfterEffectsやPremiereなどの動画編集ソフトでは連番画像を1つの素材として扱いますが、UDIMを使用すると複数のテクスチャ画像を1つの画像レイヤーとして扱うことができるので便利です。

 

UDIMとは

UDIM (U-Dimensionの略称)は、UV空間の整数ブロックに番号を割り振って管理する方法です。UVブロックと画像は1001、1002、1003...のような4桁の番号を使用してペアとして扱い管理されます。

UDIMは既存のUV作業工程と大きく変わりません。一般的なUVは0~1の範囲にメッシュを配置していましたが、UDIMでは0~1の外側の領域も使用します。UV空間の0~1の範囲を1001、1~2の範囲を1002のように番号で管理します。画像も同様にUV範囲に対応した番号をファイル名に含めることでUVとペアとして管理する仕組みです。

 

UVブロック

 

画像のファイル名称

 

UDIMの歴史は思いのほか古く、Weta Digitalが2002年公開の映画「ロード・オブ・ザ・リング/二つの塔」制作時に開発しました。その後Weta DigitalのインハウスツールだったMARIMudboxが一般販売されたことから、広く使用されることになります。

 

UDIMのメリット

UDIMのメリットは大きく2つあります。

  • 高解像度の画像を1枚だけ使う代わりに、複数の画像を使用できる
  • 単一の画像レイヤーとして管理できる

 

複数の画像を使用して高解像度化

高解像度の画像を1枚だけ使う代わりに、そこそこの大きさの画像をいくつも並べて、結果的に解像度の高いテクスチャにすることができます。
PhotoShop等で画像を編集するときも高解像度の画像1枚より、そこそこの大きさの画像複数枚のほうが取り回しが楽です。

 

1枚の画像レイヤーとして管理

複数のUVマップを使用する方法だと、画像レイヤーが複数必要でした。または、画像ごとにマテリアルを分ける必要がありました。UDIMを使用すると1レイヤーで済むようになり管理が楽になります。

 

複数のUVマップを使用した例(従来のUV設定方法)

1つのメッシュ内で複数のUVマップを使用した場合、シェーダーツリーではUVマップと同じ数の画像レイヤーが必要になります。画像レイヤーでは1枚ごとに使用するUVマップを指定する必要があり、画像枚数が多いと設定するのが手間です。

 

UDIMを使用した例

UDIMを使用した場合、シェーダーツリーは画像レイヤー1枚ですみます。下の画像ではディフューズ色のみの設定ですが、スペキュラー、ディスプレイスメント、法線など複数種類のマップを使用する場合は、UDIMを使用した方が管理が楽になります。

UDIMは元々は高解像度で大量のテクスチャを使用するWetaのインハウスツールに適した仕様として考えられたのだと思いますが、ゲームエンジンでもテクスチャのストリーミング等でメモリ使用量を少なくできるなどのメリットがあるようです。

 

modoでUDIM画像を読み込む方法

UDIM画像の読み込みには「新規UDMIの読み込み」を使用します。

  1. シェーダーツリー の「レイヤー追加」から「新規UDMIの読み込み」をクリックしします。
  2. ファイルオープンダイアログから、使用する画像を選択して「開く」をクリックします。
    開いた画像は自動的にフォルダにまとめられ「ファイル名称からUDIM番号を設定」が実行されます。
    画像レイヤーでは「画像」にフォルダが設定されることにより、UDIMとして動作するようになります。

 

UDIMはZBrushのように複数のUVマップに対応していないソフトでも使用できるので覚えておくと便利です。

ゲームではUDIMが使われることは少ないようですが、先日Substance PainterがUDIMに対応したので今後ゲームでの利用も増えたりするかもしれません。

 

参考

UDIMワークフロー
https://learn.foundry.com/modo/14.0/content/help/pages/uving/udim_workflow.html

Tips

modoのパーティクル速度で色を変える方法

パーティクル色の使い方」の応用で、パーティクルの速度でアイテムの色を変える方法について書いてみたいと思います。

 

modoのグラディエントレイヤーは様々な「入力パラメータ」を使用して色を設定することができます。「パーティクルエージ」「パーティクルID」「パーティクル速度」などパーティクル情報を使用して色を設定することができますが、使用可能なアイテムが「ブロブ」「スプライト」「ボリューム」に限定されています。

このためReplicatorを使用して複製したメッシュアイテムを、グラディエントの「パーティクル速度」を使用して色を変えることができません。

 

Replicatorを「パーティクル速度」に応じて色を変えたい場合は、Particle OperatorとShader Inputsを使用します。

サンプルファイル

スケマティックはこんな感じです。

Particle Operatorに「速度」と「色」の特性を追加し、「速度」を「色R」に接続します。

「速度」はXYZ軸に分かれてるため、速度XYZを加算してどの方向に飛んでも単一の速度になるようにします。このとき速度を絶対値に変換してから加算します。速度はマイナス値が入るようなのでそのまま加算しても意図した通りの結果にならないようです。

次にShader Inputsを追加し「パーティクル色 R」をGradientの「in Val」に接続します。こうすることで、Gradientの「入力パラメータ」に「パーティクル速度」を設定したことになります。後は通常通りGradientの色を設定すれば、パーティクル速度に応じてGradientの色が反映されます。

この方法を使えば速度以外のパーティクル特性を使用して色を設定することができるので、表現力が上がると思います。

 

標準機能として「パーティクル速度」に対応してるスプライトの画像と比較すると、同じように色が変化してるのを確認できます。

 

水しぶきの表現に使えそう。

 

同様の方法で「衝突カウント」を使用すると、コリジョンと衝突した場合に光るような表現もできます。

 

 

modoにパーティクルが搭載された初期の頃はGradientの「パーティクルエイジ」を使用してReplicatorに色を設定することが出来ませんでした。このため「パーティクルエイジ」を「パーティクルID」に接続するテクニックが紹介されてました。

この方法はスケマティックがシンプルでいいのですが、残念ながら速度を入力したときに意図した通りに動作しませんでした。速度が遅くなった場合に色がループしてしまいます。

サンプルファイル

 

パーティクルとReplicatorは併用することが多いと思います。今回紹介したようにShader Inputsを使えばReplicatorに色を設定することはできますが、グラディエントの「パーティクル速度」をそのまま使えた方が便利だと思うので、将来的に対応して欲しいですね。

Tips

modoのパーティクルでアイテム切り替え

modoのパーティクルでアイテムを切り替える方法について書いてみます。

 

衝突でアイテム切り替え

サンプルファイル

 

スケマティックはこんな感じです。Particle Operatorの「アイテム」と「衝突カウント」を使用します。

「アイテム」はReplicatorが複製するアイテムを指定することができるチャンネルです。Replicatorに接続されたアイテムは0~1の通し番号が自動的に割り当てられます。「アイテム」に複製したいアイテムに対応した値を指定することで、自由にアイテムを切り替えることができます。
「衝突カウント」は物理演算でコリジョンと衝突した回数をカウントアップするチャンネルです。

スケマティックでは「衝突カウント」をReplicatorに接続しているアイテムの数、4で割った値を「アイテム」に入力することで、コリジョンと衝突するたびにアイテムが切り替わるようにしています。

 

フォールオフでアイテム切り替え

サンプルファイル

 

スケマティックはこんな感じです。Falloff Probe条件式を使用して、フォールオフ内にあるパーティクルの「アイテム」値を変更します。

Falloff Probeはフォールとパーティクルの位置関係に応じて値を出力するノードです。条件式ノードは値Aと値Bを比較して、条件に合う場合は任意の値を出力することができます。
このサンプルではフォールオフの範囲内にあるパーティクルがある場合は、アイテムに対応した値を出力することでアイテムを切り替えてます。

 

Particle Operatorの「アイテム」を使えばLODのように距離に応じてアイテムを切り替えたり、アイテム切り替えによるアニメーションができるようになります。

modoのパーティクルはアイテムの切り替えやモーフの切り替えができるので自由度が高くていいですね。

Tips

GoZ for Modoのインストール方法と使用方法

たまにしかインストールしないので、GoZ for Modoのインストール方法をメモしときます。今回はmodo 14.0とZBrush 2020.1を使用しました。

 

GoZ for Modoのインストール方法

GoZ for Modoとは

GoZはmodoとZBrush間でメッシュやテクスチャをワンクリックで転送できる便利ツールです。901以前はPixologicがmodo用のGoZを開発していましたが、10.1以降はFoundryがGoZを開発しています。

modo 10.1以降用のインストーラー

http://modogroup.jp/modo/free_kits/goz

modo 901 用のインストーラー

http://download.pixologic01.com/download.php?f=Plugins/ZBrush4R7-WIN/GoZ_for_MODO901SP1_Installer_WIN.exe

 

GoZ for Modo インストール手順

インストールの流れは以下の通りです。

  1. ZBrushのインストール
  2. GoZ for Modoのインストール
  3. GoZで使用するmodoのパスを設定

 

1. ZBrushのインストール

GoZを使用するにはZBrushとmodoがインストールされている必要があります。

 

2. GoZ for Modoのインストール

GoZ_win.exeを使用してGoZ for Modoをインストールします。

 

3. GoZで使用するmodoのパスを設定

ZBrushを起動して「環境設定」で「Path to Modo(New)」をクリックし、一覧から使用するmodo バージョンを選択します。

ZBrushを再起動すればGoZが使用できるようになります。

 

GoZ for Modoがインストールされていない場合は、「Path to Modo(New)」は表示されません。ZBrushを起動した状態でGoZ for Modoをインストールした場合は、ZBrushを再起動する必要があります。

Mayaや3dsMaxはmodoと異なり、ZBrushのパス設定ボタンからGoZインストーラを起動することができます。

 

 

GoZ for Modoの使用方法

modoからZBrush

GoZ for ModoがmodoのKitパスにインストールされている場合、「modoツールバー」の右端にあるキットボタン内にGoZが表示されます。

 

適当にTeapotを作成してGoZボタンを押すと、ZBrushにTeapotを転送することができます。

 

 

ZBrushからmodo

ZBrushからmodoへデータを転送するにはGoZボタンを押せばいいのですが、せっかくなのでmodoから転送したTeapotを「ディバイド」して適当にスカルプトしてみます。

 

スカルプトが完了したら「SubDiv」を1にして「ディスプレイスメントマップ作製」を実行します。

 

「ツール」のGoZボタン押すと、modoにTeapotとディスプレイスメントマップが転送されます。modoのデフォルトのレンダリング設定では「マイクロポリゴンディスプレイスメント」の評価間隔が荒いので、小さな値を設定します。

 

新規シーンにGoZした場合、アイテムとマテリアルは「Teapot_GoZ」のようなグループにまとめられます。

 

GoZの保存先のディレクトリ

GoZで使用されるマップやメッシュのデータは以下のディレクトリに保存されています。

C:\Users\Public\Pixologic\GoZProjects\Default

 

 

GoZをインストールしておくとメッシュとマップを転送することができるので便利です。

Tips

modoで糸を編む表現

modoで糸やバスケットを編む表現を作ってみた。

 

サンプルファイル

スケマティックはこんな感じです。

Spiral Curveでカーブを1本作って、TransformやTwistでアニメーションさせます。そのカーブをMerge Meshesを使って別メッシュにコピー、Radial Arrayを使ってカーブのアニメーションを複製します。

レンダリングは「カーブをレンダリング」を使用します。カーブをレンダリングしてる関係で糸のバンプがずれて動いてしまってます。
オプションの「カーブをポリゴンとしてレンダー」を使うとUV指定でズレないように設定できるのですが、プロシージャルのノイズを使ったのが原因なのかUVの切れ目が目立ったので今回はずれを気にしないことにしました。

 

バスケット

サンプルファイル

スケマティックはこんな感じです。

バスケットの編み目の形状のカーブを1つ作りArrayで面状に複製しています。編み目がランダムに伸びて見えるようにカーブのDeleteにLinear FalloffとTexture Falloffを使用しました。そのカーブを元にCurve Sweepで面を作成し、Thickenで押し出します。

バスケットは思い通りに作れませんでした。プロシージャルモデリングでランダムな速度で一方向に伸び続けるという設定が上手く作れなくて、単純にノイズで切り抜いたようになってしまいました。

プロシージャルリボンの作り方」のようにパーティクルを使ってカーブを生成したほうが、イメージした動きが作れそうです。

 

ニットパターンも作ったのですが、モディファイヤ依存ループエラーが多発するシーンになってしまい調整を断念しました。

以前も同じ問題に遭遇したのですが、Texture Falloffに接続したテクスチャにFalloffを設定していると、何かのタイミングでループするというエラーが出てしまいノードが動作しなくなってしまいます。テクスチャを削除すれば一時的に改善することもあるのですが、何か問題が潜んでる気がします。

 

参考

Tips

modoでプロシージャルリボンの作り方

modoでプロシージャルリボンの作り方について書いてみます。

リボンのような形状を作る場合は「プロシージャルロープの作り方」と同じようにCurve Sweepを使う方法や、スプラインデフォーマを使う方法が定番だと思います。
今回は違うアプローチとしてパーティクルを使う方法を紹介してみたいと思います。パーティクルを使用しているので、フォースを使用して動きを制御することができます。

サンプルファイル

スケマティックはこんな感じです。

 

  1.  パーティクルエミッターを使用して文字の軌跡を作成します。
    今回はエミッターに直接アニメーションを設定していますが、文字形状のパスを作ってエミッターをパスコンストレイントしてアニメーションする方が動きが綺麗になるかもしれません。
  2. Particles to Array と Create Polygons を使ってパーティクルシミュレーションからカーブを作成します。
  3. カーブを Polygon Extrude を使って押し出し帯状にします。

リボンの小さな揺れはTransform Effector と Texture Falloff を使ってます。リボンが浮き上がる動きは、Linear Force と Turbulence Force を使い、Linear Falloff でタイミングを調節してます。

リボンに縁取りを設定するためプロシージャルUVを使用してみましたが、メッシュが縦長になると展開方向が回転してしまいました。平面投影してるはずなのに、どうして回転するのか謎です。

 

プロシージャルメッシュを直接ソフトボディとして使用することができれば、もっとリアルなリボンの動きを設定できると思います。modo 14.0ではプロシージャルメッシュをソフトボディで使うことができないのが残念です。将来的に対応してくれると嬉しいですね。

 

参考