管理內(nèi)容-Alembic文件導(dǎo)入器

Alembic文件格式(.abc)是一個開放的計算機圖形交換框架,它將復(fù)雜的動畫化場景濃縮成一組非過程式的、與應(yīng)用程序無關(guān)的烘焙幾何結(jié)果。虛幻引擎4(UE4)允許你通過?Alembic導(dǎo)入器?導(dǎo)入你的Alembic文件,這讓你可以在外部自由地創(chuàng)建復(fù)雜的動畫,然后把它們導(dǎo)入UE4并實時渲染它們。
導(dǎo)入Alembic文件的方式類似于其他幾種導(dǎo)入內(nèi)容到UE4的形式。
你還可以觀看動畫主題的虛幻引擎實時流送,其中包括Alembic文件導(dǎo)入器:
https://www.youtube.com/watch?v=h2egrj1pXzw&embeds_euri=https%3A%2F%2Fdocs.unrealengine.com%2F&feature=emb_imp_woyt
導(dǎo)出Alembic緩存
如需從Autodesk Maya導(dǎo)出Alembic緩存:
在?文件菜單(File Menu)?中,在?緩存(Cache)?和?Alembic緩存(Alembic Cache)?下,根據(jù)需要選擇?全部導(dǎo)出到Alembic...(Export All to Alembic...)(或?選擇(Selection))。

2.在?導(dǎo)出(Export)?窗口中,在?高級選項(Advanced Options)?下,啟用?UV寫入(UV Write)?和?寫入面集(Write Face Sets)?選項,然后單擊?導(dǎo)出(Export)。

如果打算在導(dǎo)入虛幻引擎4的過程中創(chuàng)建材質(zhì),你需要啟用?寫入面集(Write Face Sets),因為材質(zhì)是基于找到的面集名稱創(chuàng)建的。
導(dǎo)入Alembic文件
要將Alembic文件導(dǎo)入到虛幻引擎4,請執(zhí)行以下操作:
在?內(nèi)容瀏覽器(Content Browser)?內(nèi),單擊?導(dǎo)入(Import)?按鈕并指向你的?.abc?文件。

2.在?Alembic緩存導(dǎo)入選項(Alembic Cache Import Options)?窗口中,你可以定義用于導(dǎo)入的方法/設(shè)置。此處還會顯示導(dǎo)入文件的名稱和位置,并列出文件中的資產(chǎn)。你可以通過資產(chǎn)旁的復(fù)選框來選擇是否導(dǎo)入它們(頂部的復(fù)選框能讓你批量選擇要導(dǎo)入的資產(chǎn))。

當(dāng)前,虛幻引擎只支持包含三邊和四邊的網(wǎng)格體。如果幾何體中的多邊形邊數(shù)超過四,或者幾何體由NURBS或SubDiv面構(gòu)成,則Alembic數(shù)據(jù)會無法導(dǎo)入。
導(dǎo)入為靜態(tài)網(wǎng)格體
在導(dǎo)入過程中,可以定義如何導(dǎo)入內(nèi)容。默認情況下,Alembic導(dǎo)入類型(Alembic Import Type)?設(shè)置為?靜態(tài)網(wǎng)格體(Static Mesh)。

