File GLB là gì? Định dạng Mô hình 3D Hiện đại
File GLB: Câu trả lời ngắn gọn
File GLB là một mô hình 3D được đóng gói để phân phối. Nó là một định dạng thùng chứa nhị phân cho các cảnh và mô hình 3D, được định nghĩa bởi Khronos Group như một phần của đặc tả glTF 2.0. Tên của nó là viết tắt của GL Transmission Format Binary — và chính phần 'nhị phân' đó tạo nên mọi sự khác biệt so với người anh em của nó, GLTF. Trong khi một file .gltf tiêu chuẩn là một file văn bản JSON mà con người có thể đọc được, trỏ đến các tài sản bên ngoài như texture và hình học, thì một file .glb gói mọi thứ vào một gói duy nhất, gọn gàng. Phần mô tả JSON, dữ liệu hình học nhị phân, và các texture nhúng đều nằm trong một file độc lập. Thiết kế một file duy nhất này chính là lý do tại sao GLB trở thành tiêu chuẩn để phân phối nội dung 3D trên web, trong các ứng dụng AR và trên các game engine hiện đại. Về kích thước để bạn dễ hình dung: một mô hình sản phẩm có độ phức tạp trung bình với các texture PBR có thể nặng khoảng 4–8 MB dưới dạng GLB. Gói OBJ + MTL + PNG tương đương có thể dễ dàng trải dài ra cả chục file với tổng dung lượng 15 MB hoặc hơn, mà không có gì đảm bảo rằng mọi file sẽ đến nơi nguyên vẹn trong quá trình truyền tải. Khronos đã công bố đặc tả glTF 2.0 vào tháng 6 năm 2017, và sự hỗ trợ từ ngành công nghiệp đã nhanh chóng theo sau. Ngày nay, GLB được hỗ trợ nguyên bản ở mọi nơi quan trọng: 3D Viewer của Windows 11, Quick Look của Apple, model-viewer của Google, Babylon.js, Three.js, Unity, Unreal Engine, Blender, và hàng tá nơi khác. Nó đã trở thành JPEG của thế giới 3D. Có thể nó không hoàn hảo cho mọi quy trình làm việc, nhưng nó có thể đọc được ở khắp mọi nơi.
Cấu trúc bên trong của một file GLB
Để hiểu được điểm mạnh và những điểm oái oăm đôi khi xảy ra khi chuyển đổi của GLB, bạn phải xem cách nó được xây dựng. Đó là một cấu trúc đơn giản và thông minh. Mọi file GLB đều bắt đầu bằng một header 12 byte chứa ba thứ: một số 'ma thuật' đọc là 'glTF' trong mã ASCII (0x46546C67), số phiên bản (hiện tại là 2), và tổng chiều dài file tính bằng byte. Sau header đó, file được tổ chức thành một hoặc nhiều khối (chunk). Chunk 0 luôn là chunk JSON. Đây là bản thiết kế cho cảnh 3D của bạn, chứa đồ thị cảnh (scene graph)—các node, mesh, vật liệu, camera, hoạt ảnh, và skin—tất cả được mô tả theo lược đồ của glTF. Chunk 1 là bộ đệm nhị phân (binary buffer). Nó lưu trữ những thứ nặng ký: dữ liệu hình học thô như vị trí đỉnh, pháp tuyến, tọa độ UV, trọng số xương, và các khung hình chính của hoạt ảnh. Mọi thứ được nén chặt nhất có thể vào một khối nhị phân. Texture cũng có thể được nhúng vào chunk này, lưu dưới dạng dữ liệu PNG hoặc JPEG, và được tham chiếu bởi bản thiết kế JSON. Kiến trúc này có nghĩa là một file GLB được tạo đúng chuẩn luôn luôn hoàn chỉnh. Nếu ai đó gửi cho bạn một file GLB và nó mở được, bạn biết chắc chắn rằng tất cả dữ liệu đều có mặt. Không còn phải đi săn lùng các file texture bị thiếu hay sửa các đường dẫn tương đối bị hỏng. Đó là một bước tiến lớn so với các định dạng cũ. Đặc tả GLB hiện chỉ hỗ trợ một chunk bộ đệm nhị phân duy nhất. Đối với các cảnh phức tạp có nhiều texture, điều này có thể tạo ra một khối dữ liệu lớn, kém hiệu quả hơn khi truyền phát trực tuyến (streaming) so với các định dạng được thiết kế riêng cho việc đó, như 3D Tiles.
GLB so với GLTF và các Định dạng 3D khác
Thế giới định dạng 3D khá là đông đúc. Đây là cách GLB đứng ở đâu khi so sánh với các định dạng khác mà bạn có khả năng gặp phải nhất. **GLTF (.gltf):** Đây là phiên bản dạng văn bản sử dụng cùng đặc tả glTF. Hãy dùng GLTF khi bạn cần chỉnh sửa thủ công phần mô tả cảnh hoặc quy trình của bạn xử lý texture và hình học riêng biệt. Đối với mọi thứ khác, đặc biệt là phân phối, hãy sử dụng GLB vì tính di động của nó. **FBX (.fbx):** Định dạng độc quyền của Autodesk đã thống trị các quy trình sản xuất game từ lâu. FBX rất mạnh mẽ, xử lý tốt các rig phức tạp, blend shape, và hoạt ảnh nhiều take. Nhưng nó là một định dạng nhị phân đóng không có đặc tả công khai, dẫn đến các vấn đề tương thích đến phát điên giữa các phiên bản phần mềm. GLB là giải pháp thay thế mở và hiện đại. Mặc dù hỗ trợ hoạt ảnh của nó rất tốt, nó ít được thử lửa qua thực tế hơn đối với các rig nhân vật phức tạp nhất trong các game AAA. **OBJ (.obj):** Một lão làng thực thụ, có từ đầu những năm 1990. OBJ rất đơn giản, chỉ lưu trữ hình học tĩnh và các vật liệu cơ bản. Nó không có hoạt ảnh, không có vật liệu PBR hiện đại, và không có hệ thống phân cấp cảnh. Nó ổn cho việc trao đổi mesh đơn giản, nhưng GLB đã hoàn toàn thay thế nó cho việc phân phối trên web. **USD / USDZ (.usdz):** Đây là định dạng AR ưa thích của Apple, được xây dựng trên Universal Scene Description của Pixar. Một file USDZ là một kho lưu trữ ZIP chứa các file USD và texture. Nó hoạt động tuyệt vời trong hệ sinh thái của Apple nhưng có hỗ trợ hạn chế bên ngoài. Hầu hết các quy trình AR đều phải tạo cả file GLB (cho Android/web) và USDZ (cho iOS). **STL (.stl):** Định dạng này dành cho in 3D, chấm hết. Nó chỉ lưu trữ hình học tam giác thô, không màu, không texture. Nó không phải là đối thủ cạnh tranh với GLB cho bất kỳ loại hình kết xuất đồ họa nào. Đối với bất cứ thứ gì trên web—công cụ cấu hình sản phẩm, AR trong thương mại điện tử, trải nghiệm WebXR—GLB nên là lựa chọn mặc định của bạn. Nó là công cụ phù hợp nhất cho công việc này.
File GLB thực sự được sử dụng ở đâu
Vậy bạn thấy file GLB ở đâu trong thực tế? Chúng đã trở thành xương sống của 3D trên web và trong AR. **Trực quan hóa sản phẩm thương mại điện tử:** Shopify là một chất xúc tác lớn trong lĩnh vực này, cung cấp hỗ trợ GLB nguyên bản cho media sản phẩm 3D/AR. Người bán tải lên một file GLB duy nhất, và Shopify lo phần còn lại, phục vụ nó qua model-viewer trên máy tính và chuyển đổi nó thành USDZ ngay lập tức cho AR Quick Look trên iOS. Chìa khóa là kích thước: dưới 15 MB là quy tắc, nhưng dưới 4 MB là mục tiêu để tải nhanh trên di động. Texture nên có kích thước tối đa là 2048×2048 pixel. **WebXR và 3D trên trình duyệt:** Các framework như Three.js và Babylon.js coi GLB như công dân hạng nhất. Tải một file GLB trong Three.js chỉ mất vài dòng mã. Bởi vì định dạng này hỗ trợ vật liệu PBR (metalness/roughness) ngay từ đầu, ánh sáng trông rất thực tế mà bạn không cần phải viết shader tùy chỉnh. **Game engine:** Cả Unity và Unreal Engine 5 đều đã đón nhận GLB. Unity nhập chúng thông qua các gói như GLTF Fast, trong khi quy trình datasmith của Unreal giờ đây đã bao gồm việc nhập GLB nguyên bản. Godot 4 còn đi xa hơn nữa, áp dụng GLTF/GLB làm định dạng trao đổi cảnh chính của mình. **Bản sao số và trực quan hóa công nghiệp:** Các nền tảng như Autodesk Tandem và Bentley iTwin sử dụng GLB để đưa các mô hình tòa nhà và cơ sở hạ tầng khổng lồ lên trình duyệt mà không cần plugin. Toàn bộ một sơ đồ mặt bằng tòa nhà, được chuyển đổi từ một định dạng như IFC, trở nên có thể xem được trên mọi thiết bị. **Ứng dụng thực tế tăng cường:** Trên Android, Scene Viewer của Google có thể được khởi chạy trực tiếp bằng một URL trỏ đến file GLB. Reality Composer của Apple cũng chấp nhận GLB, biến nó thành một định dạng nguồn đa nền tảng khả thi. Nơi duy nhất GLB không phải là ngôi sao là trong lĩnh vực kỹ xảo điện ảnh cao cấp, nơi các định dạng như USD, Alembic, và OpenEXR vẫn được yêu cầu vì chúng hỗ trợ sâu hơn cho các bề mặt chia nhỏ (subdivision surfaces), khối (volumes), và dữ liệu ghép phức tạp.
Chuyển đổi đến và từ GLB với CocoConvert
CocoConvert giúp cho các chuyển đổi GLB phổ biến nhất trở nên đơn giản. Bạn có thể thực hiện ngay trên trình duyệt của mình, không cần cài đặt Blender hay chạy một kịch bản Python. **Chuyển đổi GLTF sang GLB:** Đây là con đường dễ dàng nhất. Tải lên file .gltf, file .bin của nó, và tất cả các texture của bạn cùng một lúc. CocoConvert sẽ đóng gói chúng thành một file .glb duy nhất, sạch sẽ, bảo toàn hoàn hảo các vật liệu, hoạt ảnh, và hệ thống phân cấp cảnh. **Chuyển đổi OBJ sang GLB:** Tải lên file .obj và file .mtl của nó cùng nhau. CocoConvert đọc các định nghĩa vật liệu và ánh xạ chúng sang mô hình PBR của glTF. Các màu khuếch tán đơn giản và texture sẽ được chuyển đổi một cách sạch sẽ. Cần lưu ý: các vật liệu có độ bóng cao từ các file OBJ cũ thường chuyển đổi không tốt sang mô hình metalness/roughness hiện đại. Bạn có thể nhận được các bề mặt bóng hơn hoặc phẳng hơn so với mong đợi. Để làm việc chuyên nghiệp, bạn sẽ có kết quả tốt hơn bằng cách tự điều chỉnh vật liệu trong shader Principled BSDF của Blender sau khi nhập. **Chuyển đổi FBX sang GLB:** Việc này có thể phức tạp. Bất cứ ai từng vật lộn với tính tương thích của FBX đều hiểu nỗi đau này. Mặc dù công cụ chuyển đổi của chúng tôi hoạt động với nhiều file, các rig nhân vật phức tạp với blend shape hoặc các phần mở rộng độc quyền của Autodesk có thể không chuyển đổi hoàn toàn. Nếu file FBX của bạn có nhiều take hoạt ảnh, CocoConvert hiện chỉ xuất take mặc định. Để có hoạt ảnh nhân vật chắc chắn không lỗi, cách tốt nhất của bạn là nhập FBX vào Blender và sau đó xuất thủ công sang GLB. Điều này cho bạn toàn quyền kiểm soát rig và hoạt ảnh. **Chuyển đổi GLB sang các định dạng khác:** CocoConvert có thể giải nén một file GLB trở lại thành OBJ (hình học tĩnh và vật liệu cơ bản) hoặc STL (chỉ hình học, cho in 3D). Nó cũng có thể chuyển đổi một file GLB trở lại định dạng văn bản GLTF đã giải nén của nó. Chuyển đổi GLB sang FBX hiện không được hỗ trợ. Đây thực sự là một bài toán khó vì hệ thống vật liệu và hoạt ảnh của chúng rất khác nhau, và không có công cụ tự động nào làm đúng một cách nhất quán. Đối với bất kỳ chuyển đổi nào, một chút sắp xếp sẽ giúp ích rất nhiều. Đặt tên texture của bạn rõ ràng, tránh dấu cách trong tên file, và đảm bảo hình học của mô hình nguồn của bạn sạch sẽ trước khi bắt đầu.
Tối ưu hóa file GLB cho hiệu suất web
Một file GLB đẹp mắt từ ứng dụng 3D của bạn có thể khiến trình duyệt phải quỳ gối nếu nó không được tối ưu hóa cho web. Để chuẩn bị một file cho việc phân phối, bạn cần tấn công nó trên ba mặt trận: độ phức tạp hình học, nén texture, và kích thước file tổng thể. **Hình học:** Mục tiêu của bạn là sử dụng ít đa giác nhất có thể. Đối với một mô hình sản phẩm thương mại điện tử thông thường, hãy nhắm đến dưới 100.000 tam giác. Một chiếc cốc cà phê không cần đến 500.000 đa giác. Sử dụng bộ điều chỉnh Decimate của Blender (Mesh > Modifiers > Add Modifier > Decimate) để chém bớt số lượng đa giác. Tỷ lệ Collapse từ 0.1 đến 0.3 thường cắt giảm 70–90% số tam giác mà gần như không làm mất chất lượng hình ảnh ở khoảng cách xem thông thường. **Nén texture:** Các file GLB tiêu chuẩn nhúng texture dưới dạng JPEG hoặc PNG. Như vậy là chưa đủ tốt cho web. Sử dụng texture KTX2 với nén Basis Universal (thông qua extension EXT_texture_basisu) là một yếu tố thay đổi cuộc chơi. Nó có thể thu nhỏ bộ nhớ texture trên GPU từ 4–8 lần và cho phép GPU giải nén chúng trực tiếp, tiết kiệm chu kỳ CPU. Công cụ dòng lệnh glTF-transform là thiết yếu cho việc này: `gltf-transform etc input.glb output.glb --slots "baseColor,normal"`. **Nén mesh Draco:** Thuật toán này của Google, được áp dụng qua extension KHR_draco_mesh_compression, thu nhỏ dữ liệu hình học từ 60–80%. Cả Three.js và Babylon.js đều hỗ trợ nó. Một lần nữa, glTF-transform là bạn của bạn: `gltf-transform draco input.glb output.glb`. **Kích thước mục tiêu thực tế:** Nhắm đến dưới 1 MB cho một mô hình đơn giản, 1–5 MB cho một sản phẩm chi tiết có texture, và 5–15 MB cho các cảnh phức tạp. Nếu bạn vượt quá 15 MB, đã đến lúc nghĩ đến việc chia nhỏ cảnh hoặc sử dụng các mesh có mức độ chi tiết khác nhau (level-of-detail). CocoConvert áp dụng một số tối ưu hóa cơ bản, nhưng để có hiệu suất ở cấp độ chuyên nghiệp thực sự, bạn cần sự kiểm soát chi tiết của một công cụ như glTF-transform CLI hoặc trình chỉnh sửa desktop Gestaltor.
Mở và kiểm tra file GLB mà không cần phần mềm đặc biệt
Một trong những điều tuyệt vời nhất về GLB là bạn hiếm khi cần cài đặt phần mềm đặc biệt chỉ để xem bên trong có gì. **Windows 11:** Chỉ cần nhấp đúp vào một file .glb. Nó sẽ mở trong ứng dụng 3D Viewer tích hợp sẵn, nơi bạn có thể xoay, thu phóng và kiểm tra mô hình. Windows 10 cũng có tính năng này, thông qua ứng dụng 3D Viewer từ Microsoft Store. **macOS và iOS:** File GLB hoạt động với Quick Look. Chọn file trong Finder và nhấn phím Space. Trên iPhone hoặc iPad, chạm vào một file GLB trong ứng dụng Files hoặc Safari sẽ mở nó trong Quick Look, với một nút để đặt nó ngay lập tức vào phòng của bạn bằng AR. **Trình xem trực tuyến:** Trình xem mẫu glTF chính thức tại https://sandbox.babylonjs.com và https://gltf.report của Don McCurdy là không thể thiếu. Cả hai đều miễn phí và chạy trên trình duyệt của bạn. Thật lòng mà nói, gltf.report nên là nơi đầu tiên bạn ghé qua để gỡ lỗi. Nó cung cấp cho bạn một bản phân tích hoàn chỉnh—số lượng đa giác, kích thước texture, số lệnh vẽ, và các lỗi xác thực—tất cả mà không cần tải file của bạn lên. Đúng là phép màu thuần túy phía client. **VS Code:** Nếu bạn là một nhà phát triển, extension Cesium glTF Tools là một thứ phải có. Nó cho phép bạn xem trước một file GLB và xem phần mô tả cảnh JSON thô song song, rất hoàn hảo để gỡ lỗi các vấn đề chuyển đổi. **Blender:** Tất nhiên, bạn luôn có thể nhập trực tiếp một file GLB vào Blender qua File > Import > glTF 2.0 (.glb/.gltf). Blender 3.3 trở lên có hỗ trợ rất tốt. Sau khi nhập, bạn có thể đào sâu vào các vật liệu, kiểm tra hệ thống phân cấp cảnh, và xuất lại với các cài đặt mới. Nếu một file GLB không mở được trong bất kỳ công cụ nào kể trên, thường là do một vấn đề đơn giản: quá trình download chưa hoàn tất, file chứa các extension không chuẩn, hoặc các texture bên trong sử dụng một định dạng như KTX2 mà trình xem không hỗ trợ. Kết quả xác thực từ gltf.report hầu như luôn cho bạn biết chính xác vấn đề là gì.