已更新 2026年9月13日
3D 轉換可以保留什麼以及費用是多少?
轉換網格不是免費的,也不是無損操作。 GLB 和 glTF 保留一切。 OBJ 保留單獨的物件及其材質名稱,但丟棄每個頂點的顏色。 STL 僅保留三角形。 PLY 保留每個頂點的顏色,但將場景展平為單一網格。 USDZ 保留了兩個物件和 UV,在重讀時丟失了頂點顏色和材質名稱,並寫入了 USDA 的 zip。下面的數字是測量的,而不是估計的。
此頁面上的每個圖形都來自運行該網站使用的相同轉換器和真實文件,並直接從其寫入的位元組中讀取屬性。測量了 2026年9月13日 與三.js r179。此方法位於頁面底部,腳本位於儲存庫中。

每種格式保留什麼?#
具有兩個不同命名的立方體的參考場景被轉換為六個目標,每個立方體都有自己命名的金屬材質、每個頂點的顏色、UV 座標和法線。 GLB 和 glTF 完整返回。所有其他格式都丟失了一些東西,並且每種格式都丟失了不同的東西。
| 目的地 | 兩個物體 | 紫外座標 | 每個頂點的顏色 | 材料名稱 | 頂點數 |
|---|---|---|---|---|---|
| GLB | 的 2 | 它被保存下來 | 它被保存下來 | 它被保存下來 | 48 頂點 |
| glTF | 的 2 | 它被保存下來 | 它被保存下來 | 它被保存下來 | 48 頂點 |
| OBJ | 的 2 | 它被保存下來 | 遺失了 | 它被保存下來 | 72 頂點 |
| STL | 合併為1 | 遺失了 | 遺失了 | 遺失了 | 72 頂點 |
| PLY | 合併為1 | 它被保存下來 | 它被保存下來 | 遺失了 | 48 頂點 |
| USDZ | 的 2 | 它被保存下來 | 遺失了 | 遺失了 | 72 頂點 |
為什麼 STL 和 PLY 會將場景合併到單一網格中?#
這兩種格式都沒有場景圖。 GLB、glTF和OBJ可以在單一檔案中描述多個命名物件; STL 描述單一實體,PLY 描述單一元素列表,因此兩個立方體作為單一網格到達,並且無法再次將它們分開。
最令人驚訝的是損失,因為它是看不見的。轉換後的模型在取景器中看起來完全相同。只有當您嘗試選擇、變更材質或為其某一部分設定動畫時,您才會發現這些部分不再存在。
如果模型必須保持可分離,則目標必須是 GLB、glTF 或 OBJ。如果使用層壓機或單一材料列印,則熔合不會產生任何成本。
文件成長了多少?#
超出大多數人的預期。在真實生成的網格中,OBJ 佔據 5.6 是原始 GLB 和 PLY 的倍 1.4 次。它們都具有相同的幾何形狀。
| 轉換 | 產地 | 結果 | 比例 | 書面頂點 |
|---|---|---|---|---|
| mug.glb 到 GLB | 880 KB | 1,173 KB | 1.3x | 25,000 |
| mug.glb 到 glTF | 880 KB | 1,564 KB | 1.8x | 25,000 |
| mug.glb 到 OBJ | 880 KB | 4,928 KB | 5.6x | 150,000 |
| mug.glb 到 STL | 880 KB | 2,441 KB | 2.8x | 150,000 |
| mug.glb 到 PLY | 880 KB | 1,221 KB | 1.4x | 25,000 |
| mug.glb 到 USDZ | 880 KB | 2,927 KB | 3.3x | 150,000 |
| lion.glb 到 GLB | 8,768 KB | 11,690 KB | 1.3x | 249,369 |
| lion.glb 到 glTF | 8,768 KB | 15,587 KB | 1.8x | 249,369 |
| lion.glb 到 OBJ | 8,768 KB | 51,880 KB | 5.9x | 1,496,202 |
| lion.glb 到 STL | 8,768 KB | 24,352 KB | 2.8x | 1,496,202 |
| lion.glb 到 PLY | 8,768 KB | 12,176 KB | 1.4x | 249,369 |
| lion.glb 到 USDZ | 8,768 KB | 30,487 KB | 3.5x | 1,496,202 |
為什麼OBJ和STL的頂點數相乘?#
因為它們都不共享三角形之間的頂點。索引良好的網格僅保存每個角落一次,並從與其接觸的所有三角形引用它;這裡寫的OBJ和STL分別儲存每個三角形的三個角落。在测试中与 lion.glb,就變成了 249,369 頂點在 1,496,202, 一些 6 更多倍。
幾何形狀不會改變。相同的表面、相同的三角形、相同的輪廓;只是會計比較貴,文件也或多或少以同樣的比例增長。
PLY 是有用的反例。它維護索引,因此相同的網格以接近原點的大小寫入,並且仍然帶有每個頂點的顏色。對於僅需要保留幾何形狀的大型網格,PLY 是此列表中最便宜的誠實目標。
文字與二進位會讓情況變得更糟。 glTF 是 JSON,其緩衝區以 base64 編碼,其成本約為 33 比相同的 GLB 多 %,因為 base64 將每三個位元組轉換為四個位元組。
為什麼從 GLB 轉換為 GLB 時檔案仍然增長?#
因為轉換器會計算沒有頂點法線的任何網格的頂點法線,然後寫入它們。產生的網格通常沒有法線屬性,因此往返過程會為每個頂點新增一個完整的向量。
测试与 mug.glb 是一個明顯的例子:他們輸入 880 KB 他們離開了 1,173 KB,幾何形狀沒有任何變化。添加的法線就是差異。
這是一個深思熟慮的決定,而不是一個缺陷。在大多數觀看者中,沒有法線的網格看起來是平坦且多面的,因此轉換器在加載時計算一次它們,而不是讓每個後續工具必須猜測。
轉換會改變形狀嗎?#
不會。每個目標都經過轉換,然後讀回,表面結果是相同的:相同數量的三角形和相同的總表面積,直到測量極限,在網格上 498,734 三角形。幾何圖形是 3D 檔案中轉換後完好無損的部分。
| 目的地 | 之后的三角形 | 表面积误差 | 坐标如何保存 |
|---|---|---|---|
| GLB | 沒有變化 | 0% | float32 二進位 |
| glTF | 沒有變化 | 0% | Base64 緩衝區 |
| OBJ | 沒有變化 | 0% | 文字 與 17 小數 |
| STL | 沒有變化 | 0% | float32 二進位 |
| PLY | 沒有變化 | 0% | float32 二進位 |
| USDZ | 沒有變化 | 0% | 來自 USDA 的壓縮包 |
那麼3D轉換是否有損呢?#
兩者都是東西,差別就是有用的東西。幾何學不會失去任何東西:進入的形狀就是離開的形狀。幾何體周圍的所有內容都會遺失,而遺失的部分完全取決於您選擇的目的地。
這裡沒有任何東西會截斷座標。 GLB、STL 和 PLY 寫入 32 位元二進位浮點數。 glTF 在其 JSON 中嵌入了與 base64 相同的二進位緩衝區。 USDZ 寫入 USDA 的 zip。 OBJ 是唯一一款將位置寫入十進位文字的產品,並且以全精度寫入而不是四捨五入,這也是其文件如此之大的部分原因。
這意味著通常擔心的每次轉換都會稍微降低模型效能(例如重新儲存 JPEG),這一點並不適用。從 GLB 轉換為 OBJ 並返回不會平滑網格。
它所做的就是丟棄本頁上方出現的內容:STL 和 PLY 中的場景圖,OBJ、STL 和 USDZ 中的每個頂點顏色,STL、PLY 中的材質名稱以及這些損失是永久性的,因為重新轉換無法再次發明它們。
您應該選擇哪個目的地?#
它根據必須生存的內容來選擇目的地,而不是根據接收工具在其清單中首先放置的範圍。這些是根據上述測量得出的合理選擇。
| 如果您需要 | 選擇 | 為什麼 |
|---|---|---|
| 所有內容都保存在一個文件中 | GLB | 唯一將場景圖、材質名稱、UV 和每個頂點的顏色保存在一起的目標,並且具有完整格式中最小的尺寸。 |
| 一切都保存下來,可供人讀取 | glTF | 與GLB內容相同,約一個 33 百分比大一些,因為緩衝區採用 JSON 中的 base64 格式。 |
| 在桌面程式中分隔命名對象 | OBJ | 他保留了這兩個物體和兩個材料名稱。丟棄每個頂點的顏色並寫入六個檔案中最大的檔案。 |
| 3D列印 | STL | 三角形,沒有別的,這就是層壓機讀取的全部內容。最小的非 glTF 目標位於真實網格上。 |
| 每個頂點的幾何形狀和顏色,權重很小 | PLY | 除 glTF 之外唯一保留每個頂點顏色並維護索引的目標,因此它保持接近來源的大小。 |
| iPhone 上的 Apple Quick Look/AR | USDZ | 它將兩個物件和 UV 保留在參考場景中。重新讀取時遺失了每個頂點的顏色和材質名稱。手機可以開啟的 USDA zip。 |
這些格式的定義是什麼#
以上測量值是我們自己的;每種格式可以採用什麼不是由我們決定的。這些是決定它的規範和格式參考,因此可以在來源處驗證此頁面所說的內容,而不是簡單地相信。
- glTF 2.0 規格科諾斯集團
定義了 GLB 和 glTF 所攜帶的場景圖、材質和訪問器,並解釋了為什麼它們是唯一完好無損的目的地。
- 媒體類型 model/gltf-binary網路號碼分配機構
為 GLB(上面測量的二進位容器)註冊的類型。
- 媒體類型型號/stl網路號碼分配機構
STL 已註冊:三角形和麵法線,沒有任何顏色、UV、材質或物件名稱欄位。
- Wavefront OBJ 文件格式保羅·伯克
OBJ 的通常參考,它沒有自己的每個頂點顏色字段,這與轉換排除的內容一致。
- PLY 多邊形檔案格式保羅·伯克
記錄每個頂點的屬性(包括顏色),使 PLY 成為此處保留它的唯一非 glTF 目標。
- USDZ 檔案格式規範皮克斯/OpenUSD
USDZ 是一個 zip,其第一個條目是場景 USDA。這就是該轉換器寫入和讀取的資料包。
測量方法#
測量執行的是產品,而不是產品的描述。此腳本會匯入與瀏覽器轉換器相同的載入器和匯出器,具有相同的選項,並且位於儲存庫中,因此可以複製或討論這些圖。
- 使用兩個命名立方體建立參考場景,每個立方體都有命名金屬材質、每個頂點的顏色、UV 座標和法線。
- 載入實際產生的網格的方式與轉換器載入您提供的檔案的方式相同,包括當網格到達時沒有頂點法線時計算頂點法線的步驟。
- 使用轉換器呼叫的相同導出器和相同的二進位設定導出到 GLB、glTF、OBJ、STL、PLY 和 USDZ。
- 記錄每個結果的大小(以位元組為單位)。
- 直接從寫入的位元組讀取屬性,而不是從重新載入的場景中讀取屬性,因為載入程式發明了檔案不包含的內容:沒有 vn 行的 OBJ 也會使用合成法線屬性重新載入。
- 直接根據該結果發布表格。測量了 2026年9月13日 與三.js r179.
問題
- 轉換 3D 檔案會降低品質嗎?
- 表格編號每個目標都被轉換並讀回,三角形的數量和總表面積在網格上顯示相同 498,734 三角形,無需截斷任何格式的座標。遺失的是幾何體周圍的所有內容,這取決於目的地:STL 丟棄 UV、顏色、材質和場景圖; OBJ 丟棄每個頂點的顏色; PLY丟棄材質名稱並合併場景; USDZ 在重讀時丟棄每個頂點的顏色和材質名稱; GLB 和 glTF 保留了這一切。
- 哪一種 3D 格式佔用的空間最少?
- GLB,在真實的網格上。在這些測試中 GLB 寫道 1,173 KB OBJ 寫的地方 4,928 KB 對於同一模型,因為 GLB 是二進位的並維護共享頂點索引,而產生的 OBJ 是文字並分別保存每個三角形的每個角落。
- 為什麼我的 OBJ 比它原來的 GLB 佔用的空間多得多?
- 出於兩個原因,這兩種措施:OBJ 是文字而不是二進制,並且 6 在索引良好的網格上。表面相同;會計沒有。
- STL 保留顏色嗎?
- 不會。二進位 STL 保存每個三角形的一個面法線和三個角,並且沒有顏色、UV、材質或物件名稱欄位。這些測試中編寫的所有 STL 都是如此。
- 我可以在不使用 GLB 的情況下保留每個頂點的顏色嗎?
- 是的,使用 PLY。在這些測試中,它是唯一在其標頭中聲明顏色屬性的非 glTF 目標。當然,它將多個物件的場景扁平化為單一網格,因此您可以保留顏色並丟失部分。
- 重複轉換 3D 模型是否會降低其效能?
- 不會。與重新儲存 JPEG 不同,3D 轉換不會累積錯誤:座標被複製為二進位浮點數,或在 OBJ 的情況下,被寫入為全精度小數。通過任何一種格式的往返都會回到相同的表面。回不去的,是命運從一開始就無法承載的物質和場景訊息。
- 我可以複製這些數字嗎?
- 是的。測量腳本位於儲存庫的 script/measure-conversions.mjs 中,並寫入讀取此頁面的 JSON。最後執行於 2026年9月13日 與三.js r179.