2018年

Tips

modoで自転車のチェーンを作るデフォーマ版

前回と同様に自転車のチェーンの作り方について書いてみます。今回はスプラインデフォーマを使用した方法です。

デフォーマを使用したチェーン作成 1

まずはメッシュ全体を変形する古典的なチェーンの作り方です。他の3Dソフトでも定番的に使用される方法です。

作成手順です。

  1. チェーンとカーブを用意する。
    カーブはスプラインデフォーマのターゲットカーブとして使用するので、ポイントが少ないと変形が破綻するので注意が必要です。
  2. チェーンをコンポーネントモードで「ラディアル配列」で円環状に複製します。
    プロシージャルモデリングの「Radial Array」を使ってもいいけど、次の工程のセンターをメッシュ中心に移動するのが面倒なので直接ポリゴンを複製しました。
  3. チェーンアイテムのセンターをメッシュの中心に移動します。
  4. スプラインデフォーマのソースカーブを作ります。
    真円のカーブが必要なので、プロシージャルモデリングの「Cycle」を追加してチェーンに沿うようにあわせます。
    スプラインデフォーマはプロシージャルモデリングのカーブを参照できないっぽいので、アイテムツリーから「メッシュメッシュオペレーションをフリーズ」します。
  5. チェーンアイテムに「スプラインデフォーマ」を適用します。
    スプラインエフェクタのプロパティで「ソースカーブ」と「ターゲットカーブ」を設定します。
    ソースカーブとターゲットカーブの長さの違いによってチェーンが崩れてるので、「伸縮」でメッシュの変形を調節します。
  6. チェーンアイテムを回転すると、チェーンがスプラインに沿って回転します。

これでデフォーマを使用したチェーンを作ることができました。デフォーマを設定したメッシュのトランスフォームを使用してアニメーションするのは「modoでアニメ風の眼球制御」と同じですね。

はじめはチェーンを直線状に並べようかと思いましたが、modoのスプラインデフォーマは残念なことに閉じたスプラインとして変形することができません。綺麗に回転させるには真円のソースカーブを使用するのが最適なようです。
このアイデアはWilliam Vaughanさんのビデオによる物です↓。

 

デフォーマを使用したチェーン作成 2

デフォーマとリプリケータを使用したチェーンの作り方も紹介してみます。全メッシュをデフォーマで変形する方法に比べて動作が軽く、手続き的にチェーン数を変更することができます。

作成手順です。

  1. チェーンとカーブを用意する。
    今回は真円のカーブをあらかじめ作りました。
  2. シリンダーを作成する。
    プロシージャルモデリングの「Cylinder」を追加して上下のキャップを消して、シリンダーの直径をカーブに合わせます。
  3. リプリケータを作成します。
    「原型となるアイテム」にチェーン、「ポイントソース」にシリンダー、「ソースモード」を「ポリゴンを使用」に設定します。これでポリゴンの中心にチェーンが複製されます。
    プロシージャルモデリングの「Cylinder」を使うことで、後から「サイド」の分割数を変更できるのが便利です。
  4. シリンダーメッシュに「スプラインデフォーマ」を適用します。
    スプラインエフェクタのプロパティで「ソースカーブ」と「ターゲットカーブ」を設定し、「伸縮」でメッシュの変形を調節します。
  5. シリンダーアイテムを回転するとチェーンがスプラインに沿って回転します。

 

カーブの長さに応じてチェーンの数を増やす

ついでにターゲットカーブにスプラインデフォーマを適用して、カーブの長さに応じて自動的にチェーンの数を増やすリグの作り方を紹介します。カーブの長さに応じて、シリンダーの分割数を変えるだけなので手軽に作れます。

作成手順

  1. ターゲットカーブにスプラインデフォーマを適用する。
    ロケータを移動してカーブを変形するとチェーンにすき間ができてしまいます。パスの長さが変わっているので当然ですね。
    すき間を自動的に埋めるために 「パスの長さ ÷ チェーンの長さ = サイドの数」という計算をスケマティックで構築していきます。
  2. ターゲットカーブの「メッシュ」チャンネルをスケマティックに追加します。
    メッシュオペレータ Cylinder の「サイド」をスケマティックに追加します。
  3. 「パスコンストレイント」を追加し、カーブの「メッシュ」を「長さ」チャンネルにリンクします。
    パスコンストレイントはパスの長さを出力するために使用することができます。
  4. 「乗算」「除算」ノードを追加します。
  5. パスコンストレイントの「長さ」を乗算ノードで100倍にします。
    「長さ」はメートルを出力するので100倍して値をセンチにします。単位を統一したほうが感覚的にわかりやすい気がするので100倍しましたが、無くても問題ないです。
  6. 「乗算」の出力をチェーンの長さで割ります。
    チェーンの長さを定規ツールで計って「除算」に入力します。今度はミリメートルで表示されたので、センチに直した値を入力しています。
  7. 「除算」の出力を「サイド」にリンクします。

