2018年2月

Tips

modoでアイテムのスナップ移動

Channel RelationShipで紹介したグリッドにスナップしたように移動する方法で思い出しましたが、演算の「切り上げ」「切り下げ」ノードを使って正数を出力しても同じ表現ができるので、その方法について書いてみます。

「切り上げ」「切り下げ」そのままだと、スナップする間隔が指定できません。
任意の大きさでスナップする計算方法は以下の通りです。

  1. 「位置」÷「スナップする間隔」の値を「切り上げ」ます。これで何マス移動したかを求めます。
  2. 「切り上げ」の出力値を「スナップ間隔」でかけてやります。これでアイテムの位置を求めます。
  3. グループロケータの「SnapSize」と「XYZ」はユーザーチャンネルです。
    「SnapSize」は浮動小数点数タイプのチャンネルで、スナップする間隔を入力します。例えば 1 を入力すると 1m 間隔でスナップします。

ロケータの位置をアセンブリを経由してトーラスの位置に出力すると、トーラスがスナップしながら移動するようなアニメーションになります。

このスナップ計算は以前ゲーム作ろうと思ってマップチップ移動調べたときに、チュートリアル見て覚えました。こういう計算は自分では全く思いつかないので、ゲーム系の解説しているサイトはすごくためになります。

modoのパーティクルはアイテムと同様にモディファイヤで制御することができます。パーティクルに今回作ったスナップ アセンブリを使用すると、パーティクルの位置をスナップさせることができます。

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

トーラスからSurface Emitterを使用して、寿命が1フレームのパーティクルを発生します。
Particle Operatorを使用してパーティクルの「位置」を、Collector / Emitterを使用して別のParticle Simulationに継承します。このときスナップアセンブリを使用して、パーティクルの位置が一定間隔にスナップする設定しました。
右下のParticle Operatorは「寿命」と「サイズ」をChannel RelationShipを使用して、発生後30フレーム経過したら小さくなって消えるようしています。

パーティクルのスナップの処理はレゴ風エフェクトに使えないか試したのですが、パーティクルの発生数が多いと同じ座標に複数のパーティクルを重なった状態になって使えませんでした。パーティクル制御の参考になるかと思ったので失敗例として公開しておきます。

アイテムとパーティクルの両方で同じアセンブリが使えるのは、機能ごとに似たような別の仕組みを覚え直す必要がなくてとても便利ですね。

Tips

modoのプロシージャルモデリングで雪の表現

modoのプロシージャルモデリングで雪が積もるやつまねてみた。

  1. 複数のプリミティブをMerge Meshで1つにまとめる。(雪用のメッシュ)
  2. メッシュをPush Influenceで法線方向に縮める
  3. Transform Deformerで位置をオフセットする。
  4. Transform InfluenceのFalloffにNoiseMapを設定して、でこぼこ感を追加する。
  5. 最後にVDBVoxelに雪用のメッシュを設定して、近いメッシュが繋がるようにする。

接地面がふっくら積もった感じにするのが難しかったです。GL上では確認できませんがディスプレイスメントマップで雪を表現することもできます。

 

参考

 

Tips

modoでトラックパッド コントローラーを作る方法

今回はスライダーの作り方の続きで、トラックパッドコントローラーの作り方について書いてみたいと思います。

スライダーはY軸のみ使用しましたが、トラックパッドコントローラーはXYの2軸を使用します。作り方は基本的に同じです。違いがあるとすれば、平面の位置にどのように値をマッピングするか?という部分を少し考える必要があります。

顔などのモーフマップを制御することを想定して、値のマッピングのしかたをいくつか紹介してみたいと思います。スライダーのときと同じで、トラックパッドの平面のサイズは1m (-500mm~500mm) の範囲を制御領域としています。

Clampノードやチャンネルのロックなどの説明は省くので、Clampは何に使ってるの?という方は前回のスライダーの作り方を参照してみてください。

 

2モーフを制御する方法

上下の位置で2つのモーフマップを制御する方法です。単純に上下2つのモーフならスライダーでもできますが、左右の位置をMorph InfluenceのFalloffの制御に使用してみました。

