3D와 랜더링 파이프라인

Unity/Study 2019. 4. 19. 01:49

1프레임은 1장의 이미지와 같다.

PC는 3D모델을 재생하는데에 수 많은 연산을 통해 2D 이미지를 연속적으로 재생한다.


unity에서 부르는 scene은 object들의 모음으로서, 이 object들은 Polygon(다각형)이고, 이는 Vertex(꼭지점)으로 이루어진다.

내가 현재 공부하면서 사용하는 모델을 보면 모두 Polygon으로 이루어져 있다.


또한 카메라라고 부르는 object는 우리가 모니터를 통해 게임을 플레이할때 랜더링을 하여 출력할 이미지의 범위(?)를 지정하는 것이다.

카메라가 비추는 부분을 랜더링 파이프라인을 통하여 2D 이미지로 변환하여 모니터에 출력해주는 것이다.


카메라가 비추고 있는 부분, 즉 출력할 장면을 하나의 3차원 이미지라고 하자.

그럼 이 3차원 이미지는 여러개의 Polygon으로 이루어져 있고, 이 Polygon들은 Vertex로 이루어져 있다.

이 3차원 이미지의 Vertex들을 모아 Vertex Shader(정점 셰이더)로 보낸다.

Vertex Shader에서는 변환 과정을 맡는다. 

각각의 Polygon들은 각각의 공간(Local Space)에서 자신만의 좌표(Coordinate)를 가지고 있는데, 이 Polygon들을 하나의 공간(Space)에 모은다.

//unity에서 쓰는 local position 값을 world position으로 바꾼다고 생각하면 편할 것 같다.

후에 우리가 출력을 원하는 곳을 가리키는 카메라가 보고 있는 공간(View Space)으로 Polygon들이 위치한다.

사용하는 카메라라는 개념은 현실과 다르기때문에 일정한 구역까지만 표현한다. //게임에서 시야거리 조절하듯이


위처럼 카메라가 위치해 있는 곳 부터 far plane까지만 표현하는 것이다. 위 그림에서 파란 공간을 view volume이라 한다.

후에 원근법을 이용하여 표현하기 위해 Clipping Space로 변환한다. (3차원 -> 3차원)


그 다음 레스터화(resterize)를 한다.

Clipping Space로 변환하고 나면 선에 걸치거나 육면체 바깥으로 벗어난 Polygon들이 있을텐데 이 부분들을 잘라낸다.

이를 Clipping이라 한다.

다음으로 원근 나눗셈이라는 것을 통하여 3차원을 2차원으로 변환한다. (z좌표로 모든 성분을 나누어 3차원 개념을 지움)

그 다음 보이지 않는 Polygon, 즉 필요가 없는 Polygon들을 제거한다.(back-face culling)

그리고 2차원으로 변환된 이미지가 출력될 뷰포트(스크린상의 공간)으로 이전하기 위해 윈도우 좌표로 변환한다.

마지막으로 픽셀 위치, 컬러 등 각 Vertex간 속성을 할당한다.


마지막으로 생성된 pixel들에 조명, 텍스쳐 등 작업을 거쳐 색칠하는 단계를 거친다. (이를 프래그먼트 처리 단계라고 함)




※공부하는 중이기 때문에 사실과는 다를 수 있음

※내가 이해한 내용을 작성하였기 때문에 난잡함

※랜더링 파이프라인은 고정 기능 파이프라인, 프로그래머블 파이프라인이 있다. (Unity에서는 Scriptable Render Pipeline이 있음)

  //https://www.youtube.com/watch?v=eJEwnI8UGe4 (Scriptable Render Pipeline: 알아두어야 하는 사항들 (Unity Korea))

  //https://www.youtube.com/watch?v=zbjkEQMEShM (Unity at GDC - Scriptable Render Pipeline Intro & Lightweight Rendering Pipeline (Unity))





How Rendering Graphics Works in Games! (TheHappieCat)

https://www.youtube.com/watch?v=cvcAjgMUPUA


Game Graphics Pipeline Explained by Tom Petersen of nVidia (Gamers Nexus)

https://www.youtube.com/watch?v=4gyP94hsC14


Understanding the Graphics Pipeline (Oscar Chavez)

https://www.youtube.com/watch?v=0PTBOX1HHIo


Graphics Pipeline 3D Rendering (LearnEveryone)

https://www.youtube.com/watch?v=BUcch9b6cFg


21 - Rendering Pipeline (Shaderdev.com) (Chayan Vinayak)

https://www.youtube.com/watch?v=qHpKfrkpt4c

'Unity > Study' 카테고리의 다른 글

testgpgs개인정보  (0) 2019.06.13
Animator 이용법 자습  (0) 2019.05.09
GitHub  (0) 2019.05.02
: