3D Tiles 1.0 vs 1.1

2022년 12월에 채택된 3D Tiles 1.1이 1.0과 어떻게 다른가. 핵심은 “b3dm/i3dm/pnts 같은 자체 바이너리 포맷 → glTF + 확장(Extension)” 으로의 전환이다.


핵심 요약

구분내용
📖 정의OGC 3D Tiles 1.1 (22-025r4, 2022-12-17 채택) — 1.0의 후속
💡 핵심glTF 2.0을 콘텐츠로 직접 사용 + EXT_* 메타데이터 확장 + Implicit Tiling/Multiple Contents 코어 편입
🎯 대상1.0 콘텐츠를 운영 중이거나, 새 파이프라인을 1.1로 설계 중인 팀
⚠️ 주의유효한 1.0 tileset은 1.1 파서에서도 유효(하위 호환). 단, 1.1 신기능을 쓰려면 asset.version"1.1"로 명시

문서 탐색


목차

  1. 전체 변경점 요약
  2. glTF 직접 콘텐츠 사용
  3. glTF 메타데이터 확장 3종
  4. Implicit Tiling 코어 편입
  5. 메타데이터 계층 구조
  6. Multiple Contents
  7. 1.0 → 1.1 마이그레이션 주의점
  8. 렌더러 지원 현황

전체 변경점 요약

항목1.01.1
기본 콘텐츠 포맷b3dm, i3dm, pnts, cmptglTF 2.0(.glb) 직접
레거시 포맷 상태표준 포맷Deprecated (하위 호환 유지)
메타데이터Batch Table (포맷별 내장)3D Metadata Spec (타일셋/타일/콘텐츠/피처 전 계층)
Implicit Tiling3DTILES_implicit_tiling 확장코어 표준 (확장 불필요)
Multiple Contents3DTILES_multiple_contents 확장코어 표준
glTF 메타데이터 확장없음EXT_mesh_features, EXT_structural_metadata, EXT_instance_features
메타데이터 스키마없음schema 객체 (클래스·속성 타입 정의)
그룹없음groups (콘텐츠 레이어 그룹핑)
타일셋 메타데이터없음metadata 최상위 필드
하위 호환성유효한 1.0 tileset은 1.1에서도 유효

glTF 직접 콘텐츠 사용

1.0의 문제

1.0에서는 glTF를 항상 b3dm 같은 자체 래퍼 안에 포함해야 했다.

1.0 콘텐츠 흐름:
  tileset.json → building.b3dm → [헤더 + Batch Table] → 내장 GLB

이 구조는 다음 문제를 만들었다:

  • Blender, three.js 기본 GLTFLoader 등 표준 glTF 툴체인이 b3dm을 직접 다룰 수 없음
  • 같은 데이터를 일반 glTF로도 쓰고 3D Tiles로도 쓰려면 두 번 변환해야 함
  • Khronos glTF 생태계의 발전(Draco, KTX2, meshopt 등)을 늦게 흡수함

1.1의 해결

content.uri가 직접 .glb를 가리킬 수 있다.

// tileset.json (1.1)
{
  "asset": { "version": "1.1" },
  "root": {
    "content": { "uri": "building.glb" }  // glTF 직접 참조
  }
}
1.1 콘텐츠 흐름:
  tileset.json → building.glb  (직접)

레거시 포맷 → 1.1 대체 매핑

1.0 포맷1.1 대체 방법
b3dm (배치 모델).glb + EXT_mesh_features + EXT_structural_metadata
i3dm (인스턴스).glb + EXT_mesh_gpu_instancing + EXT_instance_features
pnts (포인트 클라우드).glb (POINTS 프리미티브) + EXT_mesh_features
cmpt (컴포지트)Multiple Contents (1.1 표준)

glTF 메타데이터 확장 3종

1.0의 Batch Table을 대체하는 3개의 glTF 확장이 핵심이다.

EXT_mesh_features

지오메트리 요소(버텍스·텍셀)에 **식별자(Feature ID)**를 부여한다. Feature ID는 정수 배열이며, 이후 EXT_structural_metadata의 Property Table 인덱스로 사용된다.