これは目のまばたきのような左右対称のモーフで使用することを想定したマッピングです。
一般的に目のモーフを作成する場合は「両目閉じ」のモーフを1つ作り、そこから「左目閉じ」「右目閉じ」と複数のモーフに派生させると思います。modoのデフォーマはFalloffを使用して変形する範囲を制御できるので、両目閉じのモーフ1つあれば「左目閉じ」「右目閉じ」のモーフを作らなくていいかもしれません。

モーフマップは以下のような2種類です。

マッピングのイメージは以下の通りです。
グラデーションはモーフマップの数と、モーフインフルエンスの「強さ」の段階をイメージしています。

アセンブリの中身は以下の通りです。グラフはChannel Relationshipの設定です。

コントローラーの「位置Y」をChannel Relationshipを使用して Morph Influence の「強さ」に出力しています。
「位置X」を使用してFalloffの方向を指定しています。画像では条件式ノードの「A は B より大きい」を使い、「位置X」が0より大きい場合は「出力True値」として「90」、0より小さい場合は「出力False値」として「-90」を出力します。この出力をFalloffの「回転Y」にリンクすることでモーフの領域を左右どちらかに制限しています。画像ではわかりやすくFalloffのサイズを大きめに設定していますが、小さく設定すればキッチリ左右でモーフをわけることができます。
「アセンブリ出力」するチャンネルには、ユーザーチャンネルを経由したものを使用しています。

 

4モーフを制御する 1

左右の位置、上下の位置で4つのモーフマップを制御する方法です。
比較的単純なマッピング方法で、隣り合う2つのモーフマップを制御できます。目のウインクと同時に、口元や頬のモーフを制御するような使い方でしょうか。

モーフマップは以下のような4種類です。

マッピングのイメージは以下の通りです。

アセンブリの中身は以下の通りです。

XYの2軸ですが特別な設定はなく、ほぼスライダーと同じ感じで作れると思います。
Channel Relationshipの出力先が少しこんがらがるかも知れませんが、1つずつ確認すれば難しくないと思います。これもアセンブリ出力にユーザーチャンネルを経由させています。

 

4モーフを制御する 2

左右上下の4つの象限それぞれ独立してモーフマップを制御する方法です。象限ごとに出力値が独立しているので、モーフ以外にも色々使える気がします。

マッピングのイメージは以下の通りです。

アセンブリの中身は以下の通りです。

各象限ごとにX軸とY軸用のChannel Relationshipを用意し、出力値をかけた値をモーフインフルエンスに出力しています。位置はChannel Relationshipを使用することで0~1の範囲にリマッピングされているので、X軸とY軸の出力値ををかけることでコントローラーがいる象限の値のみが出力されます。
個人的にこの制御方法を一番作りたかったのですが、どう計算すればいいのかわからなくてしばらく悩んでました。完成してみると凄く単純ですね。

この記事ではChannel RelationShipを使用していますが、Expressionノードや演算ノードの組み合わせでも同じ事ができると思います。好みに合った方法を選択するといいと思います。

また、今回紹介した制御方法は1軸ごとに1モーフのような単純な物です。コントローラーが便利になるのは複数のモーフマップをミックスして制御するときだと思います。たとえば目のまばたきの中間状態を制御したり、眉毛の移動に合わせて額のシワを制御したりという感じです。

 

おまけ

複数のモーフマップをどのようにすれば自由自在に制御できるのか?というマニアックな電子書籍「The Art of Moving Points」を紹介しておきます。
国内の制作事例を見ると最終的な表情のモーフがずらり並んでる事が多いですが、決め打ちではなく汎用的に使用できるモーフとは?みたいな内容です。

The Art of Moving Points

フェイシャルリグで参考になりそうな記事へのリンクも貼っておきます。1つのコントローラーで複数のパラメータを同時に制御することで、とてもリアルなフェイシャルを表現している気がします。
資料をブログで管理してると検索が楽でいいですねー

CG 日記

Filmic Tonemapping

Foundryフォーラムで話題が再燃してたので、Filmic トーンマッピングについてメモしときます。
https://community.foundry.com/discuss/topic/129634/opencolorio-we-need-filmic-modo
https://community.foundry.com/discuss/topic/138289/the-secret-ingredient-to-photorealism-video-link-modo-rendering-workflow