將Alembic緩存作為?靜態(tài)網(wǎng)格體(Static Mesh)?導(dǎo)入時,只會將第一幀(由?采樣?分段中的?開始幀(Frame Start)?表示)導(dǎo)入為一個或多個靜態(tài)網(wǎng)格體。取自該幀的Alembic動畫將作為靜態(tài)網(wǎng)格體資產(chǎn)導(dǎo)入(不包含動畫)。以下設(shè)置也可用:
靜態(tài)網(wǎng)格體選項
合并網(wǎng)格體(Merge Meshes)
是否在導(dǎo)入時合并靜態(tài)網(wǎng)格體(這可能會導(dǎo)致重疊UV集出現(xiàn)問題)。
傳播矩陣變換(Propagate Matrix Transformations)
在合并網(wǎng)格體之前是否對它們應(yīng)用矩陣變換(參見"沿用矩陣變換"一文)。
生成光照貼圖UV(Generate Lightmap UVs)
啟用它來生成光照貼圖UV。
將Alembic文件作為靜態(tài)網(wǎng)格體導(dǎo)入時,如果你的數(shù)據(jù)包含多個網(wǎng)格體,你可以選擇?合并網(wǎng)格體(Merge Meshes)?以將網(wǎng)格體合并到虛幻引擎中的單個靜態(tài)網(wǎng)格體中。如果禁用此選項,Alembic文件中的每個網(wǎng)格體將作為單獨的靜態(tài)網(wǎng)格體導(dǎo)入UE4,而不是連接在一起。
沿用矩陣變換
啟用?合并網(wǎng)格體(Merge Meshes)?時要考慮的另一件事是,在合并網(wǎng)格體之前是否?傳播矩陣變換(Propagate Matrix Transformations)。這將獲取包含在Alembic文件中的變換數(shù)據(jù),并在合并時將其傳播到網(wǎng)格體,使它們保留其變換數(shù)據(jù)。
考慮下面創(chuàng)建的示例場景,我們將其作為Alembic緩存導(dǎo)出。

當(dāng)我們用?合并網(wǎng)格體(Merge Meshes)?和?傳播矩陣變換(Propagate Matrix Transformations)?將文件作為靜態(tài)網(wǎng)格體導(dǎo)入UE4時,我們得到以下結(jié)果:

如果我們?合并網(wǎng)格體(Merge Meshes),但不選中?傳播矩陣變換(Propagate Matrix Transformations),我們得到以下結(jié)果:

每個網(wǎng)格體在原點0,0,0處合并。
采樣選項

采樣類型(Sampling Type)
導(dǎo)入動畫時執(zhí)行的采樣類型。
逐幀(Per Frame,默認):根據(jù)導(dǎo)入的數(shù)據(jù)(默認選項)對動畫進行采樣。?每X幀(Per X Frames):按幀步長確定的給定間隔對動畫進行采樣。?逐漸時間步長(Per Time Step):按時間步長決定的給定間隔對動畫進行采樣。|
幀起始(Frame Start)
開始對動畫進行采樣的開始索引。
幀結(jié)束(Frame End)
停止對動畫進行采樣的結(jié)束索引。
在Alembic序列開始時跳過空幀(Skip Empty Frames at Start of Alembic Sequence)
跳過空白幀(不包含幾何數(shù)據(jù)的預(yù)熱幀),從實際包含數(shù)據(jù)的幀開始導(dǎo)入
法線計算選項

