Legacy Shaders
노멀 쉐이더 패밀리

Unity 내장 쉐이더 사용 및 퍼포먼스

Shaders in Unity are used through Materials, which essentially combine shader code with parameters like textures. An in-depth explanation of the Shader/Material relationship can be read here.

Material properties will appear in the Inspector when either the Material itself or a GameObject that uses the Material is selected. The Material Inspector looks like this:

Each Material will look a little different in the Inspector, depending on the specific shader it is using. The shader iself determines what kind of properties will be available to adjust in the Inspector. Material inspector is described in detail in Material reference page. Remember that a shader is implemented through a Material. So while the shader defines the properties that will be shown in the Inspector, each Material actually contains the adjusted data from sliders, colors, and textures. The most important thing to remember about this is that a single shader can be used in multiple Materials, but a single Material cannot use multiple shaders.

Unity 쉐이더의 퍼포먼스

게임의 전반적인 퍼포먼스에 영향을 주는 요소들은 아주 많습니다. 이 페이지는 Built-in Shaders에 맞추어 퍼포먼스 고려사항을 설명합니다. 쉐이더 퍼포먼스는 주로 두 가지에 크게 영향을 받습니다: 쉐이더 자체와 프로젝트 또는 특정 카메라에 의해 사용되는 Rendering Path입니다. 직접 쉐이더를 작성할 때의 퍼포먼스 비결에 대해서는 ShaderLab Shader Performance 페이지를 참조하십시오.

렌더링 패스와 쉐이더 퍼포먼스

Unity에서 지원되는 렌더링 패스 중 Deferred ShadingVertex Lit의 퍼포먼스는 가장 예측이 가능합니다. Deferred shading에서 각 오브젝트는 일반적으로 어떤 라이트에 영향을 받는지에 관계없이 한 번 그려집니다. 마찬가지로 Vertex Lit에서 각 오브젝트는 한 번만 그려집니다. 즉, 쉐이더의 퍼포먼스 차이는 사용하고 있는 텍스처의 수와 어떤 계산을 수행할 지에 따라 달라집니다.

Forward 렌더링 패스의 쉐이더 퍼포먼스

Forward 렌더링 패스에서 쉐이더의 퍼포먼스는 쉐이더 자체와 장면의 조명 __모두__에 영향을 받습니다. 다음 섹션에서 자세한 내용을 설명합니다. 퍼포먼스 관점에서 두 가지 기본 카테고리가 있으며, Vertex-LitPixel-Lit입니다.

Forward 렌더링 패스의 Vertex-Lit 쉐이더는 항상 Pixel-Lit 쉐이더보다 저렴합니다. 이 쉐이더는 메쉬 정점에 따라 라이팅을 계산합니다. 따라서 오브젝트에 몇 개의 라이트가 비추어져 있는지 상관없이, 한번만 그려집니다.

Pixel-Lit쉐이더는 그려진 픽셀마다 최종적인 라이팅을 계산합니다. 이 때문에, 오브젝트는 Ambient(환경광) 및 Directional light(지향성 조명)을 얻기 위해 1회 그려지고, 추가 라이팅마다 한 번씩 그려져야 합니다. 계산식은 N개의 렌더링 패스이며, N은 오브젝트에 마지막으로 비춰질 pixel light의 수입니다. 따라서 CPU의 처리, 그래픽 카드로의 명령 발신, 정점 및 픽셀을 렌더링하는 그래픽 카드의 부하가 증가합니다. 스크린에 표시되는 Pixel-lit 오브젝트의 크기도 또한 렌더링 속도에 영향을 줍니다. 오브젝트가 클수록 렌더링 시간이 더 걸립니다.

따라서 pixel lit 쉐이더는 퍼포먼스 비용이 크지만, 그 비용만큼 더 멋진 효과를 얻을 수 있습니다: 대표적인 예만 들어도 그림자, 노멀 매핑, 보기좋은 specular highlight와 light cookie 등이 있습니다.

라이트를 강제로 pixel(“중요”) 또는 vertex/SH(“그다지 중요하지 않음”) 모드로 전환할 수 있다는 것을 기억할 필요가 있습니다. Pixel-Lit 쉐이더에 비춰지는 vertex lights는 오브젝트 정점들 또는 전체로 계산되고, pixel light와 연관된 렌더링 비용 또는 영상 효과에는 적용되지 않습니다.

일반적인 쉐이더 퍼포먼스

내장 쉐이더에 대해서 대략 다음의 순서에 따라 복잡성이 증가합니다:

  • Unlit. 단지 텍스처일 뿐이며, 라이팅에 의한 영향을 받지 않습니다.
  • VertexLit.
  • Diffuse.
  • Normal mapped. Diffuse(디퓨즈)보다 약간 비쌉니다: 추가적으로 텍스처(법선 맵)한 개와 여러 개의 셰이더 명령을 포함합니다.
  • Specular. Specular highlight(스펙큘러 하이라이트) 연산을 추가합니다.
  • Normal Mapped Specular. Specular보다 약간 비쌉니다.
  • Parallax Normal mapped. 패럴랙스 노멀 매핑 연산을 추가합니다.
  • Parallax Normal Mapped Specular. 패럴랙스 노멀 매핑과 Specular highlight(스펙큘러 하이라이트) 계산을 추가합니다.

Mobile simplified shaders

또한 Unity는 모바일 플랫폼에 대한 간단한 쉐이더를 일부 “Mobile” 카테고리 아래에 준비했습니다. 이 쉐이더는 다른 플랫폼에서도 잘 작동하기 때문에, 이 심플함(예를 들어 approximate specular, no per-material color support(거의 스펙큘러, 메테리얼 별 색상 지원 없음) 등)를 활용하기 위해 꼭 시험해 보십시오.

To see the specific simplifications that have been made for each shader, look at the .shader files from the “built-in shaders” package and the information is listed at the top of the file in some comments.

Some examples of changes that are common across the Mobile shaders are:

  • There is no material color or main color for tinting the shader.
  • For the shaders taking a normal map, the tiling and offset from the base texture is used.
  • The particle shaders do not support AlphaTest or ColorMask.
  • Limited feature and lighting support - e.g. some shaders only support one directional light.
Legacy Shaders
노멀 쉐이더 패밀리