ไฟล์ FBX คืออะไร??
FBX, FilmBox เป็นรูปแบบไฟล์ 3 มิติยอดนิยมที่พัฒนาโดย Kaydara สำหรับ MotionBuilder Autodesk Inc เข้าซื้อกิจการในปี 2549 และปัจจุบันเป็นหนึ่งในรูปแบบการแลกเปลี่ยน 3 มิติหลักที่ใช้โดยเครื่องมือ 3 มิติจำนวนมาก FBX มีทั้งในรูปแบบไฟล์ไบนารีและ ASCII รูปแบบนี้กำหนดขึ้นเพื่อให้การทำงานร่วมกันระหว่างแอปพลิเคชันการสร้างเนื้อหาดิจิทัล มีเครื่องมือมากมายสำหรับการแปลงจาก/เป็นรูปแบบไฟล์ FBX
รูปแบบไฟล์ FBX - ข้อมูลเพิ่มเติม
FBX เป็นรูปแบบกรรมสิทธิ์และข้อมูลจำเพาะเกี่ยวกับรูปแบบไฟล์ไบนารียังไม่พร้อมใช้งานอย่างเป็นทางการ Autodesk มี C++ FBX SDK สำหรับการอ่าน เขียน และแปลงเป็น/จากไฟล์ FBX สคริปต์นำเข้าและส่งออก Python สำหรับ FBX มีอยู่ในซอฟต์แวร์ Blender ที่ไม่ได้ใช้ FBX SDK
โครงสร้างไฟล์ตามข้อความ
โครงสร้างไฟล์แบบข้อความเป็นเอกสารที่มีโครงสร้างแบบต้นไม้พร้อมตัวระบุชื่อที่ชัดเจน ประกอบด้วยรายการโหนดที่ซ้อนกันซึ่งจัดเรียงตามลำดับชั้นโดยแต่ละโหนดมี:
- ตัวระบุ NodeType (ชื่อคลาส)
- คุณสมบัติทูเพิลที่เกี่ยวข้อง องค์ประกอบทูเพิลเป็นประเภทข้อมูลดั้งเดิมตามปกติ: ##float, จำนวนเต็ม, สตริง## ฯลฯ
- รายการที่มีโหนดในรูปแบบเดียวกัน (เรียกซ้ำ)
สิ่งเหล่านี้สามารถแสดงได้อย่างมีเหตุผลดังนี้:
NodeType: SomeProperty0a, SomeProperty0b, ... , {
NestedNodeType1 : SomeProperty1a, ...
NestedNodeType2 : SomeProperty2a, ... , {
... Sub-scope
}
...
}
โหนดมาตรฐานบางโหนดถูกกำหนดให้เป็นรายการโดยนัยซึ่งแต่ละรายการประกอบด้วยรายการที่ซ้อนกัน แอปพลิเคชันใด ๆ ที่ต้องการเข้าถึง FBX geometry จะต้องแยกวิเคราะห์เนื้อหาเหล่านี้และให้ความหมายที่มีประโยชน์แก่มัน ตัวอย่างของไฟล์ 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 (file-magic โดยมี 2 ช่องว่างในตอนท้าย จากนั้นเป็น NULL Terminator)
- ไบต์ 21 - 22: [0x1A, 0x00]## (ไม่รู้จัก แต่ไฟล์ที่สังเกตทั้งหมดแสดงไบต์เหล่านี้)
- ไบต์ 23 - 26: unsigned int, หมายเลขเวอร์ชัน 7300 สำหรับเวอร์ชัน 7.3 เป็นต้น
บันทึกวัตถุ
ส่วนหัวตามด้วยเรคคอร์ดวัตถุที่เป็นเรคคอร์ดโหนดแบบเต็มพร้อมชื่อว่างและรายการคุณสมบัติว่าง มันวนซ้ำประกอบด้วยการสร้างไฟล์ทั้งหมด
ส่วนท้าย
ส่วนท้ายของ FBX อยู่ที่ส่วนท้ายของไฟล์ที่ไม่รู้จักเนื้อหา
รูปแบบการบันทึก
บันทึกในไฟล์ FBX จัดประเภทเป็น:
- บันทึกโหนด
- บันทึกทรัพย์สิน
รูปแบบบันทึกโหนด
แต่ละ Node Record Format มีชื่อและมีเค้าโครงหน่วยความจำดังต่อไปนี้
ขนาด (ไบต์) | ประเภทวันที่ | ชื่อ |
---|---|---|
4 | UInt32 | สิ้นสุดการชดเชย |
4 | UInt32 | NumProperties |
4 | UInt32 | PropertyListLen |
1 | UInt8 | ชื่อเลน |
ชื่อความยาว | ตัวอักษร | ชื่อ |
? | ? | คุณสมบัติ[n] โดยที่ n = 0:PropertyListLen |
ไม่บังคับ | ||
? | ? | NestedList |
13 | uint8[] | Null-บันทึก |
ที่ไหน:
EndOffset
คือระยะทางจากจุดเริ่มต้นของไฟล์ถึงจุดสิ้นสุดของเร็กคอร์ดโหนด (เช่น ไบต์แรกของสิ่งที่ตามมา) สามารถใช้เพื่อข้ามบันทึกที่ไม่รู้จักหรือไม่จำเป็นได้อย่างง่ายดายNumProperties
คือจำนวนคุณสมบัติในค่า tuple ที่เชื่อมโยงกับโหนด รายการที่ซ้อนกันเป็นองค์ประกอบสุดท้ายจะไม่นับเป็นคุณสมบัติPropertyListLen
คือความยาวของรายการคุณสมบัติ นี่คือขนาดที่จำเป็นสำหรับการจัดเก็บคุณสมบัติ ##NumProperties## ซึ่งขึ้นอยู่กับชนิดข้อมูลของคุณสมบัติNameLen
คือความยาวของชื่อออบเจกต์ในหน่วยอักขระ กรณีเดียวที่เป็น 0 ดูเหมือนจะเป็นรายการระดับบนสุดชื่อ
คือชื่อของวัตถุ ไม่มีการยุติเป็นศูนย์พร็อพเพอร์ตี้[n]
เป็นพร็อพเพอร์ตี้ที่ n สำหรับรูปแบบ ให้ดูที่คุณสมบัติส่วน รูปแบบเรกคอร์ด คุณสมบัติเขียนตามลำดับและไม่มีช่องว่างภายในNestedList
คือรายการที่ซ้อนกัน ซึ่งการมีอยู่ของรายการนั้นจะถูกระบุด้วยระเบียน NULL ที่ส่วนท้ายสุด
การมีอยู่ของรายการที่ซ้อนกันสามารถกำหนดได้โดยการตรวจสอบว่ามีไบต์เหลืออยู่หรือไม่จนกว่าจะถึง EndOffset ถ้าเป็นเช่นนั้น ควรอ่านเรกคอร์ดอ็อบเจกต์ถัดไปต่อจากพร็อพเพอร์ตี้สุดท้ายโดยตรง บันทึกออบเจกต์จะตามด้วย 13 ศูนย์ไบต์ ซึ่งจะรวมเข้ากับ EndOffset ไม่ทราบวัตถุประสงค์หรือข้อกำหนดของรายการ NULL และอาจชี้ไปที่คุณลักษณะรูปแบบบางอย่าง
รูปแบบการบันทึกทรัพย์สิน
บันทึกคุณสมบัติมีรายละเอียดเกี่ยวกับคุณสมบัติที่เป็นส่วนหนึ่งของโหนด เรกคอร์ดคุณสมบัติมีเค้าโครงหน่วยความจำต่อไปนี้:
ขนาด (ไบต์) | ประเภทข้อมูล | ชื่อ |
---|---|---|
1 | ถ่าน | TypeCode |
? | ? | ข้อมูล |
TypeCode แสดงรหัสอักขระที่เรียงลำดับในกลุ่มที่ต้องการการจัดการที่คล้ายคลึงกัน TypeCodes สามารถแบ่งตามประเภทต่อไปนี้ และ 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)
ข้อมูลสำหรับประเภท Array นั้นซับซ้อนกว่าและอยู่ในโครงสร้างต่อไปนี้
ขนาด (ไบต์) | ประเภทข้อมูล | ชื่อ |
---|---|---|
4 | Uint32 | ความยาวอาร์เรย์ |
4 | Uint32 | การเข้ารหัส |
4 | Uint32 | ความยาวที่บีบอัด |
? | ? | เนื้อหา |
ประเภทพิเศษ
ต่อไปนี้คือ TypeCodes ประเภทพิเศษ
S: String
R: raw binary data
TypeCodes ทั้งสองนี้แสดงดังต่อไปนี้:
ขนาด (ไบต์) | ประเภทข้อมูล | ชื่อ |
---|---|---|
4 | Uin32 | ความยาว |
ความยาว |
สตริงไม่ได้สิ้นสุดด้วยศูนย์ และอาจมีอักขระ \0 (ซึ่งใช้จริงในคุณสมบัติบางอย่างของ FBX)