Filmic トーンマッピングはコダック反応曲線の近似値として作成されたもので、ゲームを映画風の見た目にするよう開発されたトーンマッピングでした。Filmic トーンマッピングはGrand Theft Auto VやUnchartedシリーズで使用されてるようです。
http://duikerresearch.com/2015/09/filmic-tonemapping-ea-2006/
http://filmicworlds.com/blog/filmic-tonemapping-with-piecewise-power-curves/

プリレンダリングでは2017年1月頃、BlenderにFilmic トーンマッピングが追加されて話題になりました。

 

以前のmodoはトーンマッピングで明るい部分が飽和しやすいという問題がありました。901からはVrayで使用されているトーンマッピングタイプ Reinhart Luminance と Reinhart RGBを選択できるようになりました。デフォルトでは「トーンマッピング量」が0%なので、トーンマッピングしたい場合には自分で値を設定する必要があります。

トーンマッピングのアルゴリズムは色々あるみたいですが、それぞれメリット/デメリットがあるようです。
プリレンダリング用途では3Dソフトのトーンマッピング機能を使用するよりも、コンポジットソフトを使用して調節した方が自由度が高いです。.exrのような浮動小数点形式で出力する場合は、3Dソフトのカラーマネジメントは使用せずリニアなカラースペースとして出力されるのはそんな理由からなのかもしれません。

The Ultimate Guide to Tonemapping

https://vimeo.com/ondemand/tonemap

参考資料

漫画家浅野いにお氏のキャラクターに命を吹き込む

キャラクターアニメーションの制作工程をノーカットで見れる貴重なウェビナーです。Mayaの特別な機能は使用しておらず、移動と回転のみでキャラクターをアニメーションする光景を見ることが出来ます。ソフトを問わず普遍的な作業手順なので、これからアニメーションを作りたい方にはよい参考になると思います。

ちなみにmodoを使用する場合、フェイシャルリグの頬を補正する機能はトランスフォームデフォーマとフォールオフ、ウェーブデフォーマの計算順はデフォーマスタックで同じような表現ができます。

 


Mayaでアニメーションにチャレンジしてみたい皆様向けに、プロフェッショナルのアニメーター、森江康太氏が全くのゼロからアニメーションを作成する様子をウェビナーでお届けします。
https://area.autodesk.jp/movie/maya-animation/

Tips

modoで数値チェッカーの作り方

リグを作ったりノードの機能を調べてるときに、チャンネルが出力してる値を確認したいことがあると思います。今回はそんなときに便利な数値チェッカーの作り方について書いてみます。

ノードの出力チャンネルを「チャンネルセット」に追加してビューポートに表示する方法もありますが、アセンブリプリセットとして再利用できるようにロケータの「注記」表示を使います。作り方は簡単です。

作成手順です。

  1. ロケータを作成して、表示タブから「注記を追加」します。
    注記は「ライン1~8」に入力した文字列をビューポートに表示するメモ機能です。「表示」をオンにして、アイテムを選択していない状態でも注記が表示されるようにします。「不透明度」を100%にして見やすくしました。
  2. チャンネルビューポートに「ライン」チャンネルをスケマティックに追加します。
  3. Encode String ノードを追加してラインチャンネルにリンクします。
    Encode String は「値」を「文字列」 に変換するノードです。ラインチャンネルを見ると「abc」アイコンがついてますが、これはチャンネルタイプが「文字列」であることをあらわしています。「値」と「文字列」ではチャンネルタイプが異なるので、「位置X」を直接「ライン1」にリンクすることができません。そんなときはチャンネルタイプを合わせる必要があります。
  4. Encode String の「値」に「位置」チャンネルをリンクすると、文字列として値が表示されます。
    値の桁数は Encode String の「小数桁数」で変更できます。見た目はロケータの「シェイプ」や「ワイヤフレームの色」でカスタマイズすると見やすくなります。

こんな感じでアセンブリプリセット保存すれば、いつでもシーンに読み込んで使用できます。

ロケータを削除したときシーンに Encode String ノードが残らないよう、Encode String ノードは「item.parent」コマンドでロケータの子にしておくと便利です。

出力値が確認できると複雑なリグを作る場合でもデバッグしやすくて便利なのでおすすめです。

CG News

Tricks in MODO

