Epic が 2018 年に公開した Siren のデモは画期的なものでした。Siren の仮想的な髪は、従来型のカード ベースの技術を使ったもので、実際には大量にある個々の髪の毛の形状を近似するために、テクスチャを適用したメッシュに頼っていました。このアプローチは、トレードオフはありましたが、髪の毛のディテールの描画、正確なシェーディング、物理ベースのシミュレーションを実現するために、当時としては最適な選択肢でした。NVIDIA HairWorks は制作を進めるために役立ちましたが、HairWorks の使用は Unreal Engine 4.16 以降非推奨となっています。こうした事情から、すばらしいリアルタイムの髪と毛皮の表現が Unreal Engine にネイティブに実装されることが求められるようになりました。
新しいストランド ベースのワークフローでは、髪の 1 本 1 本を正確なモーションとともにレンダリングすることで、ビジュアルの品質を大幅に改善しました。Unreal Engine 4.24 では、髪のシェーダーとレンダリングの完全なシステムを導入します。このシステムでは、光源からのマルチ スキャタリング、レイ トレーシングを利用したシャドウ、視覚効果エディタ Niagara を使ったダイナミクス統合が可能です。
髪のグルームは Epic のマルチ スキャタリングのアプローチを使ってレンダリングされ、リアルなビジュアルを作り出す。
インポートのパイプライン
Unreal Engine 4.24 では、髪のレンダリングとシミュレーションに力を注いでいて、Alembic ファイル形式を使って既存のパイプラインと簡単に連携できるようになっています。命名規則ベースのスキーマを提供して、Ornatrix、Yeti、XGen などの DCC アプリケーションから静的なグルームをインポートしやすくしています。また、これは、髪に関するスタジオ独自のツールと連携するためのわかりやすい手段ともなります。このスキーマを使うと、「width (幅)」「color (色)」などの属性を Unreal Engine に転送できます。また、「guide (ガイド)」属性は、補間された髪のシミュレーションのために識別されます。複数のグループを 1 つの Alembic ファイルに収めるために「group_id (グループ ID)」を使用できます。髪のグルーミング アプリケーションとして人気の Ornatrix と Yeti を手がける優秀なチームと協力して、組み込みのサポートを提供します。これらのアプリケーションそれぞれが、Epic の定めた Alembic プロトコルに従って Unreal Engine 4.24 へとエクスポートするネイティブの機能を備えています。XGen で Epic の Alembic スキーマを使うためのガイドは、ドキュメントを参照してください。
インポートが完了すると、髪と毛皮をスケルタル メッシュにアタッチできるようになります。それぞれの髪の根本を、メッシュで最も近い三角ポリゴンにバインドします。こうすると、モーフとスキニングの変形が可能になります。これらの変形は、髪と毛皮を肌のアニメーションに合わせて制約するために不可欠です。
Biotic Factory のキャラクター アーティスト、Yuriy Dulich 氏によって Yeti で作成され、Unreal Engine でレンダリングされたダチョウのグルーム。
シェーディングとレンダリング
髪のストランドのレンダリングには、3 つの明確な課題が伴います。それは、エイリアシング、1 本の髪とライトとの関わり、そして髪の毛の間をバウンスするライトです。人間の頭には 10 万本ほどの髪が生えていて、太さは平均で直径約 0.1 mm です。髪が写っている画像を生成するには、各ピクセル内で目に見えるように複数の髪をレンダリングする必要があります。Unreal Engine のワークフローでレンダリングすると、インポートされた髪は個別のポリラインに変換され、カメラを向いた薄い三角形ストリップとしてレンダリングされます。
数千の髪を作成することから生じる問題として、このシステム内で、ライトの散乱がどの程度複雑化するかを考慮する必要があります。この問題には、Epic 独自の物理ベースの髪のシェーディング モデルで対処します。このモデルによって、1 本の髪の見た目がずっとリアルになります。
それぞれの髪のストランドを通るライトを正確に評価するために、Deep Opacity Maps とランタイムのボクセル化を組み合わせたものを使用します。髪を通り抜けるライトの量がわかったら、局所的なライトの散乱を評価します。そのために、マルチ スキャタリングのための概算として、dual scattering による近似を使用します。こうすると、Unreal Engine がより忠実に髪をレンダリングできます。特に、従来は困難であった明るいブロンドの髪のレンダリングが改善されました。
XGen で生成されて Unreal Engine にインポートされたグルーム。約 5 万のカーブを含む。
シミュレーション
髪のシミュレーションは Niagara の一部として実装されていて、GPU で利用できます。物理アセットを作成したら、シミュレーション ソルバーがボディのコリジョンを処理します。Niagara がセルフ コリジョンを処理します。平均速度フィールドに基づいて計算します。bend (曲がり)、stretch (伸び)、thickness (厚さ) などのパラメータが調整可能で、Niagara エディタを開くことなくアクセスできます。パフォーマンス
高密度のグルームには、数十万、あるいは数百万のストランドを簡単に含めることができます。そして各ストランドに数十の Control Vertex (CV) を含めることができます。この 2 つの要因の組み合わせが、インポート、レンダリング、シミュレーションのパフォーマンスに影響します。参考までに、ハイエンド PC でリアルタイムを実現するために、ロングヘアーについては平均で 5 万のストランドと比較的多くの CV、ショートヘアーについては平均で 20 万のストランドと比較的少ない CV を持つグルームを生成してきました。まとめ
Unreal Engine 4.24 でのカーブ ベースの実装は、リアルタイムの髪と毛皮の表現にとっての大きなマイルストーンであり、心が弾むようなものですが、これは始まりに過ぎません。今後も引き続き、システムの品質とパフォーマンスの改善に努めていきます。シェーディングとレンダリングについては、髪の繊維に対するライティングの反応を改善し、より正確なものにするためのパラメータの定義と選択を進めて、髪の双方向散乱分布関数 (BSDF) を強化する予定です。Unreal Engine のマルチ スキャタリングのアプローチは、リアルタイム環境で明るい色の髪をこれまでよりもうまく見せることができていますが、髪の品質をさらに向上させていきます。
さらに、コリジョンへの反応のアップグレード、弾性のあるマテリアルの改善、シミュレーション システムに対するアート面での制御の改善などを予定しています。将来のリリースでは、より大きく密度の高いグルームをサポートするための最適化を行う予定です。また、すべてのプラットフォームでの拡張性を確保するために、ローエンド デバイス向けにはカードの生成も検討しています。
何よりも、クライアントがすばらしいプロジェクトを完成させるために役立つ髪と毛皮のシステムを開発することが目的です。どうすればニーズに応えることができるか、ぜひフィードバックをお寄せください。この実験的機能は、すでにご利用いただけるようになっています。Unreal Engine をダウンロードして、ぜひお試しください。また、髪のレンダリングとシミュレーションのドキュメントもご覧ください。