1. 개요 및 렌더링의 분류
렌더링은 컴퓨터 그래픽스에서 소프트웨어가 3D 모델 데이터를 2D 이미지로 변환하는 과정을 의미합니다. 응용 시나리오에 따라 크게 두 가지로 나뉩니다.
- 리얼타임 렌더링: 게임이나 VR 분야에서 사용되며, 초당 24~60프레임 이상의 속도를 유지해야 하므로 다양한 최적화 수단이 필요합니다.
- 오프라인 렌더링: 영화 제작 등에서 사용되며, 매우 사실적인 효과를 위해 한 장의 이미지를 렌더링하는 데 몇 분에서 몇 시간이 소요되기도 합니다.

2. CPU 단계: 애플리케이션 단계 (Application Stage)
GPU가 본격적인 그림을 그리기 전, CPU는 어떤 것을 그릴지 결정하고 데이터를 준비하는 역할을 합니다.
(Culling, 컬링)
화면에 보이지 않는 물체를 렌더링 대상에서 제외하여 효율을 높입니다.
- 절두체 컬링 (Frustum Culling): 카메라의 시야 범위(절두체) 밖에 있는 물체를 제거합니다. 성능을 위해 정교한 모델 대신 AABB라는 박스 형태의 충돌체로 검사합니다.
- 레이어 컬링 (Layer Culling): 특정 레이어에 속한 물체를 선택적으로 제외합니다.
- 차폐 컬링 (Occlusion Culling): 다른 물체에 완전히 가려진 물체를 제외합니다.
(Sorting, 정렬)
물체를 그리는 순서를 결정합니다. 이는 렌더 큐(Render Queue) 값에 따라 달라집니다.
- 불투명 물체 (Queue < 2500): 카메라에서 가까운 것부터 먼 순서로 그립니다. 앞의 물체가 뒤를 가리면 뒤쪽 계산을 생략할 수 있어 최적화에 유리합니다.
- 반투명 물체 (Queue > 2500): 카메라에서 먼 것부터 가까운 순서로 엄격하게 그려야 올바른 혼합 효과가 나타납니다.
데이터 패키징 및 출력
- 모델 데이터 준비: 정점 좌표, 법선(Normal), UV 좌표, 인덱스 리스트(Index List) 등을 묶습니다.
- 명령 전달: SetPass Call(셰이더 및 상태 설정)과 Draw Call(렌더링 시작 명령)을 GPU에 보냅니다.

3. GPU 단계: 기하학 처리 (Geometry Stage)
CPU에서 넘겨받은 3D 데이터를 2D 화면 좌표로 변환하는 핵심 단계입니다.
정점 셰이더 (Vertex Shader)
- 좌표 변환: 모델 공간의 정점을 세계 공간, 카메라 공간을 거쳐 최종적으로 클립 공간(Clip Space)으로 변환합니다.
- MVP 행렬: 이 과정은 Model, View, Projection 행렬을 곱하는 과정으로 요약되며, 3D 모델을 카메라 시점에 맞춰 찌그러뜨리는 투영 효과를 냅니다.
하드웨어 조작 단계
- 클리핑 (Clipping): 화면 경계에 걸친 삼각형을 잘라내어 새로운 정점을 생성합니다.
- 뒷면 컬링 (Back-face Culling): 카메라를 등지고 있어 보이지 않는 삼각형의 뒷면을 인덱스 나열 순서(시계/반시계 방향)를 기준으로 판별하여 제거합니다.
- 화면 매핑: 정규화된 좌표(NDC)를 실제 모니터의 픽셀 해상도 좌표(예: 1920x1080)로 변환합니다.

4. GPU 단계: 레스터라이즈 및 픽셀 처리 (Rasterization & Pixel Stage)
레스터라이즈 (Rasterization)
- 도형 생성: 고립된 정점들을 연결하여 삼각형(도형)을 만듭니다.
- 프래그먼트 생성: 삼각형 내부를 채우는 픽셀 단위의 프래그먼트를 생성합니다. 이때 정점에 있던 색상, UV 등의 데이터가 픽셀 단위로 보간(Interpolation)되어 할당됩니다.
프래그먼트 셰이더 (Fragment Shader)
- 텍스처링: UV 좌표를 이용해 이미지에서 색상을 추출합니다. 작은 이미지를 크게 늘릴 때 발생하는 왜곡을 줄이기 위해 이선형 보간(Bilinear), 삼선형 보간 (Trilinear) 등의 필터링 기술과 밉맵(Mipmap) 기술이 사용됩니다.
- 조명 계산: 퐁(Phong) 모델을 기준으로 난반사(Diffuse), 정반사(Specular), 환경광(Ambient)을 계산하여 입체감을 부여합니다.

5. 최종 출력: 출력 병합 단계 (Output Merger)
여러 물체가 겹쳤을 때 최종적으로 어떤 색을 화면에 남길지 결정합니다.
- 깊이 테스트 (Z-Test): 깊이 버퍼(Z-Buffer)의 값과 비교하여 카메라에 더 가까운 물체만 통과시킵니다.
- 알파 블렌딩 (Alpha Blending): 반투명 물체의 경우, 현재 픽셀 색상과 기존 화면에 그려진 색상을 공식에 따라 섞습니다.
- 프레임 버퍼 출력: 모든 테스트를 통과한 결과물이 임시 화판인 프레임 버퍼에 기록되고, 이것이 최종적으로 모니터에 표시됩니다.

반응형
'자료는 자료지 > 외부에서 퍼온자료' 카테고리의 다른 글
| 03. 캐릭터 림 라이트 및 스캔(유광) 효과 구현과 코드 변환 [ASE 강좌] (0) | 2026.01.04 |
|---|---|
| 02 Shader 코드 입문 기초 (0) | 2026.01.02 |
| ASTC_User_Guide 번역 6 (0) | 2025.12.15 |
| ASTC_User_Guide 번역 5 (0) | 2025.12.14 |
| ASTC_User_Guide 번역 4 (0) | 2025.12.14 |
댓글