[Graphics] 그래픽스 스터디 (1)

박민주·2022년 1월 21일
0

Unity

목록 보기
9/40
post-thumbnail

쉐이더(Shader)

  • 3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수
  • 그래픽 데이터의 음영과 색상을 계산하여 다양한 재질을 표현하는 방법

렌더링 파이프라인(Rendering Pipeline : 렌더링 순서)

렌더링 파이프라인 과정

1단계. 오브젝트 데이터 받아오기
2단계. 정점(버텍스: Vertex) 쉐이더
3단계. 래스터라이져(Rasterizer)
4단계. 픽셀쉐이더(Pixel Shader) / 프레그먼트 쉐이더(Fragment Shader)


1단계. 오브젝트 데이터 받아오기

  • 그래픽 카드는 버텍스로 이루어진 물체의 데이터 값을 받아옴
  • 버텍스는 버텍스의 Index number, Position, Normal, Color, UV 등의 정보를 가짐
  • 그래픽 카드에서는 위 버텍스 정보를 가지고 삼각형 면들을 생성하여 기본적인 오브젝트 형태를 만듦

2단계. 정점(버텍스: Vertex) 쉐이더

  • 1단계에서 넘어온 데이터들을 이용해서 좌표 변환을 함

    1) 로컬 좌표계 상태
    2) 월드 좌표계로 변환
    3) 뷰 좌표계로 변환
    4) 프로젝션 좌표계로 변환
    5) 뷰포트 좌표계로 변환

로컬 좌표계?

  • 물체가 가지고 있는 자기 중심적인 위치 값
  • 오브젝트 자신의 피봇이 원점(0, 0, 0) 위치 값인 상태
  • 유니티에서는 오브젝트 좌표계라고도 부름

월드 좌표계?

  • 로컬 좌표계에 월드 변환 행렬을 곱하면 변환되는 좌표계
  • 절대 좌표인 월드 좌표계의 위치로부터 각 물체의 상대적 위치 값을 의미
  • 자신의 피봇이 원점이었던 로컬 좌표계와 달리 월드의 중심점이 원점(0, 0, 0)이 되고, 다른 물체들은 여기서 얼마나 떨어져있는지로 표현됨

뷰 좌표계?

  • 월드 좌표계의 버텍스들에 '카메라 행렬'을 곱해서 카메라 중심점으로부터의 상대적 거리로 다시 연산
  • 카메라의 중심점이 원점(0, 0, 0)이 됨
  • 카메라 행렬은 뷰(View)라고 불리며, 오쏘그래픽 프로젝션(Orthographic Projection)이라고도 불림
  • 원근감은 고려되어 있지 않은 상태

프로젝션 좌표계?

  • 뷰 좌표계에 프로젝션(Projection) 행렬로 곱해진 상태
  • 원근감을 부여해주기 위한 방법으로, 카메라에서 먼 곳은 좁혀진 것처럼 버텍스 위치를 조정해줌

  • 위 사진처럼 Unity 카메라에도 Projection 옵션에 Perspective(default)와 Orthographic이 있는데, 렌더링할 때 프로젝션 행렬을 곱해주는지 마는지에 대한 차이가 아닐까 생각된다

여기 단계까지 하면 픽셀 쉐이더를 거치지 않아서 모니터로는 볼 수 없는 3D 공간에서 존재하는 오브젝트가 된다고 한다


3단계. 래스터라이져(Rasterizer)

래스터라이져?

  • 오브젝트가 모니터에서 표현될 때 어느 픽셀로 표현될 것인지를 나타내는 장치
  • 3D 오브젝트가 2D 픽셀로 표현되는 과정

참고

  • Direct-X에서는 버텍스 쉐이더와 픽셀 쉐이더의 중간에 여러가지 쉐이더가 추가로 들어간다고 함
  • Hull Shader, Tessellator, Domain Shader, Geometry Shader, Compute Shader 등

4단계. 픽셀쉐이더(Pixel Shader) / 프레그먼트 쉐이더(Fragment Shader)

  • 3D 그래픽 데이터가 화면에 픽셀로 찍히게 된 상태
  • 픽셀쉐이더가 가동되면서 조명, 텍스쳐, 그림자, 각종 특수효과 등을 연산하게 됨

이와 같은 렌더링 파이프라인을 거치면 정점 데이터가 픽셀 색상이 됨

참고

profile
Game Programmer

0개의 댓글