テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】UnityでAlembicを使ってみる

Package ManagerにAlembicが追加されたので、試してみました。

Alembicとは?

Alembic for Unityの説明が分かりやすいので引用します。

Alembic は主に映像業界で使われているデータフォーマットで、巨大な頂点キャッシュデータを格納するのに用いられます。 映像業界では、スキニングやダイナミクスなどのシミュレーション結果を全フレームベイクして頂点キャッシュに変換し、それを Alembic に格納してレンダラやコンポジットのソフトウェアに受け渡す、というような使い方がなされます。
Alembic 本家: http://www.alembic.io/

要するにモデルをボーンで変形させるのではなく、頂点まるごとストリーム再生する的な感じでしょうか。おかげで、下のような水のシミュレーションも比較的低負荷で再生することが出来るみたいです。

f:id:tsubaki_t1:20190228135324g:plain
Alembic for Unityのページより引用

Unity PackageにAlembic Importerが追加

先日、Alembic ImporterがPackage Managerに追加されました。しかもPreviewをすっ飛ばして最初からリリースされています。

f:id:tsubaki_t1:20190227222731j:plain
PackageManagerから確認出来る

それもそのはずで、本質的にはGithubで公開されているAlembic for Unityを使用しているっぽいです。正確には若干異なるみたいですが、まぁ確かに実績のあるシステムなので、最初から問題が無いと判断したのでしょう。

ということでUnity 2018.3で導入してみると導入出来ません。

f:id:tsubaki_t1:20190227223146j:plain
Unity 2018.3でAlembicを導入してみた結果

どうやらPackage ManagerのAlembicはTimelineのパッケージを要求するみたいです。

つまりPackageのAlembicが使えるのは実質的には2019.1からで、まだTimelineがPackage化していないUnity 2018.3では使えません。その場合は普通にGithubのAlembic for Unityを使うのが良さそうです。

github.com

使い方

使い方に関して言えば、正直Githubのリポジトリにある説明が詳しいです。

日本語のマニュアルがあります。一部若干違う部分もあるかもしれませんが、多分フィーリングで何とかなります。

実際に試してみる

実際に試してみます。

とは言え、Alembic(.abc)ファイルを見つける事が出来なかったので、とりあえずAlembicをExportしてImportしてみます。

まず最初に シーンの動きをAlembicとして出力 してみます。

適当なオブジェクトに Exportコンポーネント(Package managerならば Alembic Exportコンポーネント)を追加します。あとはBegin Recordingボタンを押してゲームを再生→終了です。ゲームを終了するとレコードも停止します。

https://user-images.githubusercontent.com/1644563/53494896-17555900-3ae2-11e9-82df-0227bf332dc3.gif

これで .abc ファイルがOutputフォルダに出力されます。

f:id:tsubaki_t1:20190227225125j:plain
プロジェクトフォルダ/Outputにファイルが出力された

コレをUnityに再インポートして使ってみます。

Alembic 導入後は普通にドラッグ&ドロップで .abc が使えます。ただしインポート直後はマテリアルが剥がれているので、設定する必要があります。マテリアルの設定は普通のUnity的なマテリアル設定手順です。

マテリアル差し替える時に気づいたのですが、出力前はSkinnedMeshRendererだった物もすべてMeshRendererに差し替わっています。ボーンベースのスキニングではなく、頂点を動かしているという事でしょう。

f:id:tsubaki_t1:20190227225622j:plain
導入直後はマテリアルが剥がれている

マテリアル設定後はAlembic Stream PlayerのTimeを動かしたり、TimelineのAlembic Trackを使用することでストリーム再生が出来るみたいです。

f:id:tsubaki_t1:20190227230142g:plain

感想

自分の出来る範囲内では、以前紹介したRecorderと似たような立ち位置ですが、Alembicはストリームで再生出来るという点で良いように思います。代わりに .abcファイルはStreamingAssets等のUnityが観測しないIOに入れる事になりますが、逆にAssetBundleを使わず使えるので、利点の一つといえるのかもしれません。

正直、VRは幾つかのインタラクティブ要素を除いたらAlembic等をストリームで流し込む方が理に適ってるんじゃないかなと個人的には思わなくも(モバイルだとIO周りで詰まりそうですが)

関連

Recorderを使用するアプローチ

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

blogs.unity3d.com

www.youtube.com