Client/C# with Unity

[정보] 몰랐던 사실 기록! 1. 쉐이더 2. 랜더링 파이프라인

Ardmos :) 2022. 2. 2. 03:12

1. Shader == Meterial (심지어 언리얼엔진에서는 쉐이더가 없고 모두 메터리얼이라고 부른다고 한다! 충격...!)

2. Rendering Pipeline (랜더링이 이루어지는 순서. 아래의 모든 과정이 매 프레임 이루어지는 것이다.)

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

    그래픽카드가 Vertex로 이루어진 오브젝트의 데이터 값을 받아와서 Vertex 정보에 따라 

Vertex들 사이를 이어서 면을 생성한다. 

  2. Vertex 쉐이더:

    1. 모든 오브젝트들의 로컬 좌표계를 월드 좌표계로 변환해준다.

    2. 월드 좌표계로 변환된 모든 버텍스들에 '카메라 행렬'을 곱해서 모든 버텍스들이 카메라로부터 얼마나 떨어져있는지 알아낸다. - 여기까지가 Orthographic Projection

    3. 만일 Perspective Projection일 경우 Orthographic projection에는 없는 원근감을 추가해주기 위하여 '카메라 행렬'로 정렬된 버텍스들에 'Projection 행렬'을 곱한다.

이렇게 해주면 카메라에서 먼 곳은 작아보이게된다. 

    ** 이 단계에서 Hull Shader, Tessellator, Domain Shader, Geometry Shader, Compute Shader 등의 쉐이더들이 추가로 들어가기도 한다. 

  3. Rasterizer:

    1. 모니터에 오브젝트를 출력해주기 위해 3D공간을 2D 이미지로 만드는 과정이다. 

    2. 오브젝트를 모니터의 어느 픽셀로 표현할지 결정하게되어 이 다음 단계에서 픽셀에 접근할 수 있게 된다. 

  4. Pixel Shader / Fragment Shader:

    1. 2D 상태로 넘어온 3D 그래픽 데이터에 본격적으로 조명(Vertex 쉐이더 단계에서 연산해주지 않은 경우), 텍스쳐, 그림자 등 특수효과들을 추가해준다. 

 

 

*참고 서적 - 테크니컬 아티스트를 위한 유니티 쉐이더 스타트업 ( 정종필 저 )

 

 

728x90