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 쉐이더 단계에서 연산해주지 않은 경우), 텍스쳐, 그림자 등 특수효과들을 추가해준다.
*참고 서적 - 테크니컬 아티스트를 위한 유니티 쉐이더 스타트업 ( 정종필 저 )
'Client > C# with Unity' 카테고리의 다른 글
[문제 해결] Unity에서 Android 기기를 찾지 못할 때? (0) | 2023.10.25 |
---|---|
[정보] Unity 2D RayCast와 tag를 사용해서 화면에 터치된것들 구분하기! _ ex) UI에 가려진 부분은 터치에 반응하지 않도록 만들기. (0) | 2022.01.09 |
[Unity C#] String to int, Char to int (0) | 2022.01.08 |
[정보] Unity Resources.Load 스크립트상에서 유니티 Resources 폴더에 있는 데이터 사용하기! (0) | 2022.01.06 |
[정보] Unity Toggle 스크립트에서 listener 추가하는 방법. Toggle.onValueChanged.AddListener (0) | 2022.01.06 |