Version: Unity 6.0 (6000.0)
언어 : 한국어
브랜칭과 키워드를 통해 셰이더가 작동하는 방식 변경
셰이더에 사용할 키워드 유형 선택

셰이더 키워드 기초

셰이더 키워드를 사용하면 셰이더 코드에서 조건부 동작을 구현할 수 있습니다. 일부 공통 코드를 공유하지만 특정 키워드가 활성화되거나 비활성화되면 기능이 달라지는 셰이더를 만들 수 있습니다.

동적 브랜치 또는 셰이더 배리언트와 함께 셰이더 키워드를 사용할 수 있습니다. 셰이더 키워드를 사용하기 전에 이러한 기법의 작동 방식과 프로젝트에 적합한 기법을 이해하는 것이 중요합니다.

참고: Shader Graph에서는 용어가 다릅니다. 키워드 세트는 키워드라고 하며, 세트의 키워드는 상태라고 합니다. 내부적으로 기능은 동일합니다. Unity는 동일한 방식으로 컴파일하고 C# 스크립트와 동일한 방식으로 작업합니다.

셰이더 키워드 선언

세트로 셰이더 키워드를 선언합니다. 세트에는 상호 배타적인 키워드가 포함되어 있습니다.

  • 직접 코딩한 셰이더의 경우 HLSL에서 셰이더 키워드 선언 및 사용을 참조하십시오.
  • Shader Graph의 경우 키워드를 참조하십시오. 참고: ‘동적 브랜치’ 옵션은 Shader Graph에서 사용할 수 없습니다. Shader Graph에서는 셰이더 키워드를 오직 셰이더 배리언트와 함께 사용할 수 있습니다.

예를 들어, 다음 세트는 3가지 키워드를 포함합니다.

  • COLOR_RED
  • COLOR_GREEN
  • COLOR_BLUE

셰이더 키워드 선언 방식은 여러 가지에 영향을 미칩니다.

  • 유형은 Unity가 키워드를 사용하여 셰이더 배리언트를 생성할지 또는 동적 브랜치에 사용할지 여부와 그 방식에 영향을 줍니다.
  • 범위는 키워드가 로컬인지 전역인지에 영향을 줍니다. 이에 따라 런타임 시 동작이 결정됩니다.
  • 단계는 키워드가 영향을 미치는 셰이더 단계에 영향을 줍니다(해당하는 경우).

정의 유형: multi compile, shader feature, dynamic branch

키워드 세트를 선언할 때는 셰이더 배리언트 또는 동적 브랜칭과 함께 사용할지 선택합니다. 셰이더 배리언트를 선택할 때는 Unity가 내부적으로 키워드를 정의하는 방법도 선택해야 합니다. 이 방법은 Unity가 컴파일하는 배리언트의 수에 영향을 미칩니다.

자세한 내용은 셰이더에서 사용할 조건부 유형 선택을 참조하십시오.

런타임 시 키워드 세트 관리

셰이더를 제작할 때는 키워드를 세트로 선언합니다. 세트에는 상호 배타적인 키워드가 포함되어 있습니다.

런타임 시 Unity에는 이러한 세트에 대한 개념이 없습니다. 각 키워드를 독립적으로 활성화하거나 비활성화할 수 있으며, 키워드를 활성화하거나 비활성화해도 다른 키워드의 상태에는 영향이 없습니다. 즉, 동일한 세트의 여러 키워드를 활성화하거나, 세트의 모든 키워드를 비활성화할 수 있습니다.

키워드를 셰이더 배리언트와 함께 사용하는 경우 세트에서 두 개 이상의 키워드가 활성화되거나 세트에서 키워드가 활성화되지 않으면 Unity는 ‘충분히’ 일치한다고 간주되는 배리언트를 선택합니다. 정확히 어떤 결과가 도출되는지 예측할 수 없으며 의도치 않은 결과가 발생할 수 있습니다. 키워드 상태를 면밀하게 관리하여 이러한 상황을 피하는 것이 좋습니다.

키워드를 동적 브랜치와 함께 사용하는 경우 세트에 두 개 이상의 키워드가 활성화되거나 세트에 키워드가 활성화되지 않으면 조건부 브랜치가 그에 따라 실행됩니다. 예를 들어 KEYWORD_AKEYWORD_B가 모두 활성화된 경우, if (KEYWORD_A)if (KEYWORD_B) 브랜치가 모두 실행됩니다.

셰이더 키워드 제한

Unity는 최대 4,294,967,294개의 전역 셰이더 키워드를 사용할 수 있습니다. 개별 셰이더 및 컴퓨트 셰이더는 최대 65,534개의 로컬 셰이더 키워드를 사용할 수 있습니다. 이 합계에는 배리언트에 사용되는 키워드와 동적 브랜치에 사용되는 키워드가 포함됩니다.

셰이더 소스 파일 및 종속성에 선언된 모든 키워드는 이 한도에 포함됩니다. 종속성에는 셰이더가 UsePass와 함께 포함하는 패스폴백이 포함됩니다.

이름이 같은 셰이더 키워드를 여러 번 발견하는 경우, Unity는 해당 셰이더 키워드를 한도에서 한 번만 차감합니다.

셰이더가 총 128개를 초과하는 키워드를 사용하는 경우 작은 런타임 성능 페널티가 발생합니다. 따라서 키워드 수는 적게 유지하는 것이 좋습니다. Unity는 항상 셰이더당 4개의 키워드를 예약합니다.

브랜칭과 키워드를 통해 셰이더가 작동하는 방식 변경
셰이더에 사용할 키워드 유형 선택