cebas エフェクトセミナーレポート

2012年3月13日に行われたcebas エフェクトセミナーのScanlineのJoe Scarr氏のセミナーに関するレポートになります。なお、今回のレポートではできるだけ詳しくするため、当日のセミナーでは言わなかったものの、通訳にあたり事前の打ち合わせしたことや前日にユーザー訪問時に聞いたこと、セミナー終了後聞いたことなども付け加えています。

また、写真ですが、自分が通訳を行なっていたためありません。ただ、CG World誌でセミナーレポートの記事を載せていただける予定で、そちらでは当日のスクリーンショットなどを載せていただけそうです。また、画像を入手できればTMSの方のサイトでも紹介したいと思います。

当日のセミナーで使っていたサンプルファイルの公開などはありませんが、彼が販売しているthinkingParticles 4 for production 1.0で、かなり説明されているようです。



VFXの仕事について

チャレンジとフレキシビリティが必要。監督やスーパーバイザーの最初のアイデアを元にサンプルを作っても、そこからアイデアがドンドン変わっていきます。そうして、アイデアを仕上げていきますが、そうした工程ではtPは非常に有利です。

私たちは、チームで一つのショットの作業をする場合、どんなアプローチが出来るか、まず話しあって方向性を決めるようにしています。

ただし、良いアプローチが必要。良いアプローチとは、複数のオプションがあり、オープンであること。tPでは極力小さなダイナミックグループにします。そして、他の人がそれを開き、システムが理解できるようにすることです。

1カットを自分だけで担当するような場合でも、修正は他の人が担当する場合があるので、理解できるシステムにしておく必要があります。

tPを使うメリットは、こうしたことに対応できるということです。非常にオープンなシステムなので、どんなエフェクトでも可能です。ScanlineではワンオフなtPのエフェクトを作らずに小さなルール(ダイナミックグループ)のblackboxを組み合わせてエフェクトを作成します。

複雑な一つのルールのエフェクトを作る人もいますが、修正が大変になってしまいますし、なにより再利用ができません。

たとえば、今使っている破壊システムは、何年も利用していてアップデートをしています。

こういうシステムを構築するためには、blackboxを使って行います。構造としては、階層化して、わかりやすくしていき、アップデートするたびにバージョンを重ねていきます。

チームでtPを使う場合、ショットは複数のシステムを組み合わせて作成します。また、セカンダリのエフェクトは、最終のキャッシュを利用します。いちいち全体のシミュレーションを行う必要がないので、計算が簡単になります。

レンダリングについて

レンダリングについてですが、finalRenderとの組み合わせも検討することをお勧めします。2つのメリットがあります。

1つは、メモリがの最適化が行えること。3dsmaxはパーティクルのプラグインとレンダラープラグイン同士が情報をやり取りするようになっていません。つまり、パーティクルをレンダラーに送るときにすべてをオブジェクトとして送ります。そのため、VRayやMentalRay、標準のスキャンラインレンダラーではメモリがあっという間に48GBになったりします。しかし、thinkingParticlesとfinalRenderは同じメーカーの製品なので、(Master Dynamic ロールアウトにあるfinalRender Instanceのチェックを入れてやると)パーティクルをインスタンスとしてレンダラーに渡すことができるので、メモリの消費を抑えることができます。場合によっては1/10になることもあります。

もう一つは、モーションブラーです。パーティクルはその特性として数や形状が大きく変わります。そのため、フレームごとにメッシュ化してレンダラーに渡してしますとトポロジーが変化するため、モーションブラーは正確に計算できません。また、トポロジーが保たれたとしても弧を描くような動きではなく、リニアに計算されてしまいます。しかし、finalRenderであれば、パーティクルのベロシティなどの情報も一緒に渡すことができるので、モーションブラーを正確に描画できます。

パイプラインとネットワークシミュレーションについて

繰り返しシミュレーションを行うにはバージョン管理が必要。Scanlineではシミュレーションはローカルマシンではいっさい行わず、すべてファームで行います。個人のマシンもデスクトップが自席にあるわけではなく、シンクライアント化されていて、サーバールームにあるそうです。

