Alembic ファイル形式 (ABC)) は、複雑なアニメートされたシーンを非プロシージャルなアプリケーションに依存しないベイクされたジオメトリックな結果に抽出するコンピューター グラフィックスの相互交換フレームワークです。Unreal Engine 4 (UE4) では、Alembic Importer を使って Alembic ファイルをインポートすることができます。これにより、複雑なアニメーションを外部で作成してから UE4 に取り込んで、リアルタイムでレンダリングすることができます。
Alembic ファイルを、他の様々な方法と同様に UE4 に コンテンツをインポートする ことができます。
以下のアンリアル エンジンのライブストリームのアニメーションのトピックで Alembic ファイル インポーターについてご覧いただくこともできます。
Alembic キャッシュをエクスポートする
Autodesk Maya から Alembic キャッシュをエクスポートする方法:
-
[File Menu] から、[Cache]、そして [Alembic Cache] に進み、ニーズに応じて [Export All to Alembic...] (または Selection) を選択します。
-
[Export] ウィンドウの [Advanced Options] で、[UV Write] と [Write Face Sets] のオプションを有効にし、[Export] をクリックします。
UE4 へのインポート中にマテリアルを作成する予定があれば、[Write Face Sets] を有効にする必要があります。マテリアルは見つかった Face Set Name に基づき作成されるからです。
Alembic ファイルをインポートする
Alembic ファイルを UE4 にインポートするには以下の手順に従います。
-
コンテンツ ブラウザ で [Import] ボタンをクリックし、「.abc」ファイルを指定します。
-
インポートの方法やオプションを定義できる [Alembic Cache Import Options] ウィンドウが開きます。ファイル名とインポート元の場所がウィンドウ上部に表示されます。ファイル内のアセットに対してインポート プロセスに含めるまたは除外するかを選ぶチェックボックス オプションも表示されます (上部のチェックボックスを使用して、すべてのトラックを含める / 除外することもできます)。
現在、Unreal Engine は 3 辺および 4 辺ポリゴンを含むメッシュのみをサポートしています。ジオメトリに 4 辺より多いポリゴンが含まれる場合、またはジオメトリが NURBS サーフェスまたは SubDiv サーフェスからできている場合、Alembic データのロードに失敗します。
スタティックメッシュとしてインポートする
インポート プロセス中に、コンテンツのインポート方法を定義することができます。デフォルトで、Alembic Import Type が Static Mesh に設定されます。
![ImportType_01.png](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/46aa662a-1141-41af-931f-68c54acde0ee/importtype_01.png)
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 キャッシュとしてエクスポートする作成した以下のサンプルシーンをご覧ください。
![](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/a80f64a6-5539-4c80-b6c3-f4f6cf4239e5/mayaobjects.png)
[Merge Meshes] と [Propagate Matrix Transformations] を選択して、ファイルをスタティックメッシュとして UE4 にインポートすると、以下のようになります。
![](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/4111ec3d-fc50-4ec8-893f-db49e7dea2a8/importmesh1.png)
[Merge Meshes] を選択しても [Propagate Matrix Transformations] のチェックを外すと以下のようになります。
![](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/145a336f-ea62-40b1-be7f-37b741ec8d9c/importmesh2.png)
各メッシュは、0,0,0 起点でマージされます。
サンプリング オプション
![Alembic Sampling options Alembic Sampling options](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/3027955a-326a-472d-8c67-ca21741be505/alembicsampling.png)
設定 | 説明 |
---|---|
Sampling Type | アニメーションのインポート中に行われるサンプリングのタイプ
|
Frame Start | アニメーションのサンプリングを開始するための開始インデックスです。 |
Frame End | アニメーションのサンプリングを終了するための終了インデックスです。 |
Skip Empty Frames at Start of Alembic Sequence | 空の (プリロール) フレームをスキップし、実際にデータを含むフレームからインポートを開始します。 |
法線の計算オプション
![Alembic Normal Calculation options Alembic Normal Calculation options](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/f2cbbacb-5170-4976-8420-e2447cb47771/alembicnormalcalc.png)
設定 | 説明 |
---|---|
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] とスムージング グループの計算方法を確認した方が良いです。
![1.0 Hard Edge Angle](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/8c6cc6f8-1009-4b19-8582-cb44273c7394/notsmooth.png)
![0.0 Hard Edge Angle](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/2fdac493-e02c-4173-932e-450adcbe1456/smooth.png)
スムージング グループを計算するには、まず頂点と面の法線を計算し、それを使って特定の面に対して接続されてすべての面を確認します。法線間の角度を計算することで、エッジがハードかソフトかを判断することができます (Maya のソフトエッジ / ハードエッジ ツールに類似)。以下の左側の画像はソフトエッジ、右側はハードエッジを表しています。左側の画像内の 2 つの法線間の角度は、右側のものに比べて小さくなっているからです。
![](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/a133b208-ac4c-42fa-b939-f73078bad0be/normalsexample.jpg)
このことから、Dot Product (内積) を使って 0 から 1 の範囲を閾値として生成し、ハードかソフトかを定義します。例えば、1 に近い値は角度が大きくなり、ハードエッジになります。0 に近い値はソフトエッジになります。次にこの情報を使ってソフトエッジを共有する法線グループを生成します。こうした各グループに対してスムーズな面を作成する面全体で法線をスムージングします。
オブジェクト毎に強制的に 1 つのスムージング グループを設定すると、個々のオブジェクトが完全にスムーズになります (すべてソフトエッジ)。
ジオメトリ キャッシュとしてインポート
ジオメトリ キャッシュ としてインポートすると新しいタイプのアニメーション アセットが作成され、頂点が変化するシーケンスの再生が可能になります。
![](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/7f86d534-f354-4d26-9655-7f95afdd27d8/import04_gc.png)
インポートされた Alembic アニメーションは、フレームのフリップブックとして再生され、パフォーマンスはメッシュの複雑度に応じて変わります。
ジオメトリ キャッシュには、スタティックメッシュ のインポート オプションと同じ [Sampling] 設定と [Normal Calculation] のオプションが含まれます。また、マテリアルとモーション ベクタに対するサポートが追加されます。このインポート メソッドには、見つかった Face Set 名に従い マテリアル を作成する機能があります (これは、外部アプリケーションで Face Set を定義して、Alembic キャッシュと共にエクスポートしないと機能しません)。モーション ベクターのインポートは、インポーターの Geometry Cache カテゴリの [Motion Vectors] オプションを変更することで有効になります。
![Enabling Motion Vectors Enabling Motion Vectors](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/6d933c2a-4844-42e8-aa42-3143387f4715/motionvector.png)
Geometry Cache セクションの下部の小さな下向き矢印をクリックするとこれらのオプションが表示されます。
設定 | 説明 |
---|---|
No Motion Vectors | ジオメトリ キャッシュにモーション ベクターはありません。デフォルトで有効になっています。 このオプションを選択するとモーション ブラーがなくなります。 |
Import Abc Velocities as Motion Vectors | Alembic ファイルからベロシティをインポートし、それをモーション ベクターに変換します。モーション ベクターはディスク上に保存されるため、ファイル サイズは増加します。 ジオメトリ キャッシュにトポロジー (アニメーション中に変わる頂点数) が含まれる場合、3D アプリケーションから頂点ベロシティをエクスポートし、このオプションを使用するようにしてください。 |
Calculate Motion Vectors During Import | インポート中にモーション ベクターの計算を強制します。モーション ベクターはディスク上に保存されるため、ファイル サイズは増加します。 ジオメトリ キャッシュにトポロジー (アニメーション中に変わる頂点数) が含まれない場合、このオプションを使用します。 |
モデルの頂点ベロシティを計算するためにモーションベクトルを含め、それらを使用してモーションブラーを計算します。
現時点では、Geometry Cache アセットはテッセレーションの設定に必要な隣接するバッファをサポートしていません。この回避策として、代わりにテッセレーションをサポートするモーフ ターゲットを設定して (このやり方でさらに圧縮されます)、アニメーションをスケルタル メッシュとしてインポートすることができます。
スケルタルとしてインポート
このインポート方式では、Alembic ファイルをスケルタル メッシュとしてインポートします。このメッシュには、ベース ポーズがモーフ ターゲットとしてを含まれており、これらをブレンドすることで正確なアニメーション フレームを実現します。スケルタルメッシュとしてインポートするやり方は、頂点カウントが変わらない限り、Alembic アニメーションを再生する最も効率が高い方法です。
![](https://d1iv7db44yhgxn.cloudfront.net/documentation/images/7c61bbcb-5575-4280-b05e-0cd8e0e76324/import04_sk.png)
インポート中、アニメーション シーケンスは Principal Component Analysis (PCA) スキームを使って圧縮されます。共通ポーズ (ベース) が抽出されて、ウェイト付けされて再生中にオリジナルのアニメーションを合成します。スケルタルメッシュとしてインポートすると、Sample、Normal Calculation および Create Materials オプションに加えて、パーセンテージ (使用するベースの定数) も定義して、圧縮度を微調整することができます。
圧縮オプション
設定 | 説明 |
---|---|
Merge Meshes | 圧縮の目的で個々のメッシュをマージします。 |
Bake Matrix Animation | マトリックスのみのアニメーションを頂点アニメーションとしてベイクします。 |
Base Calculation Type | モーフ ターゲットとして保存する最終的なベースの数をどのように計算するかを指定します。
|
Percentage (Max Number) of Total Bases | モーフ ターゲットとして任意 (パーセンテージまたは定数) のベースを生成します。 これは圧縮レベルに関する重要な部分のひとつです。入力するベースの量を少なくすると、アニメーションはより圧縮されますが、アニメーションのディテールは失われます。逆に、入力するベースの数を多くすると、圧縮は少なくなりますが、アニメーションのディテールは保持されます。 |
Minimum Number Of Vertex Influence Percentage | モーフ ターゲットが有効であるために必要な影響を受ける頂点の最低限の数を設定します。 この設定では、定義された影響度に基づき、ベース ターゲットまたは モーフ ターゲットを決めることができます。たとえば、1000 の頂点を持つモデルがあって、ベースのひとつが 10 個の頂点だけに影響を与えるとします。 |
基点から大幅な頂点ディスプレースメントを含むアニメーションは、スケルタルメッシュの歪みを引き起こす可能性があります。[No Compression option for Base Calculation Type (基本計算タイプの圧縮オプションなし)] を選択して [Merge Meshes] を有効にするとこれを軽減することができます。