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

प्रत्येक नोड या चाइल्ड नोड के अपने विशिष्ट गुण हो सकते हैं। गुण मुख्य नोड के बाहर भी पाए जा सकते हैं, लेकिन आमतौर पर इन्हें अनदेखा किया जा सकता है। सामान्य तौर पर, एक नोड की मूल संरचना इस प्रकार है:
नोड का नाम: eventual_properties {
नोड_प्रॉपर्टी_1: मान
नोड_प्रॉपर्टी_2: मान
सबनोड1 : {
सबनोड_प्रॉपर्टी_1: मान
[…]
}
नोड_प्रॉपर्टी_3: मान
[…]
}
यह उदाहरण फ़ाइल में पाया गया एक नोड (पहला नोड) है:
FBXHeaderExtension: {
FBXHeaderVersion: 1003
FBXVersion: 6100
CreationTimeStamp: {
संस्करण: 1000
वर्ष: 2014
महीना: 03
दिन: 20
घंटा: 17
मिनट: 38
दूसरा: 29
मिलीसेकंड: 0
}
निर्माता: "FBX SDK/FBX Plugins build 20070228"
अन्य ध्वज: {
FlagPLE: 0
}
}
संरचना को समझना एक कुशल पार्सर लिखने का आधार है।
पहले नोड में हमें दो विशेषताएँ (FBXHeaderVersion और FBXVersion) मिलती हैं जिनके मान प्रारूप संस्करण हैं। इस मामले में यह संस्करण 6.1 है। अन्य जानकारी को अनदेखा किया जा सकता है जब तक कि निर्माण तिथि (CreationTimeStamp) को भी न पढ़ना हो।
2. FBX ऑब्जेक्ट नोड्स
सबसे महत्वपूर्ण नोड निश्चित रूप से ऑब्जेक्ट नोड है।
ऑब्जेक्ट नोड में मॉडल के वर्टेक्स, इंडेक्स, नॉर्मल, यूवी कोऑर्डिनेट और मटेरियल शामिल होते हैं। इसकी संरचना इस प्रकार है:
ऑब्जेक्ट्स: {
मॉडल: 'मॉडल का नाम', 'मेश' {
[...]
शीर्ष: [...]
बहुभुज शीर्ष सूचकांक: [...]
LayerElementNormal: { }
LayerElementUV: { }
}
सामग्री: 'सामग्री का नाम', '' { }
[...]
}
3. एफबीएक्स वर्टेक्स
जैसा कि हमने देखा है, वर्टेक्स को मॉडल के चाइल्ड नोड्स की 'वर्टेक्स' प्रॉपर्टी में पाया जा सकता है।
इसका वाक्य विन्यास इस प्रकार है:
शीर्ष: v1_x, v1_y, v1_z, v2_x, v2_y, v2_z, [...]
प्रत्येक शीर्ष के तीन स्थानिक निर्देशांक (x,y,z) होते हैं, जो अल्पविरामों द्वारा अलग किए जाते हैं (जो एक शीर्ष को दूसरे से अलग करते हैं)। निर्देशांकों को स्पष्ट रूप से दशमलव रूप में बिंदुओं द्वारा दर्शाया जाता है।
इसका एक उदाहरण इस प्रकार है:
शीर्ष: 0.000000,0.104800,39.291698,0.000000,0.043400,-44.424301,0.000000,38.654301,-41.818802,-0.000000,39.455002,44.424400
मॉडल बनाने वाले शीर्ष बिंदु निम्नलिखित होंगे:
v1(0.000000,0.104800,39.291698)
v2(00.000000,0.043400,-44.424301)
v3(0.000000,38.654301,-41.818802)
v4(0.000000,39.455002,44.424400)
4. FBX बहुभुज का शीर्ष सूचकांक
यह इंडेक्स PolygonVertexIndex प्रॉपर्टी के अंतर्गत पाया जा सकता है।
FBX फ़ाइलें त्रिपक्षीय बहुभुज (त्रिभुज) या उससे अधिक निर्यात कर सकती हैं। अधिकांश फ़ाइलें चतुर्भुज बहुभुज (क्वाड) निर्यात करती हैं। इसका सिंटैक्स शीर्षों के समान है, लेकिन एक बात ध्यान देने योग्य है:
बहुभुज शीर्ष सूचकांक: i1, i2,-i3, i4, i5,-i6,[...]
बहुभुज शीर्ष सूचकांक: i1, i2, i3, -i4, i5, i6, i7, -i8, [...]
किसी बहुभुज को बनाने वाले सूचकांक क्रम में होते हैं। ऋणात्मक सूचकांक का अर्थ है कि वह बहुभुज का अंतिम सूचकांक है। सूचकांक को धनात्मक संख्या में सेट करना होगा और फिर उसमें से 1 घटाना होगा!
[यदि आप सोच रहे हैं कि ऐसा क्यों है, तो इसका कारण यह है कि मूल सूचकांक -1 के साथ पूर्ण या शून्य के समान है। उदाहरण के लिए, सूचकांक 3 -4 बन जाता है।]
उदाहरण इस प्रकार है:
बहुभुज शीर्ष सूचकांक: 8,7,3,-7,4,8,7,-3,0,5,8,-5
मॉडल बनाने वाले बहुभुज इस प्रकार होंगे:
पी1(8,7,3,6)
पी2(4,8,7,2)
पी3(0,5,8,4)
ध्यान दें कि बहुभुज के अंत को इंगित करने वाले सूचकांक को एक धनात्मक संख्या पर सेट किया गया है, और फिर उसमें से 1 घटा दें।
ध्यान दें: ग्राफ़िक्स कार्ड चतुर्भुजों को पसंद नहीं करते हैं, इसलिए मॉडल को प्रदर्शित करने से पहले चार भुजाओं वाले प्रत्येक बहुभुज को दो त्रिभुजों में विभाजित करना आवश्यक है।
5. FBX नॉर्मल्स
नॉर्मल मान, Normals प्रॉपर्टी के चाइल्ड नोड LayerElementNormal (जो कि Model का चाइल्ड नोड है) के अंतर्गत पाए जा सकते हैं। इसका सिंटैक्स किसी एक वर्टेक्स के समान ही है, यानी (x,y,z) निर्देशांकों की एक श्रृंखला।
नॉर्मल: n1_x, n1_y, n1_z, n2_x, n2_y, n2_z, [...]
आपको MappingInformationType प्रॉपर्टी पर ध्यान देना होगा, जिसके निम्नलिखित मान हो सकते हैं:
▪ ByPolygon: पॉलीगॉन द्वारा, जिसका अर्थ है कि मॉडल के प्रत्येक पॉलीगॉन का एक नॉर्मल होता है।
▪ ByPolygonVertex: यह प्रक्रिया पॉलीगॉन वर्टेक्स द्वारा संसाधित की जाती है, जिसका अर्थ है कि मॉडल के प्रत्येक पॉलीगॉन के प्रत्येक वर्टेक्स का एक नॉर्मल होता है। उदाहरण के लिए, यदि मॉडल में 8 वर्टेक्स हैं जो चार क्वाड बनाते हैं, तो 16 नॉर्मल होंगे (1 नॉर्मल * 4 पॉलीगॉन * 4 पॉलीगॉन वर्टेक्स)। ध्यान दें कि आमतौर पर गेम इंजन को वर्टेक्स द्वारा केवल एक नॉर्मल परिभाषित करने की आवश्यकता होती है। इसलिए यदि आपको एक वर्टेक्स मिलता है जिसके एक से अधिक नॉर्मल हैं, तो आप पहले नॉर्मल के बाद पाए गए नॉर्मल को अनदेखा कर सकते हैं, या सभी नॉर्मल का औसत निकाल सकते हैं (नॉर्मल स्मूथिंग)।
▪ ByVertex: प्रति-वर्टेक्स प्रोसेसिंग, जिसका अर्थ है कि मॉडल के प्रत्येक वर्टेक्स का एक नॉर्मल होता है। ब्लेंडर एक्सपोर्टर में इसे कभी-कभी ByVertice भी लिखा जाता है। मुझे लगता है कि इसके लेखक स्पैनिश हैं।
▪ ByEdge: किनारे के अनुसार संसाधित, इसका अर्थ है कि मॉडल के प्रत्येक किनारे में एक सामान्य (दुर्लभ) स्थिति होती है।
▪ ऑलसेम: इसका मतलब है कि मॉडल के प्रत्येक शीर्ष का अभिलंब समान है, जो कि अधिकांश मॉडलों के लिए दुर्लभ या असंभव है।
एक अन्य महत्वपूर्ण प्रॉपर्टी ReferenceInformationType प्रॉपर्टी है, जिसके निम्नलिखित मान हो सकते हैं:
▪ प्रत्यक्ष: यह दर्शाता है कि सामान्य क्रम में हैं।
▪ IndexToDirect (या FBX प्रारूप के पुराने संस्करणों में index): यह इंगित करता है कि नॉर्मल का क्रम NormalsIndex प्रॉपर्टी द्वारा दिया गया है।
नीचे दिया गया चित्र पाठ से अधिक स्पष्ट हो सकता है। उदाहरण मॉडल X और Y अक्षों पर स्थित एक समतल है (इसलिए सभी शीर्षों का Z-निर्देशांक 0 होगा), जिसमें 9 शीर्ष और 4 बहुभुज (चतुर्भुज) शामिल हैं। उदाहरण छवि समतल का शीर्ष से दृश्य है।

6. FBX UV निर्देशांक
UV निर्देशांक LayerElementUV (जो कि Model का चाइल्ड नोड है) नामक चाइल्ड नोड के अंतर्गत UV प्रॉपर्टी में पाए जा सकते हैं। इसका सिंटैक्स वर्टेक्स और नॉर्मल के समान है, लेकिन इसमें तीन के बजाय दो निर्देशांक होंगे।
यूवी: u1, v1, u2, v2, [...]
आपको अभी भी MappingInformationType और ReferenceInformationType प्रॉपर्टीज़ पर ध्यान देना होगा! इन दोनों प्रॉपर्टीज़ के मान नॉर्मल के मानों के समान हो सकते हैं, इसलिए वही नियम लागू होते हैं। इंडेक्स प्रॉपर्टी (यदि कोई हो, जैसे IndexToDirect परिभाषित है) UVIndex है।
