1 minute read

(유니티 쉐이더 스타트업 - 정종필)

1. 쉐이더 기초

  • 쉐이더

    • 3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수를 말한다.

    • 그래픽 데이터의 음영과 색상을 계산하여 다양한 재질을 표현하는 방법이다.

  • 랜더링 파이프 라인

    1) 오브젝트 데이터 받아오기

    • 그래픽 카드는 버텍스로 이루어진 물체의 데이터값을 받아온다.

    • 버텍스에는 Index number / position / normal / color 등의 정보를 가진다.

    • 버텍스 정보를 가지고 그래픽 카드에서는 정점이 이어진 삼각형을 만든다.

    2) 버텍스 쉐이더

    • 버텍스의 로컬좌표계를 월드좌표계로 변환해주고, 카메라 행렬과의 곱을 통해 카메라의 중심점에서 얼마만큼 떨어져 있는지를 표현한다.

    • 프로젝션 행렬을 곱하여 원근감을 부여해준다.

    3) 래스터 라이져

    • 오브젝트가 모니터에서 표현될 때, 어떤 픽셀로 표현될 것인지를 나타내는 장치를 거치게 된다. 2D 픽셀로 표현되며, 모니터 출력 과정을 일컫는다.

    4) 픽셀 쉐이더 / 프래그먼트 쉐이더

    • 모니터까지 넘어온 그래픽 데이터는 화면에 픽셀로 찍히게 되지만, 텍스쳐, 라이팅이 없는 상태이다. 픽셀쉐이더와 프래그먼트 쉐이더가 가동되면서 조명과 텍스처, 그림자와 특수효과 등을 연산하게 된다.

:mag_right: 버텍스 쉐이더(Vertex Shader): 3D 모델의 각 버텍스에서 실행되는 프로그램으로, 버텍스 위치를 오브젝트 공간에서 클립 공간으로 변환해준다. 프래그먼트 쉐이더에서 텍스처를 샘플링하기 위해 필요하다.

:mag_right: 프래그먼트 쉐이더(Fragment Shader): 오브젝트가 화면에서 차지하고 있는 모든 픽셀마다 실행되는 프로그램으로 각 픽셀의 컬러를 계산하고 출력하기 위해 사용된다. 최적화에 중요하다.

  • 모니터에 표현되는 색과 빛의 기본원리

    • 가산 혼합: RGB로 이루어진 색을 더하면 더할수록 밝아지고, 모두 더하면 흰색이 되는 색 체계를 말한다.

    • 유니티에서는 쉐이더 랩이라고 하는 자체 스크립트 언어를 사용한다.

  • 쉐이더 랩 스크립트 작성 방식

    1. 쉐이더 랩으로만 : 가볍고 하드웨어 호환성 우수 / 기능 부족

    2. Surface shader로 작성: 쉐이더 랩 스크립트와 CG 쉐이더 코드 사용. 기본적인 조명 코드와 버텍스 쉐이더의 복잡한 부분은 스크립트를 이용하여 자동으로 처리되고, 픽셀 쉐이더 부분만 간편하게 작성할 수 있어서 편하다. / 최적화 무리, 일정수준 이상의 고급 기법 구현에 어려움.

    3. 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.



:books: Reference

1)유니티 쉐이더 스타트업 - 정종필(대마왕)

2)Unity Documentation