キャッシュファイルはネットワークパスで読み込まないこと、ネットワーク越しだとスピードが6倍くらい遅くなります。

キャッシュサイズをできるだけ小さくする方法としては、全てをジオメトリとして計算するのではなく、可能ならパーティクルとしてシミュレーション計算をして、そのパーティクルにジオメトリを割り当てるとキャッシュサイズを押さえることができます。細かいコリジョンがあるようなものには使えませんが、散らばっているだけのようなものだけには有効です。

また、重要なこととして、キャッシュを作る前にマテリアルとUVの設定を事前に行っておきます。特に、UVが変わるとパーティクルに影響が出てくることがあります。

また、パーティクルに割り当てられているマテリアルは上書きできるようしています。ライティングスタッフは、すぐにマテリアルをいじるからね。

カスタムオペレータについて

プログラムをしているしている人なら、スクリプトオペレータやカスタムオペレータをつくることで、独自のオペレータをつくることができます。maxスクリプトでできるの比較的簡単です。また、C++ならSDKに沿って作成でき、スピードもスクリプトよりも早くなります。

私も自分でカスタムオペレータは作成しています。たとえば、標準のspinオペレータは1回転を何秒で回るかを指定できるが、1秒に回る角度の指定や回転方向を指定できるオペレータを自作したりしている。(スクリーンには多数の独自オペレータがリストアップされていた)

thinkingParticlesの学び方

tPについての勉強は、CebasStationにサンプルやムービーがたくさんあるし、Eat3Dで販売されているHristoのビデオもおすすめ。自分が作成した”TP 4.0 for Production 1.0″というビデオも販売している。27時間もあるので見るのは大変だけど。

tP5について

tP5については、欲しいノードをすぐに呼び出せるショートカットなどワークフローに関する要望を多数対応してくれた。cebasは、ユーザーの声に反映してくれる会社なので、ぜひ要望などがあれば直接コンタクトをとることをお勧めします。

破壊システム解説

自分たちが使っている破壊システムを解説します。これは何年も使い続けていて、映画バトルシップやセンター・オブ・ジ・アース2でも使用されています。

シンプルにボロノイ分割したオブジェクトがあります。このオブジェクトに球体が落ちてきて壊れる様子をシミュレートをするわけですが、重要なのがTP Joint SC Helperを使ったジョイントシステムを使っているということです。

このジョイントシステムは、分割されたパーツ同士を接続して複数のパーツをひとつのパーツとして扱い、接続しているところの強度や壊れ方を指定することで、負荷がかかったところから壊れているような破壊を演出できます。

特に、接続面同士がどこでどのように接続しているのか重要。接続点は手動ではなくパーティクルで自動計算しています。パーツのサーフェイスにサンプリングのためにパーティクルを発生させて、複数のパーティクルからジョイントの接続点を1つ算出しています。各接続点の強さを変えて、構造物の材質を表現しています。この状態を可視化するためのルール(ダイナミックセット)も作っていて、接続点に球体を発生させて、接続力の強い点はサイズを大きくして表示させ、壊れるオブジェクトの構造状態がわかるようにしている。

また、負荷がかかったパーツをVolumeBreakerで壊すことで、よりリアルに見せることができます。ボロノイ分割したパーツが単純に壊れるわけではないので、リアルに見せることができます。このメッソドは、センター・オブ・ジ・アース2の樹木が折れるシーンにも使っていて、樹の幹を縦に長いボロノイので割っていたが、折れた部分は、粉々になるのではなく破片は木の幹にくっついたままになっているので、ボロノイで割っても不自然には見えません。

さらに、一度破壊の状態をキャッシュを取り、そこから断面からチリやダストを表現するパーティクルを発生させていきます。

実際のプロジェクトでは、柱や窓、ガラスなど構造ごとに設定などを変えているが、基本的にはこうした方法で行なっています。