수학/이득우의 게임 수학

렌더링 파이프라인

monstro 2026. 1. 21. 11:11
728x90
반응형

- 개요

이미지 출처 : https://en.wikipedia.org/wiki/Graphics_pipeline

 

렌더링그릴 물체의 정보를 그래픽카드 GPU에 넘겨 GPU에서 처리하도록 위임하는 것이 일반적이다

GPU에 그릴 물체의 정보를 전달하면 GPU는 하드웨어에 설정된 워크플로우를 통해 렌더링을 진행하고 출력한다

위와 같이 GPU에 설정된 워크플로우를 렌더링 파이프라인이라고 표현한다

 

- 프로젝트에서의 렌더링 파이프라인

프로젝트의 렌더링 파이프라인 구성

 

프로젝트에서는 렌더링 작업을 GPU에 위임하여 처리하지 않고 위의 4가지 방식으로 구성하였다

  • 1) 정점 변환 단계
    • 게임 오브젝트에 연결된 메시가 갖고 있는 모든 정점의 정보변환하는 과정
    • 정점의 최종 위치월드 공간을 중심으로 지정
    • DrawMesh2D 함수를 호출하여 수행
  • 2) 정점 처리 단계
    • 화면에 그려질 정점의 최종 위치 값을 계산하는 과정
    • 모델링 행렬로컬 공간의 좌표하여 계산
    • VertexShader2D 함수를 호출하여 수행
  • 3) 픽셀화 단계
    • 메시를 구성하는 삼각형마다 픽셀화를 진행하는 과정
    • 무게중심좌표를 활용하여 삼각형 영역에 속하는 픽셀을 추려내고 색상을 결정
    • DrawTriangle2D 함수를 호출하여 수행
  • 4) 픽셀 처리 단계
    • 삼각형을 구성하는 각 픽셀의 최종 색상을 결정하는 과정
    • 텍스처로부터 해당 픽셀의 UV에 대응하는 색상을 가져오고 추가적인 효과를 적용하여 색상을 설정
    • FragmentShader2D 함수를 호출하여 수행

 

- 렌더링 파이프라인 (1) 정점 변환 단계

정점 변환을 수행하는 DrawMesh2D 함수

 

정점 변환을 수행하는 DrawMesh2D 함수의 로직은 위와 같다

해당 함수를 호출하여 게임 오브젝트를 렌더링하기 위해서는 메시 정보 모델링 행렬이 필요하다

이때 원본 메시 정보에 모델링 행렬을 곱하게 되면 메시 정보를 공유하는 다른 게임 오브젝트에 영향을 준다

따라서 정점의 변환 과정에서 사용할 메시 데이터는 원본을 복제하여 사용한다

DrawMesh2D 함수처럼 렌더링 파이프라인을 시작하는 함수를 호출하는 것을 DrawCall이 발생한다고 표현한다

 

- 렌더링 파이프라인 (2) 정점 처리 단계

정점 처리 단계를 수행하는 VertexShader2D 함수

 

DrawMesh2D 함수에서 호출되어 정점 처리를 수행하는 VertexShader2D 함수를 살펴본다

해당 함수는 GPU의 렌더링 파이프라인을 모방하여 구성하였다

렌더링 파이프라인에서 몇몇 중요한 과정은 개발자들이 설계한 로직을 수행하도록 함수를 제공하는데,

이와 같은 함수를 셰이더라고 표현한다

셰이더중에서도 정점 처리 단계의 셰이더를 정점 셰이더라고 표현하는데,

VertexShader2D 함수는 정점 셰이더를 모방하여 구성하였다

 

- 렌더링 파이프라인 (3) 픽셀화 단계

픽셀화 단계를 수행하는 DrawTriangle2D 함수

 

픽셀화 단계를 수행하는 DrawTriangle2D 함수의 로직은 위와 같다

삼각형 영역을 그릴 때 와이어프레임으로 그리거텍스처를 입혀서 그리는 2가지 방식으로 렌더링할 수 있다

 

- 렌더링 파이프라인 (4) 픽셀 처리 단계

픽셀 처리 단계를 수행하는 FragmentShader2D 함수

 

픽셀 처리 단계를 수행하는 FragmentShader2D 함수의 로직은 위와 같다

해당 함수 역시 GPU의 렌더링 파이프라인을 모방하여 구성하였다

GPU에서는 삼각형을 구성하는 픽셀Fragment라고 표현하며 

Fragment에 대한 셰이더파편 셰이더 또는 픽셀 셰이더라고 표현한다

FragmentShader2D 함수는 파편 셰이더를 모방하여 구성하였다

 

- 최종 실행 결과

일반적인 렌더링

 

와이어프레임 렌더링

728x90
반응형

'수학 > 이득우의 게임 수학' 카테고리의 다른 글

3차원 공간의 설계  (0) 2026.02.04
카메라 시스템  (0) 2026.01.28
게임 엔진의 워크플로우  (0) 2026.01.14
리소스 저장소  (0) 2026.01.14
Scene의 구조 (3) - 로컬 공간과 로컬 축  (0) 2026.01.07