2015年の会社創立以来、3DCGをコアにした技術力を武器に日本のコンテンツ業界を支えてきたGUNCY’S。2023年のUnreal Festでは、Unreal Engine 5Houdiniによるプロシージャルワークフローを用いたオリジナル映像作品のR&Dプロジェクトを発表し、大きな話題を呼んだ。本連載では、日本語でまだ情報の少ない先端技術を積極的に用い、そのプロジェクトを通して得た検証結果を広く公開していく。

記事の目次

    長田晃輝/Kouki Osada

    株式会社GUNCY’S所属CGIアーティストとして従事。モデリング、テクスチャリングやアセット管理を行うことが主。本プロジェクトでは上記に加えUEのアートワークを担当。

    株式会社GUNCY’S(グンシーズ)は、3DCGをはじめとする最先端テクノロジーを熟知したメンバーと独自の戦略・ユニークな提案などで、人々が思い描くあらゆるアイデアやイメージを実現・成功へと導く、現代版”軍師”集団。プロジェクトコンサルティングやデジタルコンテンツ制作・開発、教育・執筆・講演など様々な事業を執り行う。
    guncys.com

    はじめに

    皆様こんにちは、株式会社GUNCY’S CGIアーティストの長田です。

    前回はHoudiniを用いた建物の構築やUSD出力のワークフローについて解説しました。今回はよりミクロなモデルのディテールアップ、中でもプロップのダメージ表現にフォーカスして解説します。

    プロップのダメージ表現

    本プロジェクトは廃墟が舞台になっているため、経年劣化の表現として各プロップにダメージ表現を加える必要がありました。

    例えば、木製のものは経年劣化によって塗装がはがれたり、角が削れたりします。塗装のはがれはテクスチャで表現できますが、角の削れや凹み傷はモデル側で対応しなければなりません。

    そういったダメージ表現を、Houdiniを使って施していきます。

    おおまかな作業のながれ

    まずはダメージ加工のおおまかなながれを、Unreal Fest 2023で発表したスライドを使用して説明します。はじめに、基となるモデルを格子状にリトポロジーします。

    リトポロジーしたモデルにリメッシュをかけ、さらに角が丸くなるようスムースをかけて変形させます。この変形具合に重み付けをすることで、最終的な破損箇所をコントロールすることができます。

    こうして変形させたモデルと、基のモデルでブーリアンすることで角が削れたモデルを作成することができます。

    Unreal Fest 2023では上記の簡潔な説明に留まりましたが、次の項目から、さらに詳細な手順を紹介していきます。

    詳細な手順

    角の丸みをつくるブーリアン用モデル作成

    まずは基のモデルに対し、divideノードで格子状のセグメントを入れます。 これにはモデルの頂点間の距離をある程度均等にする目的があり、後々破損具合の重み付けをする際などに使用します。

    このdivideしたモデルは後にも使うので、便宜上「モデルA」としておきます。続いて、このモデルを Remeshノードを用いてリメッシュします。

    これにAttribute Blurノードでスムースをかけ、角を丸くします。

    また、この段階では、モデルAを完全に覆いつくせる程度にPeakノードでモデルを膨張させます。

    自然な不均等さを付けるため、Mountainノードでノイズも加えます。

    これで角の丸みを作るためのモデルができました。このモデルを「モデルB」とします。次は凹み傷のためのモデルをつくります。

    凹み傷をつくるブーリアン用モデル作成

    モデルAの表面にScatterノードで点群を生成します。

    また、Attribute Randomizeノードでスケールをランダムに変更することで凹みの大きさにばらつきをつくります。

    画像は、点群の位置がわかりやすいよう可視化しています。この点群に配置するためのモデルを球体から作成します。

    Attribute Noiseノードでノイズを加え変形させます。

    先ほどの点群に、変形させた球体をCopy to Pointsノードで配置します。

    これで凹み傷のためのモデルができました。このモデルを「モデルC」とします。

    二つのブーリアン用モデルの統合

    モデルB、モデルCを、それぞれVDB from Polygonsノードでボリュームに変換します。

    VDB CombineノードのSDF Differenceオペレーションで、モデルBのボリュームからモデルCのボリュームの範囲をくりぬきます。

    Convert VDBノードでボリュームをポリゴンに変換します。

    これで角の丸みと凹み傷をつくるブーリアン用モデルができました。このモデルを「モデルD」とします。

    木材の破損具合の重み付け

    モデルAに対し、より破損させたい箇所をAttribute Paintでウェイトペイントします。

    このウェイトを、Attribute TransferでモデルDに転写します。

    Attribute Blurでウェイトをぼかします。

    このウェイトを用いて、Soft PeakノードでモデルDを縮小します。

    モデルDを縮小したことにより、モデルAとの交差範囲がつくれました。重み付けに従って縮小したため、重み付けされた部分がよりモデルAと干渉している状態=ブーリアンで削られる状態になっています。

    ブーリアン

    最後に、モデルAとモデルDをブーリアンさせると、ダメージ表現の入った木材の完成です。

    完成

    完成したモデルに質感を付け、UE5に取り込んだ結果が以下の通りです。自然な凹凸のついた高クオリティな木材をつくることができました。

    マテリアルは異なりますが、本編に登場する階段の手すりも同様のフローで作成しました。手すり全体にランダムな傷が付いているのが確認できるかと思います。

    まとめ

    今回はHoudiniで木材にダメージ表現を追加する方法について解説しました。こうしたしくみを一度作ってしまえば、同様の高クオリティなモデルを量産できるのがHoudiniの強みだと思います。皆さんもぜひHoudiniでのモデリングに挑戦してみてください。

    ここまでお読みいただきありがとうございます。次回からはSubstance Designerについて解説しますので、ぜひお楽しみに!

    TEXT_長田晃輝/ Kouki Osada(GUNCY'S)
    EDIT_藤井紀明 / Noriaki Fujii(CGWORLD)、山田桃子 / Momoko Yamada