1. ShaderLab(쉐이더랩)
ShaderLab이란 유니티에서 모든 Shader 파일을 작성할 때 사용하는 선언형 언어이고 중첩 중괄호 구문을 이용해 다양한 요소로 선언이 가능합니다.
유니티에서 Shader 파일을 만들어서 열어보면 평소 우리가 사용하는 언어와 비슷하지만 조금씩 다른 점을 확인하실 수 있습니다.
자세한 내용은 공식 문서에 잘 나와 있으므로 자세한 내용은 아래 링크 참고해 주세요.
1-1. 왜 ShaderLab?
유니티는 왜 ShaderLab을 통해 Shader를 작성하게 했을까요??
유니티는 멀티 플랫폼 제작이 자동으로 지원되는 엔진입니다.
즉,
모바일, PC, 콘솔기기에 따라 제작되는 Shader가 다르고 그림자가 있을 때 없을 때 라이트맵이 있을 때 없을 때 등 여러 가지 경우의 수에 따라 제작 방식이 달라집니다.
이렇게 다양한 경우의 수가 있고 그 수에 따라 Shader를 만들어 관리한다면 유지보수 차원에서 너무 효율적이지 못하게 됩니다.
그러므로, 유니티는 Shader 작성 언어를 ShaderLab이란 언어로 하고 각 상황에 따른 분기를 자동으로 작성해 줌으로써
사용자가 ShaderLab이란 하나의 언어를 통해 다양한 상황에 맞추어 개발할 수 있게 하였습니다.
2. ShaderLab을 이용한 제작 방식
2-1. ShaderLab으로만 작성
- 매우 가볍고 하드웨어 호환성이 좋지만, 기능이 상당히 부족하기에 고급 효과를 기대하기엔 어렵습니다.
- 자체 문법으로 이루어져 있어 다른 쉐이더 문법과 거의 호환되지 않는 단점을 가집니다.
- 추천 X (지원 중단 예정)
2-2. Surface Shader(서피스 쉐이더)로 작성
- ShaderLab 스크립트와 함께 일부분은 CG쉐이더 코드를 사용하는 방법입니다.
- 기본적인 조명 코드와 버텍스 쉐이더의 복잡한 부분은 스크립트를 이용하여 자동으로 처리되고 있습니다.
- 픽셀 쉐이더 부분만 간편하게 작성할 수 있어 편리합니다.
- 비주얼 쉐이더 에디터와도 비슷한 개념을 가지고 있어 초보자가 공부하기에 좋고 응용하기 좋습니다.
- 최적화에 다소 무리가 있고, 일정 수준 이상의 고급 기법을 구현하기에는 어려운 면이 있습니다.
Unity - Manual: Writing Surface Shaders
2-3. Vertex & Fragment Shader로 작성
- ShaderLab 스크립트와 함께 CG쉐이더 코드를 사용하지만 좀 더 본격적인 쉐이더 작성 방법입니다.
- 자동으로 처리해 주는 부분이 없어 제대로 된 CG 쉐이더 방식으로 버텍스의 좌표 변환부터 제대로 처리해야 작동합니다.
- 배우기 힘들지만 완전히 수동으로 제어가 가능해 최적화와 고급 기법을 표현할 때 좋습니다.