1. Direct3D
1.1 Direct3D Basic Knowledge
- 응용 프로그램이 3차원 그래픽 가속 기능을 이용해서 3차원 세계를 렌더링할 수 있게 하는 저수준 API
- 그래픽 하드웨어를 제어할 수 있는 소프트웨어 인터페이스 제공
1.1.1 Component Object Model - COM
- 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술 (인터페이스)
- COM 객체들이 자신만의 고유한 방식으로 메모리를 관리
1.1.2 Texture & 자료 자원 형식
- 2차원 Texture는 2차원 이미지 자료를 저장하므로 각 원소는 한 픽셀의 색상을 담음
- Texture는 단순 이미지 자료 저장이 아닌 밉맵 수준들이 존재
- GPU는 필터링, 다중표본화 등의 특별한 연산을 Texture에 적용할 수 있음
- Texture는 특정 형식을 따르는 자료만 담을 수 있는데 DXGI_FORMAT 열거형으로 지정
- R, G, B, A의 성분은 각각 적색, 녹색, 청색, 알파 성분을 뜻함
- 그래픽에서 하나의 색상은 3원색인 적색, 녹색, 청색의 조합으로 만들어짐
- 컴퓨터 그래픽에서 알파 채널 또는 알파 성분은 일반적으로 투명도를 제어하는 데 쓰임
- 그러나 Texture에 반드시 색상을 담아야하는 것은 아님 (3차원 벡터를 담을 수 있고 또한 무형식 Texture 사용)
1.1.3 Swap Chain & Page Transformation
- 애니메이션이 껌벅대는 현상을 방지하기 위해 사용하는 방식
- 애니메이션의 한 프레임 전체를 화면 바깥의 Texture를 그림 (Back Buffer)
- Back Buffer에서 한 프레임에 대해 그림을 다 그린 후 화면에 보이게 된다면 그려지는 과정이 보이지 않음
- 이러한 버퍼링을 구현할 때 하드웨어로 두 가지의 Texture Buffer를 관리
- 현재 모니터에 표시되는 이미지 자료를 담는 Front Buffer & 그림을 그릴 때 사용하는 Back Buffer
- Front & Back Buffer를 교환하여 표시하게 하는 것은 Presenting이라 부름
- Buffer의 내용을 실제로 맞바꾸는 것이 아닌 현재 Front Buffer로의 포인터 및 Back Buffer의 포인터를 바꿈
- Front & Back Buffer에서 하나의 Swap Chain을 형성 (Double Buffering)
1.1.4 Depth Buffer
- 이미지 자료를 담지 않는 Texture, 각 픽셀의 깊이 정보를 담음
- 0일 경우 관찰자와 최대한 가까운 픽셀에 해당, 1인 경우 최대한 먼 픽셀에 해당
- 렌더링되는 각 픽셀의 깊이 값을 계산해서 깊이 판정을 수행
- 깊이 판정은 Back Buffer의 특정 픽셀 위치에 기록될 픽셀들의 깊이들을 비교
- 깊이 값을 비교했을 때 관찰자에게 가장 가까운 픽셀이 승자가 되어 Back Buffer에 기록
- Depth Buffer 또한 하나의 Texture이므로 특정한 자료 형식을 지정해서 생성
1.1.5 Texture Resource View
- Direct3D에서 Texture를 사용하려면 Texture의 초기화 시점에서 Resource View를 생성
- 실행시점 모듈과 구동기가 유효성 점검과 매핑을 뷰 생성 시점에서 수행
- Texture를 렌더 대상과 Shader 자원으로 사용할 때 두 가지의 View를 생성할 필요가 있음
- Render Target View & Shader Resource View
- Direct3D에 자원의 사용 방시글 알려 주는 것 & 생성 시점에서 무형식을 지정한 자원 형식의 구체적인 형식을 결정
1.1.6 초과 표본화 & 다중 표본화
- 모니터 화면에 임의의 선을 완벽하게 나타내는 것을 불가능한 일, 계단 현상이라 불리는 Aliasing 존재
- 모니터 해상도를 키워 픽셀 크기를 줄이면 계단 현상이 거의 눈에 띄지 않을 정도로 문제를 완화 가능
- 초과 표본화
- Back & Depth Buffer를 화면 해상도보다 4배 크게 잡음
- 3차원 장면을 4배 크기의 해상도에서 Back Buffer에 렌더링
- 이미지를 화면에 제시할때 후면 버퍼를 원래 크기의 버퍼로 환원
- 픽셀 처리량과 메모리 소비량이 4배라서 비용이 큼
- 다중 표본화
- 4배 크게 잡는 것을 동일하지만 이미지 색상을 각 부분 픽셀마다 계산하는 것이 아닌 픽셀당 한 번만 계산
- 그 색상과 부분 픽셀들의 가시성과 포괄도를 이용하여 최종 색상을 결정
'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글
[Direct11] 3. Direct3D EX Application Framework (0) | 2023.06.12 |
---|---|
[Direct11] 2. Direct3D initialization (0) | 2023.06.12 |
[GameMath] 24. Intersection # Triangle to Point (0) | 2023.04.22 |
[GameMath] 23. Ray Cast # Ray to Plane (0) | 2023.04.22 |
[GameMath] 22. Ray Cast # Ray to AABB (TODO) (0) | 2023.04.22 |