일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- A-Frame
- PHP
- JS
- JavaScript
- 3d
- WebVR
- promise
- PDO
- version mismatch
- package-lock.json
- AR
- Node
- auth0
- VR
- vuex
- aframe
- npx
- web
- array
- vuetify
- CI/CD
- bootstrap
- 상태관리
- Three.js
- WebXR
- Component
- javscript
- vue
- EM6
- vue-template-compiler
- Today
- Total
대가는 결과를 만든다
[테스트] Draco 3D Compression test 본문
Google의 3D 모델의 압축 코덱 오픈소스 라이브러리인 draco가 있다.
obj 파일과 draco로 인코딩/디코딩 테스트를 해보았다. (draco로 decoding할 시 결과물은 drc 파일)
c++ 환경에서 빌드 후 커맨드라인으로 인코딩/디코딩 테스트를 했다.
draco encoding 테스트 결과 아래 표와 같이 굉장한 압축효과가 있다... 인코딩 시간은 대부분 평균 1초 이하다.
Compression Leven : Default 7 (1~10)
파일 |
Tri / Vtx |
원본 .obj 크기 (KB) |
압축 .drc 크기 (KB) |
인코딩 시간 (ms) |
Dress (CLO) |
648,088 / 530,930 |
87,471 |
2,366 |
1032 |
Shirts (CLO) |
536,624 / 284,416 |
58,525 |
1,092 |
779 |
Shirts Casual (CLO) |
536,760 / 286,436 |
58,401 |
1,096 |
809 |
Shoe (MOA) |
300,000 / 150,000 |
45,943 |
457 |
583 |
T-shirts (MOA) |
299,996 / 150,000 |
37,889 |
502 |
599 |
Pants (CLO) |
322,019 / 230,016 |
33,584 |
953 |
447 |
Bag (MOA) |
300,000 / 150,000 |
29,180 |
533 |
630 |
다시 디코딩한 경우에는 아래 케이스들과 같이 다양한 경우가 있었다.
decode했을 때 원본 크기가 줄은 경우, 별 차이 없는 경우, 더 용량이 커진 경우
triangles 수 수준은 decoding해도 유지 된다. vertex수 는 최적화 되는 것으로 추측된다.
Encoding->Decoding Comparison : Case 1 (원본보다 크기가 크게 줄은 경우)
Encoding->Decoding Comparison : Case2 (원본 크기보다 줄었지만 비슷한 경우)
Encoding->Decoding Comparison : Case3 (원본보다 파일 크기가 조금더 커진 경우)
테스트 결론
- 일단 인코딩을 했을때 획기적으로 파일크기를 줄일 수 있다는 건 확실하다.
- 인코딩/디코딩 시간도 빠르다. 디코딩/인코딩 과정을 거치더라도, 원본 파일을 그대로 load하는 것보다 효율적일 만큼 빠르다. 실제 load까지의 시간을 비교가 필요하겠다.
Outro
- obj를 인코딩해 drc로 바꾸면 material 정보를 표현할 mtl과의 연결점이 모두 소멸된다. (디코딩해도 마찬가지) geometry 정보를 줄일 수 있는 건 알겠는데 재질 표현과 어떻게 연결해서 사용해야하는지 연구해봐야 한다.
- 실제 decoding/encoding을 사용해야하는 환경은 javascript 환경인데, 실제 서비스 개발 환경에서 사용할 수 있는 pipeline을 어떻게 구성해야 하는지 고민/리서치 해봐야 한다.