개발하는 리프터 꽃게맨입니다.

FlatBuffers 를 이용한 모델 로딩 최적화 본문

카테고리 없음

FlatBuffers 를 이용한 모델 로딩 최적화

파워꽃게맨 2025. 4. 5. 13:16

 

3D 모델을 로딩한다고 하면 일반적으로 assimp를 이용해 fbx나 obj 파일을 로딩합니다.

fbx obj 의 경우 내부 데이터가 굉장히 복잡하기 떄문에 로딩하는데 다소 시간이 걸립니다.

 

만약 소프트웨어에서 필요한 데이터만 로딩할 수 있따면 로딩하는 시간이 훨씬 줄어듭니다.

 

먼저 fbx 파일을 로딩하는데 걸리는 시간을 보겠습니다.

 

 

드래곤 모델을 로딩하는데 1.586초가 소모되었습니다.

 

참고로 해당 모델은 약 114000 개 가량의 버텍스와 인덱스를 가지고 있습니다.

 

최초에는 Josn을 이용하여 버텍스(위치, 법선, 탄젠트, 비탄젠트, uv, 노말) 과 머테리얼 속성 (PBR 및 Phong, 텍스처 경로)를 저장했는데, 커스텀 타입의 저장 및 불러오기 시간이 과하게 많이 걸렸습니다. (파일 크기도 크구요)

그래서 선택한 것이 바이너리로 데이터를 저장하는 것이었습니다.

 

그 과정에서 사용한 것은 구글의 FlatBuffers 라는 라이브러리입니다.

https://github.com/google/flatbuffers

 

GitHub - google/flatbuffers: FlatBuffers: Memory Efficient Serialization Library

FlatBuffers: Memory Efficient Serialization Library - google/flatbuffers

github.com

 

 

이런 식으로 데이터 스키마를 정의한 다음에 

 

 

열심히 exporter와 importer를 만들어줍니다.

 

 

결과입니다.

export 는 0.124초

import 는 0.109초 걸렸습니다.

 

기존 방법과 비교하면 

1.586 -> 0.109

 

14.5배 가량 빨라졌습니다.

 

조금 더 큰 모델을 대상으로 진행해보겠습니다.

 

 

로드하는데 6초정도 걸리는 모델을 임포트해봤는데요

이 모델을 바이너리 방식으로 변환후 입력받으면..

 

익스포트에 0.736초

 

 

임포트에 0.68초 걸립니다.