GLTF

GLTF फ़ाइल क्या होती है?

वेब के लिए 3D फ़ॉर्मेट। ज्यामिति, सामग्री और एनिमेशन — सब एक JSON फ़ाइल में।

GLTF

GLTF है क्या

GLTF एक सादा टेक्स्ट फ़ॉर्मेट है, जो किसी भी एडिटर में खुल जाता है। यह पिक्सेल के बजाय आकृतियाँ और निर्देशांक सहेजता है, इसलिए किसी भी आकार में साफ़ रहता है — होर्डिंग जितना बड़ा किया गया लोगो भी कुछ नहीं खोता। इसका इस्तेमाल वेब और बनी हुई फ़ाइल सौंपना के लिए होता है।

एक्सटेंशन .gltf है और पूरा नाम GL Transmission Format। दोनों उतना नहीं बताते जितना यह कि फ़ाइल अंदर क्या-क्या रख सकती है — और इस पन्ने का बाक़ी हिस्सा इसी के बारे में है।

GLTF आया कहाँ से

इसे Khronos Group ने 2015 में जारी किया था। विनिर्देश glTF 2.0 है।

उम्र एक व्यावहारिक वजह से काम की है: फ़ॉर्मेट जितना पुराना, उतने ज़्यादा प्रोग्रामों को उसे सीखने का वक़्त मिला है।

विनिर्देश सार्वजनिक है

यह पूरा प्रकाशित है, इसलिए कोई भी इसे देखकर अंदाज़ा लगाने के बजाय दस्तावेज़ पढ़कर लागू कर सकता है। यही वजह है कि यह फ़ॉर्मेट इतने सारे प्रोग्रामों में मिलता है, और यही वजह है कि बीस साल पहले लिखी गई फ़ाइलें आज भी खुल जाती हैं। पर विनिर्देश का प्रकाशित होना और उसका रॉयल्टी-मुक्त होना एक बात नहीं है: जहाँ फ़ॉर्मेट किसी कोडेक को अपने अंदर लपेटता है, वहाँ पेटेंट का लाइसेंस एक अलग सवाल है, और मानक उसका जवाब नहीं देता।

कुछ भी फेंका नहीं जाता

GLTF फ़ाइल अपना अंदरूनी हिस्सा हूबहू सहेजती है। दोबारा सहेजने से कुछ नहीं बदलता, इसलिए इसे जितनी बार चाहें खोलिए, बदलिए और फिर से सहेजिए — नुक़सान जमा नहीं होता। यही बात इसे सौंपने का नहीं, काम करने का फ़ॉर्मेट बनाती है।

यह एक से ज़्यादा फ़्रेम रख सकती है

GLTF फ़ाइल ठहरी हुई एक तस्वीर के बजाय पूरा एनिमेशन सहेज सकती है। बदलने से पहले यह जान लेना ज़रूरी है: जो लक्ष्य सिर्फ़ एक फ़्रेम रखता है, वह पहला रख लेता है और बाक़ी गिरा देता है — अमूमन बिना बताए।

GLTF को खोलता कौन है

Blender, three.js और Babylon.js इसे पढ़ते हैं, और इसी तरह के ज़्यादातर दूसरे प्रोग्राम भी।

फ़ाइल न खुले तो कसूर फ़ॉर्मेट का शायद ही कभी होता है — अक्सर प्रोग्राम ही फ़ॉर्मेट से पुराना होता है। किसी पुरानी चीज़ में बदल लेना इससे निकलने का भरोसेमंद रास्ता है, और इस वेबसाइट का बाक़ी हिस्सा इसी के लिए है।

इसे ब्राउज़र में खोलना

इसे कोई भी ब्राउज़र नहीं पढ़ता।

इसे बदलने की सबसे आम वजह यही है: फ़ॉर्मेट ख़राब है, ऐसा नहीं — बात यह है कि जहाँ आप फ़ाइल दिखाना चाहते हैं वह जगह उसे पढ़ ही नहीं सकती।

यह काम करने का फ़ॉर्मेट है