每個對象強制一個平滑組(Force One Smoothing Group Per Object)
是否強行平滑每個單獨對象的法線,而不計算平滑組。
硬邊角度閾值(Hard Edge Angle Threshold)
確定兩條法線之間的角度是否應(yīng)該被視為硬角的閾值(越接近于0意味著越平滑)。
重新計算法線(Recompute Normals)
確定是否應(yīng)該強制重新計算法線。
無視退化三角形(Ignore Degenerate Triangles)
確定計算切線/法線時是否應(yīng)無視退化三角形。
如何計算法線
下面簡要介紹如何基于?導(dǎo)入類型(Import type)?計算法線,以及如何在要導(dǎo)入的文件中使用法線。
當(dāng)導(dǎo)入一個包含所有幀法線的文件時(When importing a file that contains normals for all frames):
對于靜態(tài)網(wǎng)格體/幾何體緩存(For Static Meshes / Geometry Cache):引擎使用現(xiàn)有法線。
對于骨架網(wǎng)格體(For Skeletal Meshes)?- 第一幀的法線用于確定平滑組,它將用于計算平均幀和所有基礎(chǔ)和變換目標(biāo)的法線(我們在所有情況下都這樣做)。
當(dāng)導(dǎo)入只包含第一幀法線的文件時(When importing a file that contains normals for only the first frames):
對于靜態(tài)網(wǎng)格體(For Static Meshes):如果使用幀0,則我們使用現(xiàn)有的法線。否則,我們?yōu)檎埱蟮膸嬎闫交M和法線。
對于幾何體緩存(For Geometry Cache):我們計算所有幀的平滑組和產(chǎn)生的法線。
當(dāng)導(dǎo)入一個不包含法線的文件時(When importing a file that contains no normals):
引擎會計算非平滑法線,根據(jù)計算法線生成平滑組,并用平滑組重新計算法線。
啟用?重新計算法線(Recompute Normals)?時,使用上述指定路徑(對于無法線的情況)。
當(dāng)導(dǎo)入為?骨架網(wǎng)格體(Skeletal Mesh)?時,如果你的動畫有較大的法線增量,你可能會在獲得正確外觀法線上遇到問題。這是一個因變換目標(biāo)改變面/頂點法線的方式而導(dǎo)致的已知問題。作為一種變通方法,你可以使用(實驗性的)皮膚緩存功能來繞過這個問題。
你可以使用?支持計算皮膚緩存(Support Compute Skincache)?和?強制所有蒙皮網(wǎng)格體重新計算切線(Force all skinned meshes to recompute tangents)?在?項目設(shè)置(Project Settings)?中啟用此功能。?
這將在你下次啟動編輯器時重新編譯著色器。當(dāng)你打開骨架網(wǎng)格體資源,你應(yīng)該能夠為每個材質(zhì)/分段勾選?重新計算切線(Recompute Tangent)?選項。
如何計算平滑組
如果你正在導(dǎo)入的網(wǎng)格體上獲得硬邊,你可能想要查看?硬邊角度閾值(Hard Edge Angle Threshold)?以及如何執(zhí)行平滑組計算。
要計算平滑組,首先計算頂點/面法線,然后使用這些法線來查看所有與特定面連接的面。通過計算法線之間的角度,我們可以確定邊緣是硬邊還是軟邊(類似于Maya中的軟/硬邊工具)。下面左邊的圖像我們認為是軟邊,而右邊的圖像是硬邊。這是因為左邊圖像中兩條法線的夾角小于右邊圖像中兩條法線的夾角。

知道了這一點,我們使用點乘積來生成0到1之間的范圍作為閾值來定義何時應(yīng)該是硬邊,何時應(yīng)該是軟邊。例如,越接近1的值表示角度越大,導(dǎo)致硬邊,而越接近0則意味著是軟邊。然后使用這些信息生成共享軟邊的法線組。對于這些組,我們平滑這些面上的法線,創(chuàng)建平滑的面。
強制每個對象一個平滑組將使每個單獨的對象完全平滑(所有都是軟邊)。
導(dǎo)入為幾何體緩存
當(dāng)導(dǎo)入為?幾何體緩存(Geometry Cache)?時,會創(chuàng)建一種新類型的動畫資源,允許回放頂點不同的序列。

導(dǎo)入的Alembic動畫將作為Flipbook序列幀播放,其性能表現(xiàn)會隨網(wǎng)格體的復(fù)雜性而變化。
幾何體緩存和?靜態(tài)網(wǎng)格體(Static Mesh)?導(dǎo)入時的選項一樣,都包含?采樣(Sampling)?和?法線計算(Normal Calculation)?選項,但額外增加了爭對材質(zhì)和運動向量的支持。此種導(dǎo)入方法能夠根據(jù)找到的?面集(Face Set)?名稱來創(chuàng)建?材質(zhì)(Materials)?(如果沒有在外部應(yīng)用程序中定義,并隨Alembic緩存一同導(dǎo)出的面集(Face Set),此方法無效)。你可以在導(dǎo)入器的"幾何體緩存"分類中更改?運動向量(Motion Vectors)?選項,以此啟用運動向量。

