레거시 셰이더
노멀 셰이더(Normal Shader)군

빌트인 셰이더의 사용 및 성능(Usage and Performance of Built-in Shaders)

Unity에서 셰이더는 셰이더 코드를 텍스처와 같은 파라미터와 결합시키는 Materials 를 통해 사용됩니다. 셰이더와 머티리얼의 관계에 대한 자세한 설명은 여기를 참조하십시오.

머티리얼 프로퍼티는 머티리얼 또는 머티리얼을 사용하는 GameObject 가 선택된 경우 Inspector 에 나타납니다. 아래 그림은 머티리얼 인스펙터입니다.

각 머티리얼은 사용하는 개별 셰이더에 따라 인스펙터에서 조금씩 다르게 보입니다. 셰이더 자체는 인스펙터에서 어떤 프로퍼티를 조정할 수 있을지를 결정합니다. 머티리얼 인스펙터는 머티리얼 레퍼런스 페이지에 자세하게 설명되어 있습니다. 셰이더는 머티리얼을 통해 실행됨을 기억해야 합니다. 따라서 셰이더가 인스펙터에 나타날 프로퍼티를 정의한다면, 각 머티리얼은 실제 슬라이더, 컬러, 텍스처에서 얻은 조정된 데이터를 포함합니다. 가장 중요한 점은 한 개의 셰이더는 다수의 머티리얼에서 사용할 수 있지만, 한 개의 머티리얼을 다수의 셰이더에서 사용할 수는 없다는 점입니다.

퍼포먼스 고려 사항

게임의 전반적인 퍼포먼스에 영향을 미치는 다양한 요소가 있습니다. 이 페이지는 빌트인 셰이더에서의 퍼포먼스 고려 사항에 대해 다룹니다. 셰이더의 퍼포먼스는 크게 두 요인에 의해 좌우됩니다. 하나는 셰이더 자체이고, 다른 하나는 프로젝트나 특정 카메라가 사용하는 렌더링 경로입니다. 셰이더를 직접 작성하는 경우의 성능 관련 팁은 ShaderLab 셰이더 퍼포먼스 페이지를 참조하십시오.

렌더링 경로(Rendering Paths)와 셰이더 퍼포먼스

Unity가 지원하는 렌더링 경로, 디퍼드 셰이딩, 버텍스 리트는 모두 예측 가능한 성능을 보여줍니다. 디퍼드 셰이딩의 경우 각 오브젝트는 어떤 광원에 영향을 받는지와는 무관하게 일반적으로 한 번 그려집니다. 이와 비슷하게 버텍스 리트에서도 각 오브젝트는 일반적으로 한 번 그려집니다. 따라서 셰이더 간 성능 차이는 사용하는 텍스처의 수와 연산 과정에 따라 달라집니다.

포워드 렌더링 경로(Forward Rendering Path)의 셰이더(Shader) 퍼포먼스

포워드 렌더링 경로의 경우, 셰이더 퍼포먼스는 셰이더 자체와 씬의 광원 모두에 따라 달라집니다. 아래 섹션에서는 이것을 자세하게 다룹니다. 퍼포먼스의 관점에서 셰이더는 기본적으로 Vertex-LitPixel-Lit, 두 개로 나뉘어집니다.

포워드 렌더링 경로에서 Vertex-Lit 셰이더는 Pixel-Lit 셰이더보다 부하가 적게 필요합니다. 이들 셰이더는 메시 버텍스에 기반하여 모든 광원을 한 번에 사용하여 광원을 연산합니다. 따라서 오브젝트에 몇 개의 광원이 비추던 간에, 오직 한 번만 그려지면 됩니다.

Pixel-Lit 셰이더는 그려지는 픽셀 각각에 대해 최종 조명을 연산합니다. 이로 인해 오브젝트는 주변 및 주 직접광을 받기 위해 한 번 그려지고, 그 위에 비추는 추가 광원을 고려하기 위해 다시 한 번 그려집니다. 따라서 오브젝트에 비추는 픽셀 광원의 최종 수를 N이라고 하면, N번의 렌더링이 패스됩니다. 이는 CPU 처리와 그래픽 카드 커맨드 전달 부하를 증가시키며, 그래픽 카드에서도 버텍스와 픽셀을 그리는 부하를 증가시킵니다. 화면에서 Pixel-lit 오브젝트의 크기 역시 그려지는 속도에 영향을 줍니다. 오브젝트가 클수록 그려지는 속도가 느려집니다.

Pixel-Lit 셰이더는 성능 부하를 더 요구하는 대신 섀도우, 노멀 매핑, 아름다운 스페큘러 하이라이트, 광원 쿠키 등 많은 환상적인 효과를 사용할 수 있게 합니다.

광원은 “중요”한 픽셀이나 “중요하지 않은” 버텍스/SH 모드로 강제할 수 있다는 사실을 기억해야 합니다. Pixel-Lit 셰이더에 비추는 모든 버텍스 광원은 오브젝트의 버텍스 또는 전체 오브젝트에 기반하여 연산되며, 픽셀 광원에 관련된 렌더링 부하나 시각 효과가 추가되지 않습니다.

일반 셰이더(Shader) 퍼포먼스

빌트인 셰이더의 대략적인 복잡도 순서는 다음과 같습니다.

  • Unlit. 광원에 영향을 받지 않는 텍스처입니다.
  • VertexLit.
  • Diffuse.
  • 노멀 맵. 디퓨즈보다 부하를 더 요구합니다. 노멀 맵 텍스처 한 개와 셰이더 명령 몇 개가 추가됩니다.
  • Specular. 스페큘러 강조 연산이 추가됩니다.
  • Normal Mapped Specular. 스페큘러보다 부하를 더 요구합니다.
  • Parallax Normal Mapped. 패럴럭스 노멀 매핑 연산이 추가됩니다.
  • Parallax Normal Mapped Specular. 패럴럭스 노멀 매핑과 스페큘러 강조 연산 둘 다 추가됩니다.

모바일 단순화 셰이더(Shaders)

추가적으로 Unity는 “모바일” 카테고리에서 모바일 플랫폼을 타겟으로 하는 여러 개의 단순화된 셰이더를 제공합니다. 이 셰이더는 다른 플랫폼에서도 잘 작동하므로, 근사 스페큘러, 머티리얼 별 컬러 지원 없음 등과 같이 단순함을 추구한다면 사용해볼 수 있습니다.

각 셰이더에 대한 단순화 정도를 보려면, “빌트인 셰이더” 패키지에서 .shader 파일을 열었을 때 나오는 파일 위의 정보 리스트를 참조하십시오.

모바일 셰이더에서 일반적으로 나타나는 변경점은 다음과 같습니다.

  • 셰이더 색조를 위한 머티리얼 컬러 또는 주 컬러가 없습니다.
  • 노멀 맵을 사용하는 셰이더의 경우, 베이스 텍스처의 타일링과 오프셋이 사용됩니다.
  • 파티클 셰이더는 AlphaTestColorMask를 지원하지 않습니다.
  • 일부 셰이더는 한 개의 방향 광원만을 지원하는 등, 기능과 광원 지원에 제약이 있습니다.
레거시 셰이더
노멀 셰이더(Normal Shader)군