2025年7月30日(水)に東京・ワテラスコモンホールで開催されたHoudiniセミナー「INSIDE OF DIGITAL ANIMAL~Houdini Grooming入門 ゴールデンレトリバーで学ぶ毛づくろいワークフロー~」のレポートをお届けする。

登壇者は、Wētā FXで映画『アバター:ウェイ・オブ・ウォーター』(2022)や『ホビット』3部作(2012〜14)など数々の大作を支えたシニアモデラーの西田健一氏。今回はゴールデン・レトリバーの毛並みを例に、Houdini Groomingの“リアルな制作過程”を3時間強にわたり徹底解説した。本レポートでは、セミナーのながれはそのままに、内容の一部を抜粋して紹介する。

記事の目次

    イベント概要

    INSIDE OF DIGITAL ANIMAL~Houdini Grooming入門 ゴールデンレトリバーで学ぶ毛づくろいワークフロー~

    開催日時:7月30日(水)15:00~19:00
    会場:ワテラスコモンホール
    参加費:無料 ※事前申込必要
    www.borndigital.co.jp/seminar/inside-of-digital-animal/

    全体のワークフローや作業環境

    西田氏はセミナー冒頭でまず、今回のアジェンダやQ&A、全体のワークフローについてスライドを用いて紹介した。

    ▲アジェンダ
    ▲作業環境やツールについて
    • ▲Q&A
    ▲ワークフロー

    ジオメトリのインポートと準備

    Houdiniでの作業に入る前に、モデリングとUV展開が完了したゴールデンレトリバーのジオメトリを準備する。モデルは2レベル用意され、Subdivideを1段階上げた状態で約14万ポリゴン、下げた状態で3万5千ポリゴン。この多段階のポリゴンモデルは、アセットの制作パイプライン全体で柔軟に活用される。

    ▲用意したモデル一覧。左端はシミュレーション用に筋肉と骨のモデル。下部に並ぶのは、テクスチャ作成やグルーミング作業の邪魔にならないように用意した、口を開けた状態や耳を開いた状態など4種類の頭部のバリエーション
    ▲選択中のモデルはSubdivideを1段階上げた約14万ポリゴンのモデル

    例えば、軽量な3万5千ポリゴンのモデルは、レイアウトやプリビズで使用できるほか、リグチームのウェイト調整やデフォーマ適用にも活用できる。最終的なレンダリングには14万ポリゴンの高密度モデルを使用する。

    「いきなりレベルを下げられないモデルをベースメッシュにするのではなく、レベルをひとつ落とせる状態にしておくことで、様々な用途に流用できるアセットになります。この方法は非常にオススメです」(西田氏)。

    なお、西田氏は無理にクワッドメッシュ(四角ポリゴン)だけでモデルをつくることにこだわらない。「トライアングル(三角ポリゴン)でもまったく問題ないと考えています。なぜなら、Subdivideを一度かければ全てクワッドになるからです。ただ、トライアングルを使うのはなるべく動きに影響のない、見えない部分の方が良いとは思います」とのこと。

    制作を進めるにあたり、2レベルのモデルに修正を施し、Houdiniと外部ツール間でモデルを行き来させるフローが頻繁に発生する。その際、Vertex IDは絶対に変更せず、UVのSmoothはOFFにしておく。これは、モデルの修正後にSubdivideをかけるタイミングで、UVがSmooth処理により意図せず変化してしまうことを防ぐために必要だ。

    「途中でUVに変更が入ると、リグチームなどから必ず注意されるでしょう。UVは絶対にずらさないようにしてください」(西田氏)。

    objコンテキスト内でサブネットワークを使用した管理方法

    Houdiniでのアセット制作において、西田氏は複数のコンテキスト間を行き来する煩雑さを避けるため、プロジェクトのほとんどの工程をobjコンテキスト内で完結させる手法を採用した。

    通常Houdiniでは、モデリング、ライティング、マテリアルといった各作業に特化したコンテキストが存在するが、西田氏はこれらをobjコンテキスト内から呼び出すかたちに統一することで、作業を一元管理しているのだ。

    「個人的にコンテキストの行き来があまり好きではなく、少し面倒に感じていました。そこで、Objectコンテキスト内でROP Networkなどを活用して各タブメニューを扱えるようにしたところ、非常に作業がしやすくなったんです」(西田氏)。

    この手法の最大の利点は、アセットの各要素(ジオメトリ、ガイド、グルーミング、ヘア、マテリアル情報など)が1ファイル内で明確に整理され、ノード間の接続がシンプルになる点にある。これにより、アセットを別の担当者や部署に引き渡す際も、必要な部分だけを簡単に抽出できる。

    西田氏はモデラーとして直感的に理解しやすく、管理しやすい構造を優先した結果、Houdiniを使い始めて間もない頃にこのワークフローを生み出すことができたそうだ。

    続いてグルーミング用のジオメトリを準備する。インポートしたジオメトリのクリーンアップやサイズ調整、アトリビュートの追加、プレビュー用ジオメトリの作成、グルームで使用するペイントマップ作成などがその内容だ。

    Guideカーブの作成とAttributeVOPを使用したPaintMapの管理

    グルーミング作業の核となるのがGuideカーブだ。毛の流れや形状を決定するこの工程は、最終的なファーのクオリティに直結するため、最も時間をかけるべき重要な部分となる。

    「Guideカーブの出来が、最終的な毛の見た目に大きく影響します。時間をかけて丁寧に作成することが大切です」(西田氏)。

    なお、GuideGroom 2.0以降、GuideGroomノードにリキャッシュ機能がなくなったため、ジオメトリの変更時にはGuide TransferやPoint Deformerなどのノードを用いてポーズを再調整し、その上でGuideカーブを再調整する必要がある。

    「この機能変更に対応するため、計画性が非常に重要になりました。計画なしに進めると、GuideGroomノードがいくつも増えて、ネットワークが複雑になってしまいます」(西田氏)。

    ここで西田氏は、Guideカーブの編集効率を高めるため、3つの視覚的な工夫を施している。

    1:先端のテーパー

    UV TextureノードのTexture TypeをArc Length Splineに変更し、VEXを記述することで、Guideカーブの先端が細くなるように調整し、最終的な毛の形を視覚的に確認しやすくした。

    ▲テーパー処理

    2:長さによる色分け

    MeasureノードでGuideカーブの長さを取得し、Colorノードで色を割り当てる。短い毛は青、長い毛は赤といったように色を変えることで、グルーミング時に毛の長さの変化が一目でわかる。

    ▲長さによる色分け

    3:選択部分のハイライト

    編集中のGuideカーブを他のカーブと区別できるようにハイライト表示させる。これはGroupノードとAttribute VOPノードを組み合わせて実現している。この手法は、毛が密集したエリアでの編集作業を大幅に効率化する。

    ▲選択部分のハイライト

    独自「Attribute Lab」による効率的なマップ作成

    ファーの生成に必要な複数のPaintingMapsは、Houdini内でペイントして作成する。西田氏はこれを「Attribute Lab」と名付け、Attribute VOPノードを使って、最小限のマスクから最大限のマップを生成するワークフローを構築している。

    「ペイントマップをノードネットワークの各所に分散させると管理が煩雑になります。全てのマップをこのAttribute Labに集約しておくことで、管理がしやすくなり、トライ&エラーも容易になります」(西田氏)。

    この手法では、マスクを個別にペイントするのではなく、マスクをコンポジットするように合成して新たなマップを作成する。これにより、後からいつでも各マスクをプロシージャルに変更・調整できる。

    ▲個別のマスクのアトリビュート(mask_body、mask_nose、mask_wisker mask_earなど)を全てMultiplyノードでかけ合わせ、微調整を経て出力した顔のDensity(密度)マップ。図は[Visualize Properties→Visualizers→Color Type]を[Ramped Attribute]で表示したところ

    Sub-Clumpingを使用したHairの作成とShader用アトリビュートの作成

    Guideカーブの作成後は、HairGenノードを使って実際にレンダリングされるファーを生成する。この工程と前工程(Guideカーブ作成)は頻繁に行き来する。毛を生やしてチェックし、Guideカーブを調整するという反復作業が、制作時間の多くを占める。

    今回はリアルな毛を表現するため、Clump(クランプ、大きな束)に階層構造をもたせている。

    ▲完成した階層構造のClump

    「実際の動物の毛はClumpだけでなく、その中からさらに細かい束に分かれています。レベル1、レベル2、レベル3と段階的にClumpを重ねていくこと(Sub-Clumping)で、より複雑でリアルなディテールが生まれます」。そして、この階層構造の途中でランダムなノイズやディテールを加えることで、さらに複雑なファーを表現していくという。

    ▲Random Maskで複雑なディテールを加える

    HairGenの設定完了後、次の工程であるシェーディングに必要なアトリビュートをあらかじめ作成する。メラニン(Melanin、色素)値、毛の長さ(length)、そしてArnoldの仕様に対応するためのUVの2番目のスロット(uv2)など、後工程でのスムーズな作業を可能にするための準備を行う。

    「Arnoldのデフォルト設定では、UVが毛に対してアサインされてしまうため、ジオメトリのUVパターンを反映させることができません。これを回避するために、既存のUVアトリビュートの名前を変え、uv2として出力します」(西田氏)。

    ▲Arnoldへの対応としてUVアトリビュートの名前を変更

    ノードのロック機能とその活用

    西田氏はノードをロックする機能も適宜活用しているという。この機能は、特定ノードから上流の計算を停止させ、ネットワークの処理速度を向上させるものだ。

    「ノードをロックすると計算がなくなるので待ち時間が短縮され、メモリ消費も少なくて済みます。ただし、ロックされたデータはファイルに一緒に保存されるため、ファイル容量が大幅に大きくなるというデメリットもあり、一長一短です」(西田氏)。

    質疑応答

    ここまででセミナー前半が終わり、いったん質疑応答セクションへ移った。

    Q:Clumpを3レベルに分けて作業しているということですが、レベルごとに何かを変えていますか?

    西田:マスクを使って特定の部位の毛の長さをランダムに変えたり、ランダムなノイズで毛をチリチリにしたりして、均一ではないリアルなルックを追求しています。

    Q:ClumpレベルごとにResampleノードを挟んでいるのはなぜですか?

    西田:理由は主に2つあります。ひとつは本当にサンプル数(解像度)を変えたい場合、もうひとつはCurve U Attributeを手っ取り早く付与したい場合です。後者の場合は、サンプル数は変えないようにMaximum Segment LengthのチェックボックスはOFFにします。

    ▲Curve U Attributeを手っ取り早く付与したい場合の設定

    Q:Attribute Paintノードでマスクを部位ごとに作成していましたが、あれは手作業ですか?

    西田:基本になるマスクは手作業で塗っています。ただ、ノイズやランダム、アンビエントオクルージョンなどのノードを使えば、手で塗る必要はない部分も多いです。どういう素材からどういうマップが必要かを計算し、手で描いたマップとノードで生成したマップを組み合わせています。手で描いたマップでも、トポロジーとUVが同じであれば犬種が変わった場合でも流用できるように、と考えながら構築しています。

    Q:ガイドカーブの個々の間隔はどのように決めているのですか?

    西田:特に決まりはありません。どれだけのディテールを入れたいかによります。毛のながれを細かく制御したい場所は密度を高くし、そうでない場所は少なめにしています。私は自動でできるツールは使わずに、1本1本手で植えることで、完全に自分でコントロールできる状態にしています。

    ▲西田氏は、コントロールしやすいようガイドカーブは1本1本手作業で植えている

    Q:Houdiniを覚えるところから2年間かけて制作したとのことですが、Houdiniを選んだ理由は何ですか?

    西田:理由はいくつかあります。まず、会社の案件でHoudiniが必要になってきたこと。また、以前はYetiで制作していたのですが、最終的にHoudiniに変換されることが多かったので、最初からHoudiniで制作した方がスムーズだと考えました。

    さらに、マッスルシミュレーションに使っていたZivaが使えなくなるタイミングで、ソフトを全てHoudiniに一元化するながれがあったことも大きいです。それと、海外のスタジオでもHoudiniがメインツールとして使われてきているというトレンドへの対応という側面もあります。

    様々な質感表現との組み合わせ

    セミナー後半はマテリアル設定のノウハウ解説からスタート。ファー表現の最終的な品質は、マテリアル設定に大きく左右される。西田氏は、プレビュー用とレンダリング用の2つのシェーダを用意し、Arnoldでレンダリングしている。

    今回、様々なファー表現に対応できる、ファーに特化したシェーダとしてArnoldのStandard Hairシェーダを採用。シェーダ設定はテンプレート化しておくことで作業の効率化も実現しているという。

    「使いそうな設定を複数、あらかじめつくっておくんです。それらを組み合わせることで、最終的なルック調整を短時間で済ますことができます。応用が効くので非常に便利です」(西田氏)。

    8つのシェーディングネットワークを作成

    ゴールデンレトリバーの毛の多様な質感は、様々なアトリビュートを組み合わせて表現しているが、今回は「Texture Mapping」、「Ramp Mapping」、「Length Value」、「ClumpID」、「Viewport Color」、「Blending ClumpID and Length」、「Guard Hair」、「Jaguar Pattern Sample」という8つのシェーディングネットワークを作成した。

    ▲シェーディングネットワークの全体像

    ジオメトリのUVパターンを毛に反映させるには、HoudiniのUVセットをデフォルトから2番に変更(UV Set 2、uv2)し、Imageノードでテクスチャを読み込む際のUVセットを「uv2」に指定する。

    ▲Texture MappingとRamp Mapping
    ▲UV Set 2に変更

    毛の長さに応じて色や質感を変化させたい場合は、User Data Floatノードでlengthアトリビュートを読み込み、Mixノードと組み合わせて使用する。また、ClumpIDアトリビュートを使用すると、ファーのClumpごとに異なる値を適用でき、メラニン値に幅をもたせるなどの調整が行える。

    ▲Length ValueとClumpID
    ▲lengthアトリビュートをMixノードに渡し、毛の長さに応じて色や質感を変化させる

    ビューポートで表示した色をそのままレンダリングできる「Viewport Color」は今回は未使用。「Blending ClumpID and Length」は「Length Value」と「ClumpID」をMixノードで混ぜるもの。

    ▲Viewport ColorとBlending ClumpID and Length

    「例えば、毛が長い胸の部分はメラニン値の差を大きくし、顔の部分は差を小さくするといった、リファレンスに忠実な表現ができます。これらのアトリビュートを組み合わせることで、単一のマテリアルでも非常に多様な質感を表現できます」(西田氏)。

    • ▲melanin_headのネットワーク

    最後の2つはサンプルとしてつくったもの。「Guard Hair」は部分的に長い毛などがほしい場合に利用する。「Jaguar Pattern Sample」はジャガーのファーの模様をメラニンで制御する例。

    ▲Guard HairとJaguar Pattern Sample

    AOVを使用したLightingシーンのセットアップとHDRILabの利用

    ライティングは、環境マップとスタジオライトの2種類を組み合わせて行なった。西田氏は「専門とする分野ではない」と断りつつ、効率的なワークフローについて紹介した。

    今回、背景画像をぼかす必要があったため、ライティング用のHDRと背景用のHDRを分けて作成している。この手法により、背景のぼかしや色味をライティングとは独立して調整できるというメリットがある。

    ▲例えば、図中の[domeLight_workshop]がライティング用HDRI。これはArnoldのContribution設定でカメラへの表示を無効(値を0)にし、ライティングのみに影響させる。その下の[domeLight_workshop_ENV]が背景用HDRI。こちらはContribution設定でカメラへの表示を有効(値を1)にし、ライティングへの影響を無効にする

    背景用HDR画像のブラーや調整は、Houdini内で完結するワークフローを構築している。Reference Imageノードを用いてHDRを読み込み、Blurノードでブラーをかけ、レンダリングして保存する。

    ▲Reference ImageノードでHDRを読み込む
    ▲Blurをかけてクロップし保存する

    「Photoshopなど外部ツールを使っても良いのですが、Houdini内で完結するワークフローにしておけば、ブラー値を調整してレンダリングし直すだけで自動的にアップデートできます。こっちの方がフレキシブルです」(西田氏)。

    Arnoldのレンダリング設定

    レンダリング設定はROPノードで一元管理する。ジオメトリとGroomヘア周りのROPノードを分け、最終的にレンダリングするものを集約してレンダリングする。

    今回西田氏はコンポジットでの調整を容易にするため、AOV(Arbitrary Output Variables)を積極的に活用。複数の環境を同時に見ることを目的に、ライトごとにライトグループを作成してAOVで出力した。AOV設定の注意点として、「rgba_ライトグループ名」という命名規則で出力することが重要となる。

    また、コンポジットでのマスク作成には、Crypto Matteを使用。Crypto MatteはAsset、Object、Materialの3種類があり、これらを適切に活用することで、Nukeなどでのコンポジット作業を効率化できる。

    なお、Crypto Matteのオブジェクトを使用する際は、事前にオブジェクトに名前を付けておき、メタデータの保存のためSave to Diskでレンダリングを行う(レンダービューからの保存ではメタデータは保存できない)。

    「Crypto Matteは今回初めて使ったのですが、とても使いやすかったですね。コンポジット作業が劇的に楽になりました」(西田氏)。

    なお西田氏は今回、レンダリングのノイズ除去に「OIDN」というデノイザーを試用した。「OIDNはルックデヴの初期段階で使うぶんにはとても良かったのですが、後処理で意図しない処理が入る場合があるので、後半はまったく使っていません。毛の表現ではフィルタをかけたくない部分が多いので、デノイザーの使いどころは難しいと感じました」(西田氏)。

    ▲NVIDIA OptiXとOIDNのデノイズ品質比較

    なお、Arnoldのデノイザーも試したそうだが、今回の毛の表現には合わなかったため使用しなかったとのこと。デノイザーはImagerノードから種類を選択できる。

    ファー制作の全貌を解説し通り終えた西田氏は、「Houdiniはプロシージャルなワークフローが得意なので、誰でも同じようなクオリティが出せるテンプレート化を狙っていきたい」と語った。そして、自身が現在取り組んでいる、鳥のフェザーツールに関するセミナーも開催したいという意欲を見せ、セミナーを締めくくった。

    3時間を超える密度の濃い講演となった「INSIDE OF DIGITAL ANIMAL」。閉会後は懇親会も開催され、Houdini一色に染まる1日となった。

    TEXT_kagaya(ハリんち
    EDIT_小村仁美 / Hitomi Komura(CGWORLD)