什么是曲面細分
在CAD格式中,通常使用曲線和數學函數來定義曲面和實體。這些曲面的精確度和光滑度非常適用于制造過程。但是,現代GPU芯片針對由三角形網格體組成的曲面的渲染計算進行了高度優化。通常,實時渲染器和虛幻之類的游戲引擎只能處理由三角形網格體組成的幾何體,必須突破這些GPU的極限,才能每秒產生數十幀令人驚嘆的照片級質量圖像。
虛幻引擎的Datasmith填補了這項不足,它可以自動計算三角形網格體,非常近似地估算出CAD文件中尚無網格體表達的所有曲面。此過程被稱為 曲面細分(tessellation),是準備可實時使用的CAD數據的重要步驟。
例如,左側的圖像顯示了在本機CAD查看器中渲染的曲面。右側的圖像顯示了為該曲面生成的三角形網格體的線框。
為了進行實時渲染,對曲面執行曲面細分時,需要權衡曲面精度與可渲染速度。
三角形網格體本身永遠不會與生成它的精確曲面完全匹配。曲面細分往往意味著要在某種細節層級對原始曲面進行采樣,以創建使GPU能更快渲染幾何體的近似值。通常,越接近原始曲面,網格體就越復雜;也就是說,它將包含更多三角形,而這些三角形會更小。這樣渲染時可能外觀更真實,但對GPU提出了更高的要求。如果降低曲面細分網格體的精度,使其包含的三角形變少、變大,GPU對其進行渲染時的速度會更快,但這種渲染所產生的效果可能看起來呈斑駁或鋸齒狀,無法達到令人滿意的視覺保真度。
因此,在曲面細分過程中必須盡可能減少網格體中三角形的數量,同時最大程度地保持與源曲面的視覺保真度。這通常意味著,針對較為平滑和扁平的曲面需減少三角形數量、增大三角形尺寸,針對較為復雜和不平的表面需增加三角形數量、縮小三角形尺寸。
以下部分將介紹導入CAD場景時Datasmith中可調整的3個參數。通過調整這些值,可控制Datasmith為曲面創建的靜態網格體幾何體的復雜性和保真度。
虛幻引擎始終使用三角形網格體來渲染對象。如果第三方設計軟件模型文件中含有定義為參數化表面或NURBS的對象,則需要將這些表面變換或曲面細分為三角形網格體。
弦容差
弦容差(有時稱為弦誤差或垂度誤差)定義了細分曲面上任何點距原始曲面上對應點的最大距離。
降低該參數的值會使細分曲面更接近原始曲面,進而生成更多小三角形。
在曲率較大的區域中,這種設置的效果最明顯:隨著容差值增加,生成的三角形會變大,曲面平滑度會降低。
最大邊長
此設置可以限制曲面細分網格體內任何三角形的任何一條邊的最大。
在模型的較扁平區域,此設置的效果最明顯。如果該值設置得過低,可能會發現這些扁平區域的三角形超出了實際需要的數量。相反,如果該值設置得過高或沒有設置限制,產生的三角形有時會極長極窄,形狀非常奇特,最好也應避免。
如果該值設置為0,Datasmith不會限制其生成的三角形的邊長。
法線容差
此設置定義曲面細分網格體中任意兩個相鄰三角形之間的最大角度(以度為單位)。
與弦容差一樣,法線容差也會影響曲面細分網格體與原始曲面的接近程度。但是,保持高曲率區域的細節層級非常有用,對曲面的較扁平區域生成的三角形幾乎沒有影響。
拼接技術(Stitching Technique)
拼接技術 設置控制著在曲面細分過程中如何處理看似相連、但其實作為單獨剛體或剛體中一個獨立表面建模的參數曲面。
-
Stitching Sew 會尋找應該相連的表面,并將其剛體合并到同一個靜態網格體資源中。
此選項可以減少Datasmith在你的項目中創建的獨立靜態網格體資源的數量,但處理時間較長。Datasmith可能會使用不同策略來測試應該拼接在一起的表面。對大部分類型的源文件來說,它會測試表面和附近剛體的連通性,并合并所有其表面相連的剛體。對于其他類型的文件來說,它會使用場景層級作為決定相連表面的提示信息。
-
Stitching Heal 的作用相同,但只會重新連接在源場景中屬于同一個剛體的表面。如果Datasmith檢測到同一個剛體中的獨立曲面的幾何體應該被連接起來,它會將這些曲面合并到其所創建的靜態網格體資源內的同一個網格體元素中。
但是,開啟此設置后,Datasmith永遠不會將源場景的多個獨立對象合并成單個靜態網格體資源。 -
Stitching None 將完全跳過拼接流程。Datasmith將始終為源場景中的每個獨立剛體創建單獨的靜態網格體資源,并在靜態網格體資源中為每個剛體包含的每一個曲面創建單獨的網格體元素。
原文鏈接
- https://dev.epicgames.com/documentation/zh-cn/unreal-engine/importing-cad-files-into-unreal-engine-using-datasmith
- https://dev.epicgames.com/documentation/zh-cn/unreal-engine/using-datasmith-with-rhino-in-unreal-engine