Mengapa Ukuran Model 3D Begitu Berat?
File GLB Anda hanya 10MB, tetapi di ponsel pintar memakan 200MB VRAM dan menyebabkan crash. Mari kita bedah tuntas apa yang sebenarnya terjadi di balik layar.
Model Anda Menyimpan Beban Tersembunyi
Anda mengekspor file GLB berukuran 10MB. Tampak ringkas dan wajar. Namun saat dibuka di browser ponsel pintar, yang terjadi adalah layar putih, lag parah, bahkan browser mendadak tertutup (crash).
Model berjalan mulus di laptop desktop, tetapi bermasalah di perangkat mobile. Ini bukan kesalahan kode Anda; file 3D memiliki karakteristik yang tidak biasa: ukuran file di disk sangat berbeda dengan konsumsi memori saat berada di VRAM GPU.
File gambar JPEG di disk mungkin hanya 200KB. Namun GPU tidak mengenali kompresi JPEG; GPU hanya dapat memproses larik piksel mentah. Sebelum masuk ke VRAM, gambar tersebut harus diekstrak sepenuhnya. Satu tekstur 2048×2048 setelah diekstrak membutuhkan sekitar 22MB VRAM. Jika satu material PBR menggunakan 6 peta tekstur (albedo, normal, roughness, metallic, AO, emissive), satu material saja menghabiskan 132MB VRAM.
Jika ponsel hanya memiliki kapasitas VRAM bersama sebesar 2-4GB, tekstur dari satu model saja sudah menyita 3-6% total memori. Bagaimana jika ada 10 model dalam satu adegan?
Ke Mana Ukuran File 3D Sebenarnya Mengalir?
Model GLB standar tersusun atas tiga komponen utama: data vertex, peta tekstur gambar, serta metadata dan animasi.
Proporsi ukuran pada model PBR nyata:
| Komponen | Isi Data | Proporsi Tipikal | Keterangan |
|---|---|---|---|
| Peta Tekstur | albedo, normal, roughness, metallic, AO, dll. | 70-85% | Komponen paling berat |
| Data Vertex | koordinat posisi, normal, UV, tangen, warna | 10-20% | Bergantung kepadatan geometri |
| Data Animasi | tulang (bones), skinning, keyframe | 0-15% | Hanya ada pada model beranimasi |
| Lainnya | definisi material, struktur hierarki, kamera | < 2% | Sangat kecil |
Peta tekstur menyumbang sekitar 80% dari total ukuran. Sering kali praktisi mengira perlu mengoptimasi vertex terlebih dahulu, padahal beban terbesar berada pada tekstur.

"Ringan di Disk" Bukan Berarti "Ringan di VRAM"
Ini adalah konsep paling penting untuk memahami performa grafis 3D web.
Format PNG dan JPEG dirancang untuk efisiensi jaringan internet: kecil di disk dan cepat diunduh. Namun GPU tidak bisa membaca format tersebut secara langsung dan harus mengekstraknya menjadi piksel mentah berdasarkan rumus:
Konsumsi VRAM = Lebar × Tinggi × 4 byte (RGBA) × 1.333 (dengan mipmaps)
Tekstur RGBA 4096×4096:
| Parameter | Nilai |
|---|---|
| Ukuran file PNG di disk | ~8MB |
| Ukuran file JPEG di disk | ~1.5MB |
| Konsumsi VRAM (dengan mipmaps) | ~87MB |
File JPEG 1.5MB membengkak menjadi 87MB di VRAM GPU.
Apa itu mipmaps? GPU membuat rangkaian versi tekstur yang ukurannya diperkecil secara bertahap dari ukuran penuh hingga 1×1 piksel. Ini membuat objek yang jauh tampak lebih halus dan cepat dirender, dengan tambahan biaya sekitar 33% VRAM. Hampir seluruh engine 3D mengaktifkan mipmaps secara standar.
PNG dan JPEG ibarat kantong pakaian vakum saat bepergian: sangat ringkas saat dibawa, namun harus dibuka dan mengembang penuh setibanya di tujuan. Unduhan cepat, namun tidak menghemat ruang memori grafis sama sekali.

Dampak Kehabisan Memori VRAM
Perangkat tidak akan menampilkan dialog ramah saat VRAM habis:
- Di ponsel pintar: layar menjadi putih seketika atau sistem operasi menutup tab browser secara paksa.
- Di headset VR: penurunan frame rate drastis yang menyebabkan disorientasi dan rasa mual (motion sickness).
- Di desktop: tekstur berkedip, resolusi turun otomatis, dan animasi melambat.
Dua Jalur Utama Kompresi 3D
Kompresi model 3D terbagi menjadi dua pendekatan:
Kompresi Vertex: menyimpan koordinat posisi, normal, dan UV secara lebih ringkas (misalnya kuantisasi dari float 32-bit ke integer 16-bit). Solusi utama: Draco, MeshOpt, dan KHR_mesh_quantization.
Kompresi Tekstur: mempertahankan tekstur tetap terkompresi di dalam memori VRAM dan mendekode piksel secara instan saat render berlangsung. Solusi utama: KTX2 + Basis Universal.
| Aspek | Kompresi Vertex | Kompresi Tekstur |
|---|---|---|
| Yang dikurangi | Data geometri mesh | Peta tekstur gambar |
| Hasil tipikal | Pangkas ukuran file 50-90% | Pangkas disk 50-70%, VRAM 75% |
| Penurunan kualitas? | Ya (presisi desimal) | Ya (detail visual) |
| Penggunaan ideal | Model padat geometri | Hampir semua model PBR |
Kerap kali terjadi kekeliruan di mana pengguna hanya mengompresi vertex dengan Draco lalu menganggap pekerjaan selesai, padahal tekstur masih menyumbang 80% ukuran model. Optimasi maksimal membutuhkan penanganan kedua aspek tersebut secara seimbang.
Tidak Ada Solusi Tunggal untuk Semua Kasus
Strategi kompresi harus disesuaikan dengan platform sasaran:
| Skenario | Bottleneck Utama | Fokus Optimasi |
|---|---|---|
| Web Desktop | Kecepatan unduh | Ukuran file di disk |
| Browser Mobile | Kapasitas VRAM | Kompresi tekstur KTX2 |
| Headset VR | VRAM + kestabilan FPS | Kompresi tekstur + reduksi poligon |
| Mini Program | Batas ukuran paket | Solusi ringan (MeshOpt) |
| Adegan Kompleks | VRAM + Draw Calls | Kompresi menyeluruh + LOD |
Langkah Selanjutnya
Setelah memahami akar masalahnya, artikel berikutnya akan membahas praktik langsung menggunakan tiga teknik kompresi vertex: Kuantisasi, MeshOpt, dan Draco.