ModoからSTORMへのデータ出力およびSTORMからのデータ入力
https://www.youtube.com/watch?v=xyddQLPgrVQ
このビデオではパーティクルや流体のシミュレーションを行うツールであるSTORMへModoからデータを出力する方法、またSTORMから出力されたパーティクルデータやメッシュデータをModoに正しく読み込む方法について解説します。
STORMは3DCGツールで制作されたメッシュをパーティクルシミュレーションのソースとして、またはコライダとして読み込んだり、カメラのデータを読み込むことができます。読み込めるデータのフォーマットとしてはOBJやAlembicなどがあげられます。メッシュの場合はOBJなどのジオメトリのみのデータとして出力してもよいですし、Alembicであればアニメーション付きのデータとして出力することが可能です。
今回はサンプルとして、このシーンにあるソースとコライダー、カメラのデータをそれぞれ別で出力します。アニメーションがつけられているシーンデータですので、Alembicで出力します。単にジオメトリだけをSTORM側に渡したいのであれば、OBJファイルで出力していただいて構いません。まずは出力前に、Alembicの設定を行いましょう。システムメニュー > 初期設定 > ファイル入出力 > Alembic 入出力にAlembic関連の設定が揃えられています。
アニメーション付きでシーンデータを出力する場合、まずはこのアニメーションタイム範囲をカレント範囲またはシーン範囲に設定するようにしてください。また今回のようにソースとコライダー、カメラとファイルを分けて出力したい場合には、出力タイプを選択を階層付きで出力に設定しておいてください。この設定を行ったうえで、出力したいアイテムを選択し、Alembicファイルへと出力します。また、STORMでも読み込んだシーンのスケールを調整することができますが、あらかじめスケールの値を調整して出力すると良いでしょう。
このようにして出力されたAlembicファイルは、STORMの中でパーティクルの放射元となるソースや、パーティクルが衝突する先となるコライダなどに利用することができます。
ではSTORMでシミュレーションを行った後のデータを、MODOに読み込んで活用する方法について解説します。STORMから出力されるデータの種類として3種類あります。一つはシミュレーションを行ったパーティクルのデータ、もう一つはそのパーティクルのデータをメッシュ化したジオメトリのデータ、最後の一つはシミュレーションを行ったボリュームのデータです。パーティクルデータやメッシュ化したデータはOBJやAlembicなどの形式でシーケンスファイルもしくは単一のファイルで出力できますが、Modo標準の機能としてはOBJやAlembicのシーケンスファイルは読み込めませんので、今回は単一のAlembic形式で出力されたファイルを読み込んでみます。またボリュームデータに関してはVDB形式で出力されたシーケンスファイルを読み込むことになります。
ではまず、パーティクルのデータを読み込んでModoでどのように活用するかを解説します。
ファイルメニュー > 読み込みからAlembicファイルを指定します。読み込み用のオプションパネルで全フレームを読み込みをオンにして読み込みます。そうすると、STORMのシミュレーションで作成したパーティクルデータが読み込まれるのが確認できます。正しくパーティクルが1フレーム分しか読み込まれていないようであれば、AlembicポイントクラウドのタブにあるタイムプロパティのモードをPlay-onceへと切り替えてみてください。
このように読み込まれたパーティクルデータは、通常のModoのパーティクルやポイントクラウドと同じように使えます。このため、このパーティクルをポイントソースとしてリプリケータで複製してもよいでしょうし、ブロブのパーティクルソースとして使うことも可能です。要はSTORMでパーティクルを使い、その後の扱い方はModo標準のパーティクルの同じように活用できると言うことです。
もう一つ、STORMからの活用方法として、STORMの中でメッシュ化されたデータを持ってくる方法です。こちらは既にSTORMの中でメッシュが作らているため、Modoでの演算負荷が軽くなります。読み込み時には、Alembicの読み込みオプションで、Alembicストリーミングメッシュ(全ポリゴン強制)オプションにして、読み込むようにしてください。そうするとSTORMでメッシュ化されたデータが読み込まれるようになります。アイテムリストからAlembicのメッシュデータを選択し、右クリックからコンテキストメニューのシェーディング > アイテムマスクの作成でマテリアル設定が可能になりますので、お好みの質感を設定していくことが可能です。
Modo標準の機能ではAlembicのシーケンスファイルは読み込めませんが、Modo開発元であるFoundry社のフォーラムではAlembicシーケンスファイルを読み込むためのアセンブリがユーザーから公開されています。一つにまとめたファイルではなく、どうしても連番ファイルが良いという方は、そういったアセンブリを使うことを検討されてみる価値はあるかと思います。
Free Alembic Sequence Reader V2 for Modo (Updated with Loop, Speed Multiplier , Offset)
最期にSTORMのノードグラフ機能を利用し表現した炎や煙はボリュームなのでVDB形式で出力して、Modoに読み込むことができます。VDBシーケンスファイルとして出力したら、Modoのアイテムリスト > アイテム追加 > ボリューム > VBDVoxelを追加します。プロパティタブのファイルを読み込みボタンをクリックし、シーケンスファイルを一つ指定します。タイムラインをスクラブしてみると、ワイヤーフレームでボリュームが読み込まれていることが確認できます。
VDB形式に読み込まれたボリュームをModoの中でレンダリングするには2つの方法があります。一つはボクセルメッシュを生成オプションをオンにして、ボクセルデータをメッシュ化する方法です。簡単にメッシュ化することができますが、リアルな煙や炎といったボリュームを表現するには難しいかもしれません。
もう一つは、VDB形式を利用してボリュームを表現する方法です。ボクセルメッシュを生成オプションをオフにし、アイテムリスト > アイテム追加 > ボリューム > Volumeを追加します。このVolumeとVDBVoxelを連結させます。スケマティックビューのVolumeとVDBVoxelを追加し、VDBVoxelをVolumeのボクセルソースに接続します。そうするとSTORMから出力されたボクセルデータを、Modoのなかで表現できるようになります。ボリュームに対してマテリアルを設定するには、アイテムリストからVolumeを選択し、右クリックでコンテキストメニューからシェーディング > アイテムマスクの作成を実行します。そうするとマテリアルグループにはVolumeのマテリアルグループが作られますので、その中にあるマテリアルに対してマテリアルレイのタブのボリューメトリックから設定を行ってください。