카테고리 없음

[테스트] Draco 3D Compression test

yunzema 2019. 9. 25. 10:00
반응형

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을 어떻게 구성해야 하는지 고민/리서치 해봐야 한다.