|
執筆バージョン: Unreal Engine 5.6
|
こんにちは!今回はストランドヘアをカード化するプラグインの使い方とそれにまつわることを解説したいと思います。
リアルタイムレンダリングやゲーム開発の現場において、キャラクターの「髪の毛」は常に技術的な挑戦の対象です。
映画のような高品質な「ストランドヘア(一本一本の毛束)」をそのままゲームに出せれば最高ですが、描画負荷の壁が立ちはだかります。
そこで重要になるのが、ストランドの見た目を維持しつつ、ポリゴン板にテクスチャを貼り付けた「ヘアカード」に変換する技術です。
Unreal EngineのHair Card Generatorプラグインは、バージョン 5.4 から試験的な機能(Experimental)として導入されました。
このプラグインを利用することで、ストランドベースの「グルームアセット」から、ポリゴンベースの「ヘアカード」をエンジン内で自動生成できるようになります。
ストランドヘアをヘアカード(板ポリゴンでの集積)にするため、Hair Card Generator のプラグインを有効化します。
ストランドヘアをMayaなどのDCCツールからインポートする場合はAlembic Importer、Metahumanで作成する場合はMetahuman Creatorをインポートする必要があります。
今回はDCCツールからインポートしてみたいと思います。
- MayaなどのDCCツールでHairを作成、Alembic形式で書き出し
まずは適当にHairを作成して、Alembic形式で書き出します。
mayaからの話になりますが、Alembic形式で書き出す場合、生成→キャッシュ→キャッシュの書き出し、キャッシュ→Alembicキャッシュ→選択項目をキャッシュに書き出しの二つの選択肢がありますが、設定が細かく、読み込めないことがあるので、私は前者の方法で行っています。

UEが読み取れる形式のABCでUEにドラッグ&ドロップすると以下のようなGroom Import Optionsがでてきます。
ここではUEのQuinnのFBXを回転のオフセットを入れています。Importボタンを押します。

Importできました。

インポートしたアセットを開いてみましょう。

普段とくらべてインターフェースが少なかったり、右上のタブが多かったりしますが、確認、調整したいのは2つのタブです。
1つは「Strand」タブの緑の枠線の中を指定します。


| Hair Width |
ヘアの幅をオーバーライド (cm)。 |
| Hair Root Scale |
ルートの髪の幅のスケール。 |
| Hair Tip Scale |
髪の先端のスケール。 |
| Hair Shadow Density |
シャドウ レンダリング時に髪カウントを増減するための髪の密度を制御します。これにより、ストランドの数が現実的でない場合に、髪に対するシャドウイングを増やしたり減らしたりすることができます。 |
| Hair Raytracing Radius Scale |
シャドウなどのレイ トレーシング エフェクトのための髪のジオメトリ半径をスケーリングします。 |
特に重要なのはHair Widthです。髪の幅を設定しないと、カード化した時に正しく出力されないので、値を入力しましょう。
次に「Cards」タブより、「Generate Hair Cards」をクリックします。
すると以下の設定が出てきます。

この中でカード生成を制御する主なパラメータは4つあります。
| カードの枚数 |
生成されるカードの枚数を制御します。多少変動があるので、目安です。 |
| テクスチャ数 |
テクスチャアトラスに含まれる固有テクスチャの数を制御します。テクスチャ数がカード数より少ない場合、一部のカードはテクスチャを共有します。 |
| 三角形の数 |
最終メッシュの目標三角形数を制御します。Triangles の値でヘア全体のポリゴン数を設定します。この値は目安です。Trianglesの値を大きくすれば、1枚あたりのカードメッシュが細かく分割されます。 |
| 最大フライアウェイカード数 |
フライアウェイカードとは、通常はメインの髪の流れに沿わない、1本の毛束を含むカードのことをさします。このパラメータは、生成されるフライアウェイカードの最大数を定義します。フライアウェイカードは、最終的な髪のリアリティを大幅に向上させることができますが、大量のジオメトリを使用するため、通常は最も低いLODで使用されます。 |
特に制御するのはカードの枚数、三角形の数が見た目を決めるので、まずはここを押さえればOKです。
あとは青いGenerate ボタンを押すことで、ストランドがヘアのカードメッシュに変換されます。この処理はそこそこ長い時間がかかります。
設定するカード枚数とポリゴン数が多いほど時間がかかります。
Force Regenerate にチェックを入れると、作成済みのカードメッシュがあっても再び作り直せます。
- カード化メッシュ作成後の設定とマテリアルのつなぎ方
Generateが完了すると、以下のとおり同階層にフォルダができます。


メッシュとテクスチャができました。役割がわかりませんね。
ここでもう一度Hairのアセットを開いて以下のタブを見てみるとテクスチャが指してあり、役割が書いてありました。

TS0:DepthR8画像
TS1:ConvergeR8(グレースケールのアルファ画像)
TS2:TangentRGB8
TS3:RootUV|CoordU|SeedRGB8
こんな感じです。
マテリアルがないので、metahumanで使われているマテリアルからそれっぽく作ってみようと思います。
Metahumanフォルダの中にある「M_hair_v4」を複製して使います。

中を開くといっぱい複雑でちょっと焦りますが、入力としてまとまっているのは下図のHair Attributeの所。
ここに出力されたテクスチャをさせばよさそうです。

それぞれのノードの役割は以下の通りです。
こんな感じに繋いでみました。

このマテリアルのインスタンス()を作成して、メッシュに割り当てます。
これを開いてみるとこんな感じでパラメータが色々あります。

・色々ありますが、特に重要なのは、
| hairMelanin |
0に近づくほど白くなって髪が染めやすくなる。 |
| hairRedness |
髪の毛の赤み。0に近づくほど、色が乗りやすくなる。 |
| HairRoughness |
ラフネス。 |
| Spec0 |
スペキュラ(下限) |
| Spec1 |
スペキュラ(上限) |
| hairDye |
髪の毛の染料の意味。この色で塗る。 |
他にも白髪を混じらせたり、Roughnessにランダムさを持たせたりできます。色々なパラメータがありますので、触ってみると楽しいかもしれません。

完成です!機会があれば使ってみてくださいね。