[면접대비] 그래픽스
그래픽스 기본 / 렌더링 파이프라인
컴퓨터 그래픽스란 무엇인가요
컴퓨터를 이용해 이미지를 생성하고 표현하는 기술입니다.
렌더링이란 무엇인가요
렌더링은 3D 공간의 객체, 카메라, 조명 등의 정보를 계산하여 최종 2D 화면을 생성하는 과정입니다
렌더링 파이프라인에 대해 설명해주세요
3D 데이터를 최종 화면의 픽셀로 변환하는 일련의 과정입니다. 정점처리 → 레스터라이제이션 → 픽셀처리 → 최종 화면 출력 순서로 진행됩니다
Vertex 처리 → Rasterization → Fragment 처리 → Frame Buffer
Mesh 란 무엇인가요
정점과 정점들을 연결하는 삼각형 등의 정보로 3D 물체의 형태를 표현한 데이터입니다
Primitive란 무엇이며 Triangle을 주로 사용하는 이유는 무엇인가요
Primitive는 GPU가 렌더링하는 기본적인 기하 도형으로 Point, Line, Triangle 등이 있습니다. Triangle은 세 점이 항상 하나의 평면을 결정하고 복잡한 형태도 조합하여 표현할 수 있기 때문에 3D 그래픽스에서 주로 사용합니다
Rasterization이란 무엇인가요
정점들로 만들어진 Triangle과 같은 도형을 화면상의 Fragment들로 변환하는 과정입니다. 이후 Fragment Shader가 각 Fragment의 최종 색상을 계산합니다
Frame Buffer란 무엇인가요
Frame Buffer는 렌더링 결과를 저장하는 화면 출력용 버퍼들의 집합입니다
좌표계 / 행렬 / 카메라
그래픽스에서 사용하는 좌표 공간에는 어떤 것들이 있나요
일반적으로 Local Space → World Space → View Space → Clip Space → NDC → Screen Space 순서로 좌표가 변환됩니다
Local Space와 World Space의 차이는 무엇인가요
Local Space는 객체 자신의 원점을 기준으로 한 좌표계이고, World Space는 게임 월드의 공통 원점을 기준으로 한 좌표계입니다
View Space란 무엇인가요
View Space는 카메라를 기준으로 표현한 좌표공간입니다 World 좌표에 View 행렬을 적용하여 카메라가 원점에 있는 것처럼 좌표를 변환합니다
Clip Space와 NDC란 무엇인가요
Clip Space는 Projection 행렬을 적용한 뒤 클리핑에 사용되는 좌표 공간입니다. 이후 좌표를 w로 나누는 Perspective Divide를 수행하면 NDC가 되고 이를 화면 좌표로 변환합니다
Model, View, Projection 행렬이란 무엇인가요
Model 행렬은 Local → World, View 행렬은 World → View, Projection 행렬은 View → Clip Space로 좌표를 변환합ㄴ디ㅏ
이동, 회전, 크기 변환을 행렬로 처리하는 이유는 무엇인가요
이동, 회전, 크기 변환을 하나의 수학적 형태로 표현하고 여러 변환을 하나의 행렬로 결합할 수 있기 때문입니다. GPU 에서도 이러한 행렬 연산을 효율적으로 병렬 처리할 수 있습니다
직교 투영과 원근 투영의 차이는 무엇인가요
원근 투영은 멀리 있는 물체가 작게 보이는 원근감을 표현합니다
직교 투영은 거리에 관계없이 물체 크기가 일정하게 표현됩니다
원근 나눗셈이란 무엇인가요
Projection 변환 이후 Clip Space의 x, y, z 값을 w로 나누어 NDC 좌표로 변환하는 과정입니다
깊이 / 가시성
Z-Buffer란 무엇인가요
각 픽셀 위치에서 카메라와 가장 가까운 Fragment의 깊이 값을 저장하는 버퍼입니다. 새로운 Fragment의 깊이를 기존 값과 비교하여 앞에 있는 물체가 뒤의 물체를 가리도록 처리합니다
Z-Fighting이란 무엇이며 왜 발생하나요
서로 가까운 두 표면의 Depth 값 차이를 Depth Buffer가 정확하게 구분하지 못하면서 화면이 깜빡이는 현상입니다
Back-Face Culling이란 무엇인가요
카메라를 향하지 않는 삼각형의 뒷면을 렌더링 대상에서 제외하는 최적화 기법입니다.
Frustum Culling이란 무엇인가요
카메라의 시야 영역인 View Frustum 밖에 존재하는 객체를 렌더링하지 않는 기법입니다. 화면에 나타날 가능성이 없는 객체의 렌더링을 제거하여 성능을 개선합니다
셰이더 / 조명
Shader란 무엇인가요
Shader는 GPU에서 실행되어 정점의 위치나 픽셀의 색상 등 렌더링 결과를 계산하는 프로그램입니다
Normal Vector는 무엇이며 어디에 사용되나요
Normal Vector는 표면이 향하고 있는 방향을 나타내는 벡터입니다. 주로 빛의 방향과 비교하여 표면이 얼마나 빛을 받는지 계산하는 조명 연산에 사용됩니다
조명 계산에서 내적을 사용하는 이유는 무엇인가요
두 벡터의 내적을 이용하면 두 방향이 얼마나 같은 방향을 향하고 있는지 알 수 있기 때문입니다.
Ambient, Diffuse, Specular Light의 차이는 무엇인가요
Ambient는 전체적으로 적용되는 간접적인 기본 조명, Diffuse는 표면의 방향에 따라 달라지는 난반사광, Specular는 빛이 반사되어 생기는 하이라이트와 같은 정반사광을 표현합니다
Alpha Blending이란 무엇인가요
Alpha값을 이용하여 현재 Fragment의 색상과 이미 그려진 화면의 색상을 혼합하여 투명도를 표현하는 방법입니다.
텍스처
Texture Mapping이란 무엇인가요
3D 모델의 표면에 2D 이미지인 Texture를 대응시켜 색상이나 표면 정보를 표현하는 기법입니다. 일반적으로 UV 좌표를 이용하여 Texture의 어느 부분을 사용할지 결정합니다
UV 좌표란 무엇인가요
3d 모델의 각 정점과 2D Texture의 위치를 연결하기 위한 지표입니다
Mipmap이란 무엇이며 왜 사용하나요
원본 Texture를 미리 여러 단계의 작은 해상도로 만들어 저장해 두는 기술입니다. 멀리 있는 물체에는 작은 Texture를 사용하여 캐시 효율과 성능을 높이고 Texture가 깜빡이는 등의 샘플링 문제도 줄일 수 있습니다
Texture Filtering이란 무엇인가요
Texture를 화면에 매핑할 때 텍셀 사이의 값을 어떻게 샘플링할지 결정하는 방식입니다. 대표적으로 Point, Bilinear, Trilinear Filtering 등이 있으며 품질과 연산 비용에 차이가 있습니다

