클래스선언.html

FBX 파일은 노드(node)들로 구성되어 있습니다. 즉 노드들의 트리(tree)라는 의미이죠. 예를 들어, FBXHeaderExtension 이라는 이름을 가진 노드가 있다면, 해당 노드는 아래와 같은 트리 구조를 가질 수 있습니다:

"FBXHeaderExtension" (0)
  |    
  |____"FBXHeaderVersion" (1)
  |    	+ I:int32 = 1003
  |    
  |    
  |____"FBXVersion" (2)
  |    	+ I:int32 = 7400
  |    
  |    
  |____"EncryptionType" (3)
  |    	+ I:int32 = 0
  |    
  |    
  |____"CreationTimeStamp" (4)
  |      |    
  |      |____"Version" (5)
  |      |    	+ I:int32 = 1000
  |      |    
  |      |    
  |      |____"Year" (6)
  |      |    	+ I:int32 = 2023
  |      |    
  |      |    
  |      |____"Month" (7)
  |      |    	+ I:int32 = 11
  |      |    
  |      |    
  |      |____"Day" (8)
  |      |    	+ I:int32 = 16
  |      |    
  |      |    
  |      |____"Hour" (9)
  |      |    	+ I:int32 = 23
  |      |    
  |      |    
  |      |____"Minute" (10)
  |      |    	+ I:int32 = 55
  |      |    
  |      |    
  |      |____"Second" (11)
  |      |    	+ I:int32 = 39
  |      |    
  |      |    
  |      |____"Millisecond" (12)
  |      |    	+ I:int32 = 653
  |      |    
  |    
  |____"Creator" (13)
  |    	+ S:string = "FBX SDK/FBX Plugins version 2020.3.1"
  |    
  |    
  
  .......

각 노드들은 이름과 속성들을 가지고 있습니다. 예를 들어 위 예시에서 FBXVersion 노드는 "FBXVersion" 이라는 이름과 I 라는 Int32 타입의 속성을 가지고 있죠. 물론 속성들의 자료형은 다양하며, 하나의 노드는 다수의 속성들을 가질 수 있습니다.

FBXNode 는 여기서 하나의 노드를 정의합니다. 예시로 들었던 FBXHeaderExtension 노드는 단순히 FBX 파일의 생성 시간 등의 정보만 담고 있지만, 캐릭터 모델링을 임포트(import)하는데 필요한 정보는 아닙니다. 실제로 우리가 관심있는 것은 메시(mesh)나 본(Bone) 같은 정보들입니다.

이 정보들은 Geometry, Model, Deformer, AnimationCurve, AnimationCurveNode, AnimationLayer, Material, Texture, Video 노드들을 파싱하는 것으로 얻을 수 있으며, 이 특별한 노드들은 데이터를 파싱한 결과를 FBXNode.mesh, FBXNode.bone, FBXNode.deformer, FBXNode.animCurve, FBXNode.animCurveNode, FBXNode.animLayer, FBXNode.material, FBXBone.texture 중 하나에 저장합니다.

모두 Objects 노드를 부모(parent)로 가지며, L , S , S 라는 3개의 속성을 가지고 있다는 공통점이 있습니다:

"Objects" (212)
  |    
  |____"Geometry" (213)
  |    	+ L:int64 = 2442562295440
  |    	+ S:string = "\\x00\\x01Geometry"
  |    	+ S:string = "Mesh"
  
  ....
  
  |____"Model" (1829)
  |    	+ L:int64 = 2442568028368
  |    	+ S:string = "Hair06(mirrored)\\x00\\x01Model"
  |    	+ S:string = "LimbNode"
  
  ....
  
  |____"Material" (2368)
  |    	+ L:int64 = 2442801278080
  |    	+ S:string = "body\\x00\\x01Material"
  |    	+ S:string = ""
  
  ....
  
  |____"Deformer" (2494)
  |    	+ L:int64 = 2441485343472
  |    	+ S:string = "\\x00\\x01SubDeformer"
  |    	+ S:string = "Cluster"
  
  ....
  
  |____"AnimationStack" (2792)
  |    	+ L:int64 = 2314480744816
  |    	+ S:string = "Walk\\x00\\x01AnimStack"
  |    	+ S:string = ""
  
  ....
  
  |____"AnimationCurve" (2796)
  |    	+ L:int64 = 2315729557840
  |    	+ S:string = "\\x00\\x01AnimCurve"
  |    	+ S:string = ""
  
  ....
  
  |____"AnimationCurveNode" (8807)
  |    	+ L:int64 = 2314480750224
  |    	+ S:string = "R\\x00\\x01AnimCurveNode"
  |    	+ S:string = ""
  
  ....
  
  |____"AnimationLayer" (9872)
  |    	+ L:int64 = 2315184190656
  |    	+ S:string = "BaseLayer\\x00\\x01AnimLayer"
  |    	+ S:string = ""
  
  ....

L , S , S 는 차례대로 UID, Name::Class, Sub-class 를 의미합니다. Name::Class 의 경우, FBX binary format 에서 ::\\x00\\x01 으로 저장되어 있습니다. 자세한 내용은 FBXNode.uid, FBXNode.subclass 를 읽어보시길 바랍니다.

Constructor

<aside>

FBXNode()

FBXNode 를 생성합니다. 생성된 노드는 fbxfile.nodes 에 자동으로 삽입됩니다.

</aside>

Instance methods

<aside>

FBXNode.toString()

FBXNode 를 나타내는 string 을 돌려줍니다.

</aside>

<aside>

FBXNode.hierarchy()

현재 노드의 계층구조를 나타내는 string 을 돌려줍니다.

</aside>