![]()
這項由香港大學、上海科技大學、山東大學、德稿科技(Deemos Technology)等機構聯合開展的研究,以預印本形式于2026年4月發布在arXiv平臺,論文編號為arXiv:2604.09132。研究提出了一個名為SATO(Strips as Tokens,即"條帶即令牌")的全新框架,目標是讓計算機自動生成真正達到專業藝術家水準的三維網格模型,并同時完成貼圖區域劃分。
如果你曾經玩過3D游戲或者看過3D動畫電影,你一定見過那些精心設計的角色和場景模型。這些模型在計算機里并不是一個光滑的實體,而是由成千上萬個小三角形或四邊形拼接而成的"網格",就像一件精心剪裁的紙模玩具。游戲公司雇用的專業3D建模師,會手工排列這些多邊形,讓它們沿著角色肌肉的走向整齊排列,在高曲率的面部多鋪一些面片,在平坦的后背少用一些——這背后是大量人工和審美經驗的積累。現在,SATO要做的事情,就是讓計算機自動完成這件原本需要專業建模師完成的工作。
一、為什么"自動建模"這么難?
要理解SATO的價值,先得明白自動建模難在哪里。計算機當然可以從一張照片或者一團點云數據(就像激光掃描儀掃出來的一堆空間坐標點)中還原出一個大致的三維形狀——這類技術已經相當成熟。但還原出來的東西,往往是密密麻麻、雜亂無章的三角形湯,每個三角形的方向、大小都是隨機的,就像用砂礫堆出的城堡。這樣的模型雖然看起來形狀差不多,但完全不能用于正式的游戲開發或影視制作,因為它不利于后續的骨骼綁定、動畫制作和貼圖工作。
藝術家手工建的模型則完全不同。以人臉為例,建模師會讓面片沿著眼眶、嘴角、顴骨的走勢排列,形成一圈一圈的"邊流",就像年輪一樣有規律。在下巴這樣曲率變化大的地方,面片會密一些;額頭這種相對平坦的區域,面片就稀一些。這種規律性不是審美癖好,而是功能需求:只有這樣的拓撲結構,后續的動畫變形才會自然,綁骨骼才會方便,貼圖才會準確。
過去幾年,研究者們嘗試用自回歸Transformer(一種序列預測模型,和ChatGPT用的技術同宗)來生成這類藝術家風格的網格。思路是:把網格的頂點坐標序列化成一串數字,然后讓語言模型一個一個地預測下一個坐標,就像預測文章里的下一個詞一樣。這個路線是可行的,但前人的做法有兩個主要缺陷:一是直接按坐標排序,序列太長,效率極低;二是用一種叫"Delaunay"的數學方法把網格切成小塊,這種方法追求數學上的"最優三角剖分"(比如讓每個三角形盡量接近等邊),但這和藝術家建模的習慣背道而馳,切出來的小塊也會頻繁打斷面片的連續流動。
正是在這樣的背景下,SATO的研究團隊找到了一個新的靈感來源——計算機圖形學里一個古老的概念:三角條帶。
二、"條帶":一個來自經典圖形學的舊招式
三角條帶(Triangle Strip)是一個在計算機圖形學領域使用了幾十年的技巧,原本是為了在顯卡渲染時節省內存而設計的。它的原理很簡單:普通存儲方式下,每個三角形需要記錄三個頂點,三個三角形就要存九個頂點數據;但如果這三個三角形是首尾相連的——也就是每兩個相鄰三角形共享一條邊——那就可以只存五個頂點,因為每多一個新三角形只需要新增一個頂點。
用一個更生活化的比喻來解釋:普通存儲三角形就像把每個餃子的材料單獨列出來,包括面粉、餡料各自的分量;三角條帶就像做折紙,每一步只需要把紙向一個方向折一下,前一步的結果直接延續到下一步,不用每次都重新開始。
SATO的核心洞察在于:藝術家建模時,手工排列面片的方式天然地形成了一條一條的"條帶"結構。建模師往往從某個起點開始,沿著某個方向一個面片一個面片地延伸,就像鋪地磚一樣,鋪完一排再鋪下一排。這種"條帶"結構既保留了面片的連續性,又自然地記錄了邊流方向。
于是研究團隊設計了一套"條帶提取"算法(在論文里是Algorithm 1):首先建立面片與邊的鄰接關系,然后從坐標最低的未訪問面片開始,沿著共享邊不斷延伸,把遇到的面片一個一個串成條帶,直到碰到邊界或者已經訪問過的面片為止,再從下一個未訪問面片開始新的條帶。這個過程像拉鏈一樣,一條一條地把整個網格"拉"成若干條有序的帶狀序列。
這套算法有一個巧妙的設計:通過調整一個叫"步長"(stride)的參數,同一套邏輯既能處理三角形網格(每步新增一個頂點,步長為1),也能處理四邊形網格(每步新增兩個頂點,步長為2),而且產生的頂點序列是完全統一的格式。換句話說,一個四邊形面片可以理解為兩個相鄰的三角形——SATO利用這個幾何事實,讓同一串數字序列既可以被解碼成三角形網格,也可以被解碼成四邊形網格,只需要在解碼時切換一下步長參數即可。這個性質后面還會發揮重要作用。
三、如何把三維模型"翻譯"成數字序列?
把網格轉換成序列,首先要把三維坐標離散化。SATO采用了一種三層分級量化的方法,把連續的坐標空間切成512×512×512個小格子(總共超過1億個格子),每個頂點被分配到一個格子里。但不是直接用格子編號,而是分三層編碼:第一層用一個粗粒度編號定位大致區域,第二層在第一層的基礎上進一步細化,第三層給出最終精確位置。這就像快遞地址:先寫省,再寫市,再寫具體街道,一層比一層詳細。
有了這個三層編碼,還能做一件進一步壓縮序列的事情:前綴共享。在一條條帶里,相鄰的兩個頂點往往離得很近,它們的第一層和第二層編碼可能完全相同,只有第三層不同。這時候就不用重復寫前兩層,只寫第三層的差異就夠了。論文中統計,在測試集上,約44.3%的頂點只需要一個第三層編碼就能表示,35%的頂點需要第二和第三層,只有約20.7%的頂點需要完整的三層編碼。這意味著平均每個頂點用不到兩個數字就能表示,極大地縮短了序列長度。
在條帶與條帶之間的切換怎么表示呢?研究團隊設計了一個擴展詞匯表:當一個新條帶開始時,它的第一個頂點使用一種特殊的"條帶切換"編碼,這個編碼在數值上對應相同的空間位置,但它出現時會同時告訴解碼器:重置前綴緩存,從這里開始一個新的條帶。這樣不需要額外插入分隔符,序列長度不會增加,但切換信息已經自然地嵌入其中了。
與之前的同類方法(如BPT和DeepMesh)相比,SATO的條帶往往比它們的"小塊"長得多,因此切換次數更少,前綴共享能持續更長時間。論文中用100個隨機采樣的Objaverse數據集網格做了測試,SATO的壓縮率(序列長度除以面片數乘以9)為0.283,優于DeepMesh的0.330,盡管SATO的詞匯表還額外為UV分區功能多加了一組特殊編碼。
四、"UV分區"是什么?為什么要在生成時就做?
給三維模型貼圖是游戲和影視制作中不可缺少的步驟。簡單來說,貼圖就是把一張二維圖片"包裹"到三維模型的表面,就像給禮品盒包裝紙一樣。要做到這一點,需要先把三維表面"展開"成一張二維地圖,這個過程叫UV展開(UV Unwrapping)。展開后的二維區域叫UV圖,每個連續的區域塊叫一個UV島(UV Island)。
展開時需要沿著某些邊"剪開",就像剪開一個紙盒才能把它攤平。剪開的位置叫縫合邊(Seam)。專業建模師在放置縫合邊時有一套約定俗成的規則:縫合邊應該放在視覺上不顯眼的地方,比如腋下、褲襠內側;每個UV島應該盡量完整、形狀規則,便于繪制紋理;左右對稱的部分最好共用同一個UV島,節省貼圖空間。
現有的大多數自動建模方法要么完全不管UV,要么在生成網格之后再單獨跑一個UV展開算法,這樣的結果往往不符合藝術家習慣,產生的UV島形狀不規則、縫合邊位置奇怪。
SATO的做法是把UV分區信息直接編碼進生成序列里。具體來說,在序列化網格時,先把所有面片按照它們所屬的UV島分組,然后在遍歷時確保同一個UV島內的所有面片先處理完,再跳到下一個UV島。跨UV島時,使用另一種特殊的"UV切換"編碼來標記,這個編碼不僅表示一個新條帶的開始,還表示進入了一個新的UV島。
這樣,當模型生成時,它不僅在預測頂點位置,還在預測哪些面片屬于同一個UV島、哪里是UV島的邊界。生成結束后,UV分區結構已經完全確定。研究團隊隨后用Blender(一個開源的3D軟件)的標準展開算法,根據這個分區結構計算出實際的二維UV坐標。也就是說,SATO學的是"如何分區",而不是直接預測二維坐標——這大大簡化了學習難度,同時產生的分區結構因為遵循藝術家建模邏輯,展開后的UV質量也很高。
五、模型是怎么訓練的?
整個訓練分三個階段,就像學開車先學理論、再練技能、最后考證一樣。
第一階段是在大規模三角形網格數據上預訓練。訓練數據來自Objaverse、ShapeNet、Thingi10K等公開數據集,以及Shutterstock授權的商業數據集,經過嚴格的質量過濾(去除非流形、面數不在500到16000之間、頂點面比過高的模型等)后,約有147萬個三角形網格。這個階段讓模型學會如何從點云生成合理的網格結構,建立起基本的幾何先驗知識。
第二階段是引入UV分區信息的后訓練。研究團隊發現,如果一開始就同時學習網格幾何和UV分區,模型會顧此失彼:既學不好幾何形狀,也學不好UV分區邊界,訓練容易崩潰或陷入隨機輸出的狀態。即使換用預訓練好的點云編碼器也無濟于事。正確的做法是:先用第一階段的模型作為初始化,再引入UV分區序列繼續訓練。這時模型已經掌握了幾何生成的基本能力,只需要額外學會UV切換時的行為,收斂快得多。有UV分區標注的數據約有111萬個。
第三階段是四邊形網格微調。高質量的四邊形網格數據遠比三角形網格稀少,研究團隊收集了約12萬個有UV標注的四邊形網格用于微調。由于條帶表示本身就統一了三角形和四邊形的格式,微調只需要讓模型適應四邊形特有的步長解碼規則,不需要修改任何模型結構,成本很低。而且這個微調還有個意外收獲:微調之后,模型生成的三角形網格質量也有提升——因為四邊形訓練數據讓模型學會了更整潔的邊流走向,減少了三角形條帶中出現"轉彎"的情況。
整個模型采用了5億參數的Hourglass Transformer架構,點云編碼器約2.7億參數,在64到256塊英偉達A800 GPU上分階段訓練,總計耗時約11天。推理時使用KV緩存加速解碼,采樣溫度設為0.5。
六、實驗結果:比較了多少方法,強了多少?
在三角形網格生成任務上,研究團隊與四個公開權重的競爭方法進行了比較,包括MeshAnythingV2、TreeMeshGPT、BPT和DeepMesh。測試集來自ShapeNet、Thingi10K和Objaverse三個數據集,各50到100個形狀,嚴格排除在訓練數據之外。
評估使用四個幾何精度指標:法向一致性(NC,衡量面片方向是否準確,越接近1越好)、Chamfer距離(CD,衡量重建表面和參考表面之間的平均點對點距離,越低越好)、Hausdorff距離(HD,衡量最壞情況下的誤差,越低越好)、F1分數(衡量精度和召回率的綜合,越高越好)。
在所有三個數據集的所有指標上,SATO幾乎全面領先。以Objaverse數據集為例,SATO的NC達到0.909,CD為0.009,F1為0.503,而表現最接近的競爭方法BPT的相應數值分別是0.841、0.030、0.265。F1分數的提升幅度尤其顯著,接近翻倍——這意味著SATO生成的網格不僅在平均情況下更準確,在覆蓋細節方面也明顯更好。
除了自動指標,研究團隊還招募了25位來自3D工業界的專業人士進行主觀評估,每人評估30組形狀(三角形、四邊形和UV分區各10組)。每組提供四個視角的渲染圖和參考形狀,讓評估者給五個方法排名(第一名得3分,第二名得2分,第三名得1分,其余得0分)。在三角形網格評估中,SATO平均得分2.61分,遠高于DeepMesh的1.17分和BPT的1.40分,方差也最小(0.49),說明評價最為一致穩定。
在UV分區任務上,最接近的開源對比方法是PartUV,它先用一個叫PartField的分割模型對網格進行語義分割,再在此基礎上進行UV展開,但它本身不生成網格。從可視化結果來看,SATO生成的UV島更整潔、更規則;PartUV無論是用在SATO生成的三角形網格上,還是用在原始的高質量真值網格上,產生的UV圖都明顯更雜亂。
研究團隊還計算了四個UV失真度指標:L2拉伸、面積畸變、角度畸變和對稱Dirichlet能量,數值越接近理想值(1或4)越好。SATO在全部四個指標上均優于PartField+展開算法的方案,說明SATO預測的UV分區邊界更貼近幾何特征,展開后的UV島形狀更規則。
在四邊形網格生成上,由于QuadGPT(一個專門做四邊形生成的方法)沒有公開代碼和預訓練權重,研究團隊轉而與經典的參數化重網格化方法(IM、QuadriFlow、QuadWild)以及基于神經網絡的方法(NeurCross、CrossGen)進行比較。這些方法的共同特點是在給定幾何體的基礎上進行重網格化,而SATO是從點云重新生成網格,任務難度更高。盡管如此,SATO在幾何精度上與這些方法相當甚至略有優勢,而在視覺質量、面片規則性和藝術家風格方面明顯更優。用戶調研結果也支持這一判斷:SATO獲得1.8分,優于NeurCross的1.48分、CrossGen的1.24分和QuadWild的1.08分。
七、消融實驗:每個設計有多重要?
為了驗證各個設計決策的實際效果,研究團隊進行了一系列對照實驗。
首先對比了SATO的條帶化分詞器和DeepMesh的塊狀分詞器,在同一個茶壺模型上做過擬合實驗(即讓模型反復學習同一個形狀,看誰學得更快更好)。結果顯示,SATO的分詞器在編碼同一個茶壺時產生的序列約為2萬個token,而DeepMesh產生約2.4萬個,序列更短;條帶切換次數也更少(約981次對比1654次),減少了上下文的干擾;最重要的是,編碼時間從DeepMesh的2.061秒降至SATO的0.319秒,訓練吞吐量從0.442步/秒提升至0.488步/秒。在視覺上,SATO在訓練1萬步時就已經能生成相當干凈的UV分區,而DeepMesh在同等步數下仍然較為混亂。
研究團隊還進行了大規模的分詞器對比實驗:用完全相同的模型架構、訓練數據、優化器和超參數,只替換分詞器,在64塊A800 GPU上訓練20萬步。結果在所有四個幾何指標上,SATO的分詞器都明顯更優(例如F1從0.455提升至0.560)。
在UV訓練策略上,三種對比方案的實驗結果清晰地支持了兩階段訓練的必要性:完全從零開始訓練UV模型的方案,以及使用預訓練好的點云編碼器但其余部分從零開始的方案,兩者都無法讓模型可靠地與輸入點云對齊,產生的結果基本上是隨機形狀。只有先預訓練幾何生成、再引入UV分區的兩階段方案才能正常工作。
在四邊形微調的效果上,對比了微調前后的三角形網格質量,發現微調后的模型產生的三角形網格更整潔,尤其是在原本容易出現細長尖三角形的區域,面片形狀更接近直角三角形或接近正方形的四邊形,更符合藝術家的建模習慣。
歸根結底,SATO做的事情,本質上是把幾十年來專業3D建模師積累的隱性知識,通過一個精心設計的序列化格式,注入到自回歸生成模型里。條帶結構不是一個噱頭,而是一個把"藝術家怎么思考網格"這件事翻譯成機器能學習的語言的關鍵媒介。當模型學會沿著條帶延伸時,它其實是在學習"邊流應該連續";當它學會UV切換編碼時,它學的是"這里是一塊獨立的UV島"。這種設計讓幾何學習和語義學習互不干擾,又在同一個框架下融為一體。
這項研究目前也有一些局限。四邊形輸出在少數情況下(如條帶長度為奇數時)會出現局部三角形,需要后處理來修復。近球形物體的邊流規則性仍然不夠理想,這與訓練數據中規則球形四邊形網格樣本較少有關。論文在結論中坦承,隨著更豐富的四邊形數據集出現,這些問題有望進一步改善。
對于普通用戶而言,SATO意味著未來可能出現的工具:拍一張照片,或者用文字描述一個形狀,就能自動生成可以直接導入游戲引擎或動畫軟件使用的專業級三維模型,不需要建模師手工調整拓撲,也不需要額外跑UV展開工具。這條路還在開拓中,但SATO讓這個目標又近了一步。想進一步了解技術細節的讀者,可以通過arXiv編號2604.09132查閱完整論文。
Q&A
Q1:SATO生成的三維網格和普通方法生成的有什么區別?
A:普通自動建模方法(比如Marching Cubes)生成的三維網格往往是密密麻麻、雜亂無章的三角形,面片方向隨機,不符合動畫綁骨和貼圖的需求。SATO生成的網格模仿專業建模師的建模習慣,面片沿著形體表面的曲率方向整齊排列,高曲率區域密集、平坦區域稀疏,同時還能自動劃分UV島,可以直接用于游戲和影視制作流程。
Q2:SATO如何同時支持三角形和四邊形兩種網格輸出?
A:SATO使用一種基于"條帶"的統一序列格式來表示網格,利用四邊形由兩個相鄰三角形組成的幾何事實,讓同一串數字序列可以用兩種方式解碼:解碼步長設為1時輸出三角形網格,步長設為2時輸出四邊形網格。切換輸出類型不需要改變模型結構或重新訓練,只需在推理時調整解碼參數即可。
Q3:UV分區和UV展開有什么區別,SATO做的是哪個?
A:UV展開是把三維表面"攤平"成二維圖的完整過程,包括決定在哪里"剪開"以及計算二維坐標兩個步驟。UV分區(UV Segmentation)只是其中第一步——決定把三維表面分成哪幾塊獨立區域。SATO做的是UV分區,即預測哪些面片屬于同一個UV島,但不預測具體的二維坐標。分區完成后,二維坐標由Blender的標準展開算法根據分區結構自動計算。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.