एफबीएक्स फाइल क्या है?
FBX, FilmBox, एक लोकप्रिय 3D फ़ाइल स्वरूप है जिसे मूल रूप से MotionBuilder के लिए Kaydara द्वारा विकसित किया गया था। इसे 2006 में Autodesk Inc द्वारा अधिग्रहित किया गया था और अब यह कई 3D टूल द्वारा उपयोग किए जाने वाले मुख्य 3D एक्सचेंज स्वरूपों में से एक है। FBX बाइनरी और ASCII फाइल फॉर्मेट दोनों में उपलब्ध है। प्रारूप को डिजिटल सामग्री निर्माण अनुप्रयोगों के बीच अंतःक्रियाशीलता प्रदान करने के लिए स्थापित किया गया था। FBX फ़ाइल स्वरूप से/में रूपांतरण के लिए कई उपकरण उपलब्ध हैं।
FBX फ़ाइल स्वरूप - अधिक जानकारी
एफबीएक्स एक मालिकाना प्रारूप है और इसके बाइनरी फ़ाइल प्रारूप के बारे में विनिर्देश आधिकारिक तौर पर उपलब्ध नहीं हैं। ऑटोडेस्क द्वारा एफबीएक्स फ़ाइल को पढ़ने, लिखने और रूपांतरण के लिए एक सी ++ एफबीएक्स एसडीके प्रदान किया जाता है। एफबीएक्स के लिए एक पायथन आयात और निर्यात स्क्रिप्ट ब्लेंडर सॉफ्टवेयर में भी उपलब्ध है जो एफबीएक्स एसडीके का उपयोग नहीं करता है।
टेक्स्ट-आधारित फ़ाइल संरचना
टेक्स्ट-आधारित फ़ाइल संरचना स्पष्ट रूप से नामित पहचानकर्ताओं के साथ एक वृक्ष-संरचित दस्तावेज है। इसमें पदानुक्रम में व्यवस्थित नोड्स की एक नेस्टेड सूची होती है जहां प्रत्येक नोड में होता है:
- एक नोड टाइप पहचानकर्ता (वर्ग का नाम)
- इसके साथ जुड़े गुणों का एक टपल, टपल तत्व सामान्य आदिम डेटा प्रकार हैं: ##फ्लोट, पूर्णांक, स्ट्रिंग## आदि।
- एक सूची जिसमें एक ही प्रारूप (पुनरावर्ती) में नोड्स होते हैं।
इन्हें तार्किक रूप से निम्नानुसार दर्शाया जा सकता है:
NodeType: SomeProperty0a, SomeProperty0b, ... , {
NestedNodeType1 : SomeProperty1a, ...
NestedNodeType2 : SomeProperty2a, ... , {
... Sub-scope
}
...
}
कुछ मानक नोड्स को निहित सूची के रूप में परिभाषित किया जाता है जहां प्रत्येक आइटम में नेस्टेड सूची होती है। कोई भी एप्लिकेशन, जो एफबीएक्स ज्यामिति तक पहुंचने का इरादा रखता है, को इन सामग्रियों को पार्स करना होगा और इसका उपयोगी अर्थ बनाना होगा। टेक्स्ट-आधारित FBX फ़ाइल का एक उदाहरण नीचे दिया गया है:
; FBX ...
; Copyright (C) 1997-2008 ...
; All rights reserved.
; ----------------------------------------------------
FBXHeaderExtension: {
FBXHeaderVersion: 1003
FBXVersion: 6000
CurrentCameraResolution: {
CameraName: "Model::Producer Perspective"
CameraResolutionMode: "Window Size"
CameraResolutionW: 1
CameraResolutionH: 1
}
CreationTimeStamp: {
...
}
}
;Object definitions
;------------------------------------------------------------------
Definitions: {
Count: 2
ObjectType: "Model" {
Count: 2
}
}
...
FBX फ़ाइलों की बाइनरी फ़ाइल संरचना
जैसा कि पहले कहा गया है, FBX फ़ाइल स्वरूप विनिर्देश FBX के लिए सार्वजनिक रूप से उपलब्ध नहीं हैं। चूंकि, ब्लेंडर फाउंडेशन कंपनी द्वारा प्रदान किए गए एसडीके का उपयोग किए बिना एफबीएक्स फ़ाइल प्रारूप को लागू करता है, बाइनरी फ़ाइल प्रारूप के बारे में कुछ विवरण उपलब्ध इसके कार्यान्वयन के हिस्से के रूप में।
बाइनरी फ़ाइल संरचना निम्न क्रम का पालन करती है:
- हैडर *ऑब्जेक्ट रिकॉर्ड
- पाद लेख
एफबीएक्स हैडर
फ़ाइल हेडर जानकारी में 27 बाइट्स शामिल हैं।
- बाइट्स 0 - 20: कायदरा एफबीएक्स बाइनरी \x00 (फ़ाइल-जादू, अंत में 2 रिक्त स्थान के साथ, फिर एक पूर्ण टर्मिनेटर)।
- बाइट्स 21 - 22: [0x1A, 0x00]## (अज्ञात लेकिन सभी देखी गई फाइलें इन बाइट्स को दिखाती हैं)।
- बाइट्स 23 - 26: अहस्ताक्षरित int, संस्करण संख्या। उदाहरण के लिए संस्करण 7.3 के लिए 7300।
ऑब्जेक्ट रिकॉर्ड
हेडर के बाद एक ऑब्जेक्ट रिकॉर्ड होता है जो खाली नाम और खाली संपत्ति सूची के साथ एक पूर्ण नोड रिकॉर्ड होता है। इसमें पुनरावर्ती रूप से संपूर्ण फ़ाइल निर्माण होता है।
पाद लेख
FBX पाद लेख फ़ाइल के अंत में स्थित है जिसकी सामग्री अज्ञात है।
रिकॉर्ड प्रारूप
FBX फ़ाइल में रिकॉर्ड्स को इस प्रकार वर्गीकृत किया जाता है:
- नोड रिकॉर्ड
- संपत्ति रिकॉर्ड
नोड रिकॉर्ड प्रारूप
प्रत्येक नोड रिकॉर्ड प्रारूप का नाम दिया गया है और इसमें निम्न मेमोरी लेआउट है।
आकार (बाइट्स) | दिनांक प्रकार | नाम |
---|---|---|
4 | UInt32 | EndOffset |
4 | UInt32 | NumProperties |
4 | UInt32 | PropertyListLen |
1 | UInt8 | नामलेन |
NameLength | char | Name |
? | ? | प्रॉपर्टी[एन], जहां एन = 0:PropertyListLen |
वैकल्पिक | ||
? | ? | नेस्टेड लिस्ट |
13 | uint8[] | नल-रिकॉर्ड |
कहाँ पे:
EndOffset
फ़ाइल की शुरुआत से नोड रिकॉर्ड के अंत तक की दूरी है (यानी जो कुछ भी आगे आता है उसका पहला बाइट)। इसका उपयोग अज्ञात या आवश्यक रिकॉर्ड को आसानी से छोड़ने के लिए किया जा सकता है।NumProperties
नोड से जुड़े मान टपल में गुणों की संख्या है। अंतिम तत्व के रूप में नेस्टेड सूची को संपत्ति के रूप में नहीं गिना जाता है।PropertyListLen
संपत्ति सूची की लंबाई है। यह ##NumProperties## गुणों को संग्रहीत करने के लिए आवश्यक आकार है, जो गुणों के डेटा प्रकार पर निर्भर करता है।NameLen
वर्णों में वस्तु के नाम की लंबाई है। एकमात्र मामला जहां यह 0 है, सूची शीर्ष-स्तर की प्रतीत होती है।नाम
वस्तु का नाम है। कोई शून्य-समाप्ति नहीं है।संपत्ति [एन]
n वीं संपत्ति है। प्रारूप के लिए, अनुभाग संपत्ति रिकॉर्ड प्रारूप देखें। गुण क्रमिक रूप से लिखे गए हैं और बिना पैडिंग के।नेस्टेडलिस्ट
नेस्टेड सूची है, जिसकी उपस्थिति एक NULL-रिकॉर्ड द्वारा बहुत अंत में इंगित की जाती है।
नेस्टेड सूची प्रविष्टि का अस्तित्व यह जांच कर निर्धारित किया जा सकता है कि एंडऑफसेट तक पहुंचने तक बाइट शेष हैं या नहीं। यदि ऐसा है, तो अगला ऑब्जेक्ट रिकॉर्ड सीधे अंतिम गुण के बाद पढ़ा जाना चाहिए। ऑब्जेक्ट रिकॉर्ड तब 13 शून्य बाइट्स का अनुसरण करता है, जो तब EndOffset के साथ जुड़ जाता है। NULL प्रविष्टि का उद्देश्य या आवश्यकता ज्ञात नहीं है और यह किसी प्रारूप विशेषता की ओर इशारा कर सकता है।
संपत्ति रिकॉर्ड प्रारूप
एक संपत्ति रिकॉर्ड में उन गुणों के बारे में विवरण होता है जो Node. एक संपत्ति रिकॉर्ड में निम्नलिखित मेमोरी लेआउट होता है:
आकार (बाइट्स) | डेटा प्रकार | नाम |
---|---|---|
1 | चार | टाइपकोड |
? | ? | डेटा |
टाइपकोड वर्ण कोड का प्रतिनिधित्व करता है जो उन समूहों में आदेशित होते हैं जिन्हें समान हैंडलिंग की आवश्यकता होती है। टाइपकोड को निम्नलिखित प्रकारों में वर्गीकृत किया जा सकता है और टाइपकोड इन प्रकारों में से एक वर्ण कोड हो सकता है।
आदिम प्रकार
Y: 2 byte signed Integer
C: 1 bit boolean (1: true, 0: false) encoded as the LSB of a 1 Byte value.
I: 4 byte signed Integer
F: 4 byte single-precision IEEE 754 number
D: 8 byte double-precision IEEE 754 number
L: 8 byte signed Integer
आदिम स्केलर प्रकार के रिकॉर्ड में डेटा वास्तव में मूल्य का द्विआधारी प्रतिनिधित्व है, छोटे-एंडियन बाइट क्रम में।
सरणी प्रकार
f: Array of 4 byte single-precision IEEE 754 number
d: Array of 8 byte double-precision IEEE 754 number
l: Array of 8 byte signed Integer
i: Array of 4 byte signed Integer
b: Array of 1 byte Booleans (always 0 or 1)
सरणी प्रकार के लिए डेटा अधिक जटिल है और निम्न संरचना में है।
आकार (बाइट्स) | डेटा प्रकार | नाम |
---|---|---|
4 | Uint32 | ArrayLength |
4 | Uint32 | एन्कोडिंग |
4 | Uint32 | संपीड़ित लंबाई |
? | ? | सामग्री |
विशेष प्रकार
विशेष प्रकार के टाइपकोड निम्नलिखित हैं।
S: String
R: raw binary data
इन दोनों टाइपकोड को निम्नानुसार दर्शाया गया है:
आकार (बाइट्स) | डेटा प्रकार | नाम |
---|---|---|
4 | Uin32 | Length |
लंबाई |
स्ट्रिंग शून्य-समाप्त नहीं है, और इसमें \0 वर्ण भी हो सकते हैं (यह वास्तव में कुछ FBX गुणों में उपयोग किया जाता है)।