Foundryのフォーラムで、modoのプロシージャルモデリングを使用した面白いTipsを公開してる方を見つけました。サンプルシーンもダウンロード出来ます。
リプリケータ使用した葉っぱの複製や、メッシュの分割を部分的に変えてソフトボディ適用してるのとか色々面白いですね。
https://community.foundry.com/discuss/topic/137925/alexandr-shmakov-tricks-in-modo-and-more

Tips

modoでスライダーコントローラーを作る方法

今回はキャラクターリグでよく見かけるスライダーコントローラーの作り方を書いてみます。
作り方は簡単で前回の記事で紹介した Channel Relationship と Clamp ノードを使用します。アセンブリプリセットとして保存したとき便利なように、いくつか追加のステップがあります。

作成手順です。

  1. スライダーバーと、スライダーノブを準備します。スライダーバーとスライダーノブは移動しやすいように親子関係を設定しています。
    スライダーはアイテム位置を取得できれば基本的にどんなアイテムを使用しても問題ありません。今回はロケータのカスタム シェイプを使用してスライダーバーとスライダーノブにしました。
    スライダーバーには平面の「サイズY」は1mです。サイズは好きに設定して問題ありません。
  2. スライダーノブの「位置X」「位置Z」チャンネルをロックします。
    プロパティで「位置X」「位置Z」チャンネルを選択して、右クリックメニューから「ロック/ロック解除」を設定します。これでノブが左右に移動することはありません。
  3. スライダーノブの「位置Y」をスケマティックに追加します。
  4. Clamp ノードを追加し、「入力」と「出力」を「位置Y」にリンクします。
    Clamp のプロパティで「最小」を-0.5、「最大」を0.5に設定します。位置チャンネルでは 0.5=500mm としてあつかわれます。スライダーバーの高さは1mに設定しているので、ノブの移動範囲を-500mm~500mmに制限したことになります。
  5. スライダーバーアイテムに「ユーザーチャンネル」を追加します。
    好きな名前をチャンネルを追加します。チャンネルタイプは「浮動小数点」を使用しましたが、数値をあつかえればどのタイプでも大丈夫だと思います。「ユーザーチャンネル」を追加するアイテムも好みで選んで問題ないです。
  6. Channel Relationship ノードを追加し、「入力」を「位置Y」とリンクします。「出力」を作成した「ユーザーチャンネル」にリンクします。
    なぜ Channel Relationshipを「ユーザーチャンネル」にリンクしたかというと、スライダーを「アセンブリプリセット」として再利用するためです。
    ノードのチャンネルを直接「アセンブリ出力」にリンクした場合、アセンブリのロードで出力チャンネルが消えてしまうことがあります。消える理由は謎ですが、「ユーザーチャンネル」を経由させることでアセンブリの保存と読み込みが正常にできるようになります。
  7. Channel Relationship と Clampノードをアイテムにペアレントします。
    アイテムツリーで Channel Relationship 、 Clamp 、スライダーバーアイテムの順番選択して、コマンド行に「item.parent」を入力してEnter。チャンネル モディファイヤノードの親子関係を設定します。こうすることでアセンブリプリセットとして他のシーンにアイテムを読み込んだ場合に便利になります。modoのチャンネル モディファイヤはデフォルトでシーンアイテム(カチンコ)以下にノードを生成します。チャンネルモディファイヤをアイテムにペアレントしておくことで、スライダーバーアイテムを削除したとき同時にチャンネルモディファイヤも削除されるためシーンに未使用ノードを残さずに済みます。

 

ノードが組み上がったら「スケマティックアセンブリ」を新規に追加して、スケマティックのマウス右クリックメニューから「ノードの移動先」を使ってアセンブリ内にノードを移動します。

上の画像にはグループロケータが含まれています。個人的な好みですが、アイテムツリーではスケルトンもロケータも同じアイコンで見づらいので、アセンブリを保存するときはアイテムをグループロケータにまとめています。グループロケータはアセンブリ内に入れておくことで、親子関係を維持したままアセンブリを読み込むことができます。

アセンブリに「サムネイルを置換」でサムネイルを追加して、「アセンブリプリセットの保存」すると、いつでもシーンにスライダーを読み込んで再利用することができます。

 

