# 07 — GLB 모델 소스 · 라이선스 · 실측 무게 > 조사일 2026-08-20. **`실측` 표기는 이 문서를 쓰면서 직접 다운로드/압축해 잰 값**이다. 나머지는 문서 기재값. > 압축 실험은 `@gltf-transform/cli@4.4.2`로 수행했다. --- ## 0. 먼저 알아야 할 것 — 텍스처가 예산이다 `DamagedHelmet.glb`(Khronos 표준 샘플)를 분해한 **실측**이다. | 구성 | 크기 | 비중 | |---|---|---| | 지오메트리 (14,556 vtx / 15,452 tri) | **558.5 KB** (GPU) | 13% | | baseColor 2048² JPEG | 935.6 KB | | | metallicRoughness 2048² JPEG | 1,300 KB | | | normal 2048² JPEG | 517.8 KB | | | occlusion 2048² JPEG | 361.7 KB | | | emissive 2048² JPEG | 97.5 KB | | | **텍스처 합계** | **≈ 3.2 MB** | **87%** | | **VRAM** | 텍스처 5장 × 22.37 MB = **111.9 MB** | | 압축 **실측**: | 처리 | 결과 | 감소 | |---|---|---| | 원본 | 3,685.5 KB | — | | **Draco** | 3,216.3 KB | **−12.7%** | | **meshopt** | 3,320.8 KB | −9.9% | | gzip(원본) | 3,297.0 KB | −10.5% | > **Draco가 13%밖에 못 줄인다.** 지오메트리만 압축하는데 지오메트리가 파일의 13%뿐이기 때문이다. > **"Draco 쓰면 90% 준다"는 말은 지오메트리가 payload일 때만 참이다.** 지오메트리가 payload인 모델의 **실측**: | 모델 | 원본 | Draco | Draco+gzip | 감소 | |---|---|---|---|---| | **Duck.glb** (텍스처 1장, 저폴리) | 117.7 KB | **34.4 KB** | **33.1 KB** | **−71%** | | **Fox.glb** (텍스처 없음, 애니메이션 3종) | 159.0 KB | **89.8 KB** | **68.1 KB** | **−44%** | | Box.glb (최소 큐브) | 1.6 KB | — | — | — | ### 결론 — 300KB 예산에 들어오는 것 | 시나리오 | 실현 가능? | |---|---| | 무텍스처 저폴리 GLB 1~3개 (Draco) | ✅ 35~90KB × 3 = **105~270KB** | | 텍스처 1장(512² WebP ~40KB) + Draco 지오메트리 | ✅ **~120KB** | | 애니메이션 캐릭터 1체 (무텍스처, Fox급) | ✅ **90KB** | | PBR 텍스처 세트(2048²) 모델 1개 | ❌ **3.7MB — 예산의 12배** | | PBR 세트를 512²로 줄이고 WebP | ⚠️ ~400~600KB **추정** — 여전히 초과 | | Sketchfab/Poly Haven 쇼케이스 모델 그대로 | ❌ 대부분 2~24MB | **규칙: 300KB 예산에서는 텍스처를 포기하거나 모델을 포기해야 한다. 둘 다는 안 된다.** --- ## 1. Khronos 표준 샘플 (실측 완료) `https://github.com/KhronosGroup/glTF-Sample-Assets` · GitHub raw 직링크 = **자동화 가능** 라이선스는 **모델마다 다르다**(CC0 / CC-BY 4.0 / Khronos 전용). `Models//README.md`에 명시. 반드시 개별 확인. | 모델 | **실측 크기** | 성격 | |---|---|---| | Box.glb | **1.6 KB** | 최소 | | Duck.glb | **117.7 KB** | 저폴리 + 512 텍스처 1장 | | Fox.glb | **159.0 KB** | 무텍스처 + 애니 3종 | | BrainStem.glb | **3,120 KB** | 리깅 애니메이션 | | DamagedHelmet.glb | **3,685 KB** | PBR 표준 레퍼런스 | | SheenChair.glb | **4,029 KB** | 패브릭(sheen) | | ToyCar.glb | **5,295 KB** | 클리어코트 | | IridescentDishWithOlives.glb | **5,608 KB** | 이리데선스 | | DragonAttenuation.glb | **6,252 KB** | 투과·감쇠 | | ChronographWatch.glb | **7,272 KB** | 정밀 제품 | | Avocado.glb | **7,920 KB** | 소품 + 4K 텍스처 | | WaterBottle.glb | **8,757 KB** | 제품 | | Lantern.glb | **9,340 KB** | 발광 | | BoomBox.glb | **10,365 KB** | 제품 | | AntiqueCamera.glb | **17,129 KB** | 고해상 | | MosquitoInAmber.glb | **23,662 KB** | 투과 극한 | | GlassHurricaneCandleHolder.glb | **2,642 KB** | **유리 — 우리 미학과 가장 근접** | **용도**: 렌더러/머티리얼 검증용이지 프로덕션 에셋이 아니다. 예산 안에 드는 것은 Box·Duck·Fox뿐. --- ## 2. CC0 (상업 이용 자유 · 크레딧 불요) — 안전 등급 A | # | 소스 | URL | 라이선스 | 폴리곤 규모 | 크기대 | 자동화 | |---|---|---|---|---|---|---| | 1 | **Poly Haven** | polyhaven.com/models | **CC0** 전부 | 중~고 (스캔 기반 소품) | gltf 1k/2k/4k 분리 제공. **실측** `potted_plant_02_1k.gltf` 6.5KB(+ 별도 bin/텍스처) | ✅ 공개 API + `dl.polyhaven.org` 직링크 | | 2 | **Quaternius** | quaternius.com | **CC0** 전부 | **저폴리** (수백~수천 tri) | 팩 단위 수 MB, 개별은 수십 KB | ⚠️ 팩 zip 다운로드 | | 3 | **Kenney** | kenney.nl/assets | **CC0** 전부 | **극저폴리** | 개별 수 KB~수십 KB | ⚠️ 팩 zip | | 4 | **KayKit** (Kay Lousberg) | kaylousberg.itch.io | **CC0** (대부분) | 저폴리, 캐릭터 리깅 포함 | 팩 단위 | ⚠️ itch.io zip | | 5 | **ambientCG** | ambientcg.com | **CC0** | 텍스처·HDRI 중심, 모델 소수 | — | ✅ API | | 6 | **Smithsonian 3D** | 3d.si.edu | **CC0** (2,000+) | **고폴리 스캔** | 수 MB~수십 MB | ⚠️ 개별 다운로드. glTF/OBJ 제공 | | 7 | **Threedscans** | threedscans.com | **퍼블릭 도메인** | **초고폴리** 조각 스캔 | 수십 MB (STL/OBJ) | ⚠️ 수동. **GLB 변환 + 데시메이션 필수** | | 8 | **NASA 3D Resources** | nasa3d.arc.nasa.gov | **퍼블릭 도메인** (일부 CC-BY, 개별 확인) | 중~고 | 수 MB | ⚠️ 수동 | | 9 | **Blender Studio / demo files** | studio.blender.org, blender.org/download/demo-files | **CC0 / CC-BY** 혼재 | 고 | 수십 MB (.blend) | ⚠️ 변환 필요 | | 10 | **awesome-cc0** (메타 목록) | github.com/madjin/awesome-cc0 | 링크 모음 | — | — | — | | 11 | **Open Source 3D Assets** | opensource3dassets.com | CC0 중심 GLB 집계 | 저~중 | — | ⚠️ | --- ## 3. 크레딧 필요 또는 제한 있음 — 안전 등급 B/C | # | 소스 | URL | 라이선스 | 주의 | |---|---|---|---|---| | 12 | **Sketchfab (CC0 필터)** | sketchfab.com/3d-models?licenses=cc0 | 필터로 CC0만 | ✅ 자동 glTF 변환 제공. **CC-BY/NC/ND 모델은 Sketchfab 밖으로 못 나가는 경우가 있다** — 필터 없이 쓰지 마라 | | 13 | **Poly Pizza** (Google Poly 후속) | poly.pizza | **대부분 CC-BY** (크레딧 필수) | 로그인 불요, 저폴리 대량. **CC0가 아니다** | | 14 | **Scan the World** (MyMiniFactory) | myminifactory.com/scantheworld | **혼재 — CC-BY-NC 다수** | ⛔ **상업 사이트에 그대로 쓰면 위반.** 개별 확인 필수 | | 15 | **Sketchfab / Smithsonian 컬렉션** | sketchfab.com/Smithsonian | CC0 | ✅ 안전 | | 16 | **Mixamo** | mixamo.com | Adobe 계정 필요, 사용 조건 있음 | 캐릭터 리깅·애니메이션. **재배포 제한** | | 17 | **three.js examples 모델** | threejs.org/examples/models | 개별 상이 | **실측**: Soldier.glb 2,110KB · LittlestTokyo.glb 4,036KB · Flower.glb 4.7KB | --- ## 4. 300KB 안에서 실제로 가능한 파이프라인 ```bash # 1) 지오메트리만 남긴다 — 텍스처를 버리고 정점 색/머티리얼 상수로 간다 npx @gltf-transform/cli prune in.glb s1.glb npx @gltf-transform/cli dedup s1.glb s2.glb npx @gltf-transform/cli weld s2.glb s3.glb # 2) 폴리곤을 깎는다 (error 0.001~0.01 사이에서 육안 확인하며 조정) npx @gltf-transform/cli simplify s3.glb s4.glb --ratio 0.5 --error 0.005 # 3) 지오메트리 압축 — 여기서 비로소 Draco 가 값을 한다 npx @gltf-transform/cli draco s4.glb final.glb # 또는 디코드가 5~10배 빠른 meshopt npx @gltf-transform/cli meshopt s4.glb final.glb # 4) 텍스처를 꼭 써야 한다면 딱 한 장, 512 이하, WebP npx @gltf-transform/cli resize final.glb r.glb --width 512 --height 512 npx @gltf-transform/cli webp r.glb out.glb # 5) 검증 — 텍스처 비중과 VRAM 을 눈으로 본다 npx @gltf-transform/cli inspect out.glb ``` > ⚠️ 이 환경에서 `--texture-compress` / `resize` 는 `sharp` 의 `colourspace: parameter space not set` 오류로 실패했다. > 텍스처 처리는 별도 환경(또는 squoosh-cli)에서 하고 GLB에 되넣는 편이 안전하다. ### 디코더 비용도 예산이다 | 디코더 | 크기 | 비고 | |---|---|---| | DRACO WASM | **~200 KB** | 자체 호스팅 필수. 한 번 받으면 캐시 | | KTX2/basis 트랜스코더 | **~250 KB** | | | meshopt 디코더 | **~25 KB** | **훨씬 작다.** 300KB 예산에서는 meshopt이 유일하게 현실적 | > **300KB 예산에서 Draco를 쓰면 디코더만으로 200KB(67%)가 날아간다.** > 모델 하나를 위해 Draco를 도입하지 마라. **meshopt(25KB) 또는 무압축 + gzip**이 맞다. --- ## 5. 압축 판단표 | 상황 | 선택 | |---|---| | 지오메트리 > 텍스처 (저폴리·무텍스처) | **meshopt** (디코더 25KB). Draco는 디코더가 더 크다 | | 텍스처 > 지오메트리 (PBR) | **텍스처를 먼저 줄여라.** 지오메트리 압축은 무의미 | | 다운로드 크기가 문제 | WebP/AVIF (VRAM은 안 줄어든다) | | **VRAM**이 문제 (모바일) | **KTX2만이 답** (ETC1S ≈ 1/8). 단 이미 JPEG인 텍스처는 **파일이 커질 수 있다**(1.51MB → 1.98MB 사례) | | 모델 1개, 예산 300KB | 압축하지 말고 **모델을 다시 만들어라**. 저폴리로 | --- ## 6. 우리 브리프에 대한 판정 | 후보 | 예산 적합 | 컨셉 적합 | |---|---|---| | Khronos `GlassHurricaneCandleHolder.glb` (유리, 2.6MB) | ❌ 8배 초과 | ⚠️ 미학은 맞지만 촛대가 designpaca와 무관 | | Khronos `Duck.glb` (34KB Draco) | ✅ | ❌ 오리가 왜 | | Quaternius/KayKit 저폴리 팩 | ✅ (수십 KB) | ❌ 게임 에셋 톤 | | Poly Haven 스캔 소품 | ⚠️ 1k도 수백 KB | ❌ 사실적 소품이 컨셉과 무관 | | Threedscans 조각 (데시메이션 후) | ⚠️ 가능하나 수작업 | ⚠️ "고전 조각" 은유는 카피에 없다 | **어느 것도 컨셉과 연결되지 않는다.** 상세 판단은 `08-proposal.md`. **GLB가 정당해지는 유일한 경로**: designpaca가 **브랜드 캐릭터(알파카)**를 아이덴티티로 채택하는 경우. 그때는 CC0 팩에서 가져오지 말고 저폴리로 **직접 만들어야** 한다 — 남의 알파카는 우리 아이덴티티가 아니다. 비용 추정: 무텍스처 저폴리 + 정점 색 + meshopt = **40~80KB**, 디코더 25KB, 합 **65~105KB**. --- ## 7. 출처 - Khronos glTF-Sample-Assets https://github.com/KhronosGroup/glTF-Sample-Assets - Models 목록 https://github.com/KhronosGroup/glTF-Sample-Assets/blob/main/Models/Models.md - glTF Transform https://gltf-transform.dev/ - Draco 압축률 논의 https://github.com/donmccurdy/glTF-Transform/discussions/347 - KTX2 크기 논의 https://github.com/donmccurdy/glTF-Transform/discussions/443 - Poly Haven https://polyhaven.com/models - Quaternius https://quaternius.com - Kenney https://kenney.nl/assets - KayKit https://kaylousberg.itch.io - ambientCG https://ambientcg.com - Smithsonian 3D https://3d.si.edu - Threedscans https://threedscans.com - NASA 3D Resources https://nasa3d.arc.nasa.gov - Sketchfab CC0 https://sketchfab.com/3d-models?licenses=cc0 - Poly Pizza https://poly.pizza - Scan the World 라이선스 https://www.myminifactory.com/object-licensing - awesome-cc0 https://github.com/madjin/awesome-cc0