// glTF 메시 프리미티브 예시
"extensions": {
  "EXT_mesh_features": {
    "featureIds": [
      {
        "featureCount": 100,
        "attribute": 0,       // FEATURE_ID_0 버텍스 속성 참조
        "propertyTable": 0    // EXT_structural_metadata의 테이블 인덱스
      }
    ]
  }
}

EXT_structural_metadata

Property Table(컬럼 기반 이진 배열)로 구조화 메타데이터를 저장한다. 스키마로 클래스·속성 타입을 먼저 정의하고, Property Table이 인스턴스별 값을 저장한다.

"extensions": {
  "EXT_structural_metadata": {
    "schema": {
      "classes": {
        "Building": {
          "properties": {
            "name":   { "type": "STRING" },
            "height": { "type": "SCALAR", "componentType": "FLOAT32" },
            "floors": { "type": "SCALAR", "componentType": "UINT8" }
          }
        }
      }
    },
    "propertyTables": [{
      "class": "Building",
      "count": 100,
      "properties": {
        "height": { "values": 0 }  // bufferView 인덱스
      }
    }]
  }
}

Batch Table 대비 장점:

항목Batch Table (1.0)EXT_structural_metadata (1.1)
타입 시스템느슨 (FLOAT, BYTE 등 단순 매핑)엄격 (UINT8, FLOAT64, ENUM, ARRAY, STRING)
스키마없음명시적 클래스·속성 정의
계층콘텐츠 내부 1단계타일셋/타일/콘텐츠/피처 4계층
컬럼 저장가능가능 + bufferView 직접 참조

EXT_instance_features

EXT_mesh_gpu_instancing과 함께 사용. GPU 인스턴스마다 Feature ID를 부여해 인스턴스별 메타데이터 조회를 가능하게 한다.

인스턴스 기반 가로등 100개
  → EXT_mesh_gpu_instancing: 위치/회전/스케일 배열
  → EXT_instance_features:   Feature ID 배열 (0~99)
  → EXT_structural_metadata: Feature ID → {type, installDate, ...}

Implicit Tiling 코어 편입

1.0에서는 3DTILES_implicit_tiling 확장으로만 사용 가능했다. 1.1에서는 코어 사양에 편입돼 확장 선언 없이 사용한다.

"implicitTiling": {
  "subdivisionScheme": "QUADTREE",
  "subtreeLevels": 4,
  "availableLevels": 20,
  "subtrees": {
    "uri": "subtrees/{level}/{x}/{y}.subtree"
  }
}

subtree 파일은 3개의 availability bitstream을 가진다:

  • tileAvailability — 해당 좌표 타일 존재 여부
  • contentAvailability — 콘텐츠 파일 존재 여부
  • childSubtreeAvailability — 하위 subtree 파일 존재 여부

Implicit Tiling 자체의 개념은 1.1 문서의 Implicit Tiling 절 참고.


메타데이터 계층 구조

1.1은 4계층의 통합 메타데이터 모델을 제공한다.

Tileset 수준: tileset.json의 "metadata" 필드
  └─ Tile 수준: 각 tile의 "metadata" 필드
       └─ Content 수준: content의 "metadata" 필드
            └─ Feature 수준: glTF 내 EXT_mesh_features + EXT_structural_metadata

모든 계층이 동일한 3D Metadata Specification의 클래스-속성 타입 시스템을 공유한다.

계층예시 정보
Tileset데이터셋 이름, 저작권, 생성일, 좌표계
Tile이 타일이 속한 도시 구역명, 통계
Content이 콘텐츠가 표현하는 레이어(건물 외벽, 지붕 등)
Feature건물 1동의 이름·층수·용도

Multiple Contents

1.0의 3DTILES_multiple_contents 확장이 1.1 코어로 편입됐다. 한 타일에 여러 콘텐츠를 동시에 묶을 수 있다.

// 1.1 타일 — contents 배열
{
  "boundingVolume": { "box": [...] },
  "geometricError": 10,
  "contents": [
    { "uri": "building.glb",    "group": 0 },
    { "uri": "annotation.glb",  "group": 1 }
  ]
}