GLTF इसलिए बना है कि इसे खोला और बदला जाए। जब तक काम चल रहा है फ़ाइल इसी फ़ॉर्मेट में रखिए, और जब भी बनी हुई प्रति चाहिए हो, इसी से निर्यात कीजिए।

मॉडलिंग के लिए नहीं, पहुँचाने के लिए बना

इस साइट के बाक़ी 3D फ़ॉर्मेट या तो मॉडलिंग प्रोग्रामों के बीच आदान-प्रदान के लिए हैं या स्कैनर के लिए कैप्चर फ़ॉर्मेट। glTF इनमें से कोई नहीं है। Khronos Group ने इसे 2015 में इस मक़सद से डिज़ाइन किया कि एक तैयार दृश्य को सीधे रेंडरर तक भेजा जा सके, ऐसे रूप में जिसे ग्राफ़िक्स कार्ड लगभग बिना किसी बदलाव के इस्तेमाल कर सके।

इसे 3D का JPEG कहने की वजह यही है। कोई JPEG को स्टूडियो में संपादित नहीं करता, यह आख़िर में निकलने वाली चीज़ है। glTF में ज्यामिति, सामग्री, बनावट, एनिमेशन, कैमरे और रोशनी इस तरह सजी होती हैं कि व्यूअर उन्हें कम-से-कम मेहनत में लोड और खींच सके।

हमारा पाइपलाइन सिर्फ़ त्रिकोण-ज्यामिति पढ़ता-लिखता है

Quinvert के 3D रूपांतरण में बीच का ढाँचा केवल यह बताता है कि त्रिकोण कहाँ हैं — नाम, स्थिति और सूचकांक। रंग, बनावट-निर्देशांक, सतह-दिशाएँ, कैमरे, रोशनी, एनिमेशन, हड्डी-ढाँचे और दृश्य-पदानुक्रम के लिए इस बीच के ढाँचे में कोई जगह ही नहीं है, इसलिए वे हर दिशा में झड़ जाते हैं।

पढ़ने में भी एक शर्त है: सिर्फ़ त्रिकोण प्राइमिटिव पढ़े जाते हैं। पट्टियों, पंखों, रेखाओं और बिंदुओं के रूप में लिखी ज्यामिति छोड़ दी जाती है। यह पूरे मॉडल को अस्वीकार नहीं करता, पर उस हिस्से को चुपचाप नहीं, स्पष्ट रूप से बाहर रखता है।

बाहरी .bin वाली फ़ाइल सीधे मना कर दी जाती है

एक साधारण .gltf फ़ाइल JSON होती है जो अपनी भारी सामग्री — शीर्ष-स्थिति, दिशाएँ, बनावट-निर्देशांक — एक अलग .bin फ़ाइल में रखती है। हमारा रूपांतरक ऐसी फ़ाइल को स्वीकार नहीं करता जो किसी बाहरी .bin का हवाला देती हो, और इसकी वजह साफ़ बताई जाती है: पाठक को इसके बजाय GLB बदलने का सुझाव मिलता है, जिसमें सब कुछ एक ही बाइनरी फ़ाइल में पैक होता है।

Draco से संपीड़ित ज्यामिति भी मना कर दी जाती है, इसलिए किसी वेब पेज से डाउनलोड की हुई हल्की glTF यहाँ काम नहीं करेगी अगर वह Draco इस्तेमाल करती है। दोनों ही मना करने की वजह एक है — बीच का ढाँचा सिर्फ़ खुली, सीधी त्रिकोण-सूचियाँ समझता है।

हमारी अपनी .gltf एक ही फ़ाइल में समाई होती है

जब कोई और फ़ॉर्मेट यहाँ .gltf में बदला जाता है, तो नतीजा एक स्वतंत्र फ़ाइल होती है — भारी डेटा किसी बाहरी .bin की जगह base64 डेटा URI के रूप में उसी JSON के भीतर समाया रहता है। इससे न कोई अलग बफ़र फ़ाइल भेजनी पड़ती है, न कोई पथ टूटता है।

यह हमारे अपने आउटपुट पर लागू होता है, हर .gltf फ़ाइल पर नहीं जो कहीं और से आई हो। इसलिए किसी और औज़ार से बनी glTF, जिसमें बाहरी बफ़र का हवाला हो, यहाँ इनपुट के तौर पर वैसे ही मना कर दी जाती है जैसा ऊपर बताया गया।

