Cara Mengonversi glTF ke GLB (Model 3D File Tunggal)
glTF vs. GLB: Apa Sebenarnya Perbedaan Kedua Format Ini
Pada dasarnya, glTF dan GLB adalah hal yang sama. Keduanya didefinisikan oleh spesifikasi Khronos Group yang sama dan memiliki struktur data yang identik, mendukung material PBR, animasi, dan hierarki scene yang sama. Satu-satunya perbedaan nyata adalah cara pengemasannya. Aset glTF standar adalah sekumpulan file yang harus selalu bersamaan. Kamu akan mendapatkan file JSON .gltf yang bisa dibaca manusia yang mendeskripsikan scene, material, dan topologi mesh. Bersamaan dengan itu, kamu akan menemukan satu atau beberapa file .bin yang berisi data geometri mentah—posisi vertex, normal, UV, dan sebagainya. Lalu ada folder gambar tekstur, biasanya PNG atau JPEG. Model karakter yang cukup kompleks mungkin terdiri dari character.gltf, character0.bin, dan folder textures/ dengan sepuluh gambar. Kalau salah satu file itu hilang, modelnya tidak akan bisa dimuat. Sementara itu, GLB adalah versi kontainer binernya. Format ini mengemas JSON, data biner, dan semua tekstur dengan rapi ke dalam satu file .glb. Semuanya disatukan oleh header kecil 12-byte yang berisi magic number (0x46546C67, yang merupakan 'glTF' dalam ASCII), field versi (saat ini 2), dan total panjang file. Sisa dari file tersebut hanyalah urutan potongan data. Ini membuat file GLB sepenuhnya mandiri. Kamu bisa mengirimnya lewat email, memasukkannya ke konfigurator produk berbasis web, atau memberikannya kepada klien tanpa perlu khawatir path rusak atau tekstur yang hilang. Ukuran filenya hampir selalu berada dalam rentang 1–3% dari bundel aslinya, jadi kamu tidak perlu mengorbankan ruang penyimpanan untuk mendapatkan kemudahan yang luar biasa ini.
Kapan Sebaiknya Mengonversi glTF ke GLB (dan Kapan Tidak)
Untuk pengiriman dan deployment akhir, pilihan utama saya selalu GLB. Kesederhanaan dari satu file mandiri terlalu sayang untuk dilewatkan. Namun, selama pengembangan aktif, tetap menggunakan format glTF multi-file sebenarnya bisa menjadi pilihan yang lebih cerdas. Alasan terkuat untuk menggunakan GLB adalah saat kamu men-deploy model ke viewer web seperti model-viewer, Babylon.js, atau Three.js. Satu permintaan fetch selalu lebih baik daripada serangkaian panggilan jaringan untuk setiap file biner dan tekstur. File GLB 4 MB akan dimuat jauh lebih cepat di koneksi seluler daripada model yang sama yang dipecah menjadi file .gltf 120 KB, .bin 2,1 MB, dan enam tekstur dengan total 1,8 MB. Kenapa? Karena setiap file terpisah memerlukan HTTP round-trip-nya sendiri. Kamu juga sebaiknya mengonversi ke GLB saat mendistribusikan ke klien atau marketplace; platform seperti Unity Asset Store, Sketchfab, dan pipeline AR Quick Look dari Apple semuanya bekerja dengan lancar menggunakan format ini. Jadi, di mana keunggulan glTF multi-file? Saat pembuatan konten. Jika seorang texture artist sedang mengerjakan roughness map 2K, mereka bisa langsung menaruh file PNG baru ke dalam folder tekstur dan me-refresh. Itu jauh lebih cepat daripada mengemas ulang seluruh aset setiap saat. Logika yang sama berlaku untuk sistem build otomatis. Jika pipeline kamu menjalankan kompresi tekstur untuk menghasilkan varian KTX2 atau Basis Universal, jauh lebih sederhana untuk bekerja dengan file-file terpisah daripada harus membongkar dan mengemas ulang file GLB setiap kali melakukan build. Dan ini batasan penting yang perlu diingat: GLB secara desain tidak bisa mereferensikan tekstur eksternal. Jika file glTF asli kamu diatur dengan cerdas untuk menautkan ke tekstur di CDN—sebuah pola untuk berbagi atlas tekstur antar model—mengonversinya ke GLB akan menyematkan salinan lokal dan merusak pola sumber daya bersama tersebut.
Cara Mengonversi glTF ke GLB Menggunakan CocoConvert
Menggunakan tool berbasis browser dari CocoConvert adalah cara termudah untuk mendapatkan file GLB, karena tidak memerlukan instalasi software apa pun. Seluruh proses bekerja di sisi klien untuk file di bawah 100 MB, yang berarti data geometri dan tekstur berhargamu tidak pernah meninggalkan komputermu. Langkah 1 — Siapkan file kamu. Aset glTF adalah satu paket, jadi kamu perlu mengunggah semuanya secara bersamaan. Satu-satunya cara adalah dengan me-zip file .gltf kamu, semua file .bin terkait, dan seluruh folder tekstur ke dalam satu arsip. Sangat penting untuk menjaga struktur folder internalnya tetap utuh. File .gltf bergantung pada path relatif seperti ./textures/baseColor.png, dan konverter membutuhkan path tersebut agar benar di dalam file zip. Langkah 2 — Buka konverter. Buka halaman /convert/gltf-to-glb dan klik area unggah atau cukup seret file .zip kamu ke halaman tersebut. Tool ini cukup pintar untuk menemukan titik masuk glTF secara otomatis. Jika karena suatu alasan file zip kamu berisi beberapa file .gltf (seperti varian LOD), sebuah dropdown akan muncul agar kamu bisa memilih file yang benar untuk digunakan sebagai root. Langkah 3 — Tinjau opsi konversi. CocoConvert memberimu beberapa pengaturan. 'Embed textures' aktif secara default, dan inilah yang kamu inginkan untuk sebuah file GLB tunggal yang sesungguhnya. Jika kamu menonaktifkan ini, output akan mereferensikan URI tekstur eksternal, yang akan menghilangkan tujuan utama dari konversi ini. Opsi lainnya adalah 'Flatten buffer'. Saran saya? Biarkan saja opsi ini aktif. Opsi ini menggabungkan beberapa file .bin menjadi satu potongan biner tunggal, yang merupakan perilaku standar GLB. Langkah 4 — Unduh. Selesai. Konversi biasanya memakan waktu antara 5 hingga 20 detik, tergantung pada berapa banyak tekstur yang kamu miliki dan total ukuran file. Kamu akan mendapatkan satu file .glb, siap untuk di-deploy.
Alternatif Command-Line: Menggunakan gltf-pipeline untuk Alur Kerja Otomatis
Saat kamu mengonversi puluhan model sebagai bagian dari pipeline build, menggunakan UI web satu per satu tentu tidak praktis. Untuk alur kerja otomatis apa pun, tool Node.js gltf-pipeline dari tim Cesium adalah opsi open-source paling andal yang ada. Pertama, instal secara global dengan npm: `npm install -g gltf-pipeline`. Mengonversi satu aset kemudian menjadi mudah: `gltf-pipeline -i scene.gltf -o scene.glb`. Flag -i menunjuk ke file .gltf input kamu. Tidak seperti tool web, gltf-pipeline secara otomatis menemukan file .bin dan tekstur terkait di direktori yang sama, jadi tidak perlu me-zip apa pun. Flag -b (untuk --binary) sudah tersirat saat nama file output kamu diakhiri dengan .glb, ini adalah sebuah kemudahan yang bagus. Untuk memproses seluruh direktori secara batch, sebuah loop shell sederhana adalah solusinya: `for f in models/*.gltf; do gltf-pipeline -i "$f" -o "${f%.gltf}.glb"; done`. Perintah yang setara untuk Windows PowerShell adalah `Get-ChildItem -Filter *.gltf | ForEach-Object { gltf-pipeline -i $_.FullName -o ($_.FullName -replace '.gltf','.glb') }`. gltf-pipeline juga mendukung kompresi mesh Draco dengan flag --draco.compressionLevel (nilai 0–10, default 7). Untuk model apa pun dengan mesh yang padat, kamu wajib mengaktifkan ini. Ini bisa memangkas ukuran geometri hingga 60–80%. Sebuah hasil pindaian 500.000 poligon yang berukuran 18 MB tanpa kompresi bisa menyusut menjadi sekitar 4 MB dengan Draco level 7. Waktu decode yang sedikit lebih lama di browser hampir selalu sepadan. Satu batasan utama dari tool ini adalah ia tidak menangani kompresi tekstur (KTX2/Basis). Untuk itu, kamu memerlukan langkah terpisah dalam pipeline kamu menggunakan tool seperti toktx atau basisu, baik sebelum atau sesudah kamu mengemas GLB.
Memvalidasi Output GLB Kamu Sebelum Deployment
Jangan lewati langkah ini. File GLB yang terbuka sempurna di satu viewer bisa gagal secara diam-diam di viewer lain jika mengandung data yang tidak sesuai standar. Jadikan validasi sebagai bagian standar dari proses kamu sebelum mengirim aset yang telah dikonversi. Validator glTF dari Khronos adalah satu-satunya sumber kebenaran. Kamu bisa menggunakannya secara online di validator.khronos.org—cukup seret file .glb kamu ke halaman tersebut. Validator ini akan mengeluarkan laporan JSON terstruktur yang merinci error, warning, dan info lainnya. Error adalah masalah serius yang tidak bisa ditoleransi. Hal-hal seperti ketidakcocokan componentType accessor atau buffer view yang melebihi panjang buffer yang dideklarasikan akan menyebabkan sebagian besar loader menolak file tersebut seketika. Warning tidak separah itu, tapi tetap layak dibaca; salah satu yang umum seperti 'MESH_PRIMITIVE_UNUSED_TEXCOORD' hanya berarti kamu memiliki set UV yang tidak digunakan oleh material mana pun. Untuk pipeline otomatis, kamu bisa menginstal validator sebagai paket Node: `npm install -g gltf-validator`. Kemudian jalankan `gltf-validator scene.glb --stdout > report.json` dan teruskan laporan itu ke dalam pemeriksaan CI. Sebuah build harus benar-benar gagal jika jumlah error lebih dari nol. Selain kepatuhan spesifikasi yang ketat, selalu lakukan pengecekan visual di setidaknya dua renderer yang berbeda. Saya merekomendasikan model-viewer (modelviewer.dev) dan Babylon.js Sandbox (sandbox.babylonjs.com). Keduanya menggunakan implementasi WebGL yang berbeda dan sangat baik dalam menemukan masalah material yang halus. Siapa pun yang pernah pusing dengan normal map yang terlihat baik-baik saja di tool DCC mereka tetapi secara misterius terbalik di web pasti tahu betapa menyebalkannya ini. Spesifikasi glTF memerlukan normal gaya OpenGL (Y-up), tetapi banyak tool secara default mengekspor gaya DirectX (Y-down). Jika pencahayaanmu terlihat seperti tonjolan yang terbalik, balikkan channel hijau dari normal map kamu dan konversi ulang.
Kesalahan Konversi Umum dan Cara Memperbaikinya
Sebagian besar kesalahan konversi glTF ke GLB memang membuat frustrasi, tapi untungnya, solusinya cukup mudah. Berikut adalah masalah-masalah yang sering muncul. Tekstur hilang di output: Ini adalah masalah nomor satu. Penyebabnya hampir selalu karena path URI tekstur di file .gltf tidak dapat ditemukan selama konversi. Untuk men-debug ini, buka file .gltf kamu di editor teks dan temukan array images. Kamu akan melihat entri seperti `"uri": "textures/Material_baseColor.png"`. Kamu harus memastikan file-file tersebut ada persis di path relatif itu di dalam arsip zip atau direktori kerja kamu. Ingat, pemisah path dan penggunaan huruf besar/kecil itu penting di server: `Textures/BaseColor.png` tidak sama dengan `textures/baseColor.png`. Ukuran file output terlalu besar: Jika file GLB kamu ukurannya besar secara tak terduga, penyebabnya hampir pasti adalah tekstur. Satu PNG RGBA 4096×4096 bisa berukuran 64 MB tanpa kompresi di memori. Meskipun PNG sendiri menggunakan kompresi lossless, GLB hanya menyematkan byte file PNG mentah. Itu berarti tekstur PNG 12 MB kamu akan menambah 12 MB ke GLB. Untuk penggunaan web, kamu harus serius mempertimbangkan untuk menurunkan resolusi tekstur ke 2048×2048 (perbedaan visualnya seringkali tidak signifikan) atau menerapkan kompresi KTX2 sebelum kamu mengemas GLB. Animasi tidak berjalan: Jika sumber glTF kamu memiliki animasi skeletal tapi hilang di file GLB, kemungkinan besar data animasi tersebut tidak pernah disertakan. Beberapa eksportir 3D menulis data animasi ke file .bin terpisah. Jika file tersebut hilang dari input konversi kamu, data animasinya akan hilang begitu saja. Solusinya adalah ekspor ulang dari tool 3D kamu, pastikan semua data biner ditulis ke satu file .bin, lalu jalankan konversi lagi. CocoConvert akan melaporkan peringatan di log-nya jika mendeteksi file referensi yang tidak dapat ditemukan di arsip kamu. Selalu periksa log sebelum mengunduh.
Ukuran File, Performa, dan Ekspektasi di Proyek Nyata
Mari kita tinggalkan teori. Ekspektasi yang konkret lebih baik daripada janji-janji yang tidak jelas, jadi inilah gambaran proses konversi untuk beberapa aset tipikal. Sebuah model furnitur sederhana—satu mesh, dua material, empat tekstur 1K—mungkin awalnya berupa bundel glTF multi-file sebesar 3,2 MB. Setelah konversi, ukurannya menjadi 3,1 MB GLB. Pengurangan ukuran sedikit ini berasal dari penghapusan spasi putih JSON dan penggabungan header buffer. Di desktop dengan koneksi cepat, kamu tidak akan melihat perbedaan waktu muat. Tetapi di koneksi seluler 4G, GLB file tunggal itu akan mulai me-render 300–500 ms lebih cepat karena menghindari overhead dari beberapa permintaan HTTP. Sekarang, bayangkan sebuah karakter kompleks dengan animasi skeletal, 12 material, dan tekstur 2K. Ini bisa menjadi bundel glTF 28 MB. Sebagai GLB biasa, ukurannya sekitar 27,4 MB. Jika kamu menambahkan kompresi Draco untuk geometri, ukurannya bisa turun menjadi sekitar 22 MB. Tetapi jika kamu terlebih dahulu menerapkan kompresi tekstur KTX2 Basis Universal, GLB akhirnya bisa sekecil 9–11 MB. CocoConvert menangani pengemasan dasar glTF-ke-GLB dengan sempurna, tetapi saat ini belum menerapkan Draco atau KTX2. Untuk optimisasi tingkat lanjut tersebut, kamu perlu menggunakan tool seperti gltf-pipeline dan toktx dalam langkah terpisah. Untuk proyek AR, ukuran file sangatlah penting. AR Quick Look dari Apple dan Scene Viewer dari Google keduanya memiliki batasan yang didokumentasikan. Apple menyarankan untuk menjaga ukuran GLB di bawah 20 MB agar dapat dimuat dengan andal melalui jaringan seluler. Batas keras Google adalah 200 MB, tetapi mereka merekomendasikan untuk tetap di bawah 15 MB untuk performa yang baik. Jika GLB hasil konversi kamu melebihi batas ini, jangan langsung menggunakan tool penyederhanaan geometri. Langkah pertama kamu yang paling berdampak hampir selalu adalah kompresi tekstur. Proses konversi itu sendiri di /convert/gltf-to-glb bersifat lossless terhadap data 3D — geometri, material, animasi, dan hierarki scene dipertahankan persis seperti aslinya. Apa yang kamu masukkan adalah apa yang kamu dapatkan, hanya dikemas ulang untuk portabilitas maksimum.