groups 배열로 콘텐츠를 레이어처럼 그룹핑하고, 렌더러가 선택적으로 켜고 끌 수 있다.

활용 시나리오예시
분리 가능한 데이터 결합건물 외피(glb) + 실내 가구(glb)
시각화 토글외벽 / 구조 / 설비를 다른 group에 배치
점진적 다운로드핵심 콘텐츠 먼저, 부가 콘텐츠 나중에

1.0 → 1.1 마이그레이션 주의점

주의 1 — b3dm/i3dm의 RTC_CENTER 처리

b3dm Feature Table의 RTC_CENTER(상대 좌표 중심)는 glTF에서 직접 지원하지 않는다. 마이그레이션 시 이 오프셋을 glTF node.translation에 반영해야 한다.

주의 2 — Batch Table → EXT_structural_metadata 타입 매핑

Batch Table은 타입 정보가 느슨하다 (FLOAT, BYTE 등). EXT_structural_metadata는 명시적 스키마가 필요하다.

  • 3d-tiles-tools upgrade --targetVersion 1.1 명령이 자동 변환을 시도한다.
  • 단, 배열 속성·중첩 오브젝트 같은 복잡한 타입은 수동 검토가 필요하다.

주의 3 — i3dm의 EAST_NORTH_UP 플래그

i3dm의 EAST_NORTH_UP Feature Table 플래그는 각 인스턴스의 방향을 WGS84 지표면 법선에 자동 정렬한다. 1.1 변환 시 EXT_mesh_gpu_instancingrotation 쿼터니언 배열로 명시적으로 변환해야 한다.

주의 4 — 하위 호환성

유효한 1.0 tileset은 1.1 파서에서도 유효하다.

  • asset.version: "1.0"인 파일을 1.1 뷰어가 로드하는 것은 문제 없다.
  • 단, 1.1 신기능(Implicit Tiling, 4계층 metadata, Multiple Contents)을 쓰려면 asset.version: "1.1" 명시 + 콘텐츠 변환이 필요하다.

권장 마이그레이션 순서

1. 현재 1.0 tileset의 콘텐츠 통계 수집
   (b3dm/i3dm/pnts 개수, Batch Table 속성 종류, 총 용량)

2. EXT_structural_metadata 스키마 작성
   - 속성마다 명시적 타입 결정 (UINT8 / FLOAT32 / STRING / ENUM)
   - 배열 속성·NULL 처리 정책 결정

3. 3d-tiles-tools 등으로 일괄 변환 (b3dm → glb)
   - RTC_CENTER 보정 확인
   - EAST_NORTH_UP 쿼터니언 변환 확인

4. 1.1 콘텐츠 검증
   - validator로 schema 일치 확인
   - 메타데이터가 누락되지 않았는지 sample 검사

5. 렌더러 호환성 테스트
   - CesiumJS / 3DTilesRendererJS 양쪽에서 확인
   - Property Table 조회가 정상 동작하는지 확인

렌더러 지원 현황 (2024–2025 기준)

렌더러3D Tiles 1.1 지원비고
CesiumJS부분 지원 (진행 중)EXT_mesh_features 분리 이후 업데이트 작업 (Issue #10089)
Cesium ion 클라우드 파이프라인glTF 타일링 지원b3dm/i3dm → glTF 변환 파이프라인 제공
NASA-AMMOS 3DTilesRendererJS완전 지원 (2024-04)EXT_structural_metadata, EXT_mesh_features, implicit tiling 플러그인 지원. v0.4.11(2025-07)
NYT three-loader-3dtilesb3dm/pnts 중심, 1.1 미완업데이트 활동 저조
x3dom1.1 지원 준비 중GitHub Wiki에 로드맵 기술
Unreal Engine (Cesium for Unreal)1.0 중심, 1.1 요청 존재Epic 포럼에 지원 요청 다수 (2024)

CesiumGS 공식 블로그(2024-09-11)에 따르면, NASA-AMMOS/3DTilesRendererJS가 Cesium Ecosystem Grant(2024-04)로 1.1 메타데이터 확장과 데이터 오버레이 지원을 완성했다.


문서 탐색


참고 자료