Houdini最新バージョンを古参ユーザー目線でレビューする。
※本記事は月刊「CGWORLD + digital video」vol. 245(2019年1月号)からの転載となります。
TEXT_秋元純一(トランジスタ・スタジオ)
日本でも指折りのHoudiniアーティスト。手がけてきた作品は数々の賞を受賞している
EDIT_藤井紀明 / Noriaki Fujii(CGWORLD)、山田桃子 / Momoko Yamada
AUP(Annual Upgrade Plan)
Houdiniには、Annual Upgrade Planと呼ばれる年間サポートプランがある。それは非常に高価で、維持していくためにはコストへの懸念は絶えない。それでもなぜ毎年AUPを更新してしまうのか。それは、SideFXの弛まぬ努力の賜物と言えるアップグレードの内容が計り知れないからにほかならない。毎年SIGGRAPH終わり頃からSneak Peekが発せられると、それからほどなくしてわれわれの下へ送られてくる。それはまるで恒例のプレゼントのようでもある。それほどアップグレードの内容が毎年素晴らしいのだ。今回のバージョン17にいたっては、近年でも稀に見るほどの新機能を提げて堂々と登場した。大きな目玉と言えば、やはりVellumであろう。今回の記事でもその内容を十分に紹介できるスペースを用意して、その魅力に迫っていきたいと思う。
もちろん、アップグレードはそれだけではなく、Whitewaterの完全な書き換えや、破壊ツールの大幅な進化、インタラクティブなモデリング性能の向上、プロシージャルモデリングの進化、地形全般、UVのワークフロー、キャラクターアニメーションとリグ、群衆、Furのグルーミング、Gameデベロップ機能の改良、レンダリング性能の向上など、項目の数だけで言うと100を軽く超え、詳細にいたっては把握しきれないほどだ。今回は、その中でもメインとなるアップグレードについて紹介していく。長年にわたり、純粋にHoudiniだけを追求するSideFXがもたらす、新しく進化を遂げたHoudiniの魅力に迫っていこう。
Vellum 1
新たに追加されたシミュレーション機能の概要
Vellumとは、今回新たに搭載されたまったく新しいシミュレーション機能だ。ClothやHair、Soft Body、Grainなど、弾性体のシミュレーションを高速に行なってくれる統合的な機能群である。Soft BodyやClothなどはこれまでFEMを用いてシミュレーションしていたが、その仕様から非常に重たいものだった。VellumはXPBD(Position-Based Simulation of Compliant Constrained Dynamics)というアプローチから設計されている。これはPBDのExtendedという意味で、Substepに非依存のStiffness設定ができる。また、GPU/OpenCLによる高速なシミュレーションが可能だ。Position-Based Dynamicsがベースになっているため、PointのConstraintがコントロールの鍵となってくるが、縫合やブランチ、裂け、膨張などのコントロールも簡単に行える。PointのConstraintを駆使することで吸着なども簡単に表現でき、蜘蛛の巣に引っかかるなどの表現も可能になった。また、レイヤー化ができるため、Clothの重ね着も簡単に表現できる。これまでは難しかった紙などの薄い物が重なっていく様も表現可能だ。細い紐と布をどちらもVellumで作成すれば、旗や風船なども簡単に表現できる。さらに、シミュレーションの際に、ジオメトリにかかってくる負荷などを可視化することが簡単にできるため、裂けなどを表現する際にも、タイミングや位置などを制御しやすくなっている。Furと合わせて使用することで、髪の毛や芝生などのシミュレーションも高速に行える。ソリッドなSoft Bodyを表現でき、FEMと比較しても約8倍ほどの速度でシミュレーション可能だ。また、Plasticityを使用することで、負 荷がかかった状態で形状を留めることができ、曲げなどの表現を簡単に行えるようになっている
これは新たに追加されたVellumのノード群一覧だ。Vellumは当然シミュレーションであるため、DOPノードが主軸となってくる。ただ、Houdini 17のコンセプトにはアーティストフレンドリーな設計思想が見受けられ、これまではDOP Network内でのシミュレーション構築が一般的であったが、HDAによるSOPで直接セットアップしてシミュレーションすることができるようになっている。ここにきて、DOPがフローティングなネットワークになっている伏線が回収できたと言えるだろう。TDレベルでセットアップされていたシミュレーションも、アーティスト自ら簡単にセットアップできるようなしくみになっている。Houdiniの間口が広がってきている証拠だ。今回はDrapeと呼ばれるしくみがあり、衣装の作成からシミュレーションまでを一気に担うことができる。Marvelous Designerのような機能が数個のノードによって可能となっており、これもHoudiniのHDAという思想の賜物と言えるだろう。リストは【1】がDOPで【2】がSOPのものだ。SOPの方が細かいHDAが多く準備されている一方、DOPは最初から構築していく必要があるが、カスタマイズ性には優れている
Vellum Object【A】はDOP内に新しいVellum Objectを作成し、シミュレーションに必要なデータを格納する。また、ガイドの表示などもこのノードが司る。Vellum Source【B】はVellum Patchを作成するノードで、PatchのGeometryとPatchのConstraintの両方を保持する。このノードで、SOPで作成した、VellumのGeometryとConstraintを引っ張ってくることが可能だ。Vellum Constraint Property【C】は、Vellum Constraintで作成したConstraintのプロパティを変更することができる。各プロパティはConstraint PrimitiveのAttributeに対応している。Removeは、Constraint Primitiveを削除することができるなど、機能は多彩である。Vellumの設定項目の中でもかなり重要な役割を担うノードのひとつだ。Vellum Constraint【D】はConstraintを作成するためのノードだ。Micro Solverとして機能するため、Solverと合わせて使用する。Vellum Rest Blend【E】は、シミュレーションもしくは外部のSOPから指定したGeometryのRestの値をブレンドすることができる。意図的にシミュレーションを制御したい場合に重宝するノードだ。Vellum Solver【F】はVellum ObjectをシミュレーションするためのSolverだ。POP Solverの一種で、Attributeを用いたPointやConstraintの制御をSOP的な感覚で行えるのが非常にありがたい。Vellum Constraints【G】はその名前からは想像しにくいがかなり汎用性の高い主要ノードとなっており、Solverに対して必要な情報をこのノードが司る。Constraint Typeで設定したいタイプに指定する。全てのマテリアルタイプがPoint間のConstraintによって制御されるため、このノードの設定は重要だ。Vellum Drape【H】は、作成したPatchを縫い合わせるようにシミュレーションしながらモデリングすることができる。シミュレーション前のジオメトリをあらかじめ作成できるため、衣服のモデリングからシミュレーションまでのセットアップを一手に担っている。Vellum Configure Grain【I】は、ジオメトリを簡単にGrainのPointを作成するためのノード。細かな設定はなく、非常にシンプルに扱うことができる。Vellum Post Process【J】はシミュレーション後の後処理に使用するノードで、メッシュのスムース化や細分化などを行える。Vellum Rest Blend【K】はDOPのVellum Rest Blendと同等に、指定したターゲットにブレンドすることで意図的な制御ができるようになる。Vellum Solver【L】は、設定したGeometryとConstraint、Collisionなどを一挙にシミュレーションにまわすことができる。このノードがあるおかげで簡単にVellumのシミュレーションをSOP上で行うことが可能になっている。Vellum Pack【M】、Vellum Unpack【N】、Agent Vellum Unpack【O】は、それぞれVellumをPackとして扱うためのノードだ。VellumのSOP群は、GeometryとConstraintが2つのアウトプットからなるが、それを1つにまとめることでMergeやSwitchなどが使用しやすくなる。Vellum I/O【P】は、VellumのストリームをPackして簡単にディスクキャッシュをとることができる
Vellum 2
新たに追加されたシミュレーション機能の実践
Vellumを実際にセットアップしてみる。今回のテストでは単純な1枚の旗をSOPベースのセットアップでアプローチしてみたところ、非常に簡単にセットアップできた【1】。Remeshしたジオメトリ【A】を用意して、それにVellum Constraints【B】の設定でConstraint TypeをClothに設定する。そのほか、Pin to Animationで止めたいPointを指定している。続いてVellum Solver【C】を繋げる。ここで注視したいのが、ノードにInputとOutputがそれぞれ3つあることだ。SOPベースのセットアップでは、このように左からGeometry、Constraints、Collisionの3つを常に更新しながら組んでいくフローとなっている。Vellum Solverの中にも入ることができ、その内部ではForceのセッティングができる【D】。ForceはPOPに対するセットアップと同等に扱うことができるため、非常に簡潔である。シミュレーション後には、Vellum Post Process【E】を使ってSmoothやCollision Correctionなどの様々な調整が可能だ。今回は、VisualizeでBendのストレスを可視化している【2】
SOPベースのVellumでも、異なったマテリアルのシミュレーションを同時に行うことができる。例えばClothとGrainの組み合わせだ【3】。あらかじめEdge Fracture【F】で切れ目を入れたClothに対して、Vellum ConstraintsのWeld Points【G】で切れ目をコントロールできるようにしておく。次に、Vellum Configure Grain【H】を使ってGrainを作成する。それぞれVellum Pack【I】を使ってGeometryとConstraintsを1つにしてからMergeして、Vellum Unpack【J】を使って元に戻し、最後にVellum Solverを使ってシミュレーションするながれだ。これによって、それぞれを同時かつ非常に簡単にシミュレーションすることができる仕様になっている
Vellumの中でも大きな目玉機能として取り上げたいのがVellum Drapeだ。Drapeのしくみを使うことで、キャラクターなどの衣装を簡単につくり出すことができる。まだまだ発展途上ではあるが現状でも十分カスタマイズ性は感じられ、今後HDAなどの充実が期待できそうだ。まずは、【4】のように型紙から切り出したようなPatchを作成する。Patchの作成においてもSOPには新たなHDAが追加されており、これを利用して衣装の下地を作成する。次に、Vellum Drapeを使って、それぞれを縫い合わせていく。縫い合わせる箇所はPointやGroupで選ぶ必要があり、この点がもう少し改良されればプリーツなどのディテールを詰めやすくなると感じている。Vellum Drapeはあくまでシミュレーション前の形状をシミュレーションしながらキャラクターに着せていくというもので、Freezeさせるフレームを決めてキャッシュ等をとるか、SOP上でFreezeさせる必要がある。ここまでできれば、あとはVellum Solverを使ってシミュレーション可能だ【5】
[[SplitPage]]
FLUID
進化したFluidシミュレーション
FLIPのNarrow Bandが大幅に改善された。これまでは不向きだった【1】のような複雑な形状のシチュエーションでも挟帯域のシミュレーション性能が向上しており、さらにメモリ効率やスピードも向上している。また、Attribute-Field PairsによってカスタムフィールドのAdvectionが可能になっており、Color、Density、Viscosityなどを併せてシミュレーションできるようになっている
White Waterが大きく進化した。これまでのWhite WaterのSolverから一新されており、Solver内を確認してみると新たにPOP Fluid【A】というMicro Solverが搭載され、これまでよりさらに写実的な泡のパターンを生み出せるようになっている。FLIPからのソースシミュレーションに対して正確な関係性を維持することで、よりオーガニックでリアルな結果を求められるようになっている。また、OpenCLを使用することで、より高速にシミュレーションが可能だ【2】
Fluidのソース作成が大幅に改良された。これはVDBをベースとした改良で、ソース作成が非常に高速にできるようになっている。これまではいくらシミュレーション速度が速くてもソースの作成がボトルネックとなっていたが、その心配ももう無用だ。ソースの作成方法とDOPへのインポート方法が大きく変わっており、SOPではPyro Source【B】というノード、DOPではVolume Source【C】というノードが新たに追加されている。このノード群の恩恵により、さらにFluidの扱いが簡単になっている。例えば【3】では、ジオメトリのColorをそのままPyroのシミュレーションに活かすようにセッティングしている。いったんPoint化されたジオメトリは、Volume Rasterize Attribute【D】でVDB化されている。このように、一連のながれがよりわかりやすく、さらにカスタマイズしやすくなっている。またPyroだけではなく、FLIPのソースもまたVDBに変更されており、さらに軽量化されている
Retimeノードが追加された。単純に時間をコントロールできるだけではなく、Evaluation Mode【4】を変更することで様々なコントロールが可能になっている。また、シミュレーション結果から【5】でフレーム間を補間することもできるため、非常に強力なアップデートだ
DESTRUCTION
破壊に特化したアップデート
Bullet専用のBullet Soft Constraint Relationship【A】が追加された。これまでのSpring Constraintと同様の挙動を見せるが、Soft Constraintの方は挙動が非常に安定しており、複雑なConstraintでも暴発などの不安定さがないのが特徴だ。これまで小さな質量などでは安定動作が難しかったSpring Constraintでも、Soft Constraintに置き換えることで非常に簡単にセットアップできるようになっている。そのため、調整にかかる時間も大幅に削減できる。【1】のように大量のConstraintがあったとしてもその速度は速く、ConstraintのNetworkを消すことで簡単にConstraintを解除できるため、破壊のシミュレーションコントロールがより軽快になった
Convex Decompositionが追加された。これまでは、BulletのProxyなジオメトリではConvex Hull【2】が主流だったが、それに加えてもう少しディテールを加えられるように、Convex Hullの良い箇所を残しつつも曲率から複雑な形状を再現できるよう部分ごとにConvex Hullをかけられるようになっている。これによって、軽量化されたProxyモデルを簡単につくり出すことが可能になった【3】
今回の破壊系アップデートの目玉はRBD Material Fracture【B】だ。なんてことはない便利系のHDAではあるが、その設計思想は今後の発展を期待せざるを得ない。Houdiniの良いところは、なんと言ってもHDAなどのアセットワークによるフットワークの軽さだ。それを象徴するかのような汎用性の高いノードになっている。素材別に破壊をコントロールできるだけでなく、それぞれの特徴をよく加味し、さらにコントロールしやすいような設計になっている。前後のワークフローまで考えられているので、破壊用のジオメトリを準備する際に、これひとつで事足りるのだ。現在のマテリアルの種類はコンクリート【4】・ガラス【5】・ウッド【6】の3種であるが、これはカスタマイズ可能であり、ほとんどのシチュエーションがこれらで十分と思われる。また、Constraint【7】の設定もできるようになっていて、このままDOPへもっていくことができる。また、ディテールを付けていくことも可能な上、Proxyモデルも生成してくれる徹底ぶりだ。現状では、汎用性を高めるためか多少の重さを感じるが、セットアップの面倒さを鑑みれば許容範囲ではないだろうか
次ページ:
CHARACTER
キャラクターに関するアップデート
CHARACTER
キャラクターに関するアップデート
今回のアップデートでは、キャラクターアニメーションの部分へも手が入れられた。特にキーフレームアニメーションのしやすさが大幅に向上し、一番目立つところで言うとタイムスライダーの形状が大きく変わっている【1】。これもアニメーターへの配慮だろう。また、Channel ListやAnimation Editorなどへアクセスしやすくなっているのも注目だ。アニメーションはより直感的なアプローチが必要になるが、そういった部分への配慮もみられる。また、キャラクターのRigセットアップにおいても、Full Body IKなどに対応するなど、これまではプライオリティが低かった箇所へも手が伸びている。これはおそらく、内包されているCrowdの使用頻度を高めるためだと予想する。これまでは外部からのアニメーションデータに頼っていたHoudiniだが、今後は完全なる統合をもくろんでいるのではないだろうか。その布石として、AutoRig【2】のツールなどが充実してきている。実際、ほんの数分程度で全身のセットアップを完了できるのは魅力的だ【3】。また、フェイシャルリグも同様にセットアップできる【4】。ほかにもPose Space DeformやアニメーションとDeformの連動など、ディテールを追加できるしくみも搭載された
キャラクターと言えばFurやHairは外せない。今回はVellumの追加があったことで、Furなどのシミュレーション精度や速度も大幅にアップしている。また、Furの生成や調整自体にもアップグレードの手が伸び、特にGuideのプロセッシングが高速になった。これは、よりインタラクティブにグルーミングが行えるということだ【5】。ベーシックなセットアップで見てみると、Guid Groom【A】の内部ではFurの調整が行えることがわかる。この機能自体はもともとあったものだが、シェルフに様々な調整ツールがまとまっていて、それを使うことで簡単にFurの調整が行え、さらに履歴も残っていくからありがたい【B】。あとは最終的なFurを生成すれば完了だ【6】。ここまでほんの数分で行えるから素晴らしい。ここまで設定しておけば、シミュレーションにもっていくことも容易にできる。後述するが、今回のFurはGameDevにまで気を配っており、SideFXの本気度が感じられる。プラグインを使用せずにここまで自在にFurを扱えるのはHoudiniくらいだろう。
MODELING
モデリングに関するアップデート
モデリング最大のアップデートは、主にUVまわりだと考える。今回のアップデートは、これまでのUV作業に終止符を打つための布石と言えるだろう。完全にプロシージャルなワークフローを組み上げることができるのだ。まず、新たに追加されたUV Auto Seam【A】だが、これは曲率などを基にしてシームを自動的に作成してGroupにしてくれる【1】。このGroupを基に、UV Flatten【B】を使って展開をする【2】。最後に、UV Layout【C】で綺麗に並べれば完了だ【3】。もちろん、完璧なUVを作成するにはまだ至らないし、気持ちの良い並べ方や効率の良い展開も難しい。ただ、これまでは完全なる手作業だったものがオートメーションに展開できるしくみが構築できるというだけでも、シチュエーションによっては大幅なコストの削減になるだろう。UVの作業は非常に大事だが、地味で手のかかるものだ。それをいかにしてコストダウンするかは、こういったアプローチが重要だと考えさせられる
今回のアップデートでは、もともとあったTopoBuildを基にPolyDrawが追加された。中身はTopoBuildだが、参照ジオメトリがなくてもゼロベースで作成していける。TopoBuild自体も非常に良いツールで、Houdiniらしからぬインタラクティブなツールだ。これを使えばリトポロジーやインタラクティブなトポロジードローイングが可能になる【4】
HeightFieldも改良されている。特に、HeightField Erodeは大きく進化した。まずは、これまで通りNoiseを使ってベースのFieldを作成し【5】、HeightField Erode【D】で毎フレームシミュレーションをかけることでリアルな侵食や堆積を計算することができる【6】。ただ、その反面、シミュレーションをする必要があるためリアルタイムでの確認は難しく、さらに解像度によっては高コストとなってしまう。ただ、そのリアルさを考えれば多少待つことが有益なのは言うまでもない。HeightFieldはMask処理が後工程で非常に重要になってくるため、ここでどういったMaskを作成すればよいか吟味する必要がある【7】。また、HeightField Scatterを使うことで、森や岩、石など、自然物を有機的に配置することも可能だ
[[SplitPage]]
OTHERS
その他のアップデート
ゲーム系のアップデートではglTF【1】のフォーマットサポートに加え、インポートとエクスポートが可能になった。これにより、WebGLなどでもHoudiniから直接読み書きができる。また、Furなどで作成したものをゲーム用にカードタイプ【2】のHairやFurに変換し、UV【3】も自動生成でベイクできるようになっている。ほかにもテクスチャベイクの改良や、GameDevツールセットなどがアップデートされている。直接的にゲーム向けではないが、SOPの機能が大幅に改良されているので、ゲームの開発環境に対しては十分貢献するものと言える
MantraではNVIDIA OptiX Denoiser(※)を新しく搭載した。これはAIによるデノイズ処理を行うフィルタで、サードパーティとして搭載されている。そのため別途インストールをしてパスを通す必要があるが、そんなに難解なものではないので、17を入れた機会に導入しておこう。通常のフィルタ【4】で検証したところ、ノイズがなくなるまでサンプリングを上げることは非常に難しいが、OptiX Denoiserを使用することで同じレンダリング時間でも非常に綺麗な結果を得ることができる【5】。フィルタのため後処理となるが、まずMantraのPixel FilterでNVIDIA OptiX Denoiserを設定しておき【A】、必要に応じてDenoiseをApplyすれば確認できる。このクオリティまでサンプリングを上げることを考えると、いかに重要なアップデートかわかる
※NVIDIA OptiXはWindowsとLinuxのみ対応でmacOSには未対応
時代のながれを汲み取った先端ツールとしてのアップデート
今回のレビューを機に、普段触らないような部分へ触れてみた。Houdiniの一部しか使用していない年月がかなり経過していたように思う。著者自身、ある程度仕事で使用する範囲は決まってきているのも事実で、なかなか新しい機能を習得できずにいたのだ。レビューを執筆する上では、新機能を使い倒すというよりその表面に触れて感じる程度でしかないのは重々承知で、それでいてなお今回のバージョンアップの素晴らしさを感じられたのは、誰の目にも明らかではないだろうか。近年ではゲーム業界向けのアップデートが強く感じられたが、今回は映像というエンターテインメントの古巣へ戻ってくるような印象を受けた。特にVellumに関しては非常にマルチな活躍が期待できる。汎用的でいて、圧倒的だ。これまでのHoudiniらしいスピード感とはかけ離れた速度で結果を求めることができる。GPUの恩恵も大きいのだろう。
Houdiniは常に時代のながれを汲み取り、そのトレンドの先端にいると思う。以前では考えられなかったような進歩だ。著者がHoudiniを最初に使いだした頃はDOPなどはなく、どのようにしてリアルに見えるものをつくり出すか試行錯誤しなくてはならなかった。今さら昔話をしても仕方がないのだが、そういったHoudiniの古い時代を知っているからこそ、なんだかVellumのような便利なものが愛おしいのである。
そのほかにも、かゆいところに手が届くようなアップデートを大量に入れ込んできたHoudini 17。リストにある全てを紹介することは叶わないが、実は隠れている素晴らしいアップデートもあったりするからHoudiniはやめられない。総評として満点以外のなにものでもないが、これはHoudiniユーザーであれば当たり前だと思う。良い意味で、それくらいHoudiniユーザーは自分たちのツールに甘く、多くを待ち望んでいるということなのだろう。