これでパスの長さに応じて自動的にチェーンの数が変わるようになりました。微妙なすき間や、閉じたパス変形ができないため一部がフリップしてしまうところは微調整が必要です。
プロシージャルモデリングはこういった使い方ができるので便利ですね。

 

まとめ

パスコンストレイントを使用した方法は実際のチェーンのように一つ一つ別アイテムでした。自由度の高いリグを構築できますが、実用上不便なところもあります。
例えばパスの長さを変えるとアイテムにすき間ができたり重なったりします。後からチェーンの数を変更しようとすると、パスコンストレイントからやり直しになり面倒です。
効率化のためスクリプトを書けば気にならないかも知れませんが、私のようにスクリプトが書けない人はお手上げです。

今回のスプラインデフォーマを使用した方法はチェーンが変形してしまいますが、パスの長さが変わってもチェーンにすき間ができるようなことはありません。極端にターゲットパスを変形しなければ、ある程度フリップを抑えることができますしチェーンの数も比較的簡単に変更できます。欠点はmodoのデフォーム処理が重いことですね。他のソフトでは気にならない変形でもmodoではストレスに感じます。

スプラインデフォーマとリプリケータを使用した方法は、変形も軽くてチェーンの数も手続き的に増やせるので調整が楽かも知れません。

チェーンという同じような表現でもアプローチが複数あり、それぞれメリットとデメリットがあります。作りたい物によってどの方法が適しているかも変わるので、色々試して好みの法を選択するのがいいと思います。

参考資料

Dakar 18

砂と埃のVFX以外はUE4で作られたムービーらしいです。キャラの質感はUE4の方が自然な気がします。
http://www.realtimeuk.com/video/dakar-18/

Bigmoon Entertainmentの「Dakar 18」は、我々のスタジオにとって重要なマイルストーンとなっています。これは初めてUE4で作ったゲームのシネマティックです。
私たちは、伝説のダカールラリーのスリリングで息を呑むほど現実的な描写を分かち合うことを誇りに思っています。予告編は、Houdiniで作成された砂と埃のVFXを除いて、完全にUE4エンジンで作られました。

Bigmoon Entertainmentが開発したビデオゲームのアセットとUnreal4エンジンを使用して、この予告編を作成しました。
エンジンの柔軟なテクノロジーにより、私達のプリレンダーパイプラインのプロダクションプロセスに容易に適応させることができ、既存のモデリング、テクスチャリング、アニメーションの強みをゲーム内のライブアセットとともに活用することができました。

UE4ではより創造的で流動的な開発プロセスを提示します。各シーンを開発しながらアーティストにリアルタイムのフィードバックを与え、インスピレーションを受けた実験やダイナミックワークフローに大きなチャンスをもたらしました。

参考資料

MechaStorm – Heroes of the Storm

海外スタジオによるアニメ風のCGムービーらしいです。だいぶレタッチ入ってる気がしますが、手描き風なエフェクトやハイライトがいい感じですねー。

参考資料

Book of the Dead

Unityで作られ得たデモ映像。2018からレンダリングが強化されてるみたいですね。
リアルタイムにありがちなアンチのチラツキも気にならないし、重そうな森の表現がだいぶ自然に見えます。葉っぱのTranslucentもいい感じ。
https://unity3d.com/jp/book-of-the-dead

 

参考資料

TOTAL WAR: Three Kingdoms

ゲームのムービー。水墨画っぽいエフェクトがカッコイイ。群集シーンのレンダリングやクロスも綺麗ですねー

Tips

modoで自転車のチェーンを作る

前回のコンストレイントの補正オプションの実用的な使用方法として、自転車のチェーンや戦車の履帯に使えそうなリグの作り方について書いてみます。

modoは複数のアイテムにいちどにコンストレイントを適用できるので、補正オプションと組み合わせると効率的にリグを組むことができて便利です。

