Japanese
Leave Your Message

FBX 모델 파일 구조 설명

FBX 형식은 거의 모든 3D 엔진에서 지원되며, 오토데스크에서 개발한 3D 모델용 독점 형식입니다. 정점, 인덱스, 법선, UV 좌표, 재질 및 애니메이션을 지원합니다.
오토데스크는 FBX 파일을 가져오고 내보낼 수 있는 FBX SDK를 공식적으로 제공합니다. 이 SDK는 C++ 및 Python 두 가지 인터페이스를 제공합니다.
다른 라이브러리에 대한 의존성을 피하기 위해 사용자 지정 FBX 파서를 작성할 수도 있습니다.
이 문서에서는 FBX 파일의 구조에 대해 설명합니다. 이 구조를 이해하면 가볍고 사용자 정의 가능한 FBX 파서를 작성할 수 있습니다. 사용자 정의 FBX 파서의 예시는 Blender의 FBX Importer/Exporter 플러그인을 참조하십시오.
FBX 형식은 ASCII(텍스트 파일, 사람이 읽을 수 있는 형식) 또는 바이너리 형식으로 제공됩니다.

    1. FBX 파일 구조

    이것은 샘플 FBX 파일입니다.
    먼저 알아두어야 할 점은 일부 줄이 세미콜론으로 시작한다는 것입니다. 이는 주석이므로 파일을 읽을 때 무시해야 합니다.
    첫 번째 주석 다음에 FBXHeaderExtension이라는 식별자가 나타납니다. 이것은 파일 구조의 첫 번째 주요 노드입니다. FBX 파일 형식은 실제로 다음과 같은 체계를 따르는 트리 구조입니다.
    FBX 모델 파일 구조 설명 (1)
    각 노드 또는 자식 노드는 고유한 속성을 가질 수 있습니다. 속성은 메인 노드 외부에도 존재할 수 있지만, 일반적으로 무시해도 됩니다. 일반적으로 노드의 기본 구조는 다음과 같습니다.
    노드 이름: eventual_properties {
    노드 속성 1: 값
    노드 속성 2: 값
    서브노드1 : {
    하위 노드 속성 1: 값
    […]
    }
    노드 속성 3: 값
    […]
    }
    이것은 예제 파일에서 발견된 노드(첫 번째 노드)입니다.
    FBXHeaderExtension: {
    FBXHeaderVersion: 1003
    FBX 버전: 6100
    CreationTimeStamp: {
    버전: 1000
    연도: 2014
    월: 3
    날짜: 20일
    시간: 17시
    분: 38
    두 번째: 29
    밀리초: 0
    }
    제작자: "FBX SDK/FBX 플러그인 빌드 20070228"
    기타 플래그: {
    플래그PLE: 0
    }
    }
    구조를 이해하는 것은 효율적인 파서를 작성하는 데 있어 기본입니다.
    첫 번째 노드에는 FBXHeaderVersion과 FBXVersion이라는 두 가지 속성이 있으며, 이 속성들의 값은 포맷 버전입니다. 이 경우 버전은 6.1입니다. 생성 날짜(CreationTimeStamp)도 함께 확인하려는 경우가 아니라면 다른 정보는 무시해도 됩니다.

    2. FBX 객체 노드

    가장 중요한 노드는 단연 객체 노드입니다.
    객체 노드에는 모델의 정점, 인덱스, 법선 벡터, UV 좌표 및 재질이 포함되어 있습니다. 구조는 다음과 같습니다.
    객체: {
    모델: '모델 이름', '메쉬' {
    [...]
    정점: [...]
    PolygonVertexIndex: [...]
    LayerElementNormal: { }
    LayerElementUV: { }
    }
    재질: '재질 이름', '' { }
    [...]
    }

    3. FBX 버텍스

    앞에서 살펴본 바와 같이, 정점은 모델의 자식 노드의 '정점' 속성에서 찾을 수 있습니다.
    구문은 다음과 같습니다.
    정점: v1_x, v1_y, v1_z, v2_x, v2_y, v2_z, [...]
    각 꼭짓점은 쉼표로 구분된 세 개의 공간 좌표(x, y, z)를 가지고 있습니다(쉼표는 각 꼭짓점을 서로 구분하는 역할을 합니다). 좌표는 소수점 형태로 표시되며, 소수점은 반드시 포함되어야 합니다.
    예시는 다음과 같습니다.
    정점: 0.000000,0.104800,39.291698,0.000000,0.043400,-44.424301,0.000000,38.654301,-41.818802,-0.000000,39.455002,44.424400
    모델을 구성하는 꼭짓점은 다음과 같습니다.
    v1(0.000000,0.104800,39.291698)
    v2(00.000000,0.043400,-44.424301)
    v3(0.000000,38.654301,-41.818802)
    v4(0.000000,39.455002,44.424400)

    4. FBX 다각형의 꼭짓점 인덱스

    인덱스는 PolygonVertexIndex 속성에서 찾을 수 있습니다.
    FBX 파일은 삼각형(삼각형) 이상의 다각형을 내보낼 수 있습니다. 대부분의 파일은 사각형(사각형)을 내보냅니다. 구문은 정점과 유사하지만 한 가지 유의해야 할 점이 있습니다.
    다각형 정점 인덱스: i1, i2,-i3, i4, i5,-i6,[...]
    PolygonVertexIndex: i1, i2, i3, -i4, i5, i6, i7, -i8, [...]
    다각형을 구성하는 인덱스는 순서대로 나열되어 있으며, 음수 인덱스는 다각형의 마지막 인덱스를 의미합니다. 인덱스를 양수로 설정한 다음 1을 빼야 합니다!
    [이유가 궁금하시다면, 원래 인덱스는 -1일 때만 값이 0이 되는 방식이기 때문입니다. 예를 들어 인덱스 3은 -4가 됩니다.]
    예시는 다음과 같습니다.
    다각형 정점 인덱스: 8,7,3,-7,4,8,7,-3,0,5,8,-5
    모델을 구성하는 다각형은 다음과 같습니다.
    p1(8,7,3,6)
    p2(4,8,7,2)
    p3(0,5,8,4)
    다각형의 끝을 나타내는 인덱스가 양수로 설정되어 있으므로, 그 값에서 1을 빼야 합니다.
    참고: 그래픽 카드는 사각형을 제대로 처리하지 못하므로, 네 변으로 이루어진 각 다각형은 모델을 표시하기 전에 두 개의 삼각형으로 분할해야 합니다.

    5. FBX 노멀

    법선 벡터는 Normals 속성의 하위 노드인 LayerElementNormal(이는 다시 Model의 하위 노드임)에서 찾을 수 있습니다. 구문은 정점의 구문과 동일하게 (x, y, z) 좌표의 연속입니다.
    법선 벡터: n1_x, n1_y, n1_z, n2_x, n2_y, n2_z, [...]
    MappingInformationType 속성에 주의해야 하며, 이 속성은 다음과 같은 값을 가질 수 있습니다.
    ▪ ByPolygon: 폴리곤별, 즉 모델의 각 폴리곤에 법선이 있다는 의미입니다.
    ▪ ByPolygonVertex: 폴리곤 정점별로 처리합니다. 즉, 모델의 각 폴리곤의 모든 정점에 법선이 존재합니다. 예를 들어, 모델이 8개의 정점으로 이루어진 4개의 사각형으로 구성되어 있다면, 16개의 법선(법선 1개 * 폴리곤 4개 * 폴리곤 정점 4개)이 생성됩니다. 일반적으로 게임 엔진에서는 정점당 하나의 법선만 필요합니다. 따라서 한 정점에 여러 개의 법선이 있는 경우, 첫 번째 법선 이후의 법선은 무시하거나 모든 법선의 평균을 계산(법선 평활화)할 수 있습니다.
    ▪ ByVertex: 정점별 처리, 즉 모델의 각 정점에 법선이 부여됩니다. 블렌더 익스포터에서 ByVertice라고 표기하는 경우도 있습니다. 작성자는 스페인 사람인 것 같습니다.
    ▪ ByEdge: 엣지별로 처리됨. 즉, 모델의 각 엣지에는 일반적인(드문) 처리 방식이 적용됩니다.
    ▪ AllSame: 이는 모델의 모든 정점이 동일한 법선 벡터를 가진다는 의미인데, 대부분의 모델에서는 드물거나 불가능합니다.
    또 다른 중요한 속성은 ReferenceInformationType 속성으로, 다음과 같은 값을 가질 수 있습니다.
    ▪ 직접: 법선 벡터가 정렬되어 있음을 나타냅니다.
    ▪ IndexToDirect(또는 이전 FBX 형식 버전에서는 index): 법선 벡터의 순서가 NormalsIndex 속성에 의해 지정됨을 나타냅니다.
    아래는 텍스트보다 더 명확한 그림 예시입니다. 예시 모델은 X축과 Y축에 놓인 평면(따라서 모든 꼭짓점의 Z 좌표는 0)으로, 9개의 꼭짓점과 4개의 다각형(사각형)으로 구성됩니다. 예시 이미지는 평면을 위에서 본 모습입니다.
    FBX 모델 파일 구조 설명 (2)

    6. FBX UV 좌표

    UV 좌표는 자식 노드인 LayerElementUV(Model의 자식 노드)의 UV 속성에서 찾을 수 있습니다. 구문은 정점 및 법선과 유사하지만, 좌표는 세 개가 아닌 두 개입니다.
    UV: u1, v1, u2, v2, [...]
    MappingInformationType 및 ReferenceInformationType 속성에 여전히 주의를 기울여야 합니다! 이 두 속성은 법선 벡터와 동일한 값을 가질 수 있으므로 동일한 규칙이 적용됩니다. 인덱스 속성(IndexToDirect가 정의된 경우)은 UVIndex입니다.