셰이더는 오브젝트가 단독으로 표시되는 방법(머티리얼 프로퍼티)과 광원에 반응하는 방법을 모두 정의합니다. 조명 계산을 셰이더 내부에 빌드해야 하고, 가능한 광원 및 섀도우 타입이 많기 때문에 “간단히 작동하는” 양질의 셰이더를 쓰려면 많은 노력이 필요합니다. 이 작업을 쉽게 할 수 있도록 Unity에는 모든 조명, 섀도우, 라이트매핑, 포워드 대 디퍼드 렌더링 작업이 자동으로 처리되는 표면 셰이더가 있습니다.
이 문서에서는 Unity의 조명 및 렌더링 파이프라인의 특징과 표면 셰이더 씬의 배경에서 수행되는 작업에 대해 설명합니다.
조명이 적용되는 방법과 사용되는 셰이더의 패스는 사용되는 렌더링 경로에 따라 결정됩니다. 셰이더의 각 패스는 해당 조명 타입을 패스 태그를 통해 알립니다.
ForwardBase
및 ForwardAdd
패스가 사용됩니다.Deferred
패스가 사용됩니다.PrepassBase
및 PrepassFinal
패스가 사용됩니다.Vertex
, VertexLMRGBM
및 VertexLM
패스가 사용됩니다.ShadowCaster
패스가 사용됩니다.ForwardBase
패스는 앰비언트, 라이트맵, 주 방향 광원 및 중요하지 않은 (버텍스/SH) 광원을 동시에 렌더링합니다. ForwardAdd
패스는 추가 픽셀당 광원에 사용되며, 이러한 광원에 의해 비춰지는 오브젝트당 한 번의 호출이 수행됩니다. 자세한 내용은 포워드 렌더링을 참조하십시오.
포워드 렌더링을 사용하는 경우 셰이더에 포워드 적합 패스가 없으면(즉, ForwardBase
또는 ForwardAdd
패스 타입이 모두 없는 경우) 오브젝트가 아래와 같이 버텍스 릿 경로에서 렌더딩되는 것과 똑같이 렌더링됩니다.
Deferred
패스는 조명에 필요한 모든 정보(빌트인 셰이더에서는 디퓨즈 컬러, 스페큘러 컬러, 평활도, 월드 공간 노멀, 이미션)를 렌더링합니다.
또한 라이트맵, 반사 프로브 및 주변광을 이미션 채널에 추가합니다. 자세한 내용은 디퍼드 셰이딩을 참조하십시오.
PrepassBase
패스는 노멀 및 스페큘러 지수를 렌더링하고 PrepassFinal
패스는 텍스처, 조명 및 발광 머티리얼 프로퍼티를 결합하여 최종 컬러를 렌더링합니다. 모든 일반적인 씬의 조명은 스크린 공간에서 개별적으로 수행됩니다. 자세한 내용은 디퍼드 라이팅을 참조하십시오.
버텍스 조명은 프로그래밍 가능한 셰이더를 지원하지 않는 플랫폼에서 가장 많이 사용되기 때문에 Unity는 라이트맵이 적용되고 라이트맵이 적용되지 않는 사례를 처리하기 위해 내부적으로 여러 셰이더 배리언트를 생성할 수 없습니다. 따라서 라이트맵이 적용되고 라이트맵이 적용되지 않은 오브젝트를 처리하려면 여러 패스를 명시적으로 작성해야 합니다.
Vertex
패스는 라이트맵이 적용되지 않은 오브젝트에 사용됩니다. 모든 광원은 고정 기능 OpenGL/Direct3D 조명 모델(블린퐁)을 사용하여 동시에 렌더링됩니다.VertexLMRGBM
패스는 라이트맵이 RGBM으로 인코딩된 경우(PC 및 콘솔)에 라이트맵이 적용된 오브젝트에 사용됩니다. 실시간 조명은 적용되지 않고 패스는 텍스처를 라이트맵과 결합해야 합니다.VertexLMM
패스는 라이트맵이 double-LDR로 인코딩된 경우(모바일 플랫폼)에 라이트맵이 적용된 오브젝트에 사용됩니다. 실시간 조명은 적용되지 않고 패스는 텍스처를 라이트맵과 결합해야 합니다.