면접에 나올 수 있는 주요 내용을 한번 테마별로 정리해보겠다.
벡터와 행렬과 같은 내용은 중요는 하지만 면접에 나올만 내용은 아니다.
이를 모르면 렌더링이라는 것에대해 설명할 수 없기 때문에 아예 기초 수준으로 깔고 가기 때문이다.
ne*** 에서는 행렬의 교환 법칙과 결합 법칙을 물어본 적이 있다고 한다.
1. SwapChain을 사용하는 이유? 더블 버퍼링이란? 후면 버퍼와 정면 버퍼의 역할?
SwapChain은 전면 버퍼와 후면 버퍼 간의 교체를 관리하기 위해 사용합니다. 이를 활용해 더블 버퍼링은 하나의 버퍼만 사용했을 때, 렌더링 중 화면 깜빡임이 발생하는 것을 방지하고 성능을 향상시키기 위해 두 개의 버퍼를 사용하는 것을 의미합니다. 여기서 후면 버퍼는 현재 GPU가 그리고 있는 버퍼이고, 정면 버퍼는 사용자에게 보여지는 버퍼입니다.
2. 렌더링 파이프라인은 무엇인가?(포괄적인 설명) 그리고 그러한 단계에는 무엇이 있는가?
렌더링 파이프라인이란 그래픽 데이터를 화면에 출력하기 위한 일련의 단계입니다. 주요 단계로는 IA(인풋 어셈블리), VS(버텍스 쉐이더), Tesselation(테셀레이션), GeometryShader(지오메트리 쉐이더), RS(래스터라이제이션), PS(픽셀 쉐이더), OM(아웃풋 머지)가 있습니다.
IA 단계에서는 주로 모델의 정점 정보를 GPU에게 넘겨주는 역할을 합니다. VS 단계에서는 IA에서 넘겨받은 정점을 이용해 모델의 위치를 정해주거나 뒤의 연산을 위해 추가적인 연산을 하는 역할입니다. Tesselation 단계에서는 하나의 정점을 세분화하여 디테일을 살리는 역할입니다. GS 단계도 비슷하지만 다르게 정점을 쪼개는 것이 아닌 하나의 정점을 기반으로 새로운 정점을 추가하거나 수정하는 역할을 하는 단계입니다. RS 단계에선 정점들을 픽셀 단위로 변환하고 그 과정에서 보간하는 역할을 합니다. PS 단계에서는 그렇게 정해진 픽셀들의 색상을 정해주는 단계입니다. OM은 최종적으로 그려진 버퍼를 CPU에게 제출하는 단계입니다.
3. 인덱스 버퍼는 왜 사용하는 것인가?
모델이 자세해질수록 정점 정보가 매우 커질 수 있기 때문에 동일한 정점을 재사용하여 메모리를 절약하고 렌더링 성능을 향상시키기 위해 사용합니다.
4. 삼각형 두개로 이루어진 사각형을 그리기 위해 인덱스 버퍼의 크기는 얼마인가?
삼각형 두개로 이루어진 사각형을 그리기 위해선 0,1,2,2,1,3 총 인덱스가 6개가 필요합니다.
5. 조명에서 Ambient, Diffuse, Specular는 무엇인가?
Ambient는 주변광으로 모든 표면에 균등하게 적용되는 조명입니다. Diffuse는 난반사광으로 표면에 닿은 빛이 여러 방향으로 퍼지는 반사입니다. Sepcular는 반사광으로 빛이 관찰자에게 반사되는 방향에서 나타나며 하이라이트를 만들어냅니다.
6. 텍스처 맵핑과 UV 맵핑은 무엇인가? 그리고 UV 좌표는 무엇인가?
텍스처 맵핑은 객체에 텍스처를 적용하는 과정을 의미하는데 텍스처의 크기와 상관 없이 모델의 정확한 위치에 적용하기 위해 UV 맵핑을 이용합니다. UV 맵핑은 텍스처의 좌표계를 모델에 맞춰 정렬하는 과정입니다. UV 좌표는 텍스처 이미지의 좌표를 의미합니다. 이는 0에서 1사이의 범위로 이루어져있습니다.
7. Depth Stencil에서의 깊이의 역할을 설명하고 이를 그림자를 렌더링하는데 어떻게 사용할 수 있는가? 결국 판단해 어둡게 처리
Depth Stencil에서 깊이 값을 이용해 물체를 그릴지 안그릴지 결정하게 됩니다. 이는 그림자를 렌더링 할 때에도 활용이 되는데, 빛을 기준으로 먼저 깊이 값을 버퍼에 저장하고 이 버퍼를 활용해 카메레에서 본 물체와 픽셀간의 깊이 관계를 비교해 깊이 테스트를 통해 보이는 픽셀만 렌더링하게 됩니다. 이를 통해 그림자가 있다고 판단되면 그 영역를 렌더링할 때 조금 더 어둡게 색칠하면 됩니다.
8. ComputeShader는 무엇인가? 그리고 CPU와 GPU의 주 역할과 차이에 대해 설명하시오
ComputeShader는 그래픽 렌더링 외에도 데이터 병렬처리를 위해 사용되는 쉐이더이다. CPU는 논리적이고 직렬적인 작업을 잘 처리하는 반면, GPU는 대량의 병렬 연산에 특화되어 있어 많은 데이터를 동시에 처리하는데 유리합니다.
9. Tessellation은 무엇이고 이걸 어디에 사용할 수 있는가(LOD에 대해 설명하시오.)?
Tessellation은 모델을 더 작은 다각형으로 세분화하여 더 정밀하게 표현하는 기술입니다. 이를 활용해 Level Of Detail에 사용할 수 있습니다. 줄여서 LOD는 기준이 되는 점, 일반적으론 카메라와의 거리에 따라 정점을 세분화 하는 정보를 조정함으로써 성능을 최적화하는 기법을 의미합니다.
10. Instancing은 왜 필요한가? Draw Call과 연관 지어 설명하시오. 쉐이더, 머티리얼 버텍스와 같은 공유 가능한 것은 같이 그리고 각 물체마다 다른 것, 위치 이러한 것들을 버퍼에 담아 전해주는 것
렌더링을 하는 Draw함수 계열을 호출하는 것을 Draw Call이라고 하는데, 이를 호출하면 호출할 수록 성능이 안좋아집니다. 따라서 Instancing을 사용해 동일한 객체를 여러개를 렌더링할 때 GPU에 단일 Draw Call을 사용하게하여 CPU의 오버헤드를 줄이고 성능을 향상시킵니다. 여기서 동일한 객체는 같은 쉐이더, 같은 머티리얼, 같은 정점을 사용하는 객체를 의미합니다. 이게 같은 객체라 하더라도 위치와 같은 좌표는 다 다르게 때문에 이는 다른 버퍼에 저장해서 사용하게 됩니다.
11. Frustum Culling은 무엇인가? 사용하는 이유는 무엇인가?
절두체 컬링은 카메라 뷰 영역 밖에 있는 객체를 렌더링하지 않는 최적화 기법으로, 렌더링 파이프라인이 끝나고 GPU에서도 처리를 해주지만 CPU 단에서 먼저 해주어 불필요한 렌더링 파이프라인의 호출 개수를 줄여 성능을 개선합니다.
12. Normal 맵핑에 대해 설명하고 필요성에 대해 언급하시오.
Normal 맵핑은 모델에 디테일한 표면 정보를 추가하여 사실적인 조명을 구현하는 기술입니다. 이를 통해 높은 디테일을 유지하면서도 성능을 절감할 수 있습니다. 여기서 Normal은 정점 삼각형의 평면에 수직인 벡터를 의미합니다. 이는 조명 연산에 사용됩니다.
13. 그렇다면 탄젠트 스페이스는 왜 필요한가?
14. Particle System을 효율적으로 구현하는 방법은 무엇인가?
GeometryShader를 통해 정점을 추가하는 식을 통해 파티클을 관리할 수 있습니다. 또는 GPU에서 생성하고 소멸하는 식의 GPU기반 파티클 시스템을 사용하면 많은 효율을 얻을 수 있습니다. 또한, 많은 파티클을 효율적으로 관리하기 위해 Quad 기반의 Billboard 기법을 사용할 수 있습니다.
15. 쿼터니언은 뭐고 사용하는 이유는 무엇인가?
쿼터니언은 회전을 표현하는 수학적 방식으로 Gimbal Lock을 피하고 부드럽고 효율적은 회전 보간을 제공하기 때문에 많은 사용이 이뤄집니다.
'C++ > DirectX 11' 카테고리의 다른 글
[DirectX] 물방울 책 - Terrain, Particle, Shadow, Ambient Occlusion (0) | 2024.10.31 |
---|---|
[DirectX] 물방울 책 - Picking, Mapping (1) | 2024.10.29 |
[DirectX] 물방울 책 - Tessellation (3) | 2024.10.28 |
[DirectX] 물방울 책 - Shader (1) | 2024.10.25 |
[DirectX] 물방울 책 - 조명, 텍스처 (0) | 2024.10.24 |