Mesh引數化方法 Mesh展平

2021-09-25 14:58:19 字數 1928 閱讀 8805

mesh引數化或者mesh展平是圖形學裡面廣泛用於製作貼圖的乙個步驟,通常英文稱之為mesh parameterization,也被通俗的稱為mesh flattenning。基本概念是乙個三維的離散網格對映到二維平面網格的過程。為了保證後續應用的有效性,網格的引數化通常需要滿足一些特定的性質,如三角形面積在對映前後變化較小、三角形的角度和邊長變化較小,最根本的一點是需要對映是雙射(bijective),也即一一對應,沒有麵片的重疊和反轉(overlap and folding)。

網格的引數化除了用於紋理對映(即向mesh的頂點及頂點之間的三角形麵片賦值相應的顏色),也可以用於remesh,meshediting等、 mesh morphing、details trasfer,具體的概念可以參見下面的圖。此處我們只關注紋理相關的應用和紋理展開技術本身。

根據是否保持邊界的不變,模型引數化方法可以分為:自由邊界展開和固定邊界展開;  多數展開演算法同時可以支援自由邊界和固定邊界展開,只有少數演算法只支援一種展開方式。幾乎絕大部分固定邊界展開都要求固定邊界情況下邊界是凸的,否則無法保證最終結果的正確性。 

按照是否是全域性優化可以分為 全域性優化演算法 和 區域性優化演算法;

區域性優化演算法一般是增量的,例如將乙個三角形先放在平面上,以該三角形為中心利用半邊結構進行廣度優先的搜尋,放置其他三角形,直到邊緣新增的任何乙個三角形都大於扭曲限度的閾值,則停止擴增該patch,很多不同的平面化patch最後組裝成乙個texture atlas,最後優化pack efficency。

但是區域性優化演算法在某種程度上是一種trivial的方案,本身技術含量不高,只是能用而已, 因此我們重點介紹全域性優化演算法,一些重要的全域性的mesh flattening的根據懲罰度量不同的分為: 

conformal flattening  保角展開

以及harmonic mahpping 調和展開 

另外有一些不同度量共同懲罰的方法,可以理解為一些trivial的工程創新; 

這個問題的答案可以直接看下圖,如果臉部的三維面積很大,但是引數化後佔的平面面積很小,會產生紋理對映過程中解析度不均衡的問題,通俗的說就是如果紋理圖大小過大,足夠保證臉部的貼圖,那麼對於脖子就會過剩,而且浪費儲存空間(尤其是gpu的視訊記憶體),降低渲染速度,反之如果紋理圖較小,脖子部位可以保證有效對映,而臉部可能會產生低紋理。而且如果角度前後相差較大會產生同一區域不同方向的紋理密度不統一,比如x方向過紋理了,而y方向紋理為低紋理,所以最佳的對映方式是三角形完全不變,但是除了類似於摺紙(乙個平面任意扭曲形成的空間曲面)的網格,大部分三維網格都不可能獲得完美的保持角度和邊長的展開(undevelopeable)。

mips(most isometric parameterization)、基於扭曲受限的引數化、基於圓模式(circle-pattern)、最小化角度扭曲的引數化等等。讀者可以參考:

比較早期的工作包括tutte1963的調和展開,2023年2023年bruno levy的lscm方法,最近幾年的工作包括乙個用ricci流或者是calibi流形來計算。 2023年乙份關於bff的文章給出了基於邊界調整的優化保角對映演算法,因為邊界是很重要的乙個引數,傳統上一般的展開演算法是直接利用chord長度來進行邊緣的弦長等比例展開,而這個不總是能保證內部可以實現各種度量的最優,所以為了實現最優的度量,有一些類似於bff的方法研究如何通過改變固定邊界的投影位置來減少引數化帶來的網格扭曲(distortion)。   a novel su***ce flattening method based on mesh edges 

除了嚴肅的科學**之外,一些人寫的部落格也值得一讀: 

吳懷宇的 「上帝如何優雅的拍扁你」

王琳的 「固定邊界的三維人臉網格引數化」

判斷點和mesh的位置關係的兩種方法

判斷點和mesh的位置關係的方法有兩種 1 根據mesh的法向量 這種方法需要首先找到裡當前點最近的mesh表面點,然後根據最近點的法向量和最近點到當前點的向量之間的夾角進行判斷,可以設定乙個閾值,例如小於90度判斷當前點位於mesh的外部。這種方法需要找出離當前點最近的點,這通常是一項比較繁瑣的任...

LoadRunner引數化方法(固定化)

我們再進行網頁測試時,往往需要多使用者密碼進行登入操作,甚至在測試業務系統時,需要對某一項資訊進行提交操作,在進行測試時,往往需要引數化,我現在總結一種較為固化的方式 1 通過錄製指令碼的方式,得到對應指令碼 2 選中需要引數化的字段,選中對應值,點選滑鼠右鍵,彈出視窗,點選replace with...

防止SQL注入的引數化方法

最好的方法就是用引數化sql sqlconnection cn new sqlconnection 連線字串 sqlcommand cmd new sqlcommand insert into 表 values name,pwd cn cmd.paramters.addwithvalue id te...