2018年8月

Tips

modoのファーマテリアルとガイド

modoのファーガイドについて書いてみます。セグメント数の少ないガイドを使用する場合は「ポリライン」より「カーブ」を使用した方がいいんじゃないかという話しです。

 

ファーマテリアルとガイド

modoにはファーやヘアーを表現するためのFur Materialがあります。Fur Materialで髪の毛や長い草のような形状を指定する場合や、アニメーションしたい場合は「ガイド」を使用します。
ガイドとして使用できるのは「カーブ」と「ポリライン」の2種類です。現在はヘアーツールの「ガイドを生成」で生成されるのは「ポリライン」ですが、701以前のバージョンでは「カーブ」が生成されていました。ガイドを多く生成した場合に「カーブ」より「ポリライン」の方がパフォーマンスがよいとのことで仕様が変更されました。

 

ですがタイムラプス表現で使用したように「ダイナミックカーブ」で草を揺らす場合は、ガイドの「セグメント数」が多いと物理計算の負荷が上がります。アニメーションを前提とした場合も「セグメント数」が少ない方が制御しやすいと思います。
そこで少ないセグメント数のガイドを使用したとき、「カーブ」と「ポリライン」でどんな違いが出るかテストしてみました。

 

ガイドと最大セグメントの数

下の画像では緑の線が「ガイド」です。左から順に「セグメント数が20のポリライン」「セグメント数が5のポリライン」「セグメント数が5のカーブ」です。赤の線はファーのプレビューです。パースの関係でガイドの形状が違うように見えますが、全部同じ形状です。

 

ファーをガイドの形状にそわせるには「最大セグメント数」が関わってきます。「最大セグメント数」はファーの長さの分割数で、値が大きいほどなめらかに曲がったファーになります。

 

最大セグメント数:5

 

最大セグメント数:10

 

最大セグメント数:50

 

最大セグメント数:100

 

最大セグメント数:1000

 

レンダリング結果を見ると一目瞭然ですね。ガイドのセグメント数が5のように少ない場合は、ポリラインよりカーブを使用した方がなめらかに曲がります。ポリラインをガイドに使用する場合は、なめらかに曲がる程度のセグメント数が必要です。ファーのガイドをアニメーションさせたい場合は、カーブを使ったほうが良好な結果が得られそうです。またカーブを使用した方がガイドの先端までファーが伸びているのが確認できます。

「最大セグメント数」は値が小さすぎるとカクカクした形状になりガイドから離れてしまいます。値が1000のように大きい場合はガイドに近い曲がり方になりますが、ポリラインを使用した方はセグメント数が20程度だと、ガイドのカクカクした感じがレンダリングにあらわれてしまいます。

「最大セグメント数」の値が大きければよいかというとそうでもなく、「成長ジッター」に値が入っている場合はシェーディングがデコボコすることがります。以下の画像は「最大セグメント数」1000で「成長ジッター」25%(デフォルト)のレンダリング画像です。成長ジッターの影響でセグメントの長さが重なってるのか?バンプを設定したようになりました。髪のように綺麗なスペッキュラが欲しい場合には、このあたりの設定に注意が必要だと思います。

ファーの長さにもよりますが「最大セグメント数」は10~50くらいが実用的かもしれません。ちなみにカーブの作り方は、ポリラインでガイドを生成してから、エッジモードでポリラインを選択して「エッジからカーブ」を実行しました。

 

ガイドオプション

Fur Material でガイドを使用する場合はガイドオプションで「ガイド」の適用方法を指定します。ガイドをアニメーションしたときに、GLでの動きとレンダリングが違うのが気になったので検証してみました。

 

クランプ

クランプは「クランプ量」が設定されてるときファーがガイドに集まるようになります。

クランプはGLとレンダリング結果が変わります。画像の左がポリライン、右がカーブです。ガイドのセグメント数は3ポイントです。ポリラインはカーブに比べてファーの長さが短くなるようです。先端の集まり方も極端ですね。

 

方向

GLとレンダリング結果が一致してます。

 

方向 + 長さ

GLとレンダリング結果が一致してます。

 

シェイプ

GLとレンダリング結果が変わります。赤のガイドは意図した通りにアニメーションしていますが、緑のファーがカクカクしてます。マニュアルによると「シェイプ」は近くの3本のガイドを補間する処理で、ロングヘアーには向いていないとのことです。GLではガイドの補間が処理されないため、ファーの位置が飛んで見えるのかもしれません。

 

範囲

GLとレンダリング結果が変わります。下の画像ではファーが表示されてませんが、「範囲」はポリゴン数が少ないとファーが表示されないようです。ポリゴンを細分化すると表示されるようになります。
またGLとレンダリングでファーの長さが違います。マニュアルにはヘアーの長さはガイドの長さで決まる。ロングヘアーに向いてると書いてます。ガイドが密集してる場所はガイドの長さに近づき、ガイドの外側はファーが短くなる処理されるようです。その範囲の処理がGLに反映されないので、GLとレンダリングが違って見えます。また左のポリラインを使用したレンダリングは、ファーの長さがガイドより短いようです。ポリラインに「範囲」を使用すると、先端が考慮されないのかもしれません。

 

