Unity의 각 셰이더는 여러 서브셰이더로 구성됩니다. Unity는 메시를 표시해야 할 때 먼저 사용할 셰이더를 찾은 다음 사용자의 그래픽 카드에서 실행되는 첫 서브셰이더를 선택합니다.
Subshader { [Tags] [CommonState] Passdef [Passdef ...] }
서브셰이더를 선택 항목인 태그, 공통 스테이트, 패스 정의 리스트로 정의합니다.
서브셰이더는 렌더링 패스 리스트를 정의하고 선택적으로 모든 패스에 공통인 스테이트를 설정합니다. 추가로 서브셰이더 특화 태그를 설정할 수 있습니다.
Unity가 렌더에 사용할 서브셰이더를 선택할 때 정의된 각 패스에 대해 오브젝트를 한 번 렌더링하며 광원의 상호작용으로 인해 몇 번 더 렌더링할 수도 있습니다. 각 오브젝트 렌더는 비용이 큰 작업이므로 가능하다면 최소 비용이 드는 패스에서 셰이더를 정의하고자 할 것입니다. 물론 일부 그래픽스 하드웨어에서는 필요로 하는 효과를 단일 패스로는 구현이 불가능할 때도 있습니다. 이러한 경우에는 멀티플 패스를 사용해야 합니다.
각 패스는 일반 패스, 유즈 패스, 그랩 패스 중 하나로 정의됩니다.
패스 정의에서 허용되는 모든 명령은 서브셰이더 블록에도 사용할 수 있습니다. 이를 통해 모든 패스가 이 “공유” 스테이트를 사용할 수 있습니다.
// ...
SubShader {
Pass {
Lighting Off
SetTexture [_MainTex] {}
}
}
// ...
이 서브셰이더는 모든 조명을 끄고 _\MainTex__ 라는 이름의 텍스처가 있는 메시만을 표시하는 하나의 패스를 정의합니다.