렌더링 파이프라인

수민·2023년 3월 7일
0

컴퓨터 그래픽스

목록 보기
1/1
post-thumbnail

렌더링 파이프라인이란?

GPU를 사용하여 리소스(텍스쳐, 정점/인덱스)를 2D 이미지로 렌더링하는 과정


입력 어셈블러 (Input Assembler)

  • 정점 버퍼의 정점 데이터(점, 선, 삼각형)를 다른 파이프라인 단계에서 사용할 프리미티브(선 리스트, 삼각형 리스트, 삼각형 스트립 등)로 조립한다.

정점 셰이더 (Vertex Shader)

  • IA 단계에서 출력되는 프리미티브의 각 정점에 대한 연산 수행
  • 변환, 스키닝, 조명 등
  • 모든 정점을 로컬 공간 -> 클립 공간으로 변환시켜준다.


테셀레이션 (Tessellation)

  • 생략 가능한 과정
  • 하나의 정점을 여러 개의 정점으로 잘게 쪼갤 수 있다.
    → 원하는 해상도로 부드러운 표면을 표현할 수 있다
  • 헐 셰이더 - 테셀레이터 - 도메인 셰이더 총 3단계로 구성된다

1. 헐 셰이더

  • 입력 제어점으로부터 출력 체어점(Control Point)과 패치 상수 생성

2. 테셀레이터

  • 도메인(선분, 삼각형, 사각형)을 작고 많은 프리미티브로 분할

3. 도메인 셰이더

  • 헐 셰이더의 출력 제어점과 uv 좌표를 사용하여 표면 메쉬 생성
  • 출력 패치에서 분할된 점의 정점 위치 계산
  • 하나의 정점 출력

기하 셰이더 (Geometry Shader)

  • 생략 가능한 과정
  • VS에서 새로운 프리미티브를 만들 수도 있고, 입력된 프리미티브를 버릴 수도 있다!
  • 새로운 프리미티브는 여기서 클립공간으로 변환하기도 함!
    여기서 스트림 출력을 통해 렌더링 파이프라인을 빠져나올 수도 있다

스트림 출력

  • GS 또는 VS에서 출력되는 정점 데이터를 연속적으로 메모리 버퍼로 GPU를 사용하여 출력한다!
  • 스트림 출력을 통해 버퍼로 출력된 데이터는 렌더링 파이프라인에서 다시 사용할 수 있다!

예시 파티클 시스템 구현 시 투패스 알고리즘
1) 기하셰이더에서 메쉬 생성 후 스트림 출력을 통해 빠져나옴
2) 두 번째 렌더링 파이프라인에서 렌더링


래스터라이저 (Raseterizer)

  • 벡터 정보(프리미티브) → 래스터 이미지 (픽셀)
  • 각 프리미티브를 구성하는 정점 → 픽셀로 변환
  • 프리미티브 내부의 점 → 보간을 통해 픽셀로 변환
  • 클리핑, 원근나눗셈, 은면제거, 뷰포트 변환, 스캔 변환 등

프래그먼트 셰이더 (Fragment Shader)

  • 각 픽셀들의 색상 결정
  • UV, Normal Mapping 등 이용하여 텍스쳐를 입힌다.
  • 조명 처리

출력 병합기 (Output Merger)

  • 최종적으로 픽셀의 색상을 결정하여 렌더타겟으로 출력
  • 깊이-스텐실 검사 (Depth-Stencil Test)
  • 블렌딩
    • 픽셀 값들을 블렌딩하여 하나의 최종 픽셀 색상을 결정
    • 렌더타겟의 픽셀 색상 + PS의 색상 결합
profile
우하하

0개의 댓글