チェーンリグ作成手順の解説です。

  1. チェーン用のアイテムとカーブアイテムを用意します。 上の画像では説明を簡略化するためチェーンの赤と青の部分を1アイテムにしてますが、分けた方がよいです。
  2. 「カーブでインスタンス」を使用して、チェーンアイテムをカーブ上に複製します。デフォルトではアイテムの位置にかたよりがあるので、「長さ優先」をONにして均等にします。
  3. 複製したアイテムを全て選択した後に、ようnアイテムを選択しまにして移動がループするようす。modoのコンストレイントのルールとして、最後に選択したアイテムがターゲットになります。
  4. Ctrl キーを押しながらパスコンストレイントを適用します。
    このときコンストレイントの「補正オプション」をONにしておきます。
  5. シーンアイテム(カチンコ)の + ボタンをクリックして、シーン内のパスコンストレイント モディファイヤを全て選択します。
  6. プロパティで「パスパーセンテージ」を編集するとアイテムがパスに沿って移動します。チェーンがループするように「繰り返し」をONに設定します。このままでもアニメーションに使用できますが、毎回モディファイヤを全選択するのは面倒です。そこで全ての「パスパーセンテージ」を1つのチャンネルで操作するためのリグを組みます。
  7. 「パスパーセンテージ」をスケマティックビューにドラッグアンドドロップします。
  8. チェーンを全選択して、Ctrl+G を押して「グループ ロケータ」にまとめます。
  9. グループ ロケータに「ユーザーチャンネル」を追加します。
    「ユーザー名称」には適当にチャンネル名を設定します。ここでは「offset」にしました。チャンネルのタイプは「パーセンテージ」にします。ユーザーチャンネルはユーザーが自由に追加することができるチャンネルです。チャンネルを追加しただけでは意味のあるパラメータではありませんが、他のノードとリンクすることで複数のノードをまとめて制御することができるようになります。Mayaのカスタムアトリビュートと同じような機能ですね。ユーザーチャンネルはどのアイテムにでも自由に追加することができますが、ある程度アイテムと関連性があるほうがよいためグループ ロケータに追加しました。
  10. 「offset」をスケマティックビューにドラッグアンドドロップします。
  11. パスコンストレイント モディファイヤを全選択した後に、プロパティで「パスパーセンテージ」のラベルをクリックしてチャンネルを選択します。スケマティックの「パスパーセンテージ」チェンネルをShiftドラッグします。すると全てのチャンネルから線を引っ張ることができます。
  12. グループ ロケータの「offset」にリンクします。

これで「offset」を1つ編集するだけで、全てのチェーンの位置を制御することができるようになりました。ですがこれだけでは設定が不十分です。

このチェーンアイテムは上下が対称の形状をしているので気がつきにくいですが、カーブの上下でアイテムがフリップしています。一般的にパスコンストレイントのような機能はアイテムの方向を一定に保つことが難しいようです。フリップを回避するために「アップベクトル」を設定します。

アップベクトル設定手順の解説です。

  1. ロケータを追加し「ワールド位置」をスケマティックビューにドラッグアンドドロップします。このロケータがアップベクトル制御用のアイテムになります。
  2. パスコンストレイント モディファイヤを全選択した後にチャンネル ビューポート タブを右クリックして「ビューポート設定 → 結合表示」をONにし、「up」チャンネルをスケマティックビューにドラッグアンドドロップします。「結合表示」は同じタイプのノードが複数選択されたときに、チャンネルをまとめて表示するオプションです。選択中の全ノードの「up」チャンネルを選択するために「結合表示」を使用しています。
  3. 「up」チャンネルをShiftドラッグして、ロケータの「ワールド位置」にリンクします。
  4. フリップしているアイテムのパス コンストレイント モディファイヤを選択して、「ロール」を180°に設定します。
    上の画像ではフリップしているモディファイヤを特定するため、フリップの始点と終点のアイテムを選択してモディファイヤの番号を確認しています。アイテムツリーで F キーを押すこと、選択しているアイテムにリストをスクロールできるので便利です。

これでアニメーションしてもフリップの発生しないチェーンリグの完成です。標準機能だけで手軽にリグが作れるのが便利ですね。

ちなみに静止画用途ならプロシージャルモデリングの「Curve Clone」を使うのが手軽でお勧めです。少し重いですが、カーブの編集や複製する数をいつでも調節できて便利です。
本当は「Curve Clone」でアニメーション用のリグを作れればいいのですが、modo 11.2ではアップベクトルを設定できないのでフリップを回避する手段がないように思います。もっと軽くてフリップしにくい動作してくれたらもっと便利なんですけどね。そのあたりは今後のバージョンアップに期待したいですね。

他の手段としてパスジェネレータで生成した頂点にリプリケータを使う方法も考えましたが、パスに沿わせる部分が上手く行かなかったのであきらめました。

カーブにスプラインデフォーマを適用すると、こんな↓感じの履帯リグも作れるかもしれません。

