Rendering Pipeline

1 minute read

랜더링파이프라인의 정의

  1. 3차원 이미지를 2차원 래스터 이미지로 표현하기 위한 단계적인 방법

    래스터란?
    이미지를 2차원 배열 형태의 픽셀로 구성하고 이 점들의 모습을 조합. 한줄에서 연속된 픽셀들의 집합을 래스터라고 한다.

    오브젝트를 랜더링하기위해 많은 데이터들을 필요로 한다.

    • 오브젝트의 입체적 형태를 나타내는 Mesh정보
    • 알베도(Albedo), 노멀(Normal), 스펙큘러(Specular)등의 텍스처 정보
    • 라이팅(Lighting)처리를 위한 쉐이더(Shader)정보
    • 위치, 회전, 스케일을 정의하는 트랜스폼(Transform)정보

  2. 위와 같은 많은 데이터를 처리하는 과정, 랜더링 파이프라인(Rendering Pipeline) 혹은 그래픽스 파이프라인(Graphics Pipeline)이라는 용어로 설명

랜더링파이프라인의 주요파트

  • 애플리케이션(Application) -> 지오메트리(Geometry) -> 레스터라이저(Rasterizer)

애플리케이션 스테이지

애플리케이션 스테이지는 CPU에의해 연산을 하고 보통 랜더링 파이프라인이라는 과정에서 떼어놓고 말한다. 본격적인 그래픽 랜더링 파이프라인에 진입하기전 매프레임 CPU에 의해 연산되는 케릭터의 이동후 위치정보, 애니메이션정보와 뼈대들의 위치 랜더링 가능한 오브젝트들을 선별하는 컬링연산 및 배칭처리 단계

지오메트리 스테이지

- 월드-뷰-프로젝션 트랜스폼
- 클리핑(clipping)
- 버텍스 쉐이더(vertex shader)

전반적으로 오브젝트의 각 버텍스들을 화면상의 적절한 위치에 배치시키는 과정

버텍스 트랜스폼

랜더링을 수행해야 하는 시점이 되면 버텍스 데이터들을 GPU메모리에서 가져온다. 그리고 적절한 위치에 그려주기 위해서 위치변환 트랜스폼을 수행한다.

World-View-Projection Transform

버텍스 데이터는 특정위치가 반영된 데이터가 아닌 메시 형태만 반영되어 있는 데이터 오브젝트는 여러 인스턴스에 사용되며 인스턴스마다 위치가 다르고 매번 위치가 바뀌기 때문에 원점 기준의 메시 모델에 대한 위치 데이터 즉 로컬 스페이스에 존재한다.

  1. 월드 트랜스폼
    • 로컬스페이스 위치 정보를 가지고 있는 오브젝트를 3D공간상의 특정위치시켜주는 좌표 변환과정
    • 메시의 모든 버텍스의 위치와 노멀을 월드스페이스로 변환 시킨다
  2. 뷰 트랜스폼
    • 카메라가 바라보는 위치에 오브젝트를 위치시키는 변환과정
  3. 프로젝션 트랜스폼(투영)
    • 3D공간을 2D상의 위치로 매칭시켜주는 과정
    • 이 과정에서 원근법도 적용이 된다.
    • 퍼스펙티브 프로젝션(perspective projection) 원근법이 적용된 투영 (3D)
    • 오쏘 그래픽 프로젝션(orthographic projection) 원근법이 무시된 투영 (2D)


버텍스 쉐이더(Vertex Shader)

  • 버텍스에 특수한 효과를 위한 왜곡 , 버텍스의 노멀방향으로 부피를 확장, 버텍스별로 처리되는 라이팅의 결과 반영, 픽셀 라이팅보다 러프하게 표현


지오메트리 생성

  • 버텍스 쉐이더를 거치고 나면 버텍스들이 연결되어 선이 만들어지고 도형의 형태가 된다 지오메트리 생성은 버텍스 쉐이더에서 버텍스의 트랜스폼들이 결정되고 나면 다음 단계에서 자동으로 이루어진다.

래스터라이저 스테이지(Rasterizer Stage)

오브젝트가 그려져야 할 픽셀들을 추스리고 그픽셀의 색을 결정하는 단계 메시의 폴리곤에 속한 영역을 픽셀로 매칭시키는 과정을 레스터라이제이션(Rasterization)이라고 한다. 레스터라이제이션이 이루어지고 나면 최종적으로 화면에 그려져야 할 픽셀의 최종색이 결정되어야한다. 이러한 과정이 래스터라이저 스테이지에서 수행된다.

  • 뎁스 버퍼(Depth Buffer), Z버퍼

    픽셀 쉐이더에서 결정된 픽셀의 최종 색상 정보는 R,G,B,A 4채널로 구성된 데이터 배열에 저장되고 추가로 Z버퍼라는 곳이 존재하는데 이곳에 카메라로부터의 거리를 뜻하는 깊이값이 저장되고 픽셀이 랜더링 될 때마다 깊이 판정을 수행한다.