Alembic ファイル形式 (ABC)) は、複雑なアニメートされたシーンを非プロシージャルなアプリケーションに依存しないベイクされたジオメトリックな結果に抽出するコンピューター グラフィックスの相互交換フレームワークです。Unreal Engine 4 (UE4) では、Alembic Importer を使って Alembic ファイルをインポートすることができます。これにより、複雑なアニメーションを外部で作成してから UE4 に取り込んで、リアルタイムでレンダリングすることができます。
Alembic ファイルを、他の様々な方法と同様に UE4 に コンテンツをインポートする ことができます。
以下の Unreal Engine のライブストリームのアニメーションのトピックで Alembic ファイル インポータについてご覧いただくこともできます。
Alembic キャッシュをエクスポートする
お好みの DCC パッケージから Alembic キャッシュ ファイルをエクスポートする場合は、以下について考慮してください。
-
[File Menu] から、[Cache]、そして [Alembic Cache] に進み、ニーズに応じて [Export All to Alembic...] (または Selection) を選択します。
-
[Export] ウィンドウの [Advanced Options] で、[UV Write] と [Write Face Sets] のオプションを有効にし、[Export] をクリックします。
見つかった Face Set 名に基づきマテリアルが作成されるため、Unreal Engine 4 へのインポート中にマテリアルを作成する場合は、[Write Face Sets] を有効にする必要があります。
Alembic ファイルをインポートする
Alembic ファイルを Unreal Engine 4 にインポートするには以下の手順に従います。
-
コンテンツ ブラウザ で [Import] ボタンをクリックし、「.abc」ファイルを指定します。
-
インポートの方法やオプションの定義ができる [Alembic Cache Import Options] ウィンドウが開きます。ファイル名とインポート元の場所がウィンドウ上部に表示されます。ファイル内のアセットに対してインポート プロセスに含めるまたは除外するかを選ぶチェックボックス オプションも表示されます (上部のチェックボックスを使用して、すべてのトラックを含める / 除外することもできます)。
現在、Unreal Engine は 3 辺および 4 辺ポリゴンを含むメッシュのみをサポートしています。ジオメトリに 4 辺より多いポリゴンが含まれる場合、またはジオメトリが NURBS サーフェスまたは SubDiv サーフェスからできている場合、Alembic データのロードに失敗します。
スタティック メッシュとしてインポートする
インポート プロセス中に、コンテンツのインポート方法を定義することができます。デフォルトで、Alembic Import Type が Static Mesh に設定されます。

Alembic キャッシュをスタティック メッシュとしてインポートする場合、Sampling セクションの Frame Start 値で 1 つまたは複数のスタティックメッシュとして指定された単一のフレームをインポートします。そのフレームから Alembic アニメーションがスタティックメッシュとしてアニメーションなしでインポートされます。以下の設定も使用できます。
スタティック メッシュ オプション
設定 | 説明 |
---|---|
Merge Meshes | インポート時にスタティック メッシュをマージすることができます (オーバーラップする UV セットでは問題が生じることがあります)。 |
Propagate Matrix Transformations | メッシュをマージする前に、メッシュにマトリクス変換を適用するかどうかを指定します。(「マトリックス変換を継承する」を参照。) |
Generate Lightmap UVs | インポート時に ライトマップ UV を作成することができます。 |
Alembic ファイルをスタティック メッシュとしてインポートする際にデータに複数のメッシュが含まれる場合、[Merge Meshes (メッシュのマージ)] を選んで Unreal Engine 内で単一のスタティック メッシュを作成することができます。このオプションを無効にすると、Alembic ファイル内の各メッシュはマージされずに、代わりに個別のスタティック メッシュとして UE4 にインポートされます。
マトリックス変換を継承する
[Merge Meshes] を有効にする場合には、メッシュをマージする前に [Propagate Matrix Transformations (マトリックス変換を継承)] を有効にするかどうかも考慮する必要があります。これは Alembic ファイル内に含まれる変換データを使って、それをマージするときにメッシュに継承し、変換データを保持するようにします。
以下で作成するサンプルシーンを Alembic キャッシュとしてエクスポートします。

[Merge Meshes] と [Propagate Matrix Transformations] を選択して、ファイルをスタティック メッシュとして UE4 にインポートすると、以下のようになります。

[Merge Meshes] を選択しても [Propagate Matrix Transformations] のチェックを外すと以下のようになります。

各メッシュは、0,0,0 起点でマージされます。
サンプリング オプション

