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)页脚

    位于文件末尾

posted @ 2021-01-12 12:18  慕尘  阅读(2315)  评论(0编辑  收藏  举报