最後に指をスライダーで制御するデモです。
スライダーバーの高さを1mで作りましたが、スケールを使ってシーンで見やすいようにサイズを調整できます。なかなか便利なんじゃないかと思います。

次回は引き続きボックス型のスライダー?トラックパッド コントローラの作り方について書いてみたいと思います。

Tips

modoのチャンネル リレーションシップ

リギングで凄く便利な最強ノード、Channel Relationshipについて書いてみます。Channel Relationshipは入力されたチャンネルの値にもとづいて、出力の値を変えることができる便利なノードです。

例えばロケータの位置を使用して別のアイテムを回転することができます。

上の画像ではロケータがY軸に1mに移動しとき円柱は180°回転しています。
それの何が便利かというと、Relationshipはチャンネルタイプによって単位の異なる値をリマップすることができるからです。
Relationshipを使用せずに「位置Y」を「回転Z」に直接リンクした場合は、1m=1 という値が回転に出力されるため 1° しか回転しません。Relationshipを使用することで、1m=180°という異なる単位の値を簡単に変換して制御することができるようになります。

さらにRelationshipが便利なのは、入力と出力のマッピングにグラフエディタを使用できることです。
値をマッピングするためのカーブはベジェハンドルで編集できるので、位置が移動するにつれて徐々に回転数が上がっていくという設定が手軽にできます。
グラフエディタでは「入力」が横軸、「出力」が縦軸で表示されます。

 

Channel Relationshipの使用例として、角度によってスケルトンが移動するリグを作ってみました。簡単に作れて便利です。

作成手順です。

  1. バインド済みのモデルとスケルトンを準備します。
  2. スケルトンを選択して、「回転Y」「位置Z」チャンネルをスケマティックにドラッグアンドドロップします。
  3. Channel Relationship を追加し、「回転Y」を「入力」にリンクします。
  4. スケルトンの「位置Z」の値をコピーします。
  5. Channel Relationshipの「出力」を「位置Z」にリンクします。
  6. グラフエディタの「値」チャンネルでキーを選択し、キーにコピーした「位置Z」の値を設定します。
  7. -90°にキーを作成し値を調節します。
    これはスケルトンが-90°に回転したとき、スケルトンの位置Zをどのくらい移動するかを指定しています。

 

この例ではFKを使用してますが、IKを使用したい場合には「ワールド回転からローカル角度を計算する方法」または「角度測定ノードで360°測定する方法」が参考になると思います。
もしスケルトンはスライドさせず回転の基点になる位置を変えたい場合は、ピボットを使うとよいです。

Channel Relationshipを使うと手の回転にあわせて腕をひねったり、アイテムの位置でライトの色を変えたり、アイテムの回転でパーティクルの放出量を制御したり、アイデアしだいでいろんなリグを作ることができて楽しくなりますね。

 

おまけ

modoは1ノードまでのループなら「依存ループ」にならず機能するという便利な特長があります。「依存ループ」というのはチャンネルの値を他のノードで計算して、その計算結果が同じチャンネルに戻ってループした状態を言います。値がループしてるので通常は計算不能でエラーになる処理なのですが、modoでは1ノードのループ限定で動作するようです。

下の画像のように自分の「位置Y」から「位置Y」にループしてリンクすると、Y軸の移動範囲を制限することができます。同じ事は Clamp ノードでもできるので好きな方を使ってみてください。

 

カーブを1m間隔のステップにすると、1m感覚でナップ移動するような動作になります。昔の2Dゲームにあったマップチップ単位で移動するような動きですね。モーショングラフィックなんかにも使える気がします。

次はRelationshipを使って「ホーミングミサイル」や「Sculpt Layer」の記事で使ってる、スライダーのようなコントローラの作り方について書いてみます。こういうコントローラがあると一気にリグ作ってる感じがしますね。

参考資料

「ヴァイオレット・エヴァーガーデン」制作風景

現在放送中のアニメ「ヴァイオレット・エヴァーガーデン」の制作風景が作業工程ごとに公開されています。
海外フォーラム見てると日本のアニメ制作に関する情報の探し方がわからない。みたいな話しを見かけるので、国内の情報もまとめとこうかなと思います。

 

総作画監督

中割り

ペイント

背景

3DCG

撮影