ファーのGL表示は極端な動きに見えることがわかりました。しかしレンダリングでは極端な動きが発生しないことが確認できました。プレビューなのでレンダリングと異なるのは理解していましたが、思ったより違う印象ですね。

ちなみに、ガイドのアニメーションはLinear FalloffのテクスチャロケータにRippleを設定しています。

 

 

次回はファーマテリアルを使用した時のレンダリング設定について書いてみたいと思います。

CG 日記

Windows エクスプローラで任意の文字列を含むファイルの検索方法

Windows エクスプローラの右上にはファイルを検索するフィールドがあります。ファイル名に含まれているはずの文字列で検索しても、検索に引っかからないファイルがあります。そんなファイルを検索する方法について書いてみます。

たとえばフォルダには「Egg」という文字列を含むファイルが5個あります。

 

「Egg」で検索すると3ファイルしかヒットしません。「Egg」の直前の文字がハイフンやアンダーバーの場合は検索されますが、「BaconEgg」「ToastEggBacon」のようなファイルは検索に引っかかりません。

 

「*Egg」のように検索文字列の先頭にアスタリスクを追加すると、「Egg」を含むファイルが検索されるようになります。

 

 

命名規則に沿ってファイルを大量に作る必要があったときに、特定の文字列を含むファイルが検索に出てこなくて、アレ?と思ったのでメモしておきます。

CG News

SUBSTANCE for MODO アップデート

SUBSTANCEのMODO用プラグインがアップデートされました。ワークフローと生産性に焦点を当てて、Modo内のSubstanceのパワーをさらに強化、より簡単に作業できるらしい。
https://www.allegorithmic.com/blog/substance-modo-improved-workflow-and-productivity

 

32ビット浮動小数点サポート

Substanceマテリアルは32ビット浮動小数点をサポートし、高品質のディスプレイスをレンダリングできます。

 

glTF / Principledシェーダのサポート

マテリアルのPrincipled Shading Modelをデフォルトにしました。Principledモードを使用するとシェーダツリーで変換することなく、メタリック/ラフネス出力で直接作業できます。ModoのglTFマテリアルのサポートも追加しました。

 

プリセットと相対パス

プリセットの読み込みと保存のための新しいUIと、Substanceファイルの埋め込みプリセットを読み込む機能を作成しました。Substanceファイルを相対パスで保存することで、Substanceマテリアルを使用したModoプロジェクトのオープンと共有が簡単になりました。

 

ワークフローの改善

プラグインがLPK形式をサポートするようになりました。Substanceプラグインをインストールするには、LPKをModoにドラッグアンドドロップするだけです。また、グローバルな環境設定にアクセスするための新しいSubstance Kitメニューを追加しました。

Substance Engineを使用すると、GPUエンジンとCPUエンジンの両方でバンプが発生します。CPUエンジンは4Kをサポートしており、GPUエンジンで最大8Kまで出力できます。

 

Linuxサポート

Substance in ModoプラグインはLinuxをサポートしました。

 

参考資料

Incredibles 2のエンジニアリングに忠実な髪

Pixar が Incredibles 2 向けに開発したヘアワークフローを紹介するビデオをアップロードしています。 SIGGRAPH 2018でおこなう講演用らしい。プレビューでの再現性が高そうですね。

Tips

modoのセットアップ/静止値の使い方

リギングでの「セットアップ/静止値」の使い方について書いてみます。
modoのセットアップモードには、セットアップモード専用の値として「セットアップ/静止値」があります。スケルトンに位置コンストレインなどを提供してリグを構築する場合は、セットアップモードでチャンネルを右クリックして「セットアップ/静止値に適用」することで、セットアップモード内に値を設定することができます。

■ サンプルファイル

 

セットアップモードの記事で書いた通り、バインドしたスケルトンのトランスフォームには自動的に「セットアップ/静止値」が設定されます。

もし手動でリグを構築しているときに、シーンの編集がセットアップモードに影響をあたえてしまう場合は、「セットアップ/静止値」を明示的に適用してあげるといいと思います。

 

キャラクターリグ用のプラグイン、CharacterBoxではセットアップモードONとOFFでトランスフォームの値が変わります。このためトランスフォームチャンネルに直接チャンネルをリンクするとセットアップモード内の値を上書きしてします。

こういうリグには条件式の「A は B と等しい」を使用するとよいです。「値 A」のチャンネルに「セットアップ/静止値」として1を設定し、セットアップモード OFFのとき 0 に設定します。
以下の画像は足の角度でスカートを自動的にアニメーションさせるためのリグをテストしたものです。

■ サンプルファイル

