TOOL 01
Tool:SOuP
Maker:Peter Shipkov
SOuPは、Peter Shipkov氏を中心に開発が進められているMaya用のノードライブラリプラグインです。その名前からもわかる通りHoudiniのSOPに大きく影響を受けており、プロシージャルなデータを構築するためのノード群が多数提供されています。具体的な何かを実現するためのものではなく、ノードの組み合わせにより様々なデータを構築することができ、これらを駆使することで多岐にわたる表現が可能です。また、Windows、OS X、Linux、全てのプラットフォームに対応して います。
SOuP
対応アプリケーション:Autodesk Maya 2014以降(2011~2013対応版もあり)
対応OS:対応アプリケーションに準ずる
価格:無料
問い合わせ:Peter Shipkov
E-mail:pshipkov@yahoo.com
www.soup-dev.com
入手方法
SOuPのWebサイト(www.soup-dev.com)のToolsからダウンロード可能です。この記事を執筆している時点で、最新版はMaya2014から2016までのバージョンで使用可能、それ以前のバージョンはOld buildsとして提供されています。中身はプラグイン本体とスクリプト、アイコンがメインです。これらを適切な場所にコピーすると使用可能になります。
SOuPWebサイトのダウンロードページ
基本機能
SOuPは特定の何かを実現するためのツールというよりは、よりプロシージャルなデータをつくるためのツールセットです。そのため、応用によっては開発者さえ想像していなかった表現をすることも可能です。現在サンプルとして公式サイトで紹介されているだけでも、FluidのUpResやDelta Mush、VoronoiFractureなどのポピュラーなCG技術を実装したものから、Paint Effectsのデータをいじったりポリゴンを部分的に削除するといったちょっと地味なものまで多数紹介されています。
SOuPは非常に強力な反面、主に扱うデータが配列だったりジオメトリだったりと、少しとっつきづらい部分があり、そのせいか思ったほどユーザーも多くない印象です。なので今回はプロシージャルなポリゴンの部分削除という初歩的なケースの紹介をしつつ、SOuPを使用したフローに軽く触れてみたいと思います。この例で使用するSOuPノードは、Group、BoundingObjectの2つです。Groupはその名の通りグループを作成するノードですが、ここで言うグループはMayaのグループではなくHoudiniのそれに近いものです。Groupで条件を指定することで、その条件に合致したコンポーネントがグループとしてまとめられます。今回はBounding Objectで囲った部分をGroupとして登録したいと思います。
まず何らかのオブジェクトを作成します。これを複製し、2つの平面が重なっている状態にします。今回はStanford Bunnyを使用することにします。それらを選択した状態でNode Editorを開きます。Node Editor上でTabキーからdeleteComponentとgroupをそれぞれ作成します。それを画像Aのように接続します。一番左のmeshノードが大元の形状となります。それをgroupに接続しboundingObjectを使って範囲指定を行うことで、グループが作成されます。これをdeleteComponentsに渡し、指定した箇所のフェイスを削除します。deleteComponentsはMayaのデフォルトノードでその名の通りコンポーネントを消すためのもので、通常のモデリングなどの際にも裏で勝手につくられている非常にシンプルなノードです。groupノードを介することで、手で選んだもの以外にもプロシージャルに消すことができるようになります。Bounding Objectは、他のノードに比べると接続するものが少しややこしいのですが、groupのAttribute Editorから作成することが可能です。これを使うと直感的に作業が行えるので非常に便利です。
ノードの接続例。赤で囲ってある箇所が手動で接続した箇所
-
Bounding Objectで囲った箇所を削除。group1でPolygon Faceを選択することで、ポリゴン単位での削除を行なっています -
赤で囲われたボタンを押すことで新たにBounding Objectが作成され、自動で接続されます。Bounding Objectは複数接続することが可能。AttributeTransferでも同様に作成できます
活用例
SOuPの良さのひとつはやはり大量の内部情報(ジオメトリの頂点やノーマルなど)を切り離してシンプルに扱えることだと思います。例えばこれまでパーティクルやスクリプトを通してしか実現できなかったことも、比較的手軽に扱うことができます。Mayaのパーティクルはその柔軟性こそ特筆すべきもので はありますが、キャッシュなどの扱いが面倒なケースも多々あります。
SOuPでは任意のジオメトリの表面、または内部にポイントクラウドを発生させ、これをソースにしてインスタンサにデータを渡すことができます。
また、SOuPといえばこれというほど有名な機能として、FluidのUpResがあります。これは対象のFluidコンテナを選択し、シェルフ上のSOuPアイコンを押すと出てくるメニューからupresFluidを選択するだけで実行可能です。
SOuPで木々の配置を行なった例。ポイントクラウドはmesh2arraysで作成。メッシュの表面にポイントクラウドを発生させたい場合は、scatterよりもmesh2arraysの方がポイントのリラックスなどがある分、扱いやすいです。ジオメトリのノーマルはpointsOnMeshInfoを使用して取得。最後に作成したarrayデータをそれぞれarrayToDynArraysに繋いでインスタンサに渡しています
FluidにUpResを施したところ。左側がオリジナルで、右側がUpResされたもの。Base Resolutionが120、Auto Resizeなしで計算したものにResolution Multiplierで5を与えたのでUpRes後のBase Resolutionは600。Deltaの値などを少しいじって調整しました。いちいちシミュレーションし直さなくても結果が見られるのは素晴らしいです
SOuPのシェルフのボタンを押すと出てくるメニュー。ここでノードを選ぶと簡単なものであれば適切にセットアップが行われます。upresFluidなどはここから一発で設定可能。しかし先ほどの森の例のように、複雑なネットワークになる場合は最初からNodeEditorで組んでしまった方が楽かもしれません