오늘부터 Unity Shader에 관련해 공부하며, 습득한 것들을 다시 뒤돌아 볼 수 있도록, 조금씩 정리, 작성 해 보려한다.


Render Pipeline

현재 Unity 버전에서는 세 가지 종류의 Render Pipeline이 있다.

  • Built-in RP(기본 렌더 파이프라인)

  • Universal RP(이전 버전에서는 Lightweight RP로 불림)

  • High-Definition RP(HD RP)

파이프 라인이란?

  • 일련의 단계를 거쳐 더 큰 작업을 수행하는 과정을 의미한다.
  • 즉, 여러 개의 단계가 순차적으로 실행되면서 전체적인 작업을 처리하는 방식이다.

Render Pipeline이란?

  • 3D 객체(폴리곤 오브젝트)가 화면에 렌더링되기까지 거치는 전체 과정을 의미한다.
  • 각 Render Pipeline마다 고유한 특징이 있으며, 사용 중인 파이프라인의 종류에 따라 화면상의 오브젝트의 외형 및 최적화 방식이 달라진다.

예를 들어, 다음 요소들이 영향을 받는다.

  • 재질(Material) 속성
  • 광원(Light Source)
  • 텍스처(Texture) 처리 방식
  • 셰이더 내부의 연산 방식

Render Pipeline의 기본 아키텍처

Unity는 Render Pipeline의 아키텍처를 4가지 단계로 나눈다.

  • Application Stage(애플리케이션 단계)
  • Geometry Processing Phase(지오메트리 처리 단계)
  • Rasterization Stage(래스터라이제이션 단계)
  • Pixel Processing Stage(픽셀 처리 단계)

이 모델은 실시간 렌더링 엔진에서 사용되는 기본적인 Render Pipeline 모델이다.


애플리케이션 단계 (Application Stage)

애플리케이션 단계는 CPU에서 시작되며, 씬(Scene) 내에서 발생하는 여러 작업을 처리하는 역할을 한다. 예를 들어, 다음과 같은 작업이 이 단계에서 수행된다.

  • 충돌 감지 (Collision Detection)

  • 텍스처 애니메이션 (Texture Animation)

  • 키보드 입력 (Keyboard Input)

  • 마우스 입력 (Mouse Input)

기능

  • 저장된 메모리 데이터를 읽어 기하학적 기본 요소(Primitives)를 생성한다.
    • 예: 삼각형, 선, 정점(Vertex) 등
  • 애플리케이션 단계가 끝나면, 이 정보가 지오메트리 처리 단계(Geometry Processing Phase)로 전달된다.
  • 이후 행렬 곱셈(Matrix Multiplication)을 이용한 정점 변환(Vertex Transformation)이 진행된다.

지오메트리 처리 단계 (Geometry Processing Phase)

우리가 컴퓨터 화면에서 보는 이미지는 CPU가 요청한 뒤 GPU에서 처리된다.

이 과정은 두 가지 주요 단계를 거친다.

  1. 렌더 상태(Render State) 구성
    • Geo 처리 단계부터 픽셀 처리 단계까지 포함하는 일련의 과정을 설정하는 단계
  2. 객체(Object) 그리기
    • 설정된 상태를 기반으로 화면에 객체를 렌더링

GPU에서 진행되며, 정점(Vertex) 처리 작업을 수행하는 단계이다.

이 단계는 4개의 하위 프로세스로 나뉜다.

  • Vertex Shading(정점 셰이딩)
  • Projection(투영)
  • Clipping(클리핑)
  • Screen Mapping(스크린 맵핑)

Vertex Shader Stage(정점 셰이더 단계)의 역할

  • 객체의 정점(Vertex) 위치를 계산한다.
  • 계산된 정점 위치를 다양한 좌표 공간(Space Coordinates)으로 변환하여 화면에 투영(Projection)할 수 있도록 한다.

이 과정에서 정규 벡터(Normals), 탄젠트(Tangents), UV 좌표(UV Coordinates) 등의 속성을 다음 단계로 전달할 수 있다.

Projection(투영)과 Clipping(클리핑)

  • 투영 방식은 카메라(Camera) 설정에 따라 달라진다.

    • Perspective
    • Orthographic, 평행 투영
  • 렌더링 프로세스는 카메라 절두체(Camera Frustum), 뷰 공간(View-Space)

    내에 있는 요소만을 처리한다.

    • 예를 들어, 씬에 있는 구의 절반이 카메라 프러스텀 밖에 있다면

      • 절두체 안에 있는 부분만 화면에 투영

      • 절두체 밖의 영역은 렌더링에서 제외(Clipping)

Screen Mapping(스크린 맵핑)

  • 클리핑된 오브젝트는 메모리에 저장된 후 2D 화면 좌표(Screen Coordinates)로 변환된다.
  • 이를 스크린 좌표(Screen Coordinates) 또는 윈도우 좌표(Window Coordinates)라고 한다.

래스터라이제이션 단계 (Rasterization Stage)

이제 객체는 2D 화면 좌표를 가지며, 픽셀(Pixel)로 변환되는 과정을 거친다.

이러한 화면 픽셀을 찾아내는 과정래스터라이제이션(Rasterization)이라고 한다.

  • 씬(Scene) 내의 객체와 화면의 픽셀을 동기화(Synchronization)하는 과정
  • 두 가지 주요 프로세스로 구성됨

Triangle Setup(삼각형 설정)

  • 객체의 경계선을 정의하는 수학적 방정식을 생성
  • 이 데이터는 다음 과정으로 전달됨

Triangle Traversal(삼각형 탐색)

  • 삼각형 내에 포함되는 모든 픽셀을 나열(Listing)
  • 이때 생성된 픽셀 그룹을 프래그먼트(Fragments)라고 한다.

픽셀 처리 단계 (Pixel Processing Stage)

이 단계에서는 이전 과정에서 생성된 픽셀 데이터를 기반으로 최종 Color를 계산한다.

이 과정이 끝나면 픽셀들이 화면에 렌더링된다.

Pixel Shader Stage(픽셀 셰이더 단계)의 역할

  • 각 픽셀의 가시성(Visibility)을 결정
  • 픽셀의 최종 색상을 계산하여 컬러 버퍼(Color Buffer)에 저장
  • 이후, 완성된 이미지가 화면에 출력.

댓글남기기