aspose.info
HU

FBX - FilmBox 3D fájlformátum

Frissítve

Mi az FBX fájl?

Az FBX, a FilmBox egy népszerű 3D-s fájlformátum, amelyet eredetileg a Kaydara fejlesztett ki a MotionBuilder számára. Az Autodesk Inc 2006-ban vásárolta meg, és jelenleg az egyik fő 3D-s csereformátum, amelyet számos 3D-eszköz használ. Az FBX bináris és ASCII fájlformátumban is elérhető. A formátumot azért hozták létre, hogy interoperabilitást biztosítson a digitális tartalomkészítő alkalmazások között. Számos eszköz áll rendelkezésre az FBX fájlformátumból/FBX fájlformátumba való konvertáláshoz.

FBX fájlformátum - További információ

Az FBX egy szabadalmaztatott formátum, és a bináris fájlformátumra vonatkozó specifikációk hivatalosan nem érhetők el. Az Autodesk egy C++ FBX SDK-t biztosít az olvasáshoz, íráshoz és FBX-fájlba való konvertáláshoz. Az FBX-hez készült Python-importálási és -exportálási szkript a Blender szoftverben is elérhető, amely nem használja az FBX SDK-t.

Szöveg alapú fájlstruktúra

A szöveg alapú fájlstruktúra egy fa szerkezetű, egyértelműen megnevezett azonosítókkal dokumentált. A csomópontok beágyazott listájából áll, amelyek hierarchiában vannak elrendezve, ahol minden csomópont rendelkezik:

  • Egy NodeType azonosító (osztálynév)
  • A hozzá tartozó tulajdonságok sora, a sorelemek a szokásos primitív adattípusok: ##float, integer, string## stb.
  • Egy lista, amely azonos formátumú (rekurzív) csomópontokat tartalmaz.

Ezeket logikusan a következőképpen ábrázolhatjuk:

NodeType: SomeProperty0a, SomeProperty0b, ... , {

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

 ...
}

Néhány szabványos csomópont implicit listaként van definiálva, ahol minden elem egy beágyazott listából áll. Minden alkalmazásnak, amely hozzá kíván férni az FBX geometriához, elemeznie kell ezeket a tartalmakat, és hasznos jelentést kell adnia. Az alábbiakban látható egy példa a szöveges FBX-fájlra:

; 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 fájlok bináris fájlstruktúrája

Amint azt korábban említettük, az FBX fájlformátum specifikációi nem érhetők el nyilvánosan az FBX számára. Mivel a Blender Foundation az FBX fájlformátumot a vállalat által biztosított SDK használata nélkül valósítja meg, a bináris fájlformátumról néhány részlet elérhető megvalósításának részeként.

A bináris fájlok szerkezete a következő sorrendet követi:

  • Fejléc
  • Objektum rekord
  • Lábléc

FBX fejléc

A fájlfejléc információ 27 bájtból áll.

  • 0-20 bájtok: Kaydara FBX Binary \x00 (fájlvarázslat, 2 szóközzel a végén, majd NULL lezáró).
  • 21–22 bájtok: [0x1A, 0x00]## (ismeretlen, de minden megfigyelt fájl ezeket a bájtokat mutatja).
  • 23-26 bájt: unsigned int, a verziószám. 7300 például a 7.3-as verzióhoz.

Tárgyrekord

A fejlécet egy objektumrekord követi, amely egy teljes csomópontrekord üres névvel és üres tulajdonságlistával. Rekurzívan tartalmazza a teljes fájlképzést.

Lábléc

Az FBX Footer szakasz olyan fájl végén található, amelynek tartalma ismeretlen.

Felvételi formátumok

Az FBX-fájlban lévő rekordok a következő kategóriákba sorolhatók:

  • Node Records
  • Property Records

Node Record Format

Minden csomóponti rekordformátum el van nevezve, és a következő memóriaelrendezéssel rendelkezik.

Méret (Bájt)Dátum típusaNév
4UInt32EndOffset
4UInt32NumProperties
4UInt32PropertyListLen
1UInt8NévLen
NameLengthcharNév
??Tulajdonság[n], ahol n = 0:PropertyListLen
Opcionális
??NestedList
13uint8[]Null-Rekord

ahol:

  • Az EndOffset a fájl eleje és a csomópontrekord vége közötti távolság (azaz a következő lépés első bájtja). Ezzel könnyen átugorhat az ismeretlen vagy nem kötelező rekordok között.
  • A NumProperties a csomóponthoz társított értéksor tulajdonságainak száma. A beágyazott lista utolsó elemként nem számít tulajdonságnak.
  • A PropertyListLen a tulajdonságlista hossza. Ez a ##NumProperties## tulajdonságok tárolásához szükséges méret, amely a tulajdonságok adattípusától függ.
  • A NameLen az objektum nevének hossza karakterekben. Úgy tűnik, az egyetlen eset, amikor ez 0, a legfelső szintű listák.
  • A “Név” az objektum neve. Nincs nulla leállás.
  • A Tulajdon[n] az n-edik tulajdonság. A formátumot lásd a Rekordformátum tulajdonsága szakaszban. A tulajdonságok szekvenciálisan íródnak, kitöltés nélkül.
  • A “NestedList” egy beágyazott lista, amelynek jelenlétét egy NULL-rekord jelzi a legvégén.

Egy beágyazott listabejegyzés megléte úgy határozható meg, hogy ellenőrizzük, hogy van-e még bájt az EndOffset eléréséig. Ha igen, akkor a következő objektumrekordot közvetlenül az utolsó tulajdonság után kell beolvasni. Az objektumrekord ezután 13 nulla bájtot követ, amelyek azután kombinálódnak az EndOffset-tel. A NULL bejegyzés célja vagy követelménye nem ismert, és bizonyos formátum jellemzőkre utalhat.

Tulajdon nyilvántartási formátum

A tulajdonságrekord részleteket tartalmaz a csomópont részét képező tulajdonságokról. A tulajdonságrekord a következő memóriaelrendezéssel rendelkezik:

Méret (Bájt)AdattípusNév
1karakterTípuskód
??Adatok

A TypeCode olyan karakterkódokat jelent, amelyek csoportokba vannak rendezve, amelyek hasonló kezelést igényelnek. A TypeCode a következő típusokba sorolható, és a TypeCode lehet az egyik karakterkód ezen típusok között.

Primitív típusok

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

A primitív skalár típusú rekordban lévő adatok pontosan az érték bináris reprezentációi, kis-végi bájt sorrendben.

Tömbtípusok

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)

A tömbtípus adatai összetettebbek, és a következő szerkezetben találhatók.

Méret (Bájt)AdattípusNév
4Uint32ArrayLength
4Uint32Kódolás
4Uint32CompressedLength
??Tartalom

Különleges típusok

Az alábbiakban a speciális típuskódok találhatók.

S: String
R: raw binary data

Mindkét típuskód a következőképpen jelenik meg:

Méret (Bájt)AdattípusNév
4Uin32Hossz
Hosszú

A karakterlánc nem nulla végű, és \0 karaktert is tartalmazhat (ezt bizonyos FBX tulajdonságok használják).

Hivatkozások

Lásd még