렌더링파이프라인

1 minute read

렌더링 파이프라인

128비트 색상

rgba 각 성분을 32비트 부동소수점 값으로 표현

XMVECTOR 형식을 이용해서 색상 표현

32비트 색상

argb 각 성분을 8비트로 표현

렌더링 파이프라인의 개요

입력조립기(IA) -> 정점 셰이더(VS) -> 덮개 셰이더(HS) -> 테셀레이터 -> 영역 셰이더(DS) -> 기하 셰이더(GS) -> 래스터화 단계 -> 픽셀 셰이더(PS) 단계 -> 출력 병합기(OS) 단계

기하셰이더->스트림 출력

GPU 자원:버터, 텍스처는 모든 단계에서 읽기로 사용되며 스트림 출력과 출력 병합기 단계에서만 양방향으로 사용한다.

입력 조립기 단계

3차원 물체의 기본 구축 요소는 삼각형이며 이 삼각형들을 이용해서 도형을 구축한다.

정점 배열과 색인을 이용하면, 정점 배열만을 이용하여 표현할 때보다 효율적이다.(메모리 요구량 감소, 그래픽 하드웨어 처리량 감소), 정점의 중복을 줄일수 있기 때문

정점 셰이더

변환, 조명, 변위 매핑 등 특수 효과를 수행한다.

하드웨어에서 실행된다.

국소공간(local space), 세계 공간(world space)

각 물체는 자신의 국소 좌표계를 기준으로 구축되며 세계 공간에 배치된다.

세계 공간에 배치하기 위해서는 변환이 필요하다.(세계 변환(world transform), 세계 행렬(world matrix))

시야 공간, 시야 변환, 시야 행렬

3차원 장면의 2차원 이미지를 만들기 위해 사용하는 것

투영, 동차 절단공간, 절두체

정규화된 장치 좌표(NDC)

투영변환

테셀레이션

주어진 메시의 삼각형들을 더 잘게 쪼개서 새로운 삼각형들을 만드는 과정

DirectX11 이후로는 하드웨어에서 작업이 이루어지고 이전에는 CPU에서 이루어졌다.

11이전에는 테셀레이션을 많이 사용하지 않았다.

테셀레이션 단계는 생략이 가능하다.

기하 셰이더

기하구조를 GPU에서 생성하거나 파괴 가능

정점을 생성하지 못하는 정점 셰이더와는 달리 기하 셰이더는 기하구조를 생성, 폐기, 확장이 가능하다.

절단(clipping)

시야 절두체 경계면과 교차하는 기하구조를 절두체 내부의 것만 남도록 잘라내는것

절단 연산은 하드웨어가 수행

래스터화

투영된 3차원 삼각형으로부터 픽셀 색상들을 계산하는 것

절단 후 뷰포트 변환

후면 선별

관찰자에게 보이는 면이 전면, 뒤쪽면이 후면

전면은 정점이 시계방향으로 감기고, 후면은 반시계 방향으로 감긴다.

후면을 그리지 않음으로서 그려야하는 삼각형을 반으로 줄일수 있다.

정점 특성의 보간

뷰포트 변환을 거친 후 정점 자료의 색상, 법선 벡터. 텍스처 좌표, 깊이 값 등 추가적인 특성을 보간해야 한다.

이를 위해 원근 보정 보간을 수행하며 하드웨어에서 수행한다.

픽셀 셰이더

GPU가 실행하는 프로그램이며 각각의 픽셀 단편(pixel fragment)에 대해 실행

보간된 정점 특성들을 입력받아서 하나의 색상을 출력

고정된 상수 색상 반환, 픽셀당 조명, 반사, 그림자 효과등 다양한 작업 수행을 한다.

출력 병합기

픽셀 셰이더가 생성한 픽셀 단편이 출력 병합기로 입력되며 화면에 그려질 픽셀들만 후면 버퍼에 기록된다.(깊이 판정이나 스텐실 판정 등과 같은 판정으로 구분)

블렌딩도 이 단계에서 수행된다.