업데이트됨 2026년 9월 13일
3D 변환으로 보존되는 것과 비용
메시를 변환하는 것은 무료가 아니며 손실 없는 작업도 아닙니다. GLB와 glTF는 모든 것을 보존합니다. OBJ는 개별 객체와 그 재질 이름을 보존하지만, 버텍스 색상은 버립니다. STL는 삼각형만 보존합니다. PLY는 버텍스 색상을 보존하지만, 씬을 하나의 메시로 평탄화합니다. USDZ는 두 객체와 UV를 보존했지만, 다시 읽었을 때 버텍스 색상과 재질 이름을 잃었고, USDA의 zip을 씁니다. 아래 수치는 추정이 아니라 측정된 것입니다.
이 페이지의 각 수치는 이 사이트가 사용하는 동일한 변환기를 실제 파일로 실행하고, 그가 쓴 바이트에서 직접 속성을 읽어서 나온 것입니다. 측정한 결과 2026년 9월 13일 with three.js r179. 방법은 페이지 맨 끝에 있으며 스크립트는 레포지토리에 있습니다.

각 포맷은 무엇을 보존하나요?#
서로 다른 이름을 가진 두 개의 큐브가 있는 참조 장면은 각 큐브마다 이름이 있는 금속 재질, 버텍스별 색상, UV 좌표, 노멀을 가지고 있으며, 여섯 개의 목적지로 변환되었습니다. GLB와 glTF는 완전히 복원되었습니다. 나머지 모든 포맷은 일부가 손실되었고, 각각 손실되는 부분이 다릅니다.
| 목적지 | 두 객체 | UV 좌표 | 버텍스별 색상 | 재질 이름 | 버텍스 수 |
|---|---|---|---|---|---|
| GLB | 보존됨 2 | 보존됨 | 보존됨 | 보존됨 | 48 버텍스 |
| glTF | 보존됨 2 | 보존됨 | 보존됨 | 보존됨 | 48 버텍스 |
| OBJ | 보존됨 2 | 보존됨 | 손실됨 | 보존됨 | 72 버텍스 |
| STL | 하나로 병합됨 | 손실됨 | 손실됨 | 손실됨 | 72 버텍스 |
| PLY | 하나로 병합됨 | 보존됨 | 보존됨 | 손실됨 | 48 버텍스 |
| USDZ | 보존됨 2 | 보존됨 | 손실됨 | 손실됨 | 72 버텍스 |
왜 STL와 PLY는 장면을 하나의 메시로 합치나요?#
두 포맷 모두 장면 그래프를 가지고 있지 않습니다. GLB, glTF, OBJ는 동일한 파일에서 여러 이름 있는 객체를 설명할 수 있으며; STL는 단일 솔리드만, PLY는 단일 요소 리스트만 설명합니다. 그래서 두 큐브는 하나의 메시로 들어오고, 다시 분리할 방법이 없습니다.
가장 놀라운 손실은 보이지 않는 손실입니다. 변환된 모델은 뷰어에서 똑같이 보입니다. 선택하거나, 재질을 바꾸거나, 일부를 애니메이션하려고 할 때 비로소 그 부분들이 존재하지 않는다는 것을 알게 됩니다.
모델이 계속 분리 가능해야 한다면, 대상은 GLB, glTF 또는 OBJ여야 합니다. 라미네이터나 단일 재질 출력으로 간다면, 병합에는 비용이 들지 않습니다.
파일 크기는 얼마나 커지나요?#
대부분이 예상하는 것보다 더 많이 커집니다. 실제로 생성된 메쉬에서, OBJ는 원래 OBJ의 5.6 때로는 원래 GLB인 것과 PLY 1.4 배를 차지했습니다. 두 파일 모두 동일한 지오메트리를 가지고 있습니다.
| 변환 | 출처 | 결과 | 비율 | 작성된 꼭짓점 |
|---|---|---|---|---|
| mug.glb a GLB | 880 KB | 1,173 KB | 1.3x | 25,000 |
| mug.glb a glTF | 880 KB | 1,564 KB | 1.8x | 25,000 |
| mug.glb a OBJ | 880 KB | 4,928 KB | 5.6x | 150,000 |
| mug.glb a STL | 880 KB | 2,441 KB | 2.8x | 150,000 |
| mug.glb a PLY | 880 KB | 1,221 KB | 1.4x | 25,000 |
| mug.glb a USDZ | 880 KB | 2,927 KB | 3.3x | 150,000 |
| lion.glb a GLB | 8,768 KB | 11,690 KB | 1.3x | 249,369 |
| lion.glb a glTF | 8,768 KB | 15,587 KB | 1.8x | 249,369 |
| lion.glb a OBJ | 8,768 KB | 51,880 KB | 5.9x | 1,496,202 |
| lion.glb a STL | 8,768 KB | 24,352 KB | 2.8x | 1,496,202 |
| lion.glb a PLY | 8,768 KB | 12,176 KB | 1.4x | 249,369 |
| lion.glb a USDZ | 8,768 KB | 30,487 KB | 3.5x | 1,496,202 |
왜 OBJ와 STL가 꼭짓점 수를 곱하나요?#
왜냐하면 어느 쪽도 삼각형 사이에 꼭짓점을 공유하지 않기 때문입니다. 잘 인덱싱된 메시는 각 모서리를 한 번씩만 저장하고, 그것을 접하는 모든 삼각형에서 참조합니다; OBJ와 STL는 여기에서 쓰인 그대로 각 삼각형의 세 모서리를 별도로 저장합니다. 테스트에서 lion.glb, 그것은 변환했습니다 249,369 꼭짓점에서 1,496,202, 몇 6 번 더.
기하학은 변하지 않는다. 같은 표면, 같은 삼각형, 같은 실루엣; 회계만 더 비싸지고, 파일은 대략 같은 비율로 증가한다.
PLY는 유용한 반례입니다. 인덱스를 유지하므로 동일한 메시는 원본과 거의 동일한 크기로 작성되며 여전히 정점별 색상을 포함합니다. 기하학만 보존하면 되는 큰 메시에 대해서는 PLY가 이 목록에서 가장 저렴한 정직한 대상입니다.
바이너리보다 텍스트가 더 악화시킵니다. glTF는 버퍼가 base64로 인코딩된 JSON이며, 이는 동일한 glTF보다 약 33 동일한 GLB보다 백분율이 더 높습니다, 왜냐하면 base64는 세 바이트마다 네 바이트로 변환하기 때문입니다.
왜 GLB에서 GLB로 변환해도 파일이 커졌을까요?#
왜냐하면 변환기는 정점의 법선을 가지고 있지 않은 모든 메시의 정점 법선을 계산한 뒤에 이를 기록하기 때문입니다. 생성된 메시에는 종종 법선 속성이 없기 때문에, 왕복 과정에서 각 정점마다 완전한 벡터가 하나 더 추가됩니다.
다음으로 테스트해보면 mug.glb 명확한 예입니다: 입력될 때 880 KB 그리고 출력될 때 1,173 KB지오메트리에 아무런 변화가 없습니다. 추가된 법선이 차이점입니다.
이는 의도적인 결정이지 결함이 아닙니다. 법선이 없는 메시는 대부분의 뷰어에서 평면 음영과 각진 형태로 보이므로, 변환기는 각 후속 도구가 추측하도록 내버려두는 대신 처음 로딩 시 한 번 계산합니다.
변환으로 형태가 바뀌나요?#
아니요. 각 목적지는 변환된 후 다시 읽혔고, 표면은 동일하게 나왔습니다: 동일한 삼각형 수와 전체 표면적, 측정 한계까지, 하나의 메쉬에서 498,734 삼각형. 기하학은 변환 후에도 3D 파일에서 그대로 남아 있는 부분입니다.
| 목적지 | 삼각형 이후 | 표면적 오류 | 좌표가 저장되는 방법 |
|---|---|---|---|
| GLB | 변경 없음 | 0% | float32 이진 |
| glTF | 변경 없음 | 0% | Base64 버퍼 |
| OBJ | 변경 없음 | 0% | 텍스트 함께 17 소수점 |
| STL | 변경 없음 | 0% | float32 이진 |
| PLY | 변경 없음 | 0% | float32 이진 |
| USDZ | 변경 없음 | 0% | USDA 압축 파일 |
그럼 3D 변환에는 손실이 있는 건가요, 없는 건가요?#
둘 다입니다, 그리고 그 차이가 유용합니다. 기하학은 아무것도 잃지 않습니다: 들어온 형태가 나가는 형태입니다. 기하학을 둘러싼 모든 것은 손실되며, 어떤 부분을 잃는지는 전적으로 선택한 목적지에 달려 있습니다.
여기에서는 좌표가 절단되지 않습니다. GLB, STL 및 PLY는 32비트 이진 부동 소수를 씁니다. glTF는 동일한 이진 버퍼를 base64로 JSON 안에 삽입합니다. USDZ는 USDA의 zip 파일을 씁니다. OBJ는 유일하게 위치를 소수점 텍스트로 쓰며, 반올림하지 않고 정확하게 씁니다. 이것이 그의 파일들이 훨씬 큰 이유 중 하나입니다.
즉, JPEG를 다시 저장하는 것과 같이 각 변환이 모델을 조금씩 손상시킨다는 일반적인 걱정은 적용되지 않습니다. GLB에서 OBJ로 변환하고 다시 되돌려도 메시는 부드러워지지 않습니다.
실제로 하는 것은 이 페이지 위쪽에 나타나는 것을 버리는 것입니다: STL와 PLY의 장면 그래프, OBJ, STL, USDZ의 정점 색상, STL, PLY, USDZ의 재질 이름, 그리고 STL의 UV입니다. 이러한 손실은 영구적이며, 다시 변환해도 다시 만들어낼 수 없습니다.
어떤 목적지를 선택해야 할까요?#
목적지는 살아남아야 하는 것을 기준으로 선택하세요, 수신 도구가 목록에서 먼저 표시하는 확장자를 기준으로 하지 마세요. 위에서 측정한 바를 기반으로 방어할 수 있는 선택은 다음과 같습니다.
| 필요하다면 | 선택 | 이유 |
|---|---|---|
| 모든 것을 한 파일에 보존 | GLB | 유일하게 장면 그래프, 재질 이름, UV, 버텍스별 색상을 함께 보존하면서 전체 포맷 중 가장 작은 크기를 가진 대상. |
| 모두 보존되어 있어 사람이 읽을 수 있음 | glTF | GLB와 동일한 내용, 약 33 버퍼가 JSON 내에서 base64로 저장되기 때문에 약간 더 큼 |
| 데스크톱 프로그램에서 이름이 지정된 개별 객체 | OBJ | 두 개의 객체와 두 개의 재질 이름을 보존함. 버텍스별 색상은 버리고 여섯 개 중 가장 큰 파일을 작성함 |
| 3D 프린팅 | STL | 삼각형만 있고, 이것이 슬라이서가 읽는 전부. 실제 메시에 대해 glTF가 아닌 대상 중 가장 작은 것 |
| 기하학과 버텍스별 색상, 용량이 적음 | PLY | glTF가 아닌 유일한 포맷으로, 버텍스별 색상을 유지하고 인덱스를 보존하여 원래 크기와 거의 비슷하게 유지합니다. |
| 애플 Quick Look / iPhone AR | USDZ | 참조 씬에서 두 개의 오브젝트와 UV를 보존했습니다. 다시 읽을 때 버텍스별 색상과 재질 이름을 잃었습니다. 전화기가 열 수 있는 USDA 압축 파일입니다. |
이 포맷들을 정의하는 것은#
위의 측정값은 저희의 것입니다; 각 포맷이 무엇을 담을 수 있는지는 저희가 결정하지 않습니다. 이것들은 스펙과 포맷 레퍼런스가 결정하며, 따라서 이 페이지의 내용을 그대로 믿는 대신 출처에서 확인할 수 있습니다.
- glTF 2.0 규격크로노스 그룹
GLB와 glTF가 가진 씬 그래프, 소재 및 액세서리를 정의하고, 왜 이곳에서 손상되지 않고 살아남은 유일한 목적지였는지 설명하십시오.
- 미디어 타입 model/gltf-binaryIANA
위에서 측정된 이진 컨테이너 GLB에 등록된 타입.
- 미디어 타입 model/stlIANA
등록된 STL: 면의 삼각형과 법선만 있으며, 색상, UV, 소재 또는 객체 이름을 위한 필드는 없음.
- Wavefront OBJ 파일 형식Paul Bourke
항상 참조되는 OBJ에 대한 참조로, 정점별 색상 필드가 없으며, 이는 변환 과정에서 제거된 내용과 일치함.
- PLY 폴리곤 파일 형식Paul Bourke
정점 속성, 색상을 포함하여 PLY를 유일하게 glTF가 보관하지 않는 대상으로 만드는 성질을 문서화합니다.
- USDZ 파일 형식 명세픽사 / OpenUSD
USDZ는 첫 번째 항목이 USDA 장면인 zip 파일입니다. 이것이 이 변환기가 읽고 쓰는 패키지입니다.
측정 방법#
측정은 제품을 실행함으로써 이루어지며, 이를 설명하는 것이 아닙니다. 스크립트는 브라우저용 변환기와 동일한 로더와 익스포터를 동일한 옵션으로 가져오며, 수치를 재현하거나 논의할 수 있도록 리포지토리에 있습니다.
- 이름이 있는 두 개의 큐브로 참조 장면을 구축하며, 각 큐브에는 이름이 있는 금속 재질, 정점별 색상, UV 좌표 및 법선이 있습니다.
- 실제로 생성된 메시를 변환기가 제공한 파일을 로드하는 것과 동일한 방식으로 로드합니다. 메시가 정상 벡터가 없는 상태로 도착하면 정점을 계산하는 단계도 포함됩니다.
- 동일한 변환기가 호출하는 동일한 이진 설정과 함께 GLB, glTF, OBJ, STL, PLY 및 USDZ로 내보냅니다.
- 각 결과의 바이트 크기를 기록합니다.
- 속성을 다시 로드된 씬에서가 아니라 작성된 바이트에서 직접 읽습니다. 로더는 파일에 없는 내용을 만들어내기 때문입니다: vn 라인이 없는 OBJ도 합성된 법선 속성이 있는 상태로 다시 로드됩니다.
- 표를 해당 결과에서 직접 게시합니다. 측정됨 2026년 9월 13일 with three.js r179.
질문
- 3D 파일을 변환하면 품질이 손실되나요?
- 형태는 아니다. 각 대상은 변환되고 다시 읽혔으며, 삼각형 수와 전체 표면적은 498,734 좌표를 어떤 형식으로도 자르지 않고, 삼각형이 있는 메쉬에서 동일하게 나왔다. 손실되는 것은 기하학을 둘러싼 모든 것이며, 대상에 따라 다르다: STL는 UV, 색상, 재질 및 장면 그래프를 버린다; OBJ는 정점별 색상을 버린다; PLY는 재질 이름을 버리고 장면을 병합한다; USDZ는 다시 읽을 때 정점별 색상과 재질 이름을 버린다; GLB와 glTF는 모든 것을 보존했다.
- 어떤 3D 형식이 가장 적은 공간을 차지할까?
- GLB, 실제 메시에서. 이 테스트에서 GLB는 작성했습니다 1,173 KB OBJ가 작성한 곳에 4,928 KB 같은 모델의 경우, GLB는 바이너리이고 공유된 정점 인덱스를 유지하는 반면, 생성된 OBJ는 텍스트이며 각 삼각형의 각 코너를 별도로 저장하기 때문입니다.
- 왜 제 OBJ가 원본 GLB보다 훨씬 더 많은 용량을 차지하나요?
- 두 가지 이유 때문입니다, 두 가지 측정 기준으로 보면: OBJ는 텍스트이고 바이너리가 아니며, 여기서 작성된 OBJ는 삼각형 간 정점을 공유하지 않으므로 정점 수가 몇 배로 늘어납니다. 6 잘 인덱싱된 메쉬에서는 표면은 동일하지만, 계산 방식은 그렇지 않습니다.
- STL는 색상을 보존하나요?
- 아니요. 바이너리 STL는 한 삼각형당 면의 노멀과 세 개의 코너만 저장하며, 색상, UV, 재질이나 오브젝트 이름을 저장할 필드가 없습니다. 이것은 이번 테스트에서 작성된 모든 STL에 적용되었습니다.
- GLB를 사용하지 않고 버텍스별 색상을 유지할 수 있나요?
- 네, PLY를 사용하면 가능합니다. 이 테스트에서는 헤더에 색상 속성을 선언한 glTF가 아닌 유일한 대상이었습니다. 단, 여러 개의 오브젝트로 이루어진 장면을 하나의 메쉬로 평면화하므로 색상은 유지되지만 일부 부분은 잃게 됩니다.
- 3D 모델을 계속해서 변환하면 손상되나요?
- 아니요. JPEG를 다시 저장하는 것과 달리, 3D 변환은 오류를 누적하지 않습니다. 좌표는 이진 float로 복사되거나, OBJ의 경우에는 완전한 정밀도의 소수로 기록됩니다. 이러한 포맷을 왕복으로 처리해도 표면은 동일하게 나타납니다. 다시 돌아오지 않는 것은 애초에 대상이 가져갈 수 없었던 재질 및 장면 정보입니다.
- 이 수치를 재현할 수 있나요?
- 네. 측정 스크립트는 저장소에 있으며, scripts/measure-conversions.mjs에 있고, 이 페이지가 읽는 JSON을 작성합니다. 마지막으로 실행된 것은 2026년 9월 13일 with three.js r179.