ما هو ملف FBX؟
FBX ، FilmBox ، هو تنسيق ملف ثلاثي الأبعاد شائع تم تطويره في الأصل بواسطة Kaydara لصالح MotionBuilder. تم الحصول عليها من قبل شركة Autodesk Inc في عام 2006 وهي الآن واحدة من تنسيقات التبادل ثلاثية الأبعاد الرئيسية المستخدمة في العديد من الأدوات ثلاثية الأبعاد. يتوفر FBX بتنسيق ملف ثنائي و ASCII. تم إنشاء التنسيق لتوفير إمكانية التشغيل البيني بين تطبيقات إنشاء المحتوى الرقمي. هناك العديد من الأدوات المتاحة للتحويل من / إلى تنسيق ملف FBX.
تنسيق ملف FBX - مزيد من المعلومات
FBX هو تنسيق خاص ولا تتوفر المواصفات حول تنسيق الملف الثنائي رسميًا. يتم توفير C ++ FBX SDK بواسطة Autodesk للقراءة والكتابة والتحويل إلى / من ملف FBX. يتوفر أيضًا نص برمجي لاستيراد وتصدير Python لـ FBX في برنامج Blender الذي لا يستخدم FBX SDK.
بنية ملف نصية
هيكل الملف المستند إلى النص عبارة عن هيكل شجري وموثق بمعرفات مسماة بوضوح. يتكون من قائمة متداخلة من العقد مرتبة في تسلسل هرمي حيث تحتوي كل عقدة على:
- معرف NodeType (اسم الفئة)
- مجموعة الخصائص المرتبطة بها ، عناصر المجموعة هي أنواع البيانات الأولية المعتادة: ## عدد صحيح ، سلسلة ## إلخ.
- قائمة تحتوي على عقد بنفس التنسيق (بشكل متكرر).
يمكن تمثيلها منطقيًا على النحو التالي:
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. نظرًا لأن Blender Foundation تنفذ تنسيق ملف FBX دون استخدام SDK المقدم من الشركة ، فإن بعض التفاصيل حول تنسيق الملف الثنائي متوفرة كجزء من تنفيذه.
تتبع بنية الملفات الثنائية الترتيب التالي:
- رأس
- سجل الكائن
- تذييل
رأس FBX
تتكون معلومات رأس الملف من 27 بايت.
- بايت 0 - 20: Kaydara FBX Binary \ x00 (ملف سحري ، مع مسافتين في النهاية ، ثم فاصل NULL).
- بايت 21 - 22: [0x1A، 0x00] ## (غير معروف ولكن جميع الملفات التي تمت ملاحظتها تظهر هذه البايتات).
- بايت 23 - 26: عدد صحيح العدد غير الموقعة. 7300 للإصدار 7.3 على سبيل المثال.
سجل الكائن
يتبع الرأس سجل كائن يمثل سجل عقدة كامل مع اسم فارغ وقائمة خصائص فارغة. يحتوي بشكل متكرر على تشكيل الملف بأكمله.
تذييل
يقع قسم FBX Footer في نهاية الملف الذي تكون محتوياته غير معروفة.
تنسيقات التسجيل
يتم تصنيف السجلات في ملف FBX على النحو التالي:
- سجلات العقدة
- سجلات الممتلكات
تنسيق سجل العقدة
يتم تسمية كل تنسيق سجل Node وله تخطيط الذاكرة التالي.
الحجم (بايت) | نوع التاريخ | الاسم |
---|---|---|
4 | UInt32 | EndOffset |
4 | UInt32 | NumProperties |
4 | UInt32 | PropertyListLen |
1 | UInt8 | NameLen |
NameLength | char | Name |
؟ | ؟ | الخاصية [n] ، حيث n = 0: PropertyListLen |
اختياري | ||
؟ | ؟ | قائمة متداخلة |
13 | uint8 [] | Null-Record |
أين:
- “EndOffset” هي المسافة من بداية الملف إلى نهاية سجل العقدة (أي البايت الأول من كل ما يأتي بعد ذلك). يمكن استخدام هذا لتخطي السجلات غير المعروفة أو غير المطلوبة بسهولة.
- “NumProperties” هو عدد الخصائص في مجموعة القيم المرتبطة بالعقدة. لا يتم احتساب القائمة المتداخلة كعنصر أخير كخاصية.
- “PropertyListLen” هو طول قائمة الخصائص. هذا هو الحجم المطلوب لتخزين خصائص ## NumProperties ## ، والتي تعتمد على نوع بيانات الخصائص.
- “NameLen” هو طول اسم الكائن بالأحرف. يبدو أن الحالة الوحيدة التي يكون فيها هذا الرقم 0 هي قوائم المستوى الأعلى.
- “الاسم” هو اسم الكائن. لا يوجد إنهاء صفري.
الخاصية [n]
هي الخاصية nth. للحصول على التنسيق ، راجع خاصية القسم تنسيق السجل. تتم كتابة الخصائص بالتسلسل وبدون حشوة.- “NestedList” هي القائمة المتداخلة ، والتي يُشار إلى وجودها بواسطة سجل NULL في النهاية.
يمكن تحديد وجود إدخال قائمة متداخلة عن طريق التحقق مما إذا كانت هناك وحدات بايت متبقية حتى يتم الوصول إلى EndOffset. إذا كان الأمر كذلك ، فيجب قراءة سجل الكائن التالي مباشرة بعد الخاصية الأخيرة. يتبع سجل الكائن 13 صفر بايت ، والتي تتحد بعد ذلك مع EndOffset. الغرض من إدخال NULL أو مطلبه غير معروف وقد يشير إلى بعض ميزات التنسيق.
تنسيق سجل الملكية
يحتوي سجل الخاصية على تفاصيل حول الخصائص التي تشكل جزءًا من العقدة. يحتوي سجل الملكية على تخطيط الذاكرة التالي:
الحجم (بايت) | نوع البيانات | الاسم |
---|---|---|
1 | حرف | TypeCode |
؟ | ؟ | بيانات |
يمثل TypeCode رموز الأحرف التي يتم ترتيبها في مجموعات تتطلب معالجة مماثلة. يمكن تصنيف أكواد النوع في الأنواع التالية ويمكن أن يكون TypeCode أحد أكواد الأحرف من بين هذه الأنواع.
الأنواع البدائية
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 | CompressedLength |
؟ | ؟ | المحتويات |
أنواع خاصة
فيما يلي أنواع أكواد الأنواع الخاصة.
S: String
R: raw binary data
يتم تمثيل كلا النوعين من الأكواد على النحو التالي:
الحجم (بايت) | نوع البيانات | الاسم |
---|---|---|
4 | Uin32 | الطول |
الطول |
السلسلة ليست منتهية بصفر ، وقد تحتوي على أحرف \ 0 (يتم استخدام هذا بالفعل في بعض خصائص FBX).