この戦車のリグを作った Richard Hurrey 氏はPixarで活躍されてるキャラクターモデラー&リガーの方ですが、Foundryからトレーニングビデオをリリースしているmodoのヘビーユーザーでもあります。
この戦車のデータは公開されているので必見です。履帯を複雑な変形に対応するため、履板1つ1つに異なるアップベクトルが設定されてます。他にも細かな制御ができて凄いです。modoはどの程度のリグを構築できるか興味ある方にも参考になるのではないでしょうか。

今回は王道的な方法でチェーンを作ってみました。次はせっかくなのでスプラインデフォーマを使用したチェーンの作り方を書いてみたいと思います。

Tips

modoでアニメ風の眼球制御

Twitterでアニメ系キャラで使用する平たい眼球について話題になっていました。方向コンストレイントを使用して眼球を制御したいときは、トランスフォームデフォーマを使用する方法もあるのでご紹介します。
手順は簡単です。球にトランスフォームデフォーマを適用してスケールします。次ぎに球に方向コンストレイントを適用します。

3Dソフトは同じような表現でも複数のアプローチがあります。正解は状況によって変わるので、色々試して好みの方法方を使うのがいいと思います。

 

参考

ちなみに、この眼球の変形はトランスフォーム計算で発生するシアーを利用したものです。シアーについて正確な説明はできないので、詳細を知りたい方は他のサイトを検索してみてください(^^;
ざっくりと説明すると、親子関係にある親アイテムを不均等にスケールした場合、子のアイテムを回転すると斜めにゆがむことをシアーと言います(均等にスケールされている場合はシアーは発生しません)。上の例では回転トランスフォームの順番を変更することで、親子関係を設定せずにシアー変形させています。

シアーは3DCGのトランスフォーム計算で一般的に発生する現象なので、親子関係を設定してスケールと回転できるソフトであれば、どのソフトで同じような目の表現ができます。
この目のような場合は上手く機能しているケースですが、シアーはキャラクターリグのような場合は問題になることが多いので注意が必要です。シアーが問題になるケースとして手にオブジェクトを持たせた状態で、手をスケールした場合はシアーが発生しがちかもしれません。

この現象をはじめて経験したのがLWで、しばらくのあいだLWのバグか何かだと思ってました。

CG News

CLARISSE 3.6 リリース


CLARISSE 3.6 がリリースされました。アウトラインレンダリングが搭載されたようです。アーノルドもラインレンダリングを搭載予定のようですし、LWもセルシェーディング強化してます。もしかしてNPRブーム来てる?
https://www.isotropix.com/news/newsletter/clarisse-3.6-is-out

3.6の新機能
  • 新しいシャドーキャッチャー
  • 新しいアウトラインレンダリング
  • 新しいシェーディング変数
  • 新しいAlembicバンドル
  • 新しいウォーターマークフリーのPLE

法線や深度を使ったシェーダーベースのラインみたいですね。

参考資料

レイトレーシング vs パストレーシング

レイトレーシングとパストレーシングの違いについて書かれてる記事のメモ。

Ray tracing vs Path tracing, in plain English

https://answers.arnoldrenderer.com/questions/2550/is-arnold-considered-a-path-tracer-or-ray-tracer.html

 

Q

Arnoldは、パストレーサまたはレイトレーサと見なされますか?私はsolid angleから見ると、これはモンテカルロ・レイ・トレーサーだが、オンライン上ではパス・トレーサーあるいは単位指向性パス・トレーサーと呼ばれているようだ。レイトレーサとパストレーサには本当に違いがありますか?

A

パストレーサはモンテカルロレイトレーサ(すべてのレイトレーサがパストレーサではないが、すべてのパストレーサがレイトレーサである)である。Arnoldは純粋なパストレーサに非常に近くなるようにサンプル設定を使用して設定できますが、一般的には交差の後、指定されたレイ交差でパスを分割し、2つの分岐またはサブパスを持つことができる「スプリッティング」を許可します。

GI_diffuse_samplesやGI_specular_samplesなどのサンプル設定を1より大きい値に設定すると、Arnoldは最初のヒットでパスを分割します。その後、可能な限り分割を回避しますが一般的なモンテカルロレイトレーサとして機能しています。

モーションブラーと被写界深度のために、制作シーンではこのタイプのノイズを解決するためにより高いAA_samplesが必要になることがよくあり、ユーザは通常、他のすべてまたはほとんどすべてのサンプル設定をそれぞれ1に設定します。これにより、Arnoldは純粋なパストレースに非常に近いモードになります。

答えは結局アーノルドは両方だということです。