একটি FBX ফাইল কি?
FBX, FilmBox, একটি জনপ্রিয় 3D ফাইল ফরম্যাট যা মূলত MotionBuilder-এর জন্য Kaydara দ্বারা তৈরি করা হয়েছিল। এটি 2006 সালে অটোডেস্ক ইনকর্পোরেটেড দ্বারা অধিগ্রহণ করা হয়েছিল এবং এখন এটি অনেক 3D সরঞ্জাম দ্বারা ব্যবহৃত প্রধান 3D বিনিময় বিন্যাসের মধ্যে একটি। FBX বাইনারি এবং ASCII ফাইল ফরম্যাটে পাওয়া যায়। বিন্যাসটি ডিজিটাল সামগ্রী তৈরির অ্যাপ্লিকেশনগুলির মধ্যে আন্তঃকার্যযোগ্যতা প্রদানের জন্য প্রতিষ্ঠিত হয়েছিল। FBX ফাইল ফরম্যাট থেকে/এ রূপান্তরের জন্য অনেক টুল উপলব্ধ আছে।
FBX ফাইল ফরম্যাট - আরও তথ্য
FBX একটি মালিকানাধীন বিন্যাস এবং এর বাইনারি ফাইল বিন্যাস সম্পর্কে স্পেসিফিকেশন আনুষ্ঠানিকভাবে উপলব্ধ নয়। একটি C++ FBX SDK অটোডেস্ক দ্বারা FBX ফাইলে/ থেকে পড়া, লেখা এবং রূপান্তর করার জন্য প্রদান করা হয়। FBX-এর জন্য একটি পাইথন আমদানি ও রপ্তানি স্ক্রিপ্ট ব্লেন্ডার সফ্টওয়্যারে পাওয়া যায় যা FBX SDK ব্যবহার করে না।
টেক্সট-ভিত্তিক ফাইল স্ট্রাকচার
The text-based file structure is a tree-structured documented with clearly named identifiers. It consists of a nested list of nodes arranged in hierarchy where each node has:
একটি নোড টাইপ শনাক্তকারী (শ্রেণীর নাম)
এটির সাথে যুক্ত বৈশিষ্ট্যগুলির একটি টুপল, টিপল উপাদানগুলি হল সাধারণ আদিম ডেটা প্রকার: ##float, integer, string## ইত্যাদি।
একটি তালিকা যাতে একই বিন্যাসে নোড থাকে (পুনরাবৃত্তভাবে)।
এগুলিকে নিম্নরূপ যুক্তিযুক্তভাবে উপস্থাপন করা যেতে পারে:
NodeType: SomeProperty0a, SomeProperty0b, ... , {
NestedNodeType1 : SomeProperty1a, ...
NestedNodeType2 : SomeProperty2a, ... , {
... Sub-scope
}
...
}
কিছু স্ট্যান্ডার্ড নোডকে অন্তর্নিহিত তালিকা হিসাবে সংজ্ঞায়িত করা হয়েছে যেখানে প্রতিটি আইটেম একটি নেস্টেড তালিকা নিয়ে গঠিত। যেকোন অ্যাপ্লিকেশন, যা FBX জ্যামিতি অ্যাক্সেস করতে চায়, এই বিষয়বস্তুগুলিকে পার্স করতে হবে এবং এর দরকারী অর্থ করতে হবে। পাঠ্য-ভিত্তিক 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 এর জন্য সর্বজনীনভাবে উপলব্ধ নয়। যেহেতু, ব্লেন্ডার ফাউন্ডেশন কোম্পানির প্রদত্ত SDK ব্যবহার না করে FBX ফাইল ফরম্যাট প্রয়োগ করে, তাই বাইনারি ফাইল ফরম্যাটের কিছু বিবরণ এটি বাস্তবায়নের অংশ হিসেবে available।
বাইনারি ফাইল গঠন নিম্নলিখিত ক্রম অনুসরণ করে:
হেডার
অবজেক্ট রেকর্ড
ফুটার
FBX হেডার
ফাইল হেডার তথ্য 27 বাইট গঠিত হয়.
বাইট 0 - 20: কায়দারা এফবিএক্স বাইনারি \x00 (ফাইল-ম্যাজিক, শেষে 2টি স্পেস সহ, তারপর একটি শূন্য টার্মিনেটর)।
বাইট 21 - 22: [0x1A, 0x00]## (অজানা কিন্তু সমস্ত পর্যবেক্ষণ করা ফাইল এই বাইটগুলি দেখায়)
বাইট 23 - 26: স্বাক্ষরবিহীন int, সংস্করণ নম্বর। উদাহরণস্বরূপ 7.3 সংস্করণের জন্য 7300।
অবজেক্ট রেকর্ড
হেডারটি একটি অবজেক্ট রেকর্ড দ্বারা অনুসরণ করা হয় যা খালি নাম এবং খালি সম্পত্তি তালিকা সহ একটি সম্পূর্ণ নোড রেকর্ড। এটি পুনরাবৃত্তিমূলকভাবে সমগ্র ফাইল গঠন ধারণ করে।
ফুটার
FBX ফুটার বিভাগটি ফাইলের শেষে রয়েছে যার বিষয়বস্তু অজানা।
রেকর্ড ফরম্যাট
একটি FBX ফাইলের রেকর্ডগুলি এইভাবে শ্রেণীবদ্ধ করা হয়েছে:
নোড রেকর্ড
সম্পত্তি রেকর্ড
নোড রেকর্ড ফরম্যাট
প্রতিটি নোড রেকর্ড ফরম্যাটের নাম দেওয়া হয়েছে এবং নিম্নলিখিত মেমরি লেআউট রয়েছে।
আকার (বাইট) | তারিখের ধরন | নাম |
---|---|---|
4 | UInt32 | এন্ডঅফসেট |
4 | UInt32 | NumProperties |
4 | UInt32 | প্রপার্টিলিস্টলেন |
1 | UInt8 | NameLen |
নাম দৈর্ঘ্য | চার | নাম |
? | ? | প্রপার্টি[n], যেখানে n = 0:PropertyListLen |
ঐচ্ছিক | ||
? | ? | নেস্টেডলিস্ট |
13 | uint8[] | নাল-রেকর্ড |
কোথায়:
EndOffset
হল ফাইলের শুরু থেকে নোড রেকর্ডের শেষ পর্যন্ত দূরত্ব (অর্থাৎ পরবর্তী যা আসে তার প্রথম বাইট)। এটি সহজেই অজানা বা অপ্রয়োজনীয় রেকর্ডগুলি এড়িয়ে যেতে ব্যবহার করা যেতে পারে।NumProperties
হল নোডের সাথে যুক্ত মান টিপলে বৈশিষ্ট্যের সংখ্যা। শেষ উপাদান হিসাবে একটি নেস্টেড তালিকা সম্পত্তি হিসাবে গণনা করা হয় না।‘PropertyListLen’ হল সম্পত্তি তালিকার দৈর্ঘ্য। এটি ##NumProperties## বৈশিষ্ট্য সংরক্ষণের জন্য প্রয়োজনীয় আকার, যা বৈশিষ্ট্যগুলির ডেটা প্রকারের উপর নির্ভর করে।
‘NameLen’ হল বস্তুর নামের দৈর্ঘ্য, অক্ষরে। একমাত্র কেস যেখানে এটি 0 হয় তা তালিকার শীর্ষ-স্তরের বলে মনে হয়।
‘নাম’ হল বস্তুর নাম। কোন জিরো-টার্মিনেশন নেই।
সম্পত্তি[n]
হল nম সম্পত্তি। বিন্যাসের জন্য, বিভাগ সম্পত্তি রেকর্ড বিন্যাস দেখুন। বৈশিষ্ট্যগুলি ক্রমানুসারে এবং কোন প্যাডিং ছাড়াই লেখা হয়।NestedList
হল নেস্টেড তালিকা, যার উপস্থিতি একেবারে শেষে একটি NULL–রেকর্ড দ্বারা নির্দেশিত হয়।
EndOffset পৌঁছানো পর্যন্ত বাইট বাকি আছে কিনা তা পরীক্ষা করে নেস্টেড তালিকা এন্ট্রির অস্তিত্ব নির্ধারণ করা যেতে পারে। যদি তাই হয়, পরবর্তী অবজেক্ট রেকর্ডটি শেষ সম্পত্তি অনুসরণ করে সরাসরি পড়তে হবে। অবজেক্ট রেকর্ড তারপর 13 শূন্য বাইট অনুসরণ করে, যা পরে EndOffset এর সাথে একত্রিত হয়। NULL এন্ট্রির উদ্দেশ্য বা প্রয়োজনীয়তা জানা নেই এবং কিছু বিন্যাস বৈশিষ্ট্য নির্দেশ করতে পারে।
সম্পত্তি রেকর্ড বিন্যাস
একটি সম্পত্তি রেকর্ডে নোডের অংশ এমন বৈশিষ্ট্যগুলি সম্পর্কে বিশদ রয়েছে। একটি সম্পত্তি রেকর্ড নিম্নলিখিত মেমরি বিন্যাস আছে:
আকার (বাইট) | ডেটা টাইপ | নাম |
---|---|---|
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 | অ্যারে দৈর্ঘ্য |
4 | Uint32 | এনকোডিং |
4 | Uint32 | সংকুচিত দৈর্ঘ্য |
? | ? | বিষয়বস্তু |
বিশেষ প্রকার
নিম্নলিখিত বিশেষ ধরনের TypeCodes আছে.
S: String
R: raw binary data
এই উভয় টাইপকোড নিম্নলিখিত হিসাবে উপস্থাপন করা হয়:
আকার (বাইট) | ডেটা টাইপ | নাম |
---|---|---|
4 | Uin32 | দৈর্ঘ্য |
দৈর্ঘ্য |
স্ট্রিংটি শূন্য-সমাপ্ত নয় এবং এতে \0 অক্ষর থাকতে পারে (এটি আসলে কিছু FBX বৈশিষ্ট্যে ব্যবহৃত হয়)।