유니티 쉐이더
(유니티 쉐이더 스타트업 - 정종필)
1. 쉐이더 기초
-
쉐이더
-
3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수를 말한다.
-
그래픽 데이터의 음영과 색상을 계산하여 다양한 재질을 표현하는 방법이다.
-
-
랜더링 파이프 라인
1) 오브젝트 데이터 받아오기
-
그래픽 카드는 버텍스로 이루어진 물체의 데이터값을 받아온다.
-
버텍스에는 Index number / position / normal / color 등의 정보를 가진다.
-
버텍스 정보를 가지고 그래픽 카드에서는 정점이 이어진 삼각형을 만든다.
2) 버텍스 쉐이더
-
버텍스의 로컬좌표계를 월드좌표계로 변환해주고, 카메라 행렬과의 곱을 통해 카메라의 중심점에서 얼마만큼 떨어져 있는지를 표현한다.
-
프로젝션 행렬을 곱하여 원근감을 부여해준다.
3) 래스터 라이져
- 오브젝트가 모니터에서 표현될 때, 어떤 픽셀로 표현될 것인지를 나타내는 장치를 거치게 된다. 2D 픽셀로 표현되며, 모니터 출력 과정을 일컫는다.
4) 픽셀 쉐이더 / 프래그먼트 쉐이더
- 모니터까지 넘어온 그래픽 데이터는 화면에 픽셀로 찍히게 되지만, 텍스쳐, 라이팅이 없는 상태이다. 픽셀쉐이더와 프래그먼트 쉐이더가 가동되면서 조명과 텍스처, 그림자와 특수효과 등을 연산하게 된다.
-
버텍스 쉐이더(Vertex Shader): 3D 모델의 각 버텍스에서 실행되는 프로그램으로, 버텍스 위치를 오브젝트 공간에서 클립 공간으로 변환해준다. 프래그먼트 쉐이더에서 텍스처를 샘플링하기 위해 필요하다.
프래그먼트 쉐이더(Fragment Shader): 오브젝트가 화면에서 차지하고 있는 모든 픽셀마다 실행되는 프로그램으로 각 픽셀의 컬러를 계산하고 출력하기 위해 사용된다. 최적화에 중요하다.
-
모니터에 표현되는 색과 빛의 기본원리
-
가산 혼합: RGB로 이루어진 색을 더하면 더할수록 밝아지고, 모두 더하면 흰색이 되는 색 체계를 말한다.
-
유니티에서는 쉐이더 랩이라고 하는 자체 스크립트 언어를 사용한다.
-
-
쉐이더 랩 스크립트 작성 방식
-
쉐이더 랩으로만 : 가볍고 하드웨어 호환성 우수 / 기능 부족
-
Surface shader로 작성: 쉐이더 랩 스크립트와 CG 쉐이더 코드 사용. 기본적인 조명 코드와 버텍스 쉐이더의 복잡한 부분은 스크립트를 이용하여 자동으로 처리되고, 픽셀 쉐이더 부분만 간편하게 작성할 수 있어서 편하다. / 최적화 무리, 일정수준 이상의 고급 기법 구현에 어려움.
-
Vertex & Fragment shader로 작성: 버텍스의 좌표 변환부터 제대로 처리해야 작동한다. 배우기 어렵지만, 완전히 수동으로 제어할 수 있어서 최적화와 고급기법 표현에 좋다.
-
2. Lambert 라이팅
3. Blinn-Phong 라이팅
4. Custom) Lambert 라이트
5. Custom) Rim 라이트
6. Custom) Blinn-Phong 라이트
7. Custom) NPR 렌더링
8.
9.
10.
11.
12.
Reference
1)유니티 쉐이더 스타트업 - 정종필(대마왕)
2)Unity Documentation