![]()
生成式 AI 的浪潮賦予了機器無盡的創造力,我們已親眼見證它在文字與圖像世界 “點石成金” 的魔力。然而,當這股浪潮涌向更復雜的三維空間,挑戰也隨之升級。過去的 3D 生成 AI 如孩童堆積木,成果粗糙模糊;如今,它渴望成長為一名 “數字建筑師”,去建造結構精巧、可被編輯改造的虛擬世界。
為了實現這一目標,一種流行的方法是讓 AI 學習定義 “內外” 的邊界來隱式地塑造物體。這種方法雖能生成外形平滑的物體,但其成果好比一座 “固化” 的雕塑 —— 一個不可分割的靜態外殼,很難像玩樂高一樣拆解重組。對于藝術家而言,這座雕塑的表面覆蓋著一張雜亂的 “漁網”(無序三角網格),而非規整的 “布料”,任何微調都如同對整片網進行重新編織,極其困難,難以融入專業的創作流程。
受到以上啟發,我們不再滿足于生成雜亂的網格,而是渴望一種更原生、更結構化、更符合設計師與工程師直覺的表征方式 —— 代碼。如何讓模型像程序員一樣,用邏輯和參數構建三維世界?如何讓生成的物體不僅形似,更能被理解、被編輯、被二次創作?帶著這些思考,我們團隊推出了MeshCoder。它是一條探索 3D 程序化生成的新路徑,其核心思想是訓練一個強大的多模態模型,直接將三維輸入(如點云)翻譯成結構化、可執行的 Blender Python 代碼。
我們工作的亮點在于,MeshCoder 生成的不是一個 “死” 的模型,而是一套 “活” 的程序。它具有以下鮮明優勢:
1.分零部件生成:如下視頻所示,MeshCoder 能理解物體的語義結構,將椅子、桌子等自動分解為椅背、椅腿、桌面等獨立部件進行代碼生成,邏輯清晰。
2.拓撲良好的四邊面:如下圖所示,MeshCoder 生成的代碼直接構建出高質量的四邊面(Quad Mesh)網格,這對于后續的編輯,展 UV 上材質至關重要。
![]()
下圖是使用傳統常用的 Marching Cube 算法從分界面中提取網格的結果,可以看到得到的是雜亂無序的三角面網格。與這些網格相比,上圖中 MeshCoder 得到的 Mesh 具有規整的四邊面。
![]()
3.易于理解和編輯:如下圖所示,MeshCoder 生成的 Python 代碼具備高可讀性,用戶可以通過修改參數(如尺寸、位置)或函數調用,輕松實現對三維模型的編輯。
![]()
4.可控的網格密度:如下圖所示,通過調整代碼中的分辨率等參數,用戶可以自由控制生成網格的精細程度,在細節與性能之間找到平衡。
![]()
我們相信,這只是探索的開始。我們選擇將 MeshCoder 開源,衷心期待它能引發更多有價值的討論,并希望能與社區的研究者一起,繼續推動三維生成技術的演進。
![]()
- 論文鏈接:https://huggingface.co/papers/2508.14879
- 項目網站:https://daibingquan.github.io/MeshCoder
- GitHub 鏈接:https://github.com/InternRobotics/MeshCoder
- 模型鏈接:https://huggingface.co/InternRobotics/MeshCoder
- 數據集鏈接:https://huggingface.co/datasets/InternRobotics/MeshCoderDataset
我們是如何做到的?
MeshCoder 的實現路徑清晰,其核心是一個強大的代碼庫與一套創新的數據構建流程。
第一步:構建零部件數據集并訓練零件代碼推理模型
萬丈高樓平地起,我們首先需要讓模型具備理解基礎幾何的能力。
- 專屬工具:開發 Blender Python API
- MeshCoder 的基石是我們為 Blender 定制開發的一套簡潔且功能強大的 Python API。(Blender,作為一款開源且功能強大的三維計算機圖形軟件,為我們提供了堅實的程序化建模環境。)這套 API 封裝了從創建基礎圖元到執行復雜布爾運算、陣列等一系列高級建模操作,讓用簡潔的代碼構建復雜幾何體成為可能。
- 海量數據:構建千萬級零部件數據集
- 我們利用這套強大的 API,通過參數化隨機采樣的方式,程序化地生成了海量的、由簡單到復雜的幾何零部件,最終構建了一個千萬級別、圖文并茂的 “零部件代碼” 配對數據集。下圖是我們零部件數據集的一些樣例。
![]()
- 模型設計與訓練:從點云到代碼的初代模型
- 基于這個龐大的零部件數據集,我們訓練了一個強大的零件代碼推理模型。該模型的核心設計在于:首先通過一個形狀編碼器,從輸入的零部件點云中抽取出固定長度的詞元(Token)特征;然后,一個大型語言模型(LLM)會接收這些特征,并自回歸地生成能夠重建該零部件的結構化代碼。此步驟完成后,我們的初代模型就具備了將任意單個部件的點云精準翻譯為 Blender 代碼的能力。模型的架構可以參見第二步的圖片。
第二步:構建物體數據集并訓練最終物體代碼推理模型
在初代模型掌握了 “識部件、懂代碼” 的技能后,我們利用它以及規則來 “教會” 最終模型如何理解和搭建完整的復雜物體。
- 數據升級:構建百萬級 “物體 - 代碼” 數據集
- 高質量的數據是訓練強大模型的燃料。我們首先利用 Infinigen Indoor 生成模型,生成了一個百萬級別的、可被拆分為零部件的復雜物體數據集。接著,我們調用第一步訓練好的初代模型,為每一個物體的每一個零部件自動生成其對應的代碼。最后,通過精心設計的規則,我們將所有部件的代碼與其在物體中的原始位置信息相結合,“組裝” 成一段完整的、帶有豐富語義信息的物體級代碼。下圖以椅子為例展示了這個過程。
![]()
- 最終訓練:得到可重建物體的 MeshCoder
- 在這個百萬規模的 “物體 - 代碼” 大規模數據集上,我們訓練出了最終的 MeshCoder 模型。通過學習這些完整的物體代碼,MeshCoder 不僅繼承了對基礎部件的理解,更學會了物體不同部件間的空間與語義關系,使其最終具備了從整體上理解復雜物體并生成完整、結構化代碼的強大能力。下圖是 MeshCoder 從物體點云推理出代碼的 pipeline。
![]()
下圖是形狀編碼器 (Shape Tokenizer) 的網絡結構。
![]()
強大的重建、編輯與理解能力
MeshCoder 的真正實力,不僅在于創新的理念,更在于堅實的實驗數據。我們在多個維度上對其進行了嚴格的測試,結果證明了其卓越的性能。
一、高保真重建:精度大幅領先
我們將 MeshCoder 與當前的兩種 Shape-to-Code 方法(Shape2Prog 和 PLAD)在Infinigen Indoor數據集上進行了比較。該數據集涵蓋了從椅子、臺燈到浴缸、馬桶等 41 個常見室內物體類別,極具挑戰性。
- 在精度上超越了基準方法:我們使用 “Chamfer 距離 (CD)” 和 “交并比 (IoU)” 這兩個核心指標來衡量重建的準確度。數據顯示,MeshCoder 在幾乎所有類別上都取得了數量級的領先。例如,在 “椅子 (Chair)” 類別中,我們的 CD 誤差僅為(越小越好),遠低于 PLAD 的 2.26 和 Shape2Prog 的 1.30。而在整體平均 IoU(越大越好)上,MeshCoder 達到了的86.75%,而兩個對比方法分別只有 67.62% 和 45.03%。
![]()
![]()
- 能夠還原復雜結構:從以下對比圖可以直觀地看到,對于門上的扇葉、窗戶的格柵、沙發的扶手等復雜結構,傳統方法往往會產生模糊、粘連甚至錯誤的幾何形狀,而 MeshCoder 能夠精準地重建出每一個獨立的部件和清晰的邊界,效果與原始三維模型(Ground Truth)高度一致。
![]()
![]()
二、代碼化編輯:打開創造力的窗口
代碼化編輯是 MeshCoder 最重要的能力之一。我們將 3D 模型變成了可讀、可改的程序代碼,賦予了用戶前所未有的控制自由。這不僅僅是簡單的參數調整,而是涵蓋了幾何與拓撲的深度編輯:
- 幾何編輯(改變形狀):想象一下,想把一張方桌變成圓桌,您需要做什么?在傳統流程中,這可能需要復雜的建模操作。而在 MeshCoder 中,如下圖所示,您只需在生成的代碼里,將創建桌面的函數 create_primitive 的 primitive_type 參數從 'cube' 改為 'cylinder' 即可。
![]()
- 拓撲編輯(改變布線):需要一個更精細或更粗糙的模型?沒問題。通過修改代碼中的 resolution 參數,您可以輕松控制生成網格的密度。從低分辨率的快速原型,到高分辨率的精細模型,如下圖所示,通過改動一個數字的方式,我們就可以讓 3D 資產適應不同場景的需求,在性能與精度之間找到平衡。
![]()
三、賦能三維理解:利于大模型理解形狀
MeshCoder 生成的代碼不僅僅是指令,它本身就是一種富含語義的結構化知識。當我們將這些代碼以及對使用部 Blender Python API 的文檔 “喂” 給像 GPT-4 這樣的大型語言模型時,奇妙的事情發生了:
- GPT-4 看懂了 3D 模型:如下圖所示,我們向 GPT-4 展示了一段由 MeshCoder 生成的辦公椅代碼以及對應代碼功能的描述,然后用自然語言提問:“這把椅子有幾個輪子?” GPT-4 通過分析代碼中 part_1: wheel 等注釋和 create_primitive (name='wheel_1', ...) 等函數,準確地回答出:“4 個”。
![]()
- 實現復雜的結構推理:如下圖所示,我們進一步提問,關于洗碗機的內部結構。GPT-4 同樣通過閱讀代碼,清晰地總結出:“這是一個洗碗機,主體由多個立方體構成,內部有用于放置碗碟的架子,架子由矩形和圓柱體陣列構成……”。并且,代碼在推斷物體的尺寸上是有明顯的優勢的。我們分別將洗碗機的代碼和圖片輸入到 GPT-4 中,讓 GPT-4 給定洗碗機的高度來推測洗碗機的寬度時。我們發現,GPT-4 很難只從圖片中推斷得到準確的尺寸,但是當有代碼作為輸入時,GPT-4 可以輕松根據代碼中的 scale 參數來判斷洗碗機的寬度。
![]()
![]()
![]()
這個實驗有力地證明,MeshCoder 搭建了一座橋梁,將物體的形狀信息以及尺寸信息提取成有語義的描述提取到代碼中,極大的幫助了大語言模型理解三維世界,通過閱讀結構化代碼來 “理解” 三維物體的組成、部件關系乃至功能屬性,為 AI 的 3D 認知能力開辟了激動人心的新方向。
局限性與未來展望
MeshCoder 是我們對 3D 程序化生成模型的一次深刻探索。它證明了,通過代碼化的方式來表征和生成 3D 世界是一條充滿潛力且極具價值的道路。當然,這只是探索的開始。我們坦誠地認識到,作為一個對新范式的初步探索,MeshCoder 在展現出巨大潛力的同時,也存在一些挑戰。其中最主要的是,訓練集的多樣性與數量仍然不足,當面對與我們訓練數據分布差異較大的物體時,模型的重建效果會打折扣,泛化能力有待進一步提升
因此,我們的下一步工作重心將是采集更多樣化的數據,持續擴充數據集的廣度與深度,以提升模型的泛化能力與魯棒性。我們相信,坦誠地面對這些挑戰,是推動領域前進的第一步。MeshCoder 的開源是團隊為此付出的努力,也希望能成為社區進一步研究的基石。我們期待與全球的研究者和開發者交流與合作,共同推動 3D 生成技術向前發展。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.