漢なら Maya Gen Interactive Grooming Spline を CyHair 形式に変換したいですね!
やりましょう!
コードはここにあります.
概要
髪の毛や Fur のデータフォーマットとして, CyHair フォーマットが有名です. http://www.cemyuksel.com/cyCodeBase/soln/using_hair_files.html
Maya XGen のカーブを CyHair 形式にしたくなりますね.
ただ, Maya XGen Interactive Grooming の機能では, なぜか Maya NURBS カーブに変換する機能がありません(内部表現が Spline だからでしょうか. Interactive Grooming では無い XGen 機能だと Maya NURBS に変換できます).
調べてみると XGen Spline API というのが提供されていて, これでスプラインデータにアクセスできるようになっています.
(Arnold とか VRay などのレンダラーではこれを介してカーブのデータをやりとりしているようですね)
XGen Spline API 経由ですと, いろいろとアトリビュートにもアクセスできるようなので, これを使ってみましょう.
(キャッシュを Alembic で Curves として書き出すことはできますが, Alembic だとアトリビュートが全部付与できるか? 不明)
Maya から XGen データを書き出す.
XGen Interactive Grooming Spline データは, 以下の MEL コマンドで, ファイルに書き出すことができます.
xgmExportSplineDataInternal -output "/path/to/export.xgen" "[description1]_Shape.outRenderData";
ここで [description1]
はノードの名前です. たとえば, xgen1
というノードがあったら, DAG 名(?)は _Shape.outRenderData
をつけた xgen1_Shape.outRenderData
となります.
この辺りの詳細は xgen の devkit あたりをあさってみてください.
XGen API を使う
xgmExportSplineDataInternal
で吐き出したデータを読み込むのに XGen C++ API を使います.
XGen C++ API は, OpenMaya API には依存していないので, スタンドアロンアプリとしてつくることができます.
ちなみに, XGen API を含んだバイナリを実行する時には, Maya のライセンスは求められないようです(もともと XGen は別アプリだったので, ライセンス認証のしようが無い?)
スタンドアロンアプリのビルド
基本的には XGen の include
と lib
にパスを通してあげれば問題なく使えます
詳細はコンバーターの CMakeLists.txt
あたりを参照ください.
OpenMaya などには依存していませんが, libclew
と libPtex
あたりだけ maya 本体の lib
への依存関係があるので, 実行時 LD_LIBRARY_PATH
でサーチパスを調整する必要あります.
CyHair ファイルをつかう.
コンバートした CyHair データは, PBRTv3 でレンダリングしてみたり,
cyhair_to_gltf https://github.com/syoyo/tinygltfloader/tree/master/examples/cyhair_to_gltf で OpenGL preview してみましょう!
Happy Hair/Fur rendering!
TODO
- Modifier のつき方によっては期待される形状がエクスポートされないので原因を究明する.
- XGen のファイルフォーマットは公開されているっぽいので, XGen API を使わずに自作で XGen ファイルをパースできないか検討する.
- Photobooth hair 形式にも対応する.
- 優秀な Maya XGen 若人が, XGen C++ API を使いこなすことで, 人類史上最速で優秀な Maya XGen Spline 変換若人へと昇華するスキームを確立する旅に出たい.