Vellumは布、ワイヤ、ソフトボディ、バルーン、グレインの高速な作成を可能にするUnifiedソルバーです。 べラムワークフローはOpenCL、GPUで高速化された簡単なセットアップと制御を提供し、い非常に強力なビジュアルオプションも備えています。
ここではVellumの構成を含む操作、コリジョンの作成、コンストレイン、そしてソルバのワークフローの基本を学習します。
完成データはこの記事の一番下にあるリンクからダウンロードが可能です。
目次
衝突用ジオメトリの作成
Geoノードを作成します。
作成したGeoノードに入り、Platonic Solidを追加、Solid TypeをTeapotに設定します。
Radiusは3に設定しました。
Match Sizeを追加し、ジオメトリの底辺を合わせます。
Convertを追加して解像度を上げておきます。
この少し複雑なジオメトリを衝突オブジェクトに設定します。
Objectレベルに戻り、名前をwidgetに設定します。
widgetのUniform Scaleを3に設定します。
衝突用グランドプレーンの追加
シーンに地面を追加します。
Collisionsシェルフをクリックし、その中にあるGround Planeをクリックします。
地面がシーンに追加されました。
それではここに布を作成して、このティーポットと地面に衝突させましょう!
布の作成
Gridを作成します。
Gridの中に入り、ティーポットの上にグリッドを移動します。
布に十分な解像度を与えるためにグリッドの分割を増やします。
これで布の元ができました。
Objectsレベルに移動し、Gridを選択します。
Vellumシェルフをクリックし、その中にあるVellum Clothを選択します。
設定が追加されると、AutoDopが開いた状態になります。
Lキーを押して、ネットワークをきれいにすることが可能です。
Objectレベルに移動すると、データが追加されていることがわかります。
再度AutoDopNetworkの中に入ります。
左側を確認すると、groundplaneがStatic Solverに接続されています。
そして、右側にVellum Solverがあります。
このVellum Objectでデータをアタッチしています。
DOPやPOPで扱う他のオブジェクトとよく似ています。
右側をみるとシェルフツールから作成したのでMergeがあり、個々に他のノードも接続できるようになっています。現在はGrid Vellumと名前のノードだけが接続されています。これはVellum Sourceになります。
このVellum ObjectとVellum SourceがVellum Solverに接続されています。
Vellum Sourceを確認すると直接Gridジオメトリが指定されています。
そして、Constraintと呼ばれるものをひっぱってきています。ここでは/obj/grid1/CONとなっています。では、grid1をみてみましょう。
Gridの下にVellum Constraintsノードが作成されており、そこからGEOとCONがつながっています。このVellum Constraintsノードは各ポイント間のリレーションシップを作成しています。
ポイント表示をオンに設定します。
先ほどGridの解像度を50*50に設定しました。
Vellum ConstraintsにDisplayフラグを設定します。
クロスステッチパターンが表示されます。
Show Guide Geometryのオン・オフで切り替えることが可能です。
これを表示することでポイント同士がどのように接続されているのかがわかります。つまり、そのステッチは個々のポイントそれそれぞれを接続しているスプリングまたはマッチスティック(固定する木の棒にようなもの)と考えることができます。これらのスプリングやコネクションには柔軟性や抵抗などの特性があります。直線距離だけではなく、ポイント間の回転情報も表示されます。
Vellum Constraintsノードは3つの入力と3つの出力があり、この3つの出力が非常に重要になります。
左はVellum Geometryです。これはグリッドになります。
GridからVellum Constraintsノードに接続され、このポイント間に関係を処理し、情報を追加して、全く同じグリッドを出力します。
中央のピンクの出力はコンストレインを出力します。
Gridジオメトリのないコンストレインのみになります。
ざっと説明したので、AutoDopNetworkに戻り、最初のフレームから再生してみてください。
布が下に落ちて言うと、地面とは衝突しますがティーポットとは何も起こりません。これはティーポットがスタティックオブジェクトになっていないからです。
そこでObjectsレベルに移動し、Widgetを選択します。
CollisionsシェルフからStatic Objectをクリックします。
AutoDopNetworkをみると新しいオブジェクトが追加され、Static Solverに接続されています。
再生すると今度はティーポットと衝突するようになりました。
次はこの布の上におちるワイヤーを作成してみます。
ワイヤーの作成
シーンにワイヤーを追加し、クロスやティーポット、地面と相互作用させたいと思います。
Objectsレベルに移動し、Geoノードを追加します。
名前をwiresに設定し、ノード内に入ります。
ビューポートにマウスのカーソルを置いて、Spaceキーと2キーを同時におしてTopビューに切り替えます。
Curveノードを作成し、カーブを描いていきます。
Show Handleツールを選択します。
カーブをTopビューからかきます。
カーブができたら、Fキーを押して編集モードに切り替えすべてのポイントを選択します。
Cキーを押すとRadial Menuが表示されます。
Change Point Type>Make Smoothを選択します。
ポイント間の補間をスムーズにすることができました。
Gキーを押してCreateモードに変更し、他のカーブを作成します。
先ほどと同様にSmoothにしておきます。
Curveができたら、Transformノードを追加し、布の上に移動します。
Resampeでポイントを増やしましょう。
Objectsレベルに移動しwiresを選択します。
VellumシェルフからVellum Hairをクリックします。
DOPにwires_vellumを追加されました。
wires_vellumを選択するとこちらもVellum Sourceノードであることがわかります。
Wireのオリジナルジオメトリとコンストレインを指定しています。
つまり、布もワイヤも同じデータを参照し、それが同じVellum Solverで処理され、同じデータとしてVellum Objectが使用されています。これがUnified Solverといわれる理由です。すべての異なるオブジェクトを処理できる1つのソルバでありシミュレーションです。
再生して確認します。
次にGrainsを作成します。
Vellum Grainsの作成
Objectsレベルに移動し、Sphereを作成します。
名前をsphere?grainsに変更します。
Sphere_grains内部に入り
Wireの上にSphereを移動し、Uniform Scaleを3に設定しました。
Objectsレベルに移動し、Shere_grainsを選択します。
Vellumシェルフから、Vellum Grainsをクリックします。
新しいVellum Sourceが追加されました。
ビューポートを確認するとSphereの形状に小さなGrainsがびっしりつまっていることがわかります。
追加されたVellum Sourceを選択すると、布やWireと全く同じ設定が行われていることがわかります。
すべてが単一のVellum Solverにながれていきます。
各エレメントのポイントとそれぞれ異なるコンストレインリレーションシップが設定されています。
Objectsレベルに移動します。
再生します。
すべての要素が相互作用していることがわかります。
DOPでのVellum Sourceの設定は同じですが
Objectsレベルに移動し、sphere_grainsの中に入ると先ほどまで使用しているノードが異なることがわかります。
布とWireでは、Vellum Constraintsノードを使用していましたが、GrainsではVellum Configure Grainを使用しています。
Vellum Configure GrainにDisplayフラグを設定すると
このSOP内でグレイン自体が作成されています。
ソースオブジェクトのVellum Configure Grainにてシミュレーションの解像度のように設定することができます。
GrainsはSphereに基づいて解像度が設定されました。変更したい場合は、Vellum Configure GrainのParticle Sizeを変更することができます。
Particle Sizeを大きくすると
1つ1つのParitlceが大きくなるため、解像度が低くなります。
ここまで作った3つのそれぞれ異なるジオメトリは単一のDOPで処理されています。
これら3つのオブジェクトは、実はdopsの1つのデータ、つまりこのvellum obujectから出てきているのです。
1つのDopsオブジェクトに3つの異なるソースが存在します。各ソースには、そのソースが必要とする動作に応じた独自のタイプのコンストレインが設定されています。なぜなら、その情報をSOPに持ち帰ってレンダリングするからです。
Objectsレベルに移動し、Cloth Vellumの中に入ります。
単一インポートノードでジオメトリをインポートしています。
これは、AutoDopネットワークから実際にデータを取得することを意味します。
ひっぱってきているジオメトリは、Vellum Object1からきています
ClothやWire、Grainそれぞれの情報を取得しているのではなく、Vellum Solverを通して実行されているすべてをもってきています。Vellum Objectに関連したすべての情報をSOPに持ってきていることになります。データに関連するものはすべてソルバーであり、そのソルバーに供給するものは3つの異なるソースであることがわかります。
この話を持ち出したのは、ポストソルバー環境では、これらのことをどのように扱うかが興味深いからです。ポストソルバー環境とは、シミュレーションが終了した後のことです。
特定のパーツにスムージングを追加したい場合等、シミュレーション後にそれを行います。
シミュレーションをディスクにキャッシュを保存します。このvellum ioがキャッシュになります。
そして、最後のVellum PostProcessでSmoothやDetangleを行います。
ただし問題もあります。この中のいくつかの操作が特定のVellum Typeで正常に動作しないのです。そのため、ジオメトリのタイプを管理し、ポストプロセスが悪さするもののと正常に動作するもの管理する必要があります。
Vellum PostProcess
それではVellum PostProcessの設定に移動します。
このポストプロセスが必要なものとそうではないものを分けていく必要があります。
ここではもう一つのVellumタイプであるソフトボディも追加しておきましょう。
Create シェルフからTorusを作成します。
名前をわかりやすいように変更します。
ノード内に入り、Grainsの上に移動し、Uniform Scaleで少し大きくしましょう。
Objectsレベルに移動し、torus_Balloonが選択されている状態でVellumシェルフからVellum Ballonをクリックします。
DOPをみると新しいVellum SourceとしてBalloon_vellumが追加されています。
そしてこれらのデータがVellum Solverに共有され、Vellum Objectに渡されます。
Torus_Balloonに移動します。
ここではカスタムVellum Constraintsが2つ追加されています。Torusの内部ボリュームを維持できるように圧力を制御するものとコンストレインのストレッチやベンドを制御するものです。
ここでは細かい設定に関して説明を省きますが、重要なことはTorusから開始し、2つのコンストレインを通し、元のジオメトリとコンストレインを他のVellumタイプと同じように出力していることです。
これらのデータが直接DOPに供給され、処理を実行した後、再度SOPのDop Import Fieldに渡されます。
SOPに情報を取り込んだ後のこの2つのノードは視覚化のためのノードです。ビューポートでの見栄えをよくすることができます。
そのあとのVellum ioで一旦キャッシュを作成します。
100フレーム辺りまでで十分です。
キャッシュを作成したらLoad from Diskを有効にして置きます。
タイムスライダの下にあるシミュレーションを無効をクリックしておきます。
Vellum PostProcessにDisplayフラグを設定してタイムスライダを動かして結果を確認します。
途中布の一部がガタガタしていることがわかります。
これはコンストレインに基づき正しくシミュレーションされていますが、布としては不適切です。同じことがバルーンにもいえます。解像度が足りず少しがエッジがシャープになっています。
ただし、ジオメトリすべてに補正を行う必要はありません。ただこの部分の修正はとてもコストがかかってきます。そのためこのVellum PostProcessを使用します。
このVellum PostProcessを使用することでスムージングがもつれをほどくだけでなく、布など特定の素材に厚みをもたせることができます。そうすることでジオメトリを実際の厚い布のように見せることが可能になります。
最初に伝えた通り、いくつかのVellumタイプではこの処理が必要ではない場合もあります。
例えば、SubudivisionをCatmull-Clarkに変更し、Subdivision Depthを2に設定します。
再生すると、高速に再生しつつジオメトリが滑らかになっていることがわかります。
Balloonも滑らかになっていますが、その下にあった本来あるはずのGrainsがないのにキャッシュで位置をたもっているため空中に浮いているように見えています。
つまり、GrainsやWireなどスムージングを正しく処理できない要素が失われてしまっています。このように正しくない処理が行われるVellumタイプを分けて管理する必要があります。
キャッシュの後に後処理を行うものと必要ないものをわけていきます。
データを見えやすくするためNullを追加しています。
GEOの下にBlastノードを追加します。
何で仕分けるかですが、Geometry Spread Sheetを確認すると「patchname」というアトリビュートが作成されていることに気が付きます。これを使用することで必要なパッチだけを取得することができます。
後処理を追加したいパッチは以下の二つです。
DOPに戻りblastに以下のように設定しました。
わかりやすいように名前を変更します。
Altキーを押しながらドラッグしてノードを複製し、名前を変更しました。
Delete Non Selectedをオフにします。
次にコンストレインです。
現在ここにはすべてのコンストレイン情報が含まれています。
PostProcessですべてのコンストレインノードを処理する必要はありません。効率的に処理を進めるためGrainsやWireのコンストレインはPostProcessには今必要ないことがわかります。
そこでGeo用に作成したBlastノードを複製します。
これで必要なコンストレイン情報だけを取り出すことができました。これで必要なデータだけをVellum PostProcessに提供し、効率よく処理することが可能です。
これでPostProcessに必要なものだけがPostProcessに接続されているため、スムージングをかけることが可能です。
また、Extrude by Thicknessを有効にして布に厚みを加えます。
Mergeノードを追加し、PostProcessを追加したものと追加していないものを統合します。
再生し、すべてのVellumが機能していることを確認します。
今回はシェルフから作成したので、DOPを使用しましたが、Geometryレベル(SOP)でもVellum Solverが使用できるようになっています。先ほど作成したすべてのタイプをSOPで作成することが可能です。つまり、Houdini CoreでもVellumを使用することができます。
こちらの使用方法はこちらの記事をご参照ください。