3단계 · glTF Transform + 3d-tiles-tools 레시피
웹 형태 변환
브라우저가 바로 읽는 포맷으로 변환. 뷰어별 처리 방식.
방식·도구 고르기
3D 모델 · 데이터 상태별 (크기 기준은 어림)
| 데이터 상태 | 방식 | 고르는 이유 · 형태 |
|---|---|---|
| 단일 모델 수 MB (glb·gltf) | 파일 | glb 통째 + 위치·방향 지정. 가장 단순. |
| 여러 동 · 고해상 텍스처 (수십 MB 이상) | 파일 | 3D Tiles: 타일 분할·LOD. 보이는 것만. |
| 같은 모델 반복 배치 (가로수·가로등) | 파일 | i3dm(1.0)·EXT_mesh_gpu_instancing(1.1): 모델 한 벌 + 위치 목록. |
| CityGML 속성 조회·갱신 | 파일 | 3DCityDB(PostGIS)에 적재 → pg2b3dm으로 3D Tiles 굽기. 원본은 DB, 결과는 파일 → 갱신 시 다시 굽기. |
| 고화질 · 시뮬레이션 · VR | 엔진 | Cesium for Unreal: 같은 3D Tiles. 재질·조명·그림자. |
카드 안 도구 선택 → 아래 단계·결과 전환. ?: 고르는 기준·장단점.
파일 방식
맞는 경우
- 갱신 드문 데이터 (연 1회 공개 등)
- 서버 운영 없는 배포: 정적 호스팅·CDN
- 미리 구운 타일 → 요청마다 연산 없음, 동시 접속에 강함
한계
- 원본이 바뀌면 다시 굽기
- 속성 조건 조회 불가 → 받은 범위 안 클라이언트 필터만
- 타일 수만~수백만 개 → 올리기·저장 부담 (PMTiles 한 파일로 완화)
결과를 파일로 구워 정적 호스팅. 브라우저가 파일을 직접 읽음.
도구
glTF Transform + 3d-tiles-tools · 장점
- 재질·텍스처 원형 유지
- meshopt·WebP 압축 → 용량 대폭 축소
- glb(Deck.gl) + 위치 내장 타일셋(Cesium) 함께
단점
- 타일 분할·LOD 없음 → 큰 모델은 통째 로드
- 여러 모델 배치는 직접 구성
mago 3DTiler · 장점
- CityGML·IFC·glTF 등 입력 → 3D Tiles 한 도구로
- 단순화 단계(LOD)·타일 분할 자동
- 국내 개발(Gaia3D) 오픈소스
단점
- Java 실행 → 큰 입력은 메모리 설정 필요
- 한 번에 변환 → 중간 결과 확인·수정 어려움
- 좌표계·축 옵션 직접 지정 (-c, -rx 등)
엔진 (Cesium for Unreal)
맞는 경우
- 화질: 조명·그림자·재질·후처리
- 시뮬레이션·VR·다른 3D 에셋과 합성
- 브라우저 메모리 한계를 넘는 장면 (데스크톱 GPU)
한계
- 브라우저 밖: 설치형 앱 빌드 또는 Pixel Streaming
- GPU 필요, 화면 확인 수동
- 3D Tiles·지형만. 2D 벡터·영상은 지형 위 덧씌움(WMS·WMTS·XYZ)
같은 결과 파일(3D Tiles·quantized-mesh)을 언리얼에서 읽음. 엔진 전용 변환 없음.
엔진이 읽는 결과를 만드는 도구
glTF Transform + 3d-tiles-tools · 장점
- 재질·텍스처 원형 유지
- meshopt·WebP 압축 → 용량 대폭 축소
- glb(Deck.gl) + 위치 내장 타일셋(Cesium) 함께
단점
- 타일 분할·LOD 없음 → 큰 모델은 통째 로드
- 여러 모델 배치는 직접 구성
mago 3DTiler · 장점
- CityGML·IFC·glTF 등 입력 → 3D Tiles 한 도구로
- 단순화 단계(LOD)·타일 분할 자동
- 국내 개발(Gaia3D) 오픈소스
단점
- Java 실행 → 큰 입력은 메모리 설정 필요
- 한 번에 변환 → 중간 결과 확인·수정 어려움
- 좌표계·축 옵션 직접 지정 (-c, -rx 등)
glTF Transform + 3d-tiles-tools 요약 파일 방식
- 걸린 시간
- -
- 결과 용량
- -
- 파일 수
- -
- 그릴 수 있는 뷰어
- 2 / 4
변환 단계
1서울광장 배치 3D Tiles 생성3d-tiles-tools TypeScript, Apache-2.0, v0.5.4Cesium의 3D Tiles 손질 도구. glb 타일셋 감싸기, 버전 올리기.자세히 보기
cp /work/lantern.glb /out/model/lantern.glb && 3d-tiles-tools createTilesetJson -i /out/model/lantern.glb -o /out/model/tileset.json --cartographicPositionDegrees 126.9779 37.5663 0 -f--cartographicPositionDegrees: 경위도·높이 → tileset.json 변환 행렬. glTF 웹용 3D 모델 표준. .gltf: JSON + 외부 파일, .glb: 파일 하나로 묶은 이진 형태. 자세히 Y-위 축: 3D Tiles 3D 데이터를 공간별 나무 구조로 묶은 OGC 표준. 멀리서는 단순하게, 가까이서는 자세하게. 자세히 규칙대로 뷰어가 자동 회전.
결과물
GLB + 놓을 위치glTF (GLB)
meshopt·WebP 압축 glb + 위치(경위도) 별도 지정. Deck.gl용.
3D Tiles (glb 감싸기)3D Tiles
위치 내장 tileset.json → 파일만 지정. Cesium용.
뷰어별 처리 · glTF Transform + 3d-tiles-tools
OpenLayers 2D미지원
2D 지도 — 3D 모델 미지원.
MapLibre 2.5D미지원
glTF·3D Tiles 기본 레이어 없음 → three.js 등 별도 라이브러리 필요.
MapLibre + Deck.gl 3D미검증
- 결과물
- GLB + 놓을 위치 (model/lantern.glb)
- 처리
ScenegraphLayer- 메모
- ScenegraphLayer로 지정 위치에 배치.
CesiumJS 3D미검증
- 결과물
- 3D Tiles (glb 감싸기) (model/tileset.json)
- 처리
Cesium3DTileset
직접 처리: 원본과 같은 형식을 그대로 읽음. 변환 후 처리: 바꾼 결과물을 읽음. 일부 기능만: 그리지만 빠지는 기능 있음(카드의 주의). 미검증: 성공한 실행 기록 없음.