종제로
종제로 Devlog
종제로
전체 방문자
오늘
어제
  • 분류 전체보기 (43)
    • C, C++ (22)
      • C, C++ (10)
      • Modern C++ (4)
      • 전문가를 위한 C++ (책) (8)
    • DirectX 자체엔진 개발 (8)
    • 자료구조 알고리즘 (10)
      • 공부 (9)
      • 문제풀이 (1)
    • 자기 계발 (1)
    • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • directX
  • C++
  • c++ 11
  • DirectX11
  • C
  • 모두의C언어
  • 자료구조
  • 알고리즘
  • 전문가를 위한 C++
  • c++ 17

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
종제로

종제로 Devlog

[DirectX 11] 자체 포맷 개발
DirectX 자체엔진 개발

[DirectX 11] 자체 포맷 개발

2022. 2. 25. 15:35

개발 일자 : 2022년 2월 21일 ~ 25일

 

우리 팀 아트가 블렌더로 작업한 파일을 FBX파일로 익스포트하여 자체 엔진에서 임포트, 파싱하여 사용하고 있는데 문제점이 있었습니다.

 

첫 번째로 속도​입니다. FBX파일을 임포트하고 FBX 파서에서 Triangulate 함수로 씬 내의 모든 노드를 삼각형화하는데, 이 과정에서 많은 시간이 소요됩니다. 또 FBX 익스포트 시에 특정 옵션을 주지 않는 이상 노말맵을 위한 탄젠트 스페이스를 임포트 과정 중에 구해야하는데, 이 역시 시간이 소요됩니다.

임포트 과정 중 가장 많은 시간이 소요되는 부분

 

제 엔진은 메쉬를 삼각형으로 가정하기 때문에 Triangluate로 삼각형화 하지 않으면 왼쪽처럼 됩니다.

 

두 번째로 보안성입니다. 게임을 배포할 때 우리 팀 아트가 작업한 모델을 FBX로 익스포트해 그대로 사용한다면 이 FBX파일을 내 엔진 이외에 다른 엔진에서도 그대로 사용이 가능할 것입니다. 위의 두 가지 이유로, 메쉬의 삼각형화와 탄젠트 스페이스를 미리 구해놓고 내 엔진의 Importer, Parser에서만 읽을 수 있는 자체적인 포맷이 필요하다고 생각했습니다.

 

포맷 이름은 .ERJ로 팀 이름인 EggRoll과 성을 따서 만들었습니다. 다음과 같은 과정을 거쳐 FBX를 자체 포맷으로 변환하고 자체 엔진에서 읽어들입니다.

  1. FBX 폴더 내의 모든 FBX파일의 수를 셉니다. ( 진행률을 알기 위해서 )
  2. FBX 파일들을 임포트한 후 파싱하여 자체 엔진에서 쓸 Mesh 구조체에 데이터들을 차곡차곡 담습니다.
  3. 그 데이터들을 ERJ 파일 형식으로 저장합니다.
  4. 자체 엔진에서 .FBX 대신 .ERJ를 읽습니다. .ERJ는 이미 메쉬의 삼각형화가 완료되어있고, 탄젠트 스페이스도 구해져있습니다. 따라서 바로 버퍼로 만드는 것이 가능합니다.

 

ERJ Converter.exe 를 실행시키면 자동으로 폴더 내의 FBX 파일을 파싱하고 ERJ 파일 형식으로 변환합니다.

 

FBX 폴더 내의 모든 FBX파일의 수를 세고 경로와 파일명을 저장해놓는 함수 (C++ 17 filesystem 활용해 간단히 구현)

 

템플릿과 오버로딩을 활용하여 함수 하나로 int, float, Vector3등 데이터 형식에 관계없이 데이터를 읽고 쓸 수 있습니다.

 

벡터와 맵, 스트링등의 컨테이너도 저장 가능합니다.

 

따라서, vertex 구조체가 들어있는 vector 컨테이너도 통째로 저장할 수 있습니다.

 

위처럼 vertex 구조체의 요소를 하나하나 저장할 필요없이,
이런 식으로 vector<Vertex>째로 저장가능합니다.

 

엔진을 쓰는 쪽에서는 이런식으로 처음에 FBX, ERJ를 선택해서 리소스를 로드할 수 있도록 했습니다.

 

저작자표시 비영리 변경금지 (새창열림)

'DirectX 자체엔진 개발' 카테고리의 다른 글

[DirectX 11] HDR, Tone Mapping  (0) 2022.04.15
[DirectX 11] 외곽선  (0) 2022.04.14
[DirectX 11] 파티클 시스템  (0) 2022.03.18
[DirectX 11] Emissive  (0) 2022.03.14
[DirectX 11] Bloom  (1) 2022.03.11
    'DirectX 자체엔진 개발' 카테고리의 다른 글
    • [DirectX 11] 외곽선
    • [DirectX 11] 파티클 시스템
    • [DirectX 11] Emissive
    • [DirectX 11] Bloom
    종제로
    종제로

    티스토리툴바