Performance of Unity shaders

사용자의 게임의 전반적인 성능에 영향을 줄 수 있는 몇 개의 요인들이 있습니다. 이 페이지는 Built-in Shaders를 위한 성능 고려사항에 대해서 자세히 이야기 할 것입니다. 쉐이더의 성능은 주로 두 가지에 의존합니다: 쉐이더 그 자체와 어떤Rendering Path가 프로젝트 또는 특정 카메라에 의해 사용되어지 입니다. 사용자의 쉐이더를 쓸 때 성능적인 팁을 위해서 ShaderLab Shader Performance 페이지를 참고하시기 바랍니다.

Rendering Paths and shader performance

Unity가 지원하는 렌더링 경로로부터 Deferred LightingVertex Lit 경로는 가장 예측 가능한 성능을 가집니다. Deferred lighting에서 각각의 물체는 어떠한 조명이 그것에 영향을 주는 지 상관없이 일반적으로 두 번 그려집니다. 유사하게 정점 조명에서도 각각의 물체는 일반적으로 한 번 그려집니다. 따라서 쉐이더에서 성능의 차이는 주로 그들이 얼마나 많은 텍스쳐를 사용하는지 그리고 그들이 무슨 계산을 하는지에 달려 있습니다.

Shader Performance in Forward rendering path

Forward 렌더링 경로에서 쉐이더의 성능은 쉐이더 그 자체와 씬에서의 조명에 달려 있습니다. 다음의 섹션은 자세한 내용을 담고 있습니다. 성능적인 측면에서 볼 때 쉐이더는 두 가지의 기본적인 카테고리가 존재합니다. Vertex-Lit 그리고 Pixel-Lit.

Forward 렌더링 경로에서 Vertex-Lit 쉐이더는 항상Pixel-Lit 쉐이더보다 저렴합니다. 이러한 쉐이더들은 모든 조명을 한 번에 사용해서 메쉬 꼭지점에 기반해서 조명을 계산하는 것에 의해 작동합니다. 이것 때문에 그 물체위에 얼마나 많은 조명이 비추고 있는지 상관없이 그것은 한 번만 그려져야할 것입니다.

Pixel-Lit 쉐이더는 그려진 각각의 픽셀에서 마지막 조명을 계산합니다. 이것 때문에 물체는 주변과 주요 방향의 조명을 얻기 위해서 한 번만 그려져야 하고 또한 그것 위에 빛나는 추가적인 각각의 조명을 위해서도 한 번만 그려져야 합니다. 그러므로 공식은 N 번의 렌더링 패스이고 N은 물체위에서 빛나는 픽셀 조명의 마지막 갯수입니다. 이것은 명령을 처리해서 그래픽 카드로 보내고 또한 그래픽 카드 위에서 꼭지점을 처리하고 픽셀을 그리기 위해서CPU의 로드를 증가시킵니다. 스크린에서 Pixel-lit의 물체 크기는 그것이 그려지는 속도에 영향을 줄 것입니다. 더 큰 물체일수록 더 느리게 그려질 것입니다.

그래서 pixel lit 쉐이더가 성능 비용을 내나 그 비용은 몇몇의 훌륭한 효과를 허락합니다; 그림자, normal-mapping, 좋은 외관의 반사 하이라이트 그리고 조명 쿠키.

조명은 하나의 픽셀로 (“중요한”) 강요될 수 있고 또 꼭지점/SH (“중요하지 않은”) 모드로도 강요될 수 있다는 것을 명심하시기 바랍니다. Pixel-Lit 쉐이더위에서 빛나는 어떠한 정점 조명도 물체의 꼭지점 또는 전체 물체에 기반해서 계산될 것이고 픽셀 조명과 결합된 렌더링 비용이나 시각 효과로 더해지지 않을 것입니다.

General shader performance

Built-in Shaders로부터 그들은 증가하는 복잡성의 순서대로 대략 다음처럼 옵니다:

  • Unlit. 이것은 조명에 의해 영향받지 않는 하나의 텍스쳐 입니다.
  • VertexLit.
  • Diffuse.
  • Normal mapped. 이것은 Diffuse보다 좀 더 비용이 듭니다: 그것은 텍스쳐 (normal map) 하나를 더 추가하고 쉐이더 지시사항을 두 개 더 추가합니다.
  • Specular. 이것은 반사 하이라이트 계산을 추가합니다.
  • Normal Mapped Specular. 다시 이것은 Specular보다 비용이 조금 더 듭니다.
  • Parallax Normal mapped. 이것은parallax normal-mapping 계산을 추가합니다.
  • Parallax Normal Mapped Specular. 이것은parallax normal-mapping와 반사 하이라이트 계산을 추가합니다.

추가적으로 Unity는 "Mobile" 카테고리 아래에 모바일 플랫폼에 타겟 맞춰진 몇 개의 간단한 쉐이더가 있습니다. 이러한 쉐이더는 다른 플랫폼에서도 역시 작동합니다. 따라서 사용자가 그들의 간단한 기능으로도 괜찮다면 (예. 대략적인 반사의, 물질 당 색상 지원이 없는 등등), 그들을 시도해보는 것도 좋습니다!

역링크