3D 資產管線:從文字提示到遊戲就緒 GLB(逐步說明)
打造你自己的 3D 資產管線
AI 製作的 3D 模型所走的完整路徑:提示、網格、重拓撲、UV、紋理、壓縮後的 GLB,以及那些阻止劣質資產進入你遊戲的檢查點。
3D 資產管線是模型從一段文字描述,走到遊戲能載入的檔案,所必經的有序路徑:描述、生成網格、重拓撲、展開並上紋理、檢查、匯出壓縮的 GLB。在 Neta Studio 中,這條路徑的終點是一個 GLB,由 3D 遊戲建造器交給瀏覽器中的 Three.js,因此每個階段都必須產出瀏覽器承受得起的東西,而不只是桌機視窗裡看起來正確的東西。
多數管線不會轟然失敗,而是安靜地失敗:一個在編輯器裡看起來正確的模型,進入關卡後大了四十倍;或是一張在軀幹上銳利的紋理,到了靴子上卻糊成一團,因為 UV 島是以不同密度打包的。以下所述的檢查點都很便宜:一次線框檢查、一次非流形選取、一次包圍盒測量。每一項都花不到一分鐘,卻各自能攔下一類缺陷;一旦資產進了場景,這類缺陷要花掉一個下午。
快速解答:什麼是 3D 資產管線
3D 資產管線是一組有序的階段,把描述轉變成遊戲引擎或瀏覽器能載入的檔案。共有六個:用文字描述物件、生成網格、在拓撲不可使用時重拓撲、展開 UV 並為表面加上紋理、檢查線框與法線與材質槽,然後匯出壓縮的 GLB。對一個有紋理的物件而言,這份清單沒有任何一項是可選的,而且每個階段都有一道關卡,讓你在繼續前進之前先行檢查。
順序很重要,因為這些階段是相依關係,不是一張勾選清單。重拓撲會改寫頂點索引,所以在此之前產生的任何 UV 映射或烘焙紋理都會被丟棄。紋理是依 UV 製作的,所以上完紋理才展開,就等於重做紋理。壓縮是有損的,而且排在最後,因此它引入的失真與你早三個階段就該攔下的缺陷難以區分。把階段順序弄錯,代價不只是時間,還會產出通過檢查、卻仍舊在場景中壞掉的檔案。
把每個階段都視為帶著契約的生產者。階段 2 必須交給階段 3 一個以公尺為單位、三角形數已知的單一網格。階段 4 必須交給階段 5 一個所有島嶼共用同一組紋理的模型。階段 6 必須交給執行環境一個低於大小預算、且材質與渲染器期望一對一對應的檔案。日後資產出問題時,通常就是那條從未寫下來的契約被破壞了。
六個站點一目了然
每個站點都有一項產出與一種典型故障。故障欄才是有用的那一欄:它告訴你每個階段末端的關卡必須檢查什麼,才能放行資產。
| 階段 | 產出 | 最常見的故障 |
|---|---|---|
| 1. 描述 | 一段固定輪廓、材質、比例、姿勢與風格的提示 | 提示含糊,回傳一個任意尺寸、多個部位融為一體的物件 |
| 2. 生成網格 | 密集的三角網格,通常有數萬個三角形 | 開放式殼體、內部面,從側面看沒有可用的輪廓 |
| 3. 重拓撲 | 符合你所選三角形預算的乾淨網格 | 展開之後才做重拓撲,導致 UV 被丟棄 |
| 4. 展開與上紋理 | UV 島打包進 0–1,外加一組反照率/粗糙度貼圖 | 紋素密度不均,接縫橫切過可見的曲率 |
| 5. 檢查 | 已確認的法線、材質槽與線框 | 匯出後才發現翻轉的法線與空的材質槽 |
| 6. 匯出 GLB | 內嵌紋理的壓縮 .glb | 對蒙皮網格套用幾何壓縮,權重因而遺失 |
階段 1:描述物件
生成提示是一份規格,不是一個願望。有五個欄位在發揮作用:輪廓、材質、比例、姿勢與風格。輪廓詞決定網格所依循的外形。材質詞決定反照率與粗糙度。比例詞錨定尺寸:寫下身高 1.8 公尺,而不是只寫「很高」,因為生成器沒有其他辦法知道它做的是桌上擺飾還是一棟建築。姿勢詞對任何後續要綁定的東西都很重要:中性的 A 字姿勢或直立站姿,能生成一個可以套上骨架的網格;而動作姿勢會把四肢烘進某個形狀,讓你難以重新綁定。
每次還值得加上兩個子句。明講部件數量:單一物件,或身體與底座分開;因為融為一體的幾何,是生成資產無法動畫化或無法賦予各部件材質的最常見原因。另外明講要省略什麼:不要底座、不要背景、不要地面。生成器會用看似合理的幾何填滿空白,而每一個你沒要求的額外表面,都是之後得刪掉的表面。
- 薄弱的提示「一座石燈籠」:沒有比例、沒有材質、沒有姿勢、沒有部件數量。生成器替你挑了一個風格與尺寸,於是你收到一座 9 公尺高的奇幻燈籠,火室裡有發光水晶,底座還融合了一塊基座,你得花二十分鐘把它移除。
- 有力的提示「單一石燈籠,高 1.8 公尺,六角頂蓋,風化的灰色花崗岩、接縫處長有地衣,筆直站立的姿態,空的火室,低調寫實風格,單一物件,不要基座,置中於原點」:每個子句都對應一個你從生成器手中拿回來的決定。比例固定、材質固定、姿勢中性、部件數量為一。
階段 2:生成網格
網格生成分為文字轉網格或圖像轉網格。圖像輸入讓你更精確地控制輪廓,因為你可以提供一張已具備理想比例的參考圖;文字輸入對形狀常見的物件較快。無論哪一種,回傳的都是原料,不是可出貨的資產。生成的網格通常遠比所需密集,三角形流向不規則,也完全沒考慮表面之後要如何切開來做 UV。
動手之前先檢查三件事:網格是否封閉、比例是否合理、三角形數量是否是你正在建的場景負擔得起的。如果第三項的答案是否,而且物件永遠不會變形,那麼使用減面修改器的塌陷模式並保留輪廓,是合理的解答:它不能取代重拓撲,但對靜態道具而言,往往是正確的取捨。
01
水密檢查:在 Blender 中,編輯模式 → 依特徵選取全部 → 非流形。預期數量為零。頂蓋下方或沿著肢體出現破洞,代表生成器產生了開放式殼體;它的陰影會不正確,也無法進行布林運算、實體化或 3D 列印。
02
重複與內部幾何:以 0.0001 公尺的距離合併頂點,然後重新讀取三角形數量。內部面在生成後存活的頻率高得驚人,會在一般渲染下呈現為暗斑。
03
比例:從 N 面板讀取包圍盒,不要靠視窗目測。一個原本該是 0.4 公尺、卻量出 4 公尺的道具,會被擺放它的人縮小,而它的碰撞體積也會錯上同樣的倍數。
04
三角形預算:道具約 500 至 3,000 個三角形,主要物件 5,000 至 15,000 個,背景佈景低於 500 個。二十萬個三角形的原始網格對生成器來說很正常;對可出貨的資產則不正常。
階段 3:網格雜亂時進行重拓撲
乾淨的四邊面拓撲,在表面匯出後還得發揮作用時才重要。也就是任何會變形的東西:角色、布料、旗幟、植被,因為邊環決定手肘會彎曲還是塌陷。當你打算細分、打算把高模細節烘焙進法線貼圖(這需要均勻分佈的四邊面與穩定的 UV 佈局)、當別人之後要編輯輪廓、當你需要同一物件可預測的低細節版本時,它也同樣重要。
對於遠距離觀看的靜態道具、輪廓已經正確的硬表面物件,或任何最終會低於約一千個三角形的東西,它就不重要。在那些情況下,一個法線正確、輪廓乾淨的減面網格就是正確答案,而花一小時調整四邊面流向,是你在渲染裡永遠賺不回來的一小時。
順序是固定的:先重網格或減面,再展開。Blender 的 UV 展開指南假設你開始切接縫時,網格已是最終狀態,而這個假設正是重點:重拓撲會改變頂點索引與邊流,所以在那之前做好的 UV 映射,實質上已不存在,依它繪製的每一張紋理都會錯位。先做重網格、套用,然後再照著展開文件操作。對一公尺大的物件以 0.01 至 0.02 公尺做體素重網格,再以 QuadriFlow 重拓撲到目標面數,是標準路徑;減面塌陷則是靜態幾何的快速路徑。
階段 4:展開與上紋理
展開會把表面切成島嶼,盡可能以最小失真把每一塊攤平,再把它們打包進 0–1 的 UV 方形。Smart UV Project 能在幾秒內為硬表面物件給出可接受的基準。角色以及任何有可見曲率的東西,值得手動放置接縫:沿著肢體內側、沿著背部、耳後,絕不橫跨鏡頭會從正面看到的形體中央。
紋素密度是決定模型看起來是否一致的數字。它是每世界單位所分到的紋理解析度:一張 1024×1024 的貼圖攤在一平方公尺上,大約是每公尺 1,024 像素。如果你的角色頭部拿到每公尺 1,024 像素,靴子卻只有每公尺 300 像素,靴子在同一個畫面裡就會明顯較軟,再怎麼銳化都救不回來。先編列一次密度預算,然後縮放每個島嶼去符合它,並讓各島嶼彼此維持在約 10 至 20% 的差距內。
打包需要邊距,不只是效率。在 1024 解析度下留 4 像素的邊距,2048 下留 8 像素,這樣多層次貼圖與雙線性濾波才不會把鄰近島嶼拉進接縫裡。網頁版請把 UV 嚴格保持在 0–1 之內:UDIM 分塊獲得部分匯出器支援,卻不被多數瀏覽器載入器支援,而第二組紋理會多出一次繪製呼叫。如果模型有一部分永遠看不到,把它的 UV 空間讓給看得到的地方,而不是刪掉那些面;日後要診斷缺失的面,比診斷一塊密度稍低的隱藏區域更難。
階段 5:匯出前檢查
檢查分成三趟獨立流程,每一趟尋找特定類別的缺陷。請照這個順序做,因為法線問題會掩蓋材質問題,而材質問題會掩蓋線框問題。
線框
切換到線框模式,讀取三角形分佈。你要找的是細長的碎片,它們的陰影難看、變形更糟;還有多於四邊的多邊形,glTF 匯出器會自行三角化,偶爾還會朝你沒選的方向切;以及密度放錯位置:一面平牆扛著 6,000 個三角形,而彎曲的頂蓋只有 200 個。密度應該跟著曲率與變形而走,而不是跟著生成器輸出面的順序。
法線
重新計算外向法線,然後在單一方向光、開啟背面剔除的情況下觀察模型。翻轉的面會呈現黑色斑塊或完全消失。也要檢查硬邊:自動平滑角度約 30 度適合硬表面物件,60 度適合有機物件,而自訂分割法線往往是格式轉換時第一個被悄悄破壞的東西。如果模型只在匯出後變黑,請在不套用幾何壓縮的情況下重新匯出,以判斷問題出在壓縮器還是網格。
材質槽
數一數材質槽。生成的網格經常一來就有六個,其中兩個是空的,另外兩個還指向同一張影像的重複副本。每個材質都是一次繪製呼叫,所以在物件允許的情況下,整合成一個材質、一張紋理,刪掉空的槽,並確認透明模式:混合模式會強制排序並消耗填充率,遮罩模式較便宜,對植被與欄杆通常也正確。也檢查雙面旗標:開著會讓受光表面加倍,卻沒有視覺上的好處。
階段 6:匯出壓縮的 GLB
針對瀏覽器版本,請在匯出前就設好大小預算,而不是匯出後才設。單一道具應落在約 1 MB 以下,主要角色介於 2 到 4 MB,整個場景若希望在中階筆電上載入時沒有明顯停頓,則約在 15 至 20 MB 以下。紋理佔據了這份預算的大部分:背景物件用 512 像素,道具用 1024 像素,只有鏡頭會靠近的東西才用 2048 像素。
壓縮做的是兩件不同的事,值得分開來看。幾何壓縮,例如 Draco 或 Meshopt,會把頂點位置、法線與 UV 量化成固定位數,並重新排序緩衝區。Draco 通常產出較小的檔案;Meshopt 解碼較快,這在行動裝置上很重要。兩者在精度層面都是有損的,而且如果網格一開始就不乾淨,兩者都可能擾亂蒙皮權重與形變目標。透過 KTX2/Basis 進行的紋理壓縮,能讓影像在繪圖處理器記憶體中維持壓縮狀態,而不是解碼成原始 RGBA,代價是載入器必須支援對應的擴充功能:glTF 核心規格只保證 PNG 與 JPEG。
在宣告完成之前,永遠要先把匯出的檔案開在 GLB 檢視器裡,或匯入 3D 遊戲建造器中。匯出器正是法線翻轉、材質槽塌成一個、比例漂移的地方,因為變換套用在父物件而不是網格上。在產出資產的工具裡測試,什麼都證明不了;在你實際會隨產品上線的載入器裡測試,才能證明一切。
管線哪裡會斷,以及如何看出來
以下的症狀涵蓋了多數出錯情況。注意,六個之中有四個能在單一趟檢查中看出來,而且只要你正確測試匯出的 GLB,它們都不需要你打開原始檔。
為什麼 3D 資產管線的故障集中在兩個階段
生成與匯出產生了多數缺陷,原因卻相反。生成是不受約束的:模型沒被告知它必須是什麼,於是它自行發明比例、部件數量與內部幾何。匯出是破壞性的:那是資料第一次被量化、重新排序並打包成單一檔案的地方,所以網格裡每一個潛在問題都會同時顯現。階段 3 到 5 存在的目的,就是把缺陷從這條鏈的破壞性末端移出來,移到你還看得清楚的地方。
| 症狀 | 原因 | 修正 |
|---|---|---|
| 模型在場景中渲染成純黑或看不見 | 頂點法線翻轉或遺失,有時是在匯出時引入 | 匯出前重新計算外向法線;在不套用壓縮的情況下重新匯出,以隔離原因 |
| 物件在關卡中太大或太小 | 單位不符:以公分製作卻預期為公尺,或比例從未套用 | 測量包圍盒、套用比例,匯出前把場景單位設為公尺 |
| 紋理在軀幹上銳利、在靴子上模糊 | UV 島之間的紋素密度不均 | 依世界空間密度重新打包,讓各島嶼差距維持在 20% 以內 |
| GLB 有數十 MB,分頁因而卡住 | 未壓縮的幾何加上 4096 像素的 PNG 紋理 | 降到 1024/2048,套用 Draco 或 Meshopt,移除未使用的材質與隱藏的面 |
| 動畫時網格在手肘處撕裂 | 綁定後才重拓撲,或接縫處的頂點未焊接 | 綁定前先重拓撲;依距離合併頂點並重新檢查蒙皮權重 |
| UV 接縫沿線出現亮線或發光 | 島嶼邊緣沒有邊距,多層次貼圖因而取樣到鄰近島嶼 | 在 1024 下加 4 至 8 像素邊距,烘焙時保留邊距,讓島嶼維持在 0–1 之內 |
走進它所屬的世界
角色圖像是一個無處可站的角色。最後一步是別人都沒提供的那一步:把你剛建好的圖集放進一個有人能四處走動的世界,一座小島、一顆行星、一個下雨的街角。這個網站上的每個世界,都是從一段文字描述開始製作,並發布成一個你能遊玩的頁面。
FAQ
什麼是 3D 資產管線? +
把描述轉變成可載入檔案的一組有序階段:描述、生成網格、重拓撲、展開並上紋理、檢查、匯出壓縮的 GLB。順序由相依關係固定:重拓撲會破壞 UV,紋理依賴 UV,而壓縮會掩蓋先前引入的缺陷。
為什麼用 GLB,而不是 FBX 或 OBJ? +
GLB 是 glTF 規格所定義的單一二進位容器:幾何、材質、紋理與蒙皮都在同一個檔案裡,Three.js 與多數引擎無需轉換器即可讀取。OBJ 不帶材質或動畫資料,FBX 則需要專有 SDK。對瀏覽器版本而言,GLB 是唯一不需要在流程中再加第二個工具的格式。
我需要重拓撲嗎? +
只有當表面在匯出後還得發揮作用時才需要:變形、細分,或把高模細節烘焙進法線貼圖。輪廓已經正確的靜態道具,可以直接以減面網格出貨。請在展開之前、綁定之前重拓撲,永遠不要在這之後。
多少個三角形才算太多? +
請依螢幕覆蓋率與實例數量編列預算,而不是只看單一數字。道具約 500 至 3,000 個三角形,主要物件 5,000 至 15,000 個,背景佈景低於 500 個。一個只佔螢幕一小部分、卻出現五十次的物件,應該用像素而不是三角形來編預算。
我可以跳過 UV 展開嗎? +
只有在物件使用純色,或使用不需要 UV 的程序化著色器時才可以,而那樣的著色器撐不過匯出,因為 glTF 攜帶的是烘焙後的物理基礎渲染紋理,不是節點圖。任何有繪製或烘焙反照率的東西都需要真正的 UV 佈局,所以請在上紋理之前展開。
我應該在哪裡測試 GLB? +
在你實際會隨產品上線的載入器裡。把它匯入 3D 遊戲建造器,或開在獨立的 glTF 檢視器中,然後檢查四件事:相對於已知參考物的比例、單一光源下的法線、材質與透明模式是否保留,以及在停用快取後透過網路載入的檔案大小。
回到 3D 遊戲建造器
全部 31 個完成的 3D 世界、遊戲與場景都放在同一頁,每一個都能遊玩。