VDBを使用したプロシージャルモデリングを紹介します。
TEXT_秋元純一 / Junichi Akimoto(トランジスタ・スタジオ/取締役副社長)
日本でも指折りのHoudini アーティスト。
アーティスト業務の傍ら、Houdiniアーティスト育成や布教活動に勤しむ
www.transistorstudio.co.jp
blog.junichiakimoto.com
EDIT_小村仁美 / Hitomi Komura(CGWORLD)
●CGWORLD Online Tutorialsにて特別無料配信中!
【無料】Houdini COOKBOOK +ACADEMY 特別編 ~コロナをやっつけよう!~
-
「Houdini COOKBOOK +ACADEMY」
Houdiniを基礎から楽しく学ぶオンライン講座
公開日程:毎週金曜日公開(予定)
価格:1,300円(税込)※セットでの割引販売有
※第一回「Houdiniの基本概念とインターフェイス」は無料公開中
受講対象:Houdiniをこれから学びたい方、Houdiniの勉強で挫折した方など
ソースのコントロール
今回は、VDBを用いたプロシージャルモデリングを作成していきたいと思います。とはいえ、VDBはあくまでも最終的に形状化するための手段であって、重要なのはそこに至るまでのソースの作成にあると言えます。SOPを用いたベース形状のモデリングは非常に奥が深く、自由度が高すぎるゆえに、弊害としてアプローチ選択の難しさがあります。どういった形状を作りたいのか、目的に応じた設計のプロセスを頭の中で組み立て、試行錯誤していく必要がどうしても出てきてしまいます。そういった場合に、どのようにマイルストーンを置いていけば良いか、今回のモチーフをベースに検討していきたいと考えます。
今回のモチーフは、ネットワーク構造をもつ抽象的で、有機的なものです。まず、形状の大本から、どういったディテールをもつ構造なのかをデザイン・設計する必要があります。構造体を分析し、その形状をどういったアプローチで組み上げるのか、SOPにおける引き出しを探らなくてはいけません。
今回はネットワーク構造の骨組みになるCurveの作成を主題として解説していきます。また、それにどうやって動きやディテールを付けていくかが、画づくりのカギになります。
01 Source Point Flow
ソースポイントのセッティングを解説します。
まず、ベースとなるジオメトリを読み込み、Remesh SOPを使い【A】、扱いやすいように2種類の解像度を準備します。これは、表面のディテールを維持したものと、デフォームさせやすいようにローポリにしたものです【1】。
内部構造としてのジオメトリを作成していきます。Peak SOPで少し表面からもち上げて、そこに合わせてRay SOPで貼り付けます。このとき、Reverse Rayに設定することで、法線の反対側へ貼り付きます。そのジオメトリに対して、元のジオメトリとの中間付近にブレンドすることで、概ね中心となるあたりにジオメトリを変形することができます【B】。今回はしくみをわかりやすくするためにこのようにしていますが、ブレンドしない場合は、Ray SOPのScaleを変更すれば、距離のパーセンテージで制御することもできます。
あくまでもベースジオメトリなので、形状はある程度破綻していても問題ありません。このジオメトリに対して、Smooth SOP【C】を使って滑らかに調整しておきます【2】。
次に、表面に対してPointを作成していきます。先ほど作成した中心のジオメトリと表面のサーフェスの距離を使って、密度のAttributeを作成します。Wrangleで距離を測り、値を整理します【3】。
それを高解像度のジオメトリにAttribute Transfer SOPで移行させておきます【D】【4】。このAttributeを使用して、密度を調整したPointを作成します【E】。今回は、全体のものと、脚の先に密度を濃くしたもので、微調整できるように切り分けています【5】。
同じように、中心のジオメトリに対しても密度Attributeを付け【F】、Pointを作成します【G】【6】。また、中心のPointには、後でコントロールしやすいように、別途コンスタントなAttributeを付けておきます【H】。
02 Base Curve Flow
ベースカーブの作成フローを解説します。
表面のCurveを作成していきます。まず、表面のジオメトリに対してRest Position SOPで”rest”を作成し、VOPを使ってノイズデフォームをかけます【A】。このジオメトリを表面用のPointからVoronoi Fracture SOP【B】を使って分割していきます。
さらにWrangle【C】で”rest”の位置に戻せば、歪んだ形状にカットできます【1】。これに対して表面のジオメトリだけを抜き出し、Divide SOPのRemove Shared Edgeで余分な面を削除し、PointをFuseすれば、カットされた輪郭だけを抽出できます【D】【2】。
次に、Facet SOP【E】でRemove Inline Pointsを除き、Add SOPでPointのみにして、さらに近似のPointはFuseして、交差する点のみにします【F】【3】。このPointと内部のPointをMergeして、Wrangle【G】でPointをつないでCurveにします【4】【5】。
このとき、Attribute Promote SOPで【H】、内部のAttributeをMaximumで移行すれば【6】、表面の余分な接続Curveを排除できます【I】【7】。
両方のCurveをMergeしてLine化し、Resample SOPで分割数を上げます【J】【8】。
密度のAttributeを移行して、それを基に”pscale”を作成します【K】。
表面のジオメトリからSDFを作成し【L】、そのVolumeを基に、VOP【M】を使ってPointがサーフェスのどの程度の深度にいるか計算します。これは、Volume Sample VOP【N】で計算可能です【9】。その深度を基に、内部のみノイズでデフォームをかけます【10】。
これでベースとなるカーブの完成です。
03 Animation Flow
アニメーションのフローを解説します。
カーブの準備が終わったら、アニメーションを付けて、最終的なメッシュを張っていきます。
カーブに対して、Rest Position SOPとVOPを使い、ノイズデフォームをかけます【A】。これに対して、成長点をSphere SOP【B】で指定し、VOP【C】を使い、このPointと、カーブのPointの距離【D】から成長エリアを作成します【1】。
Wrangle【E】で元の形状に戻せば、歪んだ形にエリアを指定することができます【2】。
エリア指定外の部分をDelete SOP【F】で削除して、成長のアニメーションを完成させます【3】。必要に応じて、カーブの時点で、カラー指定や”pscale”の調整をしておきます【G】。
このカーブアニメーションに対して、VDB from Particles SOP【H】で、SDFに変換します【4】。これをVDB Smooth SDF SOPで滑らかにして、Polygonに変換すれば、メッシュの完成です【I】【5】。
最終的に、カーブのAttributeをAttribute Transfer SOP【J】でPolygonに流し込んで完成です。
04 Operators
主要ノードを解説します。
●VDB from Particles SOP
今回は、VDBを使って有機的なプロシージャルモデリングを行いました。VDBを使えば、複雑な形状、特に今回のような有機的なものに対しては非常に効果的です。例えばVDB from Particles SOPのようにPointをVDBに変換する機能を使えば、一定の距離にPointを配置するだけで簡単にきれいなメッシュを張ることが可能です。
ただ、それも最初に説明したように、VDB自体はあくまでも最終的なツールであって、これが全てではありません。むしろ、そこに至るまでのプロセスこそが、自由度を与えてくれます。
今回のモチーフは細いラインで構成されているため、非常に高解像度な分割をする必要があります。そのため、無駄な計算はしたくないのが本音です。それに向けて、動きの調整や形状などは、あくまでも骨組みの時点で完成させ、見た目だけVDBで調整すればストレスは限りなく軽減できます。
VDBを使うことでプロシージャルモデリングの幅は非常に広がったと考えます。それだけに、細かなSOPのテクニックや引き出しを自分の中に収集しておくことが、オブジェクト的な積み重ねで、デバッグやカスタマイズ性の高いアプローチを組み上げるためのリソースになります。
今回のような小さなテクニックの積み上げのような手法は、今後プロシージャルモデリングをする上で、非常に重要なポイントだと思います。
-
「Houdini COOKBOOK +ACADEMY」
Houdiniを基礎から楽しく学ぶオンライン講座
公開日程:毎週金曜日公開(予定)
価格:1,300円(税込)※セットでの割引販売有
※第一回「Houdiniの基本概念とインターフェイス」は無料公開中
受講対象:Houdiniをこれから学びたい方、Houdiniの勉強で挫折した方など