aspose.info
TH

FBX - รูปแบบไฟล์ FilmBox 3D

อัปเดตเมื่อ

ไฟล์ 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 มีชื่อและมีเค้าโครงหน่วยความจำดังต่อไปนี้

ขนาด (ไบต์)ประเภทวันที่ชื่อ
4UInt32สิ้นสุดการชดเชย
4UInt32NumProperties
4UInt32PropertyListLen
1UInt8ชื่อเลน
ชื่อความยาวตัวอักษรชื่อ
??คุณสมบัติ[n] โดยที่ n = 0:PropertyListLen
ไม่บังคับ
??NestedList
13uint8[]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 นั้นซับซ้อนกว่าและอยู่ในโครงสร้างต่อไปนี้

ขนาด (ไบต์)ประเภทข้อมูลชื่อ
4Uint32ความยาวอาร์เรย์
4Uint32การเข้ารหัส
4Uint32ความยาวที่บีบอัด
??เนื้อหา

ประเภทพิเศษ

ต่อไปนี้คือ TypeCodes ประเภทพิเศษ

S: String
R: raw binary data

TypeCodes ทั้งสองนี้แสดงดังต่อไปนี้:

ขนาด (ไบต์)ประเภทข้อมูลชื่อ
4Uin32ความยาว
ความยาว

สตริงไม่ได้สิ้นสุดด้วยศูนย์ และอาจมีอักขระ \0 (ซึ่งใช้จริงในคุณสมบัติบางอย่างของ FBX)

อ้างอิง

ดูเพิ่มเติม