Unity의 셰이더는 기본적으로 셰이더 코드를 텍스처와 같은 파라미터와 결합하는 머티리얼 을 통해 사용됩니다. 셰이더/머티리얼 관계에 대한 자세한 설명은 여기에서 읽을 수 있습니다.
머티리얼 프로퍼티는 머티리얼 또는 머티리얼을 사용하는 게임 오브젝트 가 선택된 경우 인스펙터 에 나타납니다. 머티리얼 인스펙터는 다음과 같습니다.
각 머티리얼은 사용하는 특정 셰이더에 따라 인스펙터에서 약간 다르게 보입니다. 셰이더는 그 자체로 인스펙터에서 조정할 수 있는 프로퍼티의 종류를 결정합니다. 머티리얼 인스펙터는 머티리얼 참조 페이지에서 자세히 설명합니다. 셰이더는 머티리얼을 통해 구현됩니다. 따라서 셰이더는 인스펙터에 표시될 프로퍼티를 정의하지만, 각 머티리얼에는 실제로 슬라이더, 컬러, 텍스처의 조정된 데이터가 포함되어 있습니다. 가장 중요한 것은 하나의 셰이더를 여러 머티리얼에서 사용할 수 있지만 하나의 머티리얼은 여러 셰이더를 사용할 수 없다는 점입니다.
레거시 셰이더 이름을 변경하면 해당 기능에 영향을 미칠 수 있습니다. 이는 Unity 5.0 이전에 셰이더 일부 기능이 경로와 이름에 따라 결정되었기 때문입니다. 레거시 셰이더는 이런 방식으로 작동합니다. 자세한 내용은 레거시 셰이더 이름을 참조하십시오.
게임의 전반적인 성능에 영향을 줄 수 있는 여러 가지 요인이 있습니다. 이 페이지에서는 특히 빌트인 셰이더의 성능 고려 사항에 대해 설명합니다. 셰이더의 성능은 주로 셰이더 자체와 프로젝트 또는 특정 카메라가 사용하는 렌더링 경로에 달려 있습니다. 자체 셰이더를 작성할 때의 성능 팁은 ShaderLab 셰이더 성능 페이지를 참조하십시오.
Unity가 지원하는 렌더링 경로에서 Deferred Shading과 Vertex Lit 경로는 가장 예측 가능한 성능을 제공합니다. 디퍼드 셰이딩에서 각 오브젝트는 일반적으로 어떤 광원이 영향을 미치는지에 관계없이 한 번씩 드로우됩니다. 마찬가지로 버텍스 릿에서는 일반적으로 각 오브젝트가 한 번 드로우됩니다. 따라서 셰이더의 성능 차이는 대부분 사용하는 텍스처의 수와 수행하는 연산에 따라 달라집니다.
포워드 렌더링 경로에서 셰이더의 성능은 셰이더 자체와 씬의 광원 모두에 따라 달라집니다. 다음 섹션에서는 세부 정보를 설명합니다. 성능 관점에서 셰이더에는 두 가지 기본 카테고리로 Vertex-Lit 과 Pixel-Lit 이 있습니다.
Forward 렌더링 경로의 Vertex-Lit 셰이더는 항상 Pixel-Lit 셰이더보다 적은 비용이 듭니다. 이러한 셰이더는 모든 광원을 한 번에 사용하여 메시 버텍스를 기반으로 조명을 계산해서 작동합니다. 따라서 오브젝트에 광원이 얼마나 비춰지는지에 상관없이 한 번만 드로우해야 합니다.
Pixel-Lit 셰이더는 드로우되는 각 픽셀의 최종 조명을 계산합니다. 따라서 오브젝트가 주변광과 주요 방향 광원을 받으려면 오브젝트를 한 번 드로우하고 해당 오브젝트에 비치는 추가 광원마다 한 번씩 드로우해야 합니다. 따라서 수식은 N개의 렌더링 패스이며, 여기서 N은 오브젝트에 비치는 픽셀 광원의 최종 수입니다. 이렇게 하면 CPU에서 커맨드를 처리하고 그래픽 카드에 전송하고, 그래픽 카드에서 버텍스를 처리하고 픽셀을 그리는 데 부하가 증가하게 됩니다. 화면에 표시되는 Pixel-Lit 오브젝트의 크기는 그려지는 속도에도 영향을 줍니다. 오브젝트가 클수록 그리는 속도가 느려집니다.
Pixel-Lit 셰이더는 성능 부하를 더 요구하는 대신 섀도우, 노멀 매핑, 아름다운 스페큘러 하이라이트, 광원 쿠키 등 많은 환상적인 효과를 사용할 수 있게 합니다.
광원은 픽셀(‘중요’) 또는 버텍스/SH(‘중요하지 않음’) 모드로 강제 전환할 수 있습니다. Pixel-Lit 셰이더에 비치는 모든 버텍스 광원은 오브젝트의 버텍스 또는 전체 오브젝트에 기반하여 연산되며, 픽셀 광원에 관련된 렌더링 부하나 시각 효과가 추가되지 않습니다.
빌트인 셰이더의 대략적인 복잡도 순서는 다음과 같습니다.
추가적으로 Unity는 ‘모바일’ 카테고리에서 모바일 플랫폼을 타겟으로 하는 여러 개의 단순화된 셰이더를 제공합니다. 이 셰이더는 다른 플랫폼에서도 잘 작동하므로 근사 스페큘러, 머티리얼별 컬러 미지원과 같이 단순함을 추구한다면 사용해 볼 수 있습니다.
각 셰이더에 대한 단순화 정도를 보려는 경우 ‘빌트인 셰이더’ 패키지의 .shader 파일을 확인해 보십시오. 파일 상단의 일부 주석에 정보가 나와 있습니다.
모바일 셰이더에서 일반적으로 나타나는 변경점은 다음과 같습니다.
AlphaTest 또는 ColorMask를 지원하지 않습니다.