Houdiniを使い、BlenderのカーブデータをGroomHair用Alembicカーブに変換する
ライフワークの制作作業を切り出してみます。技術的な内容をどういう温度感で書けばよいか迷っています。とりあえず誰か必要な人に届くと嬉しいです。
概要
キャラモデルの眉毛をHairGroom製の髪と同じ質感にしたい。
Blenderのカーブは普通に書き出してもうまく読み込まれない。
Houdiniを経由することで、理想的なGroomアセットが作成できた。
検証に至った経緯
HairGroomとはUE4で髪を表現するための機能の一つです。Alembic形式で出力された「カーブ」を一本一本シェーディングします。
多くのDCCツールはカーブを髪として編集する機能があるため、カーブをそのままリアルタイムに持っていけるというのは直観的で良いのです。複雑で自然な表現もし易そうです。
将来性も感じますし、今後ゲームを作るうえで、髪表現はこの機能を中心に作っていこうと思いました。
↑現在製作中のモデルに簡易な髪を当ててみた図です。
HairGroomで製作を進めていく過程で、一つ問題に衝突ました。
すなわち、
「眉毛(やまつ毛)も髪と同じ質感で表現したい」。
もともと眉毛はBlenderMarketから
のものを流用させてもらっています。様々な形状の眉毛がそろっていて、地味に良い買い物をしたと思っています。
眉毛はカーブとして入っており、先の画像はそれをポリゴンに変換してから書き出していました。
↑EyeBrow Packを使った眉毛です。これくらいなら秒で作れます。
試してみたのですが、BlenderではカーブをAlembicエクスポートしても、UE4上でうまく読み込まれません。
BlenderからAlembicカーブを出力する方法は特殊で、カーブではなく、パーティクルヘアーを用いるようです。この辺りは発展途上なのか、少し整備が行き届いていない印象です。方法の詳細はこの方の動画が明るいです。今回は割愛します。
どういったデータであればAlembicカーブとしてインポートできるのか、検証をするにはアトリビュート単位で触れるHoudiniが便利だと考え、ためしてました。
Blenderで作った眉毛をHoudiniで加工しUE4でインポートする
①基となるカーブで構成されたデータを用意します。
基となるデータからカーブだけ取り出しました。
②このデータから「面」を取り除き、「頂点」のみのつながりを持ったデータとして書き出しが可能な状態にします。
"Object Data Property"→"Geometry"→"Bevel"→"Depth"を0に設定することでカーブから太さが無くなり面が無くなります。
③Objデータとして書き出します。
特別な設定は不要です。これでBlenderでの作業は完了です。
④Houdiniのジオメトリノード内でインポートします。
このとき、primnumを表示しておくと、次の結果が分かり易いです。
⑤PolyPath SOPノードを繋ぎます。
パッと見変化が分かりにくいですが、primnumを表示することで変化が一目瞭然です。各primitiveがカーブ単位で統合されていることが分かります。
⑥各pointに太さを定義します。
工程を細分して記載します。
⑥-1
UVTexture SOPノードをつなぎ、画像の設定にすれば、全てのカーブのポイントがUV空間のU方向に正規化された形で整列します。
⑥-2
各U座標から@widthを設定します。今回はPointWrangleでrampを使いました。ColorSOPを使うと、根本と末端は値が低く、中間部分は値が高いことが確認できます。
⑦alembicで書き出します。
特別な設定は不要です。これでHoudiniでの作業は完了です。
⑧UE4にインポートします。
眉毛のシェーディングが髪と同じになりました!素敵ですね。これで全工程が完了しました。
太さの設定がプロシージャルだったりします。
結果には満足。HDA化してワークフローに組み込むことが確定したのでした。
最後に雑記
こういった感じで、最近はキャラモデルを作っています。
理想のキャラモデル製作というのは本当に難しいですが、これが完成したら動画撮ったり雰囲気を作るのが捗るので踏ん張りどころです。
少なくとも髪を綺麗にしてあげたいですね。今はちょっとみすぼらしいので、目線を入れました。
そのうちキャラモデルの試行錯誤の変遷とかをnoteにアップできるといいですね。