【Unity】UnityでAlembicを使ってみる
Package ManagerにAlembicが追加されたので、試してみました。
Alembicとは?
Alembic for Unityの説明が分かりやすいので引用します。
Alembic は主に映像業界で使われているデータフォーマットで、巨大な頂点キャッシュデータを格納するのに用いられます。 映像業界では、スキニングやダイナミクスなどのシミュレーション結果を全フレームベイクして頂点キャッシュに変換し、それを Alembic に格納してレンダラやコンポジットのソフトウェアに受け渡す、というような使い方がなされます。
Alembic 本家: http://www.alembic.io/
要するにモデルをボーンで変形させるのではなく、頂点まるごとストリーム再生する的な感じでしょうか。おかげで、下のような水のシミュレーションも比較的低負荷で再生することが出来るみたいです。
Unity PackageにAlembic Importerが追加
先日、Alembic ImporterがPackage Managerに追加されました。しかもPreviewをすっ飛ばして最初からリリースされています。
それもそのはずで、本質的にはGithubで公開されているAlembic for Unityを使用しているっぽいです。正確には若干異なるみたいですが、まぁ確かに実績のあるシステムなので、最初から問題が無いと判断したのでしょう。
ということでUnity 2018.3で導入してみると導入出来ません。
どうやらPackage ManagerのAlembicはTimelineのパッケージを要求するみたいです。
つまりPackageのAlembicが使えるのは実質的には2019.1からで、まだTimelineがPackage化していないUnity 2018.3では使えません。その場合は普通にGithubのAlembic for Unityを使うのが良さそうです。
使い方
使い方に関して言えば、正直Githubのリポジトリにある説明が詳しいです。
日本語のマニュアルがあります。一部若干違う部分もあるかもしれませんが、多分フィーリングで何とかなります。
実際に試してみる
実際に試してみます。
とは言え、Alembic(.abc)ファイルを見つける事が出来なかったので、とりあえずAlembicをExportしてImportしてみます。
まず最初に シーンの動きをAlembicとして出力 してみます。
適当なオブジェクトに Exportコンポーネント
(Package managerならば Alembic Exportコンポーネント
)を追加します。あとはBegin Recordingボタン
を押してゲームを再生→終了です。ゲームを終了するとレコードも停止します。
これで .abc
ファイルがOutputフォルダに出力されます。
コレをUnityに再インポートして使ってみます。
Alembic 導入後は普通にドラッグ&ドロップで .abc が使えます。ただしインポート直後はマテリアルが剥がれているので、設定する必要があります。マテリアルの設定は普通のUnity的なマテリアル設定手順です。
マテリアル差し替える時に気づいたのですが、出力前はSkinnedMeshRendererだった物もすべてMeshRendererに差し替わっています。ボーンベースのスキニングではなく、頂点を動かしているという事でしょう。
マテリアル設定後はAlembic Stream PlayerのTimeを動かしたり、TimelineのAlembic Trackを使用することでストリーム再生が出来るみたいです。
感想
自分の出来る範囲内では、以前紹介したRecorderと似たような立ち位置ですが、Alembicはストリームで再生出来るという点で良いように思います。代わりに .abc
ファイルはStreamingAssets
等のUnityが観測しないIOに入れる事になりますが、逆にAssetBundleを使わず使えるので、利点の一つといえるのかもしれません。
正直、VRは幾つかのインタラクティブ要素を除いたらAlembic等をストリームで流し込む方が理に適ってるんじゃないかなと個人的には思わなくも(モバイルだとIO周りで詰まりそうですが)
関連
Recorderを使用するアプローチ