High-Fidelity Texture Transfer Using Multi-Scale Depth-Aware Diffusion
這篇文章可以從一個帶有紋理的幾何物體出發,將其身上的紋理自動提取并映射到任意的幾何拓撲結構上(見下圖紅線左側);或者從一個白模幾何對象出發,將任意類型的紋理映射到其身上(見下圖紅線右側):
該文章主要應用預訓練的擴散模型來搭建了一個3D紋理遷移框架。具體來說,作者們設計了一個多尺度的生成框架來從粗糙到精細地優化UV maps,同時為了確保多視角下的一致性,該文章使用了深度信息作為幾何上的引導,同時提出一個新的一致性損失來進一步限制顏色的一致性以及減少artifacts。實驗結果證明這個多尺度的框架不僅產生了高質量的紋理遷移結果,還能很好地處理復雜形狀并保持正確的語義對應關系。
下圖展示了這篇文章的overview:
第一個階段,先在兩個不同的尺度上生成粗糙的目標UV map,生成過程中以reference物體的多視角圖像和深度maps({I}ref和{D}ref),和target物體的深度maps({D}tar【1】)作為條件。
第二個階段,精煉的高分辨率的紋理細節。
【1】博主注:這里原文中對應位置的符號寫成了{D}ref,應該是標注錯誤了,如果作者看到,請及時修正。
下面在下圖中介紹紋理生成細節:
(a)先將多個視角下的圖像{I}ref、{I}lowtar通過編碼器Encoder各自編碼到latent空間,然后對其通過DDIM逆向加噪到第T 步,隨后和深度maps{D}ref、{D}tar concatenate到一起,作為TexTrans模塊的輸入,最終生成紋理遷移后的多個視圖的結果。目標物體的幾何默認是已知的,這時候由于還知道了不同視角下的生成結果(可以看成rendering結果),那么就可以通過可微渲染來優化出粗糙的紋理map Tcoarsetar來了(理論上camera和light也應該是已知的,我估計是作者架設了已知,反正采用的是合成數據集)。
(b)這個階段的核心是深度感知的自注意力特征注入,也就是上圖(b)部分,我們來看看是怎么個回事兒:使用深度信息的引導將紋理或者外觀從源物體遷移到目標物體上,生成的過程將會迭代兩次,對應不同尺度的圖像分辨率。第一次迭代過程中,采用ZTref(也就是參考圖像多視圖經過編碼器Encoder得到的隱向量)來進行初始化目標物體的多個視圖。參考下面這個圖,來理解是怎么將reference物體的紋理遷移到目標物體的:
首先,在圖(b)中我們能清晰的看到,作者使用了兩個controlnet-based diffusion model分別以reference物體和target物體的多視圖圖像為輸入,分別以他們的深度圖為條件,來進行降噪處理。但是呢,可以清楚的看到處理reference物體的diffusion model交叉注意力部分引出來一個箭頭,指向了處理target物體的diffusion model的交叉注意力部分,這里就是對應上面這個圖的核心部分。這個模塊的作用就是把reference物體的紋理給搞過來。那你可能想了,這么搞不會破壞掉target這邊生成時的幾何形狀嗎?嘿,還真不會,因為在訓練時target的這部分還輸入了深度信息,只要深度信息作為條件,基本上很難修改生成過程的整體輪廓、結構了,所以作者說這部分既能保證全局信息,還能專注于每個單獨視角的細節。本質上是幾何的深度信息為擴散模型提供了整體形狀強先驗,而交叉注意力模塊中部分注意力矩陣的復用只是為了把紋理信息遷移過來。