FBX


FBX是一種流行的3D文件格式,由Kaydara為MotionBuilder開發,於2006年被Autodesk公司收購,是許多3D工具使用的主要3D交換格式之一

FBX有二進制和基於文本(ASCII)文件格式

(1)基於文本的文件結構

  基於文本的文件結構是樹狀結構,帶有明確命名的標識符,由按層次結構排列的節點嵌套列表組成

  每個節點具有

NodeType標識符(類名)
與元組相關的屬性,元組元素是通常的原始數據類型:## float,integer,string ##等。
包含相同格式(遞歸)的節點的列表

邏輯表示為

NodeType: SomeProperty0a, SomeProperty0b, ... , {

   NestedNodeType1 : SomeProperty1a, ...
   NestedNodeType2 : SomeProperty2a, ... , {
     ... Sub-scope
   }
   ...
}

標准節點

FBXHeaderExtension:{...}
GlobalSettings: {...}
Documents:{...}
Definitions:{...}
Connections:{...}
...

eg:

; FBX 7.2.0 project file
; Copyright (C) 1997-2010 Autodesk Inc. and/or its licensors.
; All rights reserved.
; ----------------------------------------------------

FBXHeaderExtension:  {
    FBXHeaderVersion: 1003
    FBXVersion: 7200
}

; Object properties
;------------------------------------------------------------------

Objects:  {
    Geometry: 1000, "Geometry::", "NurbsCurve" {
        GeometryVersion: 124
        Type: "NurbsCurve"
        NurbsCurveVersion: 100
        Order: 3
        Dimension: 3
        Form: "Open"
        Rational: 1
        Points: *32 {
            a: 10,20,0,1, 10,20,10,1, 0,20,10,1, -10,20,10,1, -10,20,0,1, -10,20,-10,1, 0,20,-10,1, 10,22,-10,1
        }
        KnotVector: *11 {
            a: 0,0,0,0.17,0.33,0.5,0.67,0.83,1,1,1
        }
    }
    ……
    Model: 10, "Model::Layer 01", "Null" {
    }
    Model: 100, "Model::Object_1", "NurbsCurve" {
    }
    ……
}

; Object connections
;------------------------------------------------------------------

Connections:  {
    ;Model::Layer 01, Model::RootNode
    C: "OO",10,0

    ;Model::Object_1, Model::Layer 01
    C: "OO",100,10

    ;Geometry::, Model::Object_1
    C: "OO",1000,100

    ……
}

(2)二進制文件結構

  1)標頭

    文件頭信息由27個字節組成

Bytes 0 - 20: Kaydara FBX Binary  \x00 (file-magic, ,最后有2個空格,然后是一個NULL終止符).
Bytes 21 - 22: [0x1A, 0x00]## (未知,但所有觀察到的文件都顯示這些字節).
Bytes 23 - 26: unsigned int, 版本號。例如,版本7.3的7300.

  2)對象記錄

    對象記錄是具有空名稱和空屬性列表的完整節點記錄

    它遞歸包含整個文件格式

    記錄分為

    <1>Node 記錄

大小 (Bytes) 數據類型 名稱 說明
4 UInt32 EndOffset 是從文件開頭到節點記錄結尾的距離
4 UInt32 NumProperties 是與節點關聯的值元組tuple中的屬性數
4 UInt32 PropertyListLen 是屬性列表的長度
1 UInt8 NameLen 是對象名稱的長度,以字符為單位
NameLength char Name 是對象的名稱
? ? Property[n], where n = 0:PropertyListLen 是第n個屬性
Optional      
? ? NestedList 是嵌套列表
13 uint8[] Null-Record  
 

    <2>Property 記錄

大小 (Bytes) 數據類型 名稱
1 char TypeCode
? ? Data
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

    基於該類型的data是該值的二進制表示形式  

數組類型

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)

    基於該類型的data更復雜,結構為

大小(字節) 數據類型 名稱
4 Uint32 數組長度
4 Uint32 編碼方式
4 Uint32 壓縮長度
內容

  特殊類型

S: String
R: raw binary data

   這兩種TypeCode表示為

大小(字節) 數據類型 名稱
4 Uin32 長度
長度    

   3)頁腳

    位於文件末尾


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM