aspose.info
DA

FBX - FilmBox 3D File Format

Opdateret

Hvad er en FBX fil?

FBX, FilmBox, er et populært 3D-filformat, der oprindeligt blev udviklet af Kaydara til MotionBuilder. Det blev erhvervet af Autodesk Inc i 2006 og er nu et af de vigtigste 3D-udvekslingsformater, som bruges af mange 3D-værktøjer. FBX er tilgængelig i både binært og ASCII-filformat. Formatet blev etableret for at give interoperabilitet mellem applikationer til oprettelse af digitalt indhold. Der er mange værktøjer tilgængelige til konvertering fra/til FBX-filformat.

FBX-filformat - flere oplysninger

FBX er et proprietært format, og specifikationer om dets binære filformat er ikke officielt tilgængelige. En C++ FBX SDK leveres af Autodesk til læsning, skrivning og konvertering til/fra FBX-fil. Et Python-import- og eksportscript til FBX er også tilgængeligt i Blender-software, der ikke bruger FBX SDK.

Tekstbaseret filstruktur

The text-based file structure is a tree-structured documented with clearly named identifiers. It consists of a nested list of nodes arranged in hierarchy where each node has:

  • En NodeType identifikator (klassenavn)

  • En tuple af egenskaber forbundet med det, tuple-elementerne er de sædvanlige primitive datatyper: ##float, integer, string## osv.

  • En liste, der indeholder noder i samme format (rekursivt).

Disse kan repræsenteres logisk som følger:

NodeType: SomeProperty0a, SomeProperty0b, ... , {

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

 ...
}

Nogle af standardknuderne er defineret som implicit liste, hvor hvert element består af en indlejret liste. Enhver applikation, der har til hensigt at få adgang til FBX-geometri, skal analysere dette indhold og gøre brugbar mening med det. Et eksempel på tekstbaseret FBX-fil er som angivet nedenfor:

; 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
}
}
...

Binær filstruktur af FBX-filer

Som nævnt tidligere er FBX-filformatspecifikationer ikke tilgængelige offentligt for FBX. Da Blender Foundation implementerer FBX-filformatet uden at bruge virksomhedens SDK, er nogle af detaljerne om binært filformat available som en del af implementeringen.

Den binære filstruktur følger følgende rækkefølge:

  • Header

  • Objekt Record

  • Sidefod

FBX Header

Filhovedinformationen består af 27 bytes.

  • Bytes 0 - 20: Kaydara FBX Binær \x00 (filmagi, med 2 mellemrum i slutningen, derefter en NULL-terminator).

  • Byte 21 - 22: [0x1A, 0x00]## (ukendt, men alle observerede filer viser disse bytes).

  • Bytes 23 - 26: usigneret int, versionsnummeret. 7300 for version 7.3 for eksempel.

Objektpost

Headeren efterfølges af en objektpost, der er en fuld nodepost med tomt navn og tom egenskabsliste. Den indeholder rekursivt hele filformationen.

Sidefod

FBX Footer sektionen ligger i slutningen af filen, hvis indhold er ukendt.

Optageformater

Poster i en FBX-fil er kategoriseret som:

  • Node Records

  • Ejendomsregistre

Node Record Format

Hvert Node Record Format er navngivet og har følgende hukommelseslayout.

Størrelse (Bytes)DatotypeNavn
4UInt32EndOffset
4UInt32NumProperties
4UInt32PropertyListLen
1UInt8NavnLen
NavnLængdetegnNavn
??Ejendom[n], hvor n = 0:PropertyListLen
Valgfrit
??NestedList
13uint8[]Nul-Record

hvor:

  • ‘EndOffset’ er afstanden fra begyndelsen af filen til slutningen af nodeposten (dvs. den første byte af det næste). Dette kan bruges til nemt at springe over ukendte eller ikke nødvendige poster.

  • ‘NumProperties’ er antallet af egenskaber i værdituplen, der er knyttet til noden. En indlejret liste som sidste element tælles ikke som egenskab.

  • PropertyListLen er længden af ejendomslisten. Dette er den størrelse, der kræves for at gemme ##NumProperties## egenskaber, hvilket afhænger af egenskabernes datatype.

  • NameLen er længden af objektnavnet i tegn. Det eneste tilfælde, hvor dette er 0, ser ud til at være listernes øverste niveau.

  • Navn er navnet på objektet. Der er ingen nul-terminering.

  • “Ejendom[n]” er den n’te egenskab. For formatet, se afsnittet egenskab Record Format. Egenskaber skrives sekventielt og uden udfyldning.

  • NestedList er den indlejrede liste, hvis tilstedeværelse er angivet med en NULL-record til allersidst.

Eksistensen af en indlejret listepost kan bestemmes ved at kontrollere, om der er bytes tilbage, indtil EndOffset er nået. Hvis det er tilfældet, skal den næste objektpost læses direkte efter den sidste egenskab. Objektposten følger derefter 13 nul bytes, som derefter kombineres med EndOffset. Formålet med eller kravet til NULL-indtastningen er ikke kendt og kan pege på en eller anden formatfunktion.

Ejendomspostformat

En ejendomspost indeholder detaljer om egenskaber, der er en del af Node. En ejendomspost har følgende hukommelseslayout:

Størrelse (Bytes)DatatypeNavn
1charTypeCode
??Data

TypeCode repræsenterer tegnkoder, som er ordnet i grupper, der kræver lignende håndtering. TypeCodes kan kategoriseres i følgende typer, og TypeCode kan være en af tegnkoderne blandt disse typer.

Primitive typer

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 i den primitive skalartype-record er nøjagtig den binære repræsentation af værdien i little-endian byte-rækkefølge.

Arraytyper

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 for Array Type er mere kompleks og er i følgende struktur.

Størrelse (Bytes)DatatypeNavn
4Uint32ArrayLength
4Uint32Kodning
4Uint32Komprimeret længde
??Indhold

Specielle typer

Følgende er de særlige typer typekoder.

S: String
R: raw binary data

Begge disse TypeCodes er repræsenteret som følger:

Størrelse (Bytes)DatatypeNavn
4Uin32Længde
Længde

Strengen er ikke nultermineret og kan godt indeholde \0 tegn (dette bruges faktisk i nogle FBX-egenskaber).

Referencer

Se også