設定 | 説明 |
---|---|
Sampling Type | アニメーションのインポート中に行われるサンプリングのタイプです。
|
Frame Start | アニメーションのサンプリングを開始するための開始インデックスです。 |
Frame End | アニメーションのサンプリングを終了するための終了インデックスです。 |
Skip Empty Frames at Start of Alembic Sequence | 空の (プリロール) フレームをスキップし、実際にデータを含むフレームからインポートを開始します。 |
法線の計算オプション

設定 | 説明 |
---|---|
Force One Smoothing Group Per Object | スムージング グループを計算するのではなく、個々のオブジェクトに対して法線のスムージングを強制するかどうかを設定します。 |
Hard Edge Angle Threshold | 2 つの法線間の角度を鋭角とみなすかどうか (0 に近いほどよりスムーズになります) を決めるためにしきい値を使用します。 |
Recompute Normals | 強制的に法線の再計算を行うことができます。 |
Ignore Degenerate Triangles | タンジェントと法線を計算するときに縮退三角形を無視することができます。 |
法線の計算方法
以下に Import type に基づいて法線を計算する方法と、インポートするファイル内で法線を使用する方法の概要を示します。
- 全てのフレームに対して法線を含むファイルをインポートする場合:
-
スタティックメッシュ / ジオメトリ キャッシュの場合 : 既存の法線が使われます。
-
スケルタル メッシュの場合 : 最初のフレームの法線がスムージング グループを判断するために使用されます。これは、平均フレーム、およびすべてのベースとモーフ ターゲットの法線を計算するために使用されます (あらゆる場合にこれを行います)。
-
- 最初のフレームのみに法線を含むファイルをインポートする場合:
-
スタティックメッシュの場合 :フレーム 0 を使う場合、既存の法線が使われます。その他の場合、リクエストされたフレームに対してスムージング グループと法線を計算します。
-
ジオメトリ キャッシュの場合 : すべてのフレームに対してスムージング グループとその結果の法線を計算します。
-
- 法線を含まないファイルをインポートする場合:
- エンジンはスムージングしない法線を計算し、計算した法線に従いスムージング グループを生成し、そのスムージング グループで法線を再計算します。
[Recompute Normals] を有効にすると、上で指定したパスが使用されます (法線がない場合)。
スケルタル メッシュ としてインポートする場合に、アニメーションの法線のデルタが大きいと、適切な法線を取得できないことがあります。これは、モーフ ターゲットが面と頂点の法線を変更する方法によって生じる既知の問題です。この問題の回避策として、 (実験的) スキン キャッシュ機能を使うことができます。
この機能を [Project Settings (プロジェクト設定)] で有効にするには、[Support Compute Skincache] と [Force all skinned meshes to recompute tangents] オプションを使用します。
これにより、次にエディタを起動したときにシェーダが再コンパイルされます。Skeletal Mesh アセットを開くと、各マテリアル / セクションに対して [Recompute Tangent] オプションを有効にすることができます。
スムージンググループの計算方法
インポート中のメッシュでハードエッジが生じたら、[Hard Edge Angle Threshold] とスムージング グループの計算方法を確認した方が良いです。


スムージング グループを計算するには、まず頂点と面の法線を計算し、それを使って特定の面に対して接続されてすべての面を確認します。法線間の角度を計算することで、エッジがハードかソフトかを判断することができます (Maya のソフトエッジ / ハードエッジ ツールに類似)。以下の左側の画像はソフトエッジ、右側はハードエッジを表しています。これは、左側の画像内の 2 つの法線間の角度が、右側のものに比べて小さいためです。

このことから、Dot Product (内積) を使って 0 から 1 の範囲を閾値として生成し、ハードかソフトかを定義します。例えば、1 に近い値は角度が大きくなり、ハードエッジになります。0 に近い値はソフトエッジになります。次にこの情報を使ってソフトエッジを共有する法線グループを生成します。これらの各グループに対して面全体の法線をスムージングして、スムーズな面を作成します。
オブジェクト毎に強制的に 1 つのスムージング グループを設定すると、個々のオブジェクトが完全にスムーズになります (すべてソフトエッジ)。
ジオメトリ キャッシュとしてインポート
ジオメトリ キャッシュ としてインポートすると新しいタイプのアニメーション アセットが作成され、頂点が変化するシーケンスの再生が可能になります。

