GLB फ़ाइल कंप्रेस करने से असल में क्या होता है?
GLB कंप्रेस करने का मतलब है उसके टेक्सचर और ज्यामिति को दोबारा एनकोड करना, ताकि वही मॉडल कम बाइट्स में आ जाए। ज़्यादातर बचत टेक्सचर से आती है: हमने Khronos के जिन आठ सैंपल मॉडल को मापा, उनमें जिस भी फ़ाइल में टेक्सचर थे, उसका बड़ा हिस्सा इमेज ही थीं। यह GLB कंप्रेसर उन इमेज को छोटा करता है, ज्यामिति को साफ़ करता है और एक नई .glb लिखता है, सब कुछ आपके ब्राउज़र में।
छोटी GLB प्रोडक्ट पेज पर जल्दी लोड होती है, 3D प्लेटफ़ॉर्म और मार्केटप्लेस की अपलोड सीमाओं में आ जाती है, और फ़ोन पर कम मेमोरी लेती है। इसके लिए मॉडल का आकार, मटीरियल या एनिमेशन बदलने की कोई ज़रूरत नहीं पड़ती।
GLB में बाइट्स कहाँ जाते हैं
GLB में तीन तरह का डेटा होता है: टेक्सचर (मॉडल पर लपेटी गई इमेज), ज्यामिति (वर्टेक्स की पोज़िशन, नॉर्मल और त्रिभुजों की सूचियाँ) और एनिमेशन। टेक्सचर GLB के अंदर पूरी इमेज फ़ाइलों के रूप में स्टोर होते हैं, अक्सर 2048 × 2048 के PNG, इसीलिए कुछ सौ त्रिभुज वाला मॉडल भी 8 MB का हो सकता है। कंप्रेस करने से पहले अपनी फ़ाइल का बँटवारा देखने के लिए उसे GLB व्यूअर में खोलें।
लॉसलेस क्लीन-अप बनाम लॉसी कंप्रेशन
कुछ स्टेप ऐसे हैं जिनसे दिखने वाली कोई चीज़ नहीं बदलती: डुप्लिकेट डेटा हटाना, ऐसे मटीरियल और टेक्सचर हटाना जिनका कहीं इस्तेमाल नहीं होता, और बिल्कुल एक जैसे वर्टेक्स को मिलाना। बड़ी बचत लॉसी स्टेप से होती है: छोटे टेक्सचर, WebP या JPEG में दोबारा एनकोड किए गए टेक्सचर, और कम बिट्स में स्टोर की गई वर्टेक्स पोज़िशन। लॉसी का मतलब यह नहीं कि नतीजा दिखने में ख़राब होगा, पर यही वह हिस्सा है जिसे जाँचना चाहिए, और "पहले / बाद में" स्विच इसी के लिए है।
3 स्टेप में GLB फ़ाइल कैसे कंप्रेस करें
अपनी .glb या .gltf ड्रॉप करें
"3D फ़ाइल चुनें" पर क्लिक करें या कोई .glb ड्रॉप एरिया में ड्रॉप करें। .gltf के लिए, उसे उसकी .bin और टेक्सचर फ़ाइलों के साथ चुनें, या पूरा फ़ोल्डर ड्रॉप करें; नतीजा हमेशा एक अकेली .glb होती है। पैनल हर टेक्सचर को उसके साइज़, फ़ॉर्मेट और बाइट्स के साथ दिखाता है।
Web, कंपैटिबल या कस्टम चुनें
Web ब्राउज़र के लिए सबसे छोटी फ़ाइल बनाता है, कंपैटिबल फ़ाइल में कोई नया एक्सटेंशन नहीं आने देता, और कस्टम में आप टेक्सचर का साइज़, फ़ॉर्मेट और क्वालिटी ख़ुद चुनते हैं। कोई भी बटन दबाने से पहले ही टेक्सचर टेबल दिखा देती है कि हर टेक्सचर क्या बनेगा।
तुलना करें, फिर डाउनलोड करें
"GLB कंप्रेस करें" दबाएँ। काम पूरा होने पर 3D व्यू "बाद में" पर चला जाता है और कैमरा वहीं रहता है जहाँ आपने छोड़ा था; तुलना के लिए B दबाएँ या "पहले / बाद में" स्विच इस्तेमाल करें, फिर "कंप्रेस की गई .glb डाउनलोड करें" दबाएँ।
.glb चुनें, या .gltf को उसकी फ़ाइलों के साथ।
मॉडल आगे जहाँ जाएगा, उसके हिसाब से प्रीसेट चुनें।
"पहले" और "बाद में" की तुलना करें, फिर डाउनलोड करें।
टेक्सचर: ज़्यादातर बाइट्स यहीं जाते हैं
GLB का हर टेक्सचर एक पूरी इमेज फ़ाइल होता है, और मॉडल स्क्रीन पर आते ही GPU उसे खोलकर रॉ पिक्सेल में बदल देता है: 2048 × 2048 का टेक्सचर, मिपमैप से पहले, लगभग 16 MB ग्राफ़िक्स मेमोरी लेता है, चाहे उसका PNG कितना भी छोटा रहा हो। इसलिए GLB कंप्रेस करते समय टेक्सचर की सेटिंग्स ही तय करती हैं कि डाउनलोड कितना बड़ा होगा और मॉडल दिखाने में कितना भारी पड़ेगा।
टेक्सचर रीसाइज़ करना: 4096, 2048, 1024 या 512?
टेक्सचर की चौड़ाई और ऊँचाई आधी करने पर एक-चौथाई पिक्सेल बचते हैं। वेब पेज पर, जहाँ मॉडल आम तौर पर स्क्रीन का एक हिस्सा ही घेरता है, ज़्यादातर प्रोडक्ट के लिए 1024 px काफ़ी है; हीरो शॉट और क्लोज़-अप के लिए 2048 px रखना ठीक रहता है, और सीन की छोटी-मोटी चीज़ों के लिए 512 px। यह GLB कंप्रेसर टेक्सचर को सिर्फ़ छोटा करता है, कभी बड़ा नहीं, और उनका अनुपात बनाए रखता है। किसी एक टेक्सचर को हाथ से रीसाइज़ करने के लिए इमेज रीसाइज़र इस्तेमाल करें।
GLB के अंदर WebP बनाम PNG बनाम JPEG
PNG और JPEG ख़ुद glTF का हिस्सा हैं, इसलिए GLB फ़ाइलें खोलने वाला हर ऐप इन्हें पढ़ता है। WebP से आम तौर पर सबसे छोटी फ़ाइलें बनती हैं, पर जो GLB इसे इस्तेमाल करती है वह EXT_texture_webp एक्सटेंशन घोषित करती है, और उसे खोलने वाले ऐप में इसका सपोर्ट होना चाहिए। JPEG ट्रांसपेरेंसी स्टोर नहीं कर सकता, इसलिए जब भी किसी टेक्सचर के पिक्सेल पूरी तरह अपारदर्शी नहीं होते, यह टूल उसे PNG ही रखता है। इन फ़ॉर्मेट के आम फ़ायदे-नुकसान जानने के लिए PNG से WebP देखें।
नॉर्मल मैप को हल्के कंप्रेशन की ज़रूरत होती है
नॉर्मल मैप अपने रंगों में सतह की दिशाएँ स्टोर करता है, और लॉसी कंप्रेशन से बनने वाले चौकोर धब्बे रंग के शोर की जगह रोशनी की गड़बड़ी के रूप में दिखते हैं। दोनों प्रीसेट नॉर्मल मैप के लिए क्वालिटी की निचली सीमा ऊँची रखते हैं (0.9)। WebP और JPEG रंग को कम रिज़ॉल्यूशन पर स्टोर करते हैं, जिससे नॉर्मल मैप में, और उन टेक्सचर में जो रफ़नेस, मेटैलिकनेस और ऑक्लूज़न को अलग-अलग चैनलों में रखते हैं, थोड़ी सटीकता चली जाती है। अगर यह सटीकता मायने रखती है, तो कस्टम चुनें और ओरिजिनल फ़ॉर्मेट रखें।
ट्रांसपेरेंसी वाले टेक्सचर
पत्तियाँ, डेकल और काँच अक्सर अल्फ़ा चैनल पर निर्भर होते हैं। WebP इसे बनाए रखता है; JPEG नहीं रख सकता, इसलिए JPEG में जाने वाला ट्रांसपेरेंट टेक्सचर उसकी जगह PNG में सेव होता है। हमारे मापों में Lantern और ToyCar, दोनों के एक या दो टेक्सचर इसी वजह से PNG ही रहे।
ज्यामिति कंप्रेशन: meshopt, क्वांटाइज़ेशन और Draco
ज्यामिति आम तौर पर GLB का छोटा हिस्सा होती है, पर घने मेश, स्कैन और एनिमेटेड कैरेक्टर में यह फ़ाइल का ज़्यादातर हिस्सा हो सकती है। Web प्रीसेट इसे meshopt से कंप्रेस करता है; बाकी प्रीसेट इसकी एनकोडिंग जैसी है वैसी छोड़ देते हैं और सिर्फ़ इसे साफ़ करते हैं।
meshopt कंप्रेशन क्या करता है
meshopt पहले वर्टेक्स और त्रिभुजों का क्रम बदलता है ताकि पास-पास का डेटा साथ रहे, फिर पोज़िशन, नॉर्मल और टेक्सचर कोऑर्डिनेट को 32-बिट फ़्लोट की जगह छोटे पूर्णांकों के रूप में स्टोर करता है (इसे क्वांटाइज़ेशन कहते हैं, और यह KHR_mesh_quantization के रूप में घोषित होता है), और आख़िर में नतीजे को EXT_meshopt_compression से पैक करता है। यह ब्राउज़र में बहुत तेज़ी से डिकोड होता है, और three.js, model-viewer और Babylon.js, तीनों इसे पढ़ते हैं।
वेल्डिंग और डुप्लिकेट हटाना
एक्सपोर्टर अक्सर एक ही वर्टेक्स कई बार लिख देते हैं, पूरे के पूरे ऐक्सेसर दोहरा देते हैं, या ऐसे मटीरियल और टेक्सचर छोड़ देते हैं जिनका कहीं इस्तेमाल नहीं होता। एक जैसे वर्टेक्स को मिलाना और बेकार डेटा हटाना लॉसलेस है और हर प्रीसेट में चलता है; सिर्फ़ इसी से छोटे Fox मॉडल पर 32% की बचत हुई।
Draco मॉडल की ज्यामिति क्यों नहीं बदलती
Draco ज्यामिति कंप्रेशन का एक और एक्सटेंशन है, जो अक्सर meshopt से भी ज़्यादा छोटा करता है। Draco को वापस लिखने के लिए उसका एनकोडर चाहिए, और उसे डिकोड करके ज्यामिति को बिना Draco के स्टोर करने पर एक टेस्ट मेश 4 से 13 गुना बड़ा हो गया। इसलिए जब कोई GLB पहले से Draco इस्तेमाल करती है, तो यह टूल सिर्फ़ उसके टेक्सचर दोबारा एनकोड करता है और बाकी हर बाइट, Draco ज्यामिति समेत, ठीक वैसी ही छोड़ देता है। ऐसा होने पर नतीजे वाला कार्ड यह बता देता है।
कौन-सा प्रीसेट चुनें?
अपनी GLB कंप्रेस करने से पहले सोचें कि मॉडल आगे कहाँ जाएगा: सही प्रीसेट इसी पर निर्भर है, क्योंकि सबसे छोटी फ़ाइल वाली सेटिंग्स ऐसे glTF एक्सटेंशन पर टिकी हैं जिन्हें हर ऐप नहीं पढ़ता। प्रीसेट के नीचे वाला नोट बताता है कि मौजूदा सेटिंग्स कौन-से एक्सटेंशन जोड़ेंगी।
वेब व्यूअर के लिए: three.js, model-viewer, Babylon.js
Web चुनें। यह टेक्सचर को ज़्यादा से ज़्यादा 1024 px तक छोटा करता है, उन्हें WebP में सेव करता है और ज्यामिति को meshopt से कंप्रेस करता है। ब्राउज़र-आधारित व्यूअर और three.js या Babylon.js पर बने इंजन इसके इस्तेमाल किए तीनों एक्सटेंशन पढ़ते हैं, और इससे बनी फ़ाइलें इस टूल की सबसे छोटी फ़ाइलें होती हैं: Khronos सैंपल पर 48% से 98.8% तक छोटी।
Blender, Unity और डेस्कटॉप व्यूअर के लिए
कंपैटिबल चुनें। यह 2048 px तक के टेक्सचर रखता है, अपारदर्शी टेक्सचर JPEG में और ट्रांसपेरेंट टेक्सचर PNG में लिखता है, और कोई भी एक्सटेंशन नहीं जोड़ता। डेस्कटॉप टूल और गेम इंजन के इम्पोर्टर WebP और meshopt को एक जैसा सपोर्ट नहीं करते, इसलिए जब दूसरी तरफ़ के सॉफ़्टवेयर पर आपका नियंत्रण न हो, तो इनके बिना वाली फ़ाइल ही सुरक्षित विकल्प है।
कस्टम कब इस्तेमाल करें
कस्टम तब इस्तेमाल करें जब आपको टेक्सचर उनके ओरिजिनल साइज़ पर रखने हों, सटीक डेटा मैप के लिए उनका ओरिजिनल फ़ॉर्मेट रखना हो, क्वालिटी बढ़ानी या घटानी हो, या meshopt बंद करना हो। हर सेटिंग बदलते ही टेक्सचर टेबल अपडेट हो जाती है, इसलिए कंप्रेस करने से पहले ही आप देख सकते हैं कि क्या होगा।
Khronos सैंपल मॉडल पर असली नतीजे
कितनी बचत की उम्मीद करें, यह देखने के लिए हमने इसी पेज से Khronos glTF Sample Assets संग्रह की GLB फ़ाइलें कंप्रेस कीं: आठ ओरिजिनल फ़ाइलें, एक डेस्कटॉप कंप्यूटर पर Chrome में। Web प्रीसेट से आठों फ़ाइलें औसतन 86% और मीडियन पर 96% छोटी हुईं; सबसे बड़ी बचत Avocado में हुई, 7.73 MB से 0.09 MB, क्योंकि उसके 2048 × 2048 के तीन PNG टेक्सचर ही लगभग पूरी फ़ाइल थे। हर मॉडल में लगभग एक सेकंड लगा।
कंपैटिबल कम बचाता है, क्योंकि यह टेक्सचर 2048 px पर रखता है और WebP से बचता है, फिर भी इसने आठ में से चार मॉडल 83% से 93% तक छोटे कर दिए। जिन मॉडल में सबसे कम बचत हुई, उनमें या तो सबसे ज़्यादा ज्यामिति है (ToyCar में लगभग 109,000 त्रिभुज हैं) या ट्रांसपेरेंसी वाले टेक्सचर हैं, जो PNG ही रहते हैं।
मापकर देखा: ओरिजिनल बनाम Web बनाम कंपैटिबल
| मॉडल | ओरिजिनल | Web प्रीसेट | कंपैटिबल प्रीसेट |
|---|---|---|---|
| Avocado | 7.73 MB | 0.09 MB (−98.8%) | 0.57 MB (−92.6%) |
| WaterBottle | 8.55 MB | 0.12 MB (−98.6%) | 0.88 MB (−89.7%) |
| BoomBox | 10.12 MB | 0.22 MB (−97.8%) | 1.12 MB (−89.0%) |
| Corset | 12.87 MB | 0.51 MB (−96.0%) | 2.15 MB (−83.3%) |
| Lantern | 9.12 MB | 0.36 MB (−96.0%) | 5.49 MB (−39.8%) |
| SheenChair | 3.93 MB | 0.97 MB (−75.3%) | 1.72 MB (−56.3%) |
| ToyCar | 5.17 MB | 1.30 MB (−74.9%) | 3.92 MB (−24.2%) |
| Fox | 0.16 MB | 0.08 MB (−48.0%) | 0.11 MB (−31.9%) |
क्या कंप्रेशन से मेरा मॉडल ख़राब हो जाएगा?
GLB कंप्रेस करने से यह बदलता है कि डेटा कैसे स्टोर होता है, यह नहीं कि मॉडल क्या है। मेश, मटीरियल, नोड के नाम, एनिमेशन और glTF की दूसरी सुविधाएँ वैसी ही आ जाती हैं; जाँचने लायक चीज़ें दो हैं: नई फ़ाइल को किन एक्सटेंशन की ज़रूरत है, और पास से देखने पर टेक्सचर कैसे दिखते हैं।
आउटपुट को किन एक्सटेंशन की ज़रूरत पड़ सकती है
Web प्रीसेट EXT_texture_webp, EXT_meshopt_compression और KHR_mesh_quantization जोड़ सकता है, और इन्हें ज़रूरी (required) के रूप में मार्क करता है, ताकि जो ऐप इन्हें नहीं पढ़ सकता वह टूटा हुआ मॉडल दिखाने के बजाय यह बात बता दे। कंपैटिबल कोई एक्सटेंशन नहीं जोड़ता। जो GLB पहले से दूसरे एक्सटेंशन इस्तेमाल करती थी, उसमें वे बने रहते हैं; अगर यह टूल किसी एक्सटेंशन को नहीं पहचानता, तो यह सिर्फ़ टेक्सचर दोबारा एनकोड करने पर आ जाता है, ताकि जो चीज़ यह नहीं समझता उसे दोबारा न लिखा जाए।
एनिमेशन, स्किन और मॉर्फ़ टारगेट
एनिमेशन, स्किन वाले कैरेक्टर और मॉर्फ़ टारगेट कंप्रेशन के बाद भी बने रहते हैं। meshopt एनिमेशन कीफ़्रेम को भी कंप्रेस करता है, और सामान्य साइज़ के मॉडल के लिए क्वांटाइज़ेशन काफ़ी सटीकता बनाए रखता है; बहुत बड़े सीन या मिलीमीटर में मापे गए इंजीनियरिंग मॉडल के लिए, वायरफ़्रेम चालू करके नतीजे की तुलना करें, या कस्टम में meshopt बंद कर दें।
KTX2 टेक्सचर जैसे हैं वैसे ही छोड़े जाते हैं
जो टेक्सचर पहले से KTX2 (KHR_texture_basisu) के रूप में स्टोर हैं, वे GPU के लिए कंप्रेस्ड होते हैं और मेमोरी में भी छोटे रहते हैं। यह टूल उन्हें दोबारा सामान्य इमेज में बदलने के बजाय बिना बदले रखता है।
कंप्रेशन के बाद भी आपकी GLB बड़ी क्यों है
अगर आप GLB कंप्रेस करते हैं और बचत कम होती है, तो पैनल आम तौर पर इसकी वजह दिखाता है। हो सकता है फ़ाइल पहले से कंप्रेस्ड हो: जो टेक्सचर पहले से छोटी WebP या JPEG इमेज हैं, वे शायद ही और छोटे होते हैं, और जब भी दोबारा एनकोड करने से कोई टेक्सचर छोटा नहीं होता, टूल ओरिजिनल टेक्सचर ही रखता है। अगर नतीजा बिल्कुल भी छोटा नहीं होता, तो डाउनलोड करने के लिए कुछ नहीं मिलता; ऐसा जान-बूझकर रखा गया है।
घने स्कैन और फ़ोटोग्रामेट्री
स्कैन की गई चीज़ों और फ़ोटोग्रामेट्री में अक्सर कई लाख या दसियों लाख त्रिभुज होते हैं, और तब फ़ाइल को टेक्सचर नहीं, ज्यामिति भरती है। meshopt मदद करता है, पर असली इलाज है कम त्रिभुज: किसी 3D एडिटर में मेश को डेसिमेट करें, जैसे Blender के Decimate मॉडिफ़ायर से, फिर नतीजे को यहाँ कंप्रेस करें।
बाहरी फ़ाइलों वाली .gltf कंप्रेस करना
.gltf अपनी ज्यामिति और टेक्सचर अलग-अलग फ़ाइलों में रखती है। उन सबको चुनें, या फ़ोल्डर ड्रॉप करें, और टूल सब कुछ एक कंप्रेस्ड .glb में पैक कर देता है। Draco इस्तेमाल करने वाली .gltf को पहले .glb के रूप में एक्सपोर्ट करना होगा, क्योंकि Draco डेटा सिर्फ़ GLB के अंदर ही बिना बदले रखा जाता है।
कमांड-लाइन वाला तरीका
यह पेज आपके ब्राउज़र में ओपन-सोर्स glTF Transform लाइब्रेरी चलाता है। अगर आपको किसी बिल्ड पाइपलाइन में कई फ़ाइलें कंप्रेस करनी हैं, तो इसका कमांड-लाइन टूल मिलता-जुलता काम करता है, उदाहरण के लिए gltf-transform optimize input.glb output.glb --compress meshopt --texture-compress webp --texture-size 1024।
आपका मॉडल कभी आपके डिवाइस से बाहर नहीं जाता
कई ऑनलाइन GLB कंप्रेसर फ़ाइल को सर्वर पर अपलोड करते हैं, और कुछ यह सीमा भी लगाते हैं कि आप हर हफ़्ते कितनी फ़ाइलें कंप्रेस कर सकते हैं। यहाँ पूरा काम आपके ब्राउज़र टैब के अंदर एक बैकग्राउंड वर्कर में होता है: मॉडल आपकी डिस्क से पढ़ा जाता है, मेमोरी में कंप्रेस होता है और सीधे डाउनलोड के रूप में वापस सेव हो जाता है। अभी लॉन्च न हुए प्रोडक्ट, क्लाइंट के काम और NDA के तहत आने वाली किसी भी चीज़ के लिए यह मायने रखता है। टैब बंद करें, और कुछ भी बाकी नहीं रहता। इसी तरह काम करने वाले दूसरे टूल के लिए हमारे सभी मुफ़्त टूल देखें।