尾リグはプライマリ トランスフォームの値を使用して遅延したアニメーションを実行します。プライマリ トランスフォームのチャンネルを直接書き換えるとセットアップモードの値に影響をあたえてしまうので、条件式を使用してセットアップモードを判断してます。
条件式の「A は B と等しい」を使用することで、セットアップモード ONのときは「出力 True 値」としてスケルトンの「セットアップ/静止値」が出力され、セットアップモード OFFのときは「出力 False 値」として Relationship の値を出力するようにしてます。

 

再利用可能なリグを作る場合はシーンでの編集がセットアップモードの位置に影響をあたえないように、トランスフォームに「セットアップ/静止値」を設定しておくといいような気がします。

CG 日記

VRoidStudio 使ってみた

VRアバター作成ソフト、VRoidStudioを使ってみました。
https://vroid.pixiv.net/

髪が一筆入魂な男らしい作りです。このソフトはUnityで作られてるというのが面白いです。まだベータ段階ということで一般的な3D/2Dソフトに比べると全体的に粗削りな状態ですが、今後改善されれば3D未経験者が手軽に3Dにふれるいい機会になるんじゃないでしょうか。

 

モデルとテクスチャはmodoに読み込むこともできました。VRoidがエクスポートするVRM形式はglTF v2.0互換フォーマットのようです。拡張子を.vrm から .glb に書き換えることで、.glb対応のソフトに読み込むことができます。
modo 11.2V3以降はglTF v2.0形式に対応してたと思ってましたが、出力に対応してるけど読み込みできないという中途半端な対応状態だったので、Windows10 にプリインストールされている 3DBuilder を使ってobj形式でエクスポートした物をmodoで読み込みました。

 

modoでの質感ですが、テクスチャは「ディフューズ色」として読み込まれますが、トゥーンぽくしたかったので「ルミナンス色」に変更して「ルミナンス量」を1.0にしています。
髪や眉毛のテクスチャは白黒マップとして出力されるので、シェーダーツリーでテクスチャを「乗算」にして色を乗せています。また読み込んだ直後だと髪や眉毛の板ポリ表示されてるので、テクスチャを複製して「反転」、アルファチャンネルを「アルファのみ使用」、レイヤーエフェクトを「ディゾルブ」にして透明部分を抜いてます。

3D初心者にとって作るのが難しい髪やキャラクターを手軽に作成できるので、3Dのとっかかりとして便利かも知れませんね。

Tips

modoで重心制御リグ

modoで重心を制御するリグの作り方について書いてみたいと思います。両足の位置から、自動的に腰の位置を移動してくれるリグです。

■ サンプルファイル

 

スケマティックはこんな感じで、処理自体は単純です。

両脚のIKゴールの「ワールド位置」を Matrix Blend にリンクします。Matrix Blend はその名の通りマトリクスをブレンドするノードです。「ブレンド」を50%にするとIKゴールの中間の位置を出力することができます。

Matrix Blend の「マトリクス出力」を Matrix Vector にリンクして、マトリクスを「移動」の XYZ軸に分解します。分解した「出力 X」と「出力 Z」はそのまま腰のスケルトンの「位置X」「位置Z」にリンクします。これでIKゴールを移動したときに、腰の位置は2つのIKゴールの中間に位置するようになります。

腰のプライマリのトランスフォーム「位置X」「位置 Z」に直接リンクすると、移動ツールで自由に腰の位置を調整できなくなりアニメーションの作成で不便です。そこで腰のスケルトンにトランスフォームアイテムを追加して、追加したトランスフォームを制御用に使用します。 画像だと「CenterControlTransform」が追加したトランスフォームアイテムです。

腰のY軸を制御するために Measure Distance を使用します。 Measure Distance はその名の通り距離測定ノードで、IKゴール間の距離を出力できます。IKゴール間の距離が離れた場合に腰の位置を下げたいので Measure Distance ノードを使用しました。
Measure Distance の「距離出力」と Matrix Vector の 「出力 Y」を Relationship を使用して値を調整します。2つの Relationship を足した値を腰の「位置 Y」にリンクします。

2点間であれば Matrix Blend は便利ですね。値を足したり割ったりしなくてよいのでスケマティックが単純です。

 

このリグで雑に歩行サイクルをつけてみました。IKゴールに1サイクルのキーを設定して、カーブの繰り返しで前進しています。画像のように腰の位置をつねに中間にすると機械的で不自然な動きになります。Matrix Blend のブレンド チャンネルを使用して腰の位置を細かに制御を加えてみると面白いかもしれません。あとは骨盤の回転やタイミングのズレを再現とかでしょうか。

最終的には手動で調節するとして、アニメーションの補助として組み込んでみると面白いかも知れません。

 

この重心制御は Project:Messiah のサンプルファイルに入っていたT-Rexが元ネタです。リギングという言葉が一般化する少し前の時代、自動制御されたキャラクターセットアップに衝撃を受けました。現在ではFullBodyIKのように自動制御で動くとポーズ設定しづらいのであまり好まれないのかも知れませんが、リグの研究としては面白いジャンルだと思います。

T-Rexでは腰の位置の制御の他に、ゴールの高さで足が自動で回転するエクスプレッションが書かれてました。懐かしい。