インポートされた Alembic アニメーションは、フレームのフリップブックとして再生され、パフォーマンスはメッシュの複雑度に応じて変わります。
ジオメトリ キャッシュには、スタティック メッシュ のインポート オプションと同じ [Sampling] 設定と [Normal Calculation] のオプションが含まれます。また、マテリアルとモーション ベクタに対するサポートが追加されます。このインポート メソッドには、見つかった Face Set 名に従い マテリアル を作成する機能があります (これは、外部アプリケーションで Face Set を定義して、Alembic キャッシュと共にエクスポートしないと機能しません)。モーション ベクターのインポートは、インポーターの Geometry Cache カテゴリの [Motion Vectors] オプションを変更することで有効になります。

Geometry Cache セクションの下部の小さな下向き矢印をクリックするとこれらのオプションが表示されます。
設定 | 説明 |
---|---|
No Motion Vectors (モーションベクターなし) | ジオメトリ キャッシュにモーション ベクターはありません。デフォルトで有効になっています。 このオプションを選択するとモーション ブラーがなくなります。 |
Import Abc Velocities as Motion Vectors (Abc ベロシティをモーションベクターとしてインポート) | Alembic ファイルからベロシティをインポートし、それをモーション ベクターに変換します。モーション ベクターはディスク上に保存されるため、ファイル サイズは増加します。 ジオメトリ キャッシュにトポロジー (アニメーション中に変わる頂点数) が含まれる場合、3D アプリケーションから頂点ベロシティをエクスポートし、このオプションを使用するようにしてください。 |
Calculate Motion Vectors During Import (インポート中にモーションベクターを計算) | インポート中にモーション ベクターの計算を強制します。モーション ベクターはディスク上に保存されるため、ファイル サイズは増加します。 ジオメトリ キャッシュにトポロジー (アニメーション中に変わる頂点数) が含まれない場合、このオプションを使用します。 |
モデルの頂点ベロシティを計算するためにモーションベクトルを含め、それらを使用してモーションブラーを計算します。
現時点では、Geometry Cache アセットはテッセレーションの設定に必要な隣接するバッファをサポートしていません。この回避策として、代わりにテッセレーションをサポートするモーフ ターゲットを設定して (このやり方でさらに圧縮されます)、アニメーションをスケルタル メッシュとしてインポートすることができます。
スケルタルとしてインポート
このインポート方式では、Alembic ファイルをスケルタル メッシュとしてインポートします。このメッシュには、ベース ポーズがモーフ ターゲットとしてを含まれており、これらをブレンドすることで正確なアニメーション フレームを実現します。頂点カウントが変わらない限りは、スケルタル メッシュとしてインポートするやり方は Alembic アニメーションを再生する上で最も効率の良い方法です。

インポート中にアニメーション シーケンスは 主成分分析 (PCA) のスキームを使って圧縮されます。このスキームでは、共通ポーズ (ベース) が抽出されるとともに重み付けされ、再生中にオリジナルのアニメーションが合成されます。スケルタル メッシュとしてインポートすると、[Sample]、[Normal Calculation] および [Create Materials] オプションに加えて、パーセンテージ (使用するベースの定数) も定義して、圧縮度を微調整することができます。
圧縮オプション
設定 | 説明 |
---|---|
Merge Meshes | 圧縮の目的で個々のメッシュをマージします。 |
Bake Matrix Animation | マトリックスのみのアニメーションを頂点アニメーションとしてベイクします。 |
Base Calculation Type | モーフ ターゲットとして保存する最終的なベースの数をどのように計算するかを決めます。
|
Percentage (Max Number) of Total Bases | モーフ ターゲットとして任意 (パーセンテージまたは定数) のベースを生成します。 これは圧縮レベルを決定する上で重要な要素の 1 つです。入力するベースの量を少なくすると、アニメーションはより圧縮されますが、アニメーションのディテールは失われます。逆に、入力するベースの数を多くすると、圧縮は少なくなりますが、アニメーションのディテールは保持されます。 |
Minimum Number Of Vertex Influence Percentage | モーフ ターゲットが有効であるために必要な影響を受ける頂点の最低限の数を設定します。 この設定では、定義された影響度に基づき、ベース ターゲットまたは モーフ ターゲットを決めることができます。たとえば、1000 の頂点を持つモデルがあって、ベースのひとつが 10 個の頂点だけに影響を与えるとします。 |
基点から大幅な頂点ディスプレースメントを含むアニメーションは、スケルタルメッシュの歪みを引き起こす可能性があります。[No Compression option for Base Calculation Type (基本計算タイプの圧縮オプションなし)] を選択して [Merge Meshes] を有効にするとこれを軽減することができます。