點擊"幾何體緩存"底部的向下箭頭來查看這些選項。
無運動向量(No Motion Vectors)
幾何體緩存中無運動向量。默認為該選項。
選擇此選項會導(dǎo)致缺失運動模糊。
將Abc速度導(dǎo)入為運動向量(Import Abc Velocities as Motion Vectors)
從Alembic文件中導(dǎo)入速度信息并將其轉(zhuǎn)換為運動向量。將運動向量保存在磁盤上會增加文件尺寸。
如果幾何體緩存包含的拓撲結(jié)構(gòu)會發(fā)生變化(頂點數(shù)量在動畫期間發(fā)生變化),請確保從你的3D應(yīng)用中導(dǎo)出頂點速度并使用此選項。
導(dǎo)入期間計算運動向量(Calculate Motion Vectors During Import)
強制導(dǎo)入期間計算運動向量。將運動向量保存在磁盤上會增加文件尺寸。
如果幾何體緩存包含的拓撲結(jié)構(gòu)不會發(fā)生變化(頂點數(shù)量在動畫期間發(fā)生變化),請使用此選項。
包含運動向量,以便計算模型的頂點速度并使用它們來計算運動模糊。
目前,幾何體緩存資源不支持曲面細分設(shè)置所需的鄰接緩沖區(qū)。作為一種變通方法,你可以使用變換目標(biāo)將動畫導(dǎo)入為?骨架網(wǎng)格體(Skeletal Mesh)(這是一種壓縮程度更高的導(dǎo)入方式),因為這將支持曲面細分。
導(dǎo)入為骨架
該方法將Alembic文件導(dǎo)入為?骨架網(wǎng)格體(Skeletal Mesh),其中包含基礎(chǔ)姿勢作為變換目標(biāo),并混合它們以實現(xiàn)正確的動畫幀。只要頂點數(shù)不變,導(dǎo)入為骨架網(wǎng)格體是播放Alembic動畫的最有效方法。

在導(dǎo)入過程中,將使用主成分分析(PCA)方案對你的動畫序列進行壓縮,在該方案中,提取常見姿勢(基礎(chǔ))并對其進行加權(quán),以便在播放期間組成原始動畫。當(dāng)導(dǎo)入為骨架網(wǎng)格體時,除了?采樣(Sampling)、法線計算(Normal Calculation)?和?創(chuàng)建材質(zhì)(Create Materials)?選項,你還可以定義百分比(或使用的固定基數(shù))來調(diào)整壓縮級別。
壓縮選項
合并網(wǎng)格體(Merge Meshes)
啟用此選項以便合并網(wǎng)格體,從而壓縮數(shù)據(jù)。
烘焙矩陣動畫(Bake Matrix Animation)
啟用此選項以便將純矩陣動畫(Matrix-only animation)烘焙成頂點動畫。
基礎(chǔ)計算類型(Base Calculation Type)
確定如何計算存儲為變換目標(biāo)的最終基數(shù)。
基于百分比(Percentage Based,默認選項):確定應(yīng)與給定百分比(默認選項)一起使用的基數(shù)數(shù)量。
固定數(shù)量(Fixed Number):設(shè)置要導(dǎo)入的固定基數(shù)數(shù)量。
總基數(shù)的百分比(最大數(shù)量)(Percentage (Max Number) of Total Bases)
生成給定(百分比或固定數(shù)量)的基數(shù)作為變換目標(biāo)。
這對壓縮級別來說是一個比較重要的方面。輸入較小的基數(shù)將使動畫壓縮程度更高,但精細的動畫細節(jié)可能會丟失。相反,輸入較大的基數(shù)會降低壓縮程度,但會保留更多的動畫細節(jié)。
頂點影響最小百分比數(shù)(Minimum Number Of Vertex Influence Percentage)
設(shè)置使變換目標(biāo)生效所需的受影響頂點的最小百分比。
此設(shè)置允許你確定何時導(dǎo)入基礎(chǔ)/變換目標(biāo)(根據(jù)定義的影響百分比)。例如,如果我們有一個有1000個頂點的模型,其中一個基礎(chǔ)目標(biāo)只影響10個頂點。如果我們將該值設(shè)置為10,前面提到的基礎(chǔ)/變換目標(biāo)將不會被導(dǎo)入。
假如動畫的大量頂點會從原點位移,可能會導(dǎo)致骨架網(wǎng)格體發(fā)生變形。你可以將"基礎(chǔ)計算類型(Base Calculation Type)"設(shè)置為"無壓縮(No Compression)"并啟用"合并網(wǎng)格體(Merge Meshes)"來緩解這一問題。