이 저장소는 DirectX SDK Samples - Direct3D11 Tutorials를 출발점으로, DirectX 11 그래픽스 기본기를 직접 코딩하며 정리한 튜토리얼 프로젝트입니다. 사각형 하나를 그리는 것부터 모델 로딩, 조명, 애니메이션, PBR, 툰 셰이딩까지 단계별로 확장했습니다.
캐릭터 예제에는 직접 만든 VRM 캐릭터를 glTF/GLB로 내보낸 모델을 사용합니다. 피부·머리카락·의상을 같은 조명에서 비교할 수 있고, 치마의 반투명 레이스는 알파 테스트, 블렌딩, 깊이 버퍼의 차이를 살펴보기 좋은 예시입니다.
- 환경: Windows 11, Visual Studio 2022
- 플랫폼: Win32 Desktop (Direct3D 11.0)
- 목적: DirectX 11 그래픽스 파이프라인의 기초 학습 및 3D 기능 탐구
| 단계 |
살펴볼 내용 |
| 01–08 |
정점·인덱스 버퍼, 좌표 변환, 텍스처, 모델 로딩, ImGui |
| 09–17 |
조명, 스카이박스, Phong/Blinn–Phong, 노멀 매핑. 11번은 Live2D 연동 |
| 18–24 |
스키닝·Rigid 애니메이션, 다중 모델, 깊이와 알파, 본 구조 |
| 25–29 |
툰 셰이딩·외곽선, 그림자, 디버그 드로우, 리소스 공유, 마우스 피킹 |
| 30–35 |
PBR·IBL·톤매핑·Deferred. 32–33번은 사운드·카메라 연동 |
| 36–40 |
통합 데모, 노드 UI 실험, 스타일라이즈드 셰이딩, 반투명 OIT, MSAA·A2C 비교 |
처음에는 번호 순서대로 실행하고, 각 README의 구현 내용과 실행 화면을 함께 보면 됩니다. 39번의 반투명 레이스와 Weighted Blended OIT에 이어, 40번에서는 레이스 경계의 MSAA와 Alpha-to-Coverage를 비교합니다.
각 프로젝트 README에서 실행 스크린샷과 짧은 GIF를 함께 확인할 수 있습니다.
- 이미지를 클릭하거나, 아래 각 번호/이름을 클릭해도 해당 디렉토리로 이동합니다
36_AdvancedAnim_Sound_Click은 모델 로딩, PBR/IBL, 톤매핑, 애니메이션 블렌딩·레이어, FMOD 3D 사운드, ImGui, 멀티스레드 로딩을 모은 통합 데모입니다. 기본 장면은 Forward 경로를 사용합니다. Deferred의 패스 구성은 35번에서, 캐릭터의 PBR·툰 셰이딩 비교는 38번에서 확인할 수 있습니다.
| Screenshot |
GIF |
 |
 |
| 항목 |
내용 |
| 실행 |
Dx11/TutorialApp.sln 열기 -> 36_AdvancedAnim_Sound_Click 시작 프로젝트 -> x64 빌드 |
| 렌더링 |
포트폴리오 Forward 경로, Shadow, PBR, IBL, Tone Mapping (35_DeferredRendering에 Deferred 단계) |
| 애니메이션 |
기본 장면: 클립 크로스페이드·상체 레이어. Additive·IK·Socket 관련 구현도 포함하며 CCD IK는 기본 타임라인에서 실행하지 않음 |
| 사운드/UI |
FMOD 3D Sound, SoundBox, ImGui Debug Panels |
| 구조 |
Dx11/Common 공통 코드 + 35_DeferredRendering 렌더링 단계 + 36_AdvancedAnim_Sound_Click 통합 데모 |
Dx11/Common/ 공통 D3D 앱, 카메라, 메시, 애니메이션, 사운드, 로더
Dx11/35_DeferredRendering/ G-Buffer, Deferred Lighting, Tone Mapping
Dx11/36_AdvancedAnim_Sound_Click/ 대표 통합 데모
App.cpp 구현 파일 인덱스
App_*.inl 수명주기, 입력/업데이트, 렌더 패스, 모델 로딩, UI, 유틸리티
- 권장 환경: Windows 11, Visual Studio 2022 이상, Windows SDK, C++를 사용한 데스크톱 개발 워크로드와 MSVC v143 도구 집합
- 솔루션:
Dx11/TutorialApp.sln
- 기본 플랫폼:
x64
- vcpkg는 사용하지 않습니다. 필요한 외부 의존성은
Dx11/third_party 아래의 repo-local 파일을 참조합니다.
- 각 의존성의 선택 이유와 검토한 대안은 의존성 선택 기준에 정리했습니다.
37_Blueprint는 imgui-node-editor submodule을 사용합니다. 해당 프로젝트까지 빌드하려면 다음 명령이 필요합니다.
git submodule update --init --recursive
솔루션을 연 뒤 실행할 번호의 프로젝트를 시작 프로젝트로 설정하고 Debug | x64로 빌드한 다음 F5로 실행합니다. Win32 Desktop은 데스크톱 앱 API를 뜻하며, 여기서 사용하는 빌드 플랫폼은 64비트 x64입니다. 리소스 경로는 프로젝트의 디버깅 작업 디렉터리인 Dx11/bin을 기준으로 합니다.
- 기존:
.fbx, .obj, .pmx
- 추가:
.gltf, .glb
- glTF/glb는 별도 로더를 새로 만든 것이 아니라, 기존
FbxModel 계열의 Assimp 경로로 로드합니다.
- glTF PBR 재질을 위해 base-color 텍스처는
aiTextureType_BASE_COLOR를 먼저 확인하고, 없을 때 기존 diffuse 경로로 fallback합니다.
- 기본 캐릭터는
Dx11/Resource/fbx/Public/MyAlice/Player/SampleModel.glb입니다. .glb는 glTF의 바이너리 컨테이너이며 이 모델의 텍스처는 파일 안에 포함되어 있습니다.
- VRM에서 내보낸 메시·스켈레톤·재질을 사용하며, VRM 전용 MToon·Spring Bone까지 자동 재현하는 로더는 아닙니다. 예제별 셰이더와 알파 처리 범위는 각 README를 참고하세요.
- 수학 라이브러리인 DirectXMath 사용
- 셰이더 컴파일을 위해 D3DCompileFromFile 사용
- 텍스처 로딩을 위해 DirectXTK WIC/DDSTextureLoader 사용
- Live2D 예제 프로젝트에서 Cubism SDK 사용
- IBL Sky박스 (
31_IBL~36_AdvancedAnim_Sound_Click)
- 필요한 파일이 없거나 손상되면 공식
Skybox_2 GitHub Release를 최대 3회 자동 다운로드합니다.
- 압축 파일과 설치되는 12개 DDS를 크기와 SHA-256으로 검증하며, 실패한 임시 파일은 자동 정리합니다.
- 네트워크를 사용할 수 없으면 앱은 종료하지 않고 직접광 기반의 중립 배경으로 실행됩니다. README 캡처는 누락되거나 손상된 IBL로 잘못된 이미지를 발행하지 않도록 사전검사에서 중단됩니다.
- 수동 검사:
pwsh -NoProfile -File tools/verify_skybox_assets.ps1 -SkyboxRoot Dx11/Resource/Skybox -SetName All
- 기본 캐릭터: SampleModel.glb. 직접 만든 VRM 캐릭터를 내보낸 파일을 저장소에 포함했습니다.
본 튜토리얼 프로젝트는 학습 목적이며, 원본 샘플은 Microsoft가 제공한 MIT License에 따라 사용됩니다.