Unity hair触ってみた - 事前準備編
詳しいことは何も把握してないんですが、UnityのデモチームからHairというプロダクトが出てきました。
Unity hair! Real-time sim and rendering.
— rob cupisz (@robcupisz) 2022年8月11日
Wide range of realistic hair types and styles. Fur! Alembic groom import and procedural grooms.
Clustering/LODs for scalability. pic.twitter.com/GQudtsI8GX
Unity上ででリアルタイムに動くファーシェーダーで、現時点では上記の通りデモ扱いなのですが、どうやら本体への実装も予定されているようです。
Hi, and thanks. :) Yes, the plan is to bring it mainline once data and API has settled a while longer. Regarding scalability, the system already builds hierarchical LODs, and so far the simulation uses that data. We plan to use the data for rendering as well.
— Lasse J F Pedersen (@codeverses) 2022年8月10日
Githubはこちら https://github.com/Unity-Technologies/com.unity.demoteam.hair
で、どうやらデモ段階ながらUnity上で試せるようなので触ってみました。
インストール
Unity Package ManagerのGit URLインポートに対応しているので、URLを入力するだけで使えます。
Use Add package from git URL (in the Package Manager): https://github.com/Unity-Technologies/com.unity.demoteam.hair.git
Unity Package Managerについてはこちら https://docs.unity3d.com/ja/2019.4/Manual/upm-ui-giturl.html
使い方
- Hair assetを作成
- オブジェクトにHair Instanceをアタッチ
- ②をセットアップ(①で作ったアセットをセット)
- (必要に応じて)シェーダーを作成してマテリアルをはめ込む
Hair assetを作成
Packageがインポートできていると、Projectタブから右クリックでアセットを作成できる。
アセットのセットアップはInspectorから
自分もまだ全部はチェックできていないので、触ったところだけ軽く解説します
Settings Procedural
Hairの形状等の設定を行える。
Placement
- Primitive
- Custom
- Mesh
の3つから選べる。 ここで選んだ結果に応じて設定項目がいろいろ変わる。
基本的にはMeshを使うことになると思います。
Placement [Primitive]
あらかじめ用意されてる生成タイプ。 設定画面は以下のようになる。
Placement Primitive
- Curtain
- Brush
- Cap
- stratified Curtain
の4つから選べる。
それぞれ + Curtain
Hair(毛穴)が横一列に配置され、厚みがHair一本分しかない。(多分)変形もできない。
- Brush
板状に毛穴が配置され、Hairが生成される。2次元的な生成形状。こちらも変形は不可。
- Cap
半円状に毛穴が配置され、Hairが生成される。3次元的。
- Stratified Curtain
基本的にはCurtainと一緒だが、寄って見ると1つの毛穴から複数本Hairが出ているように見える。 詳しくは検証してないので良くは分かってないです。
(Stratified Curtainで生成したHair)
(Curtainで生成したHair)
そのほかの設定項目
- Strand Count 毛の本数の調整。 人間の頭なら 5000 ~ 20000 くらいが適切。
あまり多いとPCが固まるので注意。
Strand Particle Count 最初Particle? と思ったがおそらく物理演算の基準になる粒。髪の毛にあるある種の関節の個数のこと。 これが多いとHairがより綺麗にカーブするようになるが、多くしすぎるとPCが固まるので注意。
Strand Length Hairの長さ。
Strand Length Variation Hairの長さのばらつきの調整。 0-1の間で設定できるので、おそらく1 ~ Strand Length Varitaionの値で乱数をとって、Strand Lengthに乗算して用いられる。
設定すると以下のように毛先のばらつきなどを表現できる。
- Curl Hairの巻を調整。 うまく調整すればラーメン大好き小池さんみたいにできるかも? 軽く触っただけなのでどれくらいいけるかは不明…。
Placement [Mesh]
任意のMeshに髪の長さや生え方などをマップで指定できる結構自由度の高いモード。 実際に動物や人間の髪などを作成する場合は基本この指定になる。
設定画面は以下。
Placement Mesh Meshを指定。
Placement Mesh Groups 生成に用いるメッシュをメッシュグループ単位で指定できる。 例えば全身一体で人間のモデルを作ったときなんかは、頭部だけ指定して髪を生やすなどができるか。
Mapped Density 2階調画像でHairの有無を指定できる。
黒なら生成せず、白なら生成。 グラデーションなどは適用されないので注意。 Placement Mesh Groupとうまく使い分けたい。
- Mapped Direction 生成されるHairの向きを指定できる。
ちゃんと試せてないのだが、Specify object-space direction mapと書いてあるので、そのようにするとよさそう。 髪の毛の流れを作りたい時などに使いそう。
- Mapped Parameters RGBA4チャンネルにそれぞれ
R - Hairの長さ G - Hairの太さ B - Hairの巻き半径 A - Hairの巻き角度
が割り振られている。 G, B, A部分に関しては今回は未検証。
長さの調整は、前髪は短く後ろ髪は長く…といったときに重宝しそう。
残りはPrimitiveと一緒です。
Placement [Custom]
未検証
事前準備はこの辺で。 長くなったので分割します。