1. 개요
우리는 지금까지의 프로젝트에서 OBJ Parser를 만들고 그것을 Rendering Pipeline에 연결해서 OBJ를 읽고
Rendering하는 시스템을 구축했습니다.
https://yeoul0714.tistory.com/22
[DX11] Obj 파일 Parsing후 Pipe line Binding
1. DX에서 오브젝트를 Rendering하는 것은 매우 번거롭다.우리는 DX에서 물체를 렌더링해 주기 위해서는 정점 정보를 하나하나 직접 입력을 해주어야 했습니다.이것은 매우 번거로운 작업이고 단
yeoul0714.tistory.com
그러나 OBJ 파일에는 명확한 한계가 존재합니다.
1. 애니메이션 데이터의 부재
OBJ 파일은 정적 메시만 저장할 수 있고, 본(bone) 구조나 스킨 가중치와 같은 애니메이션에 필요한 정보를 포함할 수 없습니다.
다시말하자면 OBJ파일로는 bone애니메이션과 같은 게임에서 매우 중요한 효과들을 구현할 수 없다는 의미입니다.
2. 계층 구조 부재
OBJ는 객체 간의 부모-자식 관계나 계층 구조를 표현할 수 없습니다.
bone을 구현하다보면 부모-자식 관계와 계층구조가 필수적이지만 OBJ파일에서는 이것이 불가능합니다.
3. 느림
OBJ파일은 텍스트 기반으로 되어있어서 컴퓨터가 읽는데 오랜 시간이 걸립니다.
그에 비해 FBX파일은 ASCII코드 또는 Binary형태로 저장되기 때문에 읽는데 시간이 훨씬 적게 걸립니다.
2. 처음의 했던 오해
처음에 했던 작은 오해가 한가지 있었습니다.
그것은 바로 FBX파일 역시 OBJ파일처럼 파일포멧을 하나하나 분석해서 전부 직접 Parsing을 해야하는줄 알았다는 것입니다.
그러나 이부분은 큰 오해였습니다.
FBX를 읽을 수 있는 SDK가 배포되고 있고 이것을 사용하는 방법이 맞는 방식입니다.
FBX는 Binary또는 ASCII로 되어있기에 우리가 직접 Parser는 만드는 것은 너무나 큰 시간이 소요됩니다.
FBX SDK
Easily transfer content into the FBX format Autodesk® FBX® SDK is a free* C++ software development kit (SDK) that lets you create plug-ins, converters, and other applications that use Autodesk FBX technology. With FBX you can translate and exchange 3D
aps.autodesk.com
이곳에서 배포하는FBX SDK를 적용해서 읽어오도록 할것입니다.
3. lib파일이 너무 많다. md, mt
막상 다운을 받게 되면 lib파일이 너무나 많습니다.
이곳에서 어떤것을 적용할지도 헷갈릴 확률이 높고, md, mt와 같은 키워드역시 무슨차이인지 알기 어렵습니다.
여기서 우리가 볼것은 이렇게 3개입니다.
이 라이브러리 이외의 파일들은 FBX의 확장 기능을 사용할때에 사용하는 lib파일들이고 핵심적인 기능은 이곳에 포함되어 있습니다.
그렇다면 md, mt가 무슨 차이일까요?
우선 요약하자면 아래와 같이 정의할 수 있습니다.
- libfbxsdk.lib: 동적 링크 방식으로, DLL 파일이 필요합니다. FBXSDK_SHARED 정의가 필요합니다.
FBX SDK 코드가 DLL에 있고, 실행 파일은 이를 참조만 함 - libfbxsdk-md.lib: 정적 링크 방식이지만 C 런타임은 DLL(/MD)을 사용합니다.
FBX SDK 코드가 실행 파일에 포함되지만, C 런타임은 DLL 사용 - libfbxsdk-mt.lib: 완전한 정적 링크 방식으로, C 런타임도 정적(/MT)으로 링크됩니다.
FBX SDK 코드와 C 런타임 모두 실행 파일에 포함 (완전 독립형)
사실 이 말을 이해하려면 용어들에 대한 이해가 한단계 필요합니다.
1. 동적 링크 방식 (Dynamic Linking)
동적 링크 방식은 실행할때에 DLL파일을 참조해서 필요한 정보를 쓰는 방식입니다.
- 프로그램이 실행될 때 필요한 코드를 외부 파일(DLL)에서 가져옵니다
- 여러 프로그램이 같은 DLL을 공유할 수 있어 메모리와 디스크 공간을 절약합니다
- 장점: 실행 파일 크기가 작고, 업데이트가 쉽습니다 (DLL만 교체하면 됨)
- 단점: 프로그램 실행에 DLL 파일이 필요합니다 (없으면 실행 불가)
예시: libfbxsdk.lib는 동적 링크 방식을 사용하므로 실행 시 libfbxsdk.dll 파일이 필요합니다.
(빌드해서 exe파일이 생기는 곳에 dll이 있어야함)
2. 정적 링크 방식 (Static Linking)
- 라이브러리 코드가 컴파일 시 프로그램에 직접 포함됩니다
- 외부 파일 없이 독립적으로 실행 가능합니다
- 장점: 배포가 단순하고 외부 의존성이 없습니다
- 단점: 실행 파일 크기가 커지고, 업데이트하려면 다시 컴파일해야 합니다. (dll이 합쳐져 있기 때문입니다.)
예시: libfbxsdk-md.lib와 libfbxsdk-mt.lib는 정적 링크 방식을 사용하므로 FBX SDK 코드가 실행 파일에 포함됩니다.
3. C 런타임 (C Runtime)
C 런타임은 C/C++ 프로그램의 기본적인 기능을 제공하는 부분입니다.
- 메모리 관리, 문자열 처리, 파일 입출력 등 기본 기능 제공
- 프로그램 시작/종료 시 필요한 초기화/정리 작업 수행
- 모든 C/C++ 프로그램은 C 런타임을 필요로 합니다
파일 크기를 보면
기본 < md < mt 순서입니다.
위에서 설명한 개념을 이 파일 크기로 생각해보면
기본 : FBX SDK의 코드가 dll에 있어서 실행 파일은 이것을 참조하는 방식이기에 용량이 제일 적습니다.
md : FBX SDK코드가 실행파일에 포함되어 있지만 C런타임은 dll(C 런타임 라이브러리(MSVCR*.dll))에 의존함으로 용량이 2번째 입니다.
mt : FBX SDK코드와 C런타임 모두 실행파일에 포함되어서 용량이 가장 큽니다.
대부분의 Windows 개발에서는 md 버전을 사용하는 것이 일반적입니다.
이유는 파일 크기가 적절하면서도 C 런타임 DLL은 대부분의 시스템에 이미 설치되어 있기 때문입니다.
lib파일 연결 방식과 이것에 대한 추가 설명은 아래 글들을 참고하시길 바랍니다.
https://yeoul0714.tistory.com/47
[DX11] Lua 스크립트 연동 + SOL2
1.개요이번엔 컴퓨터 그래픽스에 관한 내용은 아니지만 엔진을 만들어가는 과정중에 하나이기에 DX11이란 카테고리를 부여했습니다. Lua라는 언어를 개발하던 게임엔진에 연동하는 작업을 하려
yeoul0714.tistory.com
FBX SDK Help | Configuring the FBX SDK for Windows | Autodesk
Help
help.autodesk.com
'DirectX11' 카테고리의 다른 글
[DirectX11] FBX, CPU Skinning (0) | 2025.05.09 |
---|---|
[DX11] Lua 스크립트 연동 + SOL2 (0) | 2025.04.27 |
[DX11] PCF (Percentage Closer Filtering) (0) | 2025.04.24 |
[DX11] Renderdoc 사용법 CubeMap 디버깅 (0) | 2025.04.23 |
[DX11] Point Light Shadow - Peter Panning, Shadow Acne (2) | 2025.04.23 |