भौतिक रूप से सही सामग्री, और यह क्यों सही दिखता है

glTF एक metallic-roughness सामग्री मॉडल इस्तेमाल करता है: हर सतह बताती है वह कितनी धात्विक है, कितनी खुरदरी, उसका मूल रंग क्या है, और चाहे तो सामान्य, occlusion और emissive नक़्शे भी। हर आधुनिक रेंडरर यह भाषा समझता है, इसलिए एक ही मॉडल ब्राउज़र, गेम इंजन और फ़ोन के AR व्यूअर में एक जैसा दिखता है।

यह हमारे पाइपलाइन पर लागू नहीं होता, क्योंकि सामग्री हमारे बीच के ढाँचे में सिरे से मौजूद ही नहीं। यहाँ किसी और फ़ॉर्मेट से glTF बनाने पर एक साधारण धूसर सामग्री मिलती है — ज्यामिति सही आती है, रंग और बनावट का फ़ैसला बाद में करना पड़ता है।

एनिमेशन और रिगिंग इसमें चलते हैं, हमारे रास्ते में नहीं

फ़ॉर्मेट के तौर पर glTF हड्डी-एनिमेशन, त्वचा-वज़न, समय-चिह्नित बदलाव और चेहरे के आकार-मिश्रण के लिए morph targets रख सकता है। वेब पर आम इस्तेमाल में कोई और फ़ॉर्मेट यह नहीं करता — OBJ में एनिमेशन बिलकुल नहीं, STL और PLY में भी नहीं।

हमारा पाइपलाइन इनमें से कुछ नहीं ढोता। बीच का ढाँचा त्रिकोण-ज्यामिति तक सीमित है, इसलिए किसी एनिमेटेड glTF को यहाँ बदलने पर एनिमेशन, हड्डी-ढाँचा और morph targets हर रास्ते में झड़ जाते हैं, दिशा चाहे जो भी हो।

नोड-रूपांतरण शीर्षों में पक्के तौर पर बुने जाते हैं

दृश्य में जो नोड-पदानुक्रम और उनके रूपांतरण (खिसकाव, घुमाव, नाप) मौजूद होते हैं, वे अलग से नहीं रखे जाते — वे सीधे शीर्ष-स्थितियों में पका दिए जाते हैं। नतीजा वही अंतिम आकार दिखाता है, भले पदानुक्रम ख़ुद ग़ायब हो जाए।

नाम, जहाँ लक्ष्य फ़ॉर्मेट में जगह हो, बच जाते हैं — जैसे प्रति-मेश नाम। पर दृश्य-ग्राफ़ ख़ुद, कैमरे और रोशनी की तरह, बीच के ढाँचे में सिरे से नहीं है और इसलिए किसी भी दिशा में नहीं बचता।

इससे और इसमें बदलना

OBJ, STL या PLY से glTF में ज्यामिति साफ़ आती है, और सामग्री दोनों तरफ़ से लगभग नहीं होती — एक सादा मेश सादा मेश बनकर आता है, धूसर सामग्री के साथ, और असल दिखावट बाद में जोड़नी पड़ती है।

glTF से OBJ या STL में उतना ही खोता है जितना glTF ख़ुद ढो रहा था — एनिमेशन, हड्डी-ढाँचा, कैमरे, रोशनी, दृश्य-पदानुक्रम और भौतिक सामग्री, किसी में इनका कोई ठिकाना नहीं। STL इसके ऊपर बनावट-निर्देशांक और रंग भी छोड़ देता है। यह बदलाव तभी करना चाहिए जब मंज़िल को यही चाहिए हो — 3D प्रिंटर को STL, पुराने औज़ार को OBJ।

ज़रूरी जानकारी, एक जगह

GLTF फ़ॉर्मेट की पहचान और उसका स्रोत।
एक्सटेंशन.gltf
मीडिया टाइपmodel/gltf+json
प्रकाशकKhronos Group
पहली बार प्रकाशित2015
विनिर्देशglTF 2.0