Version: Unity 6.0 (6000.0)
언어 : 한국어
셰이더 키워드 기초
셰이더 키워드 선언

셰이더에 사용할 키워드 유형 선택

키워드 세트를 선언할 때는 셰이더 배리언트 또는 동적 브랜칭과 함께 사용할지 선택합니다.

  • ‘dynamic branch’: 동적 브랜칭과 함께 사용할 키워드 세트를 생성하는 데 사용합니다. 내부적으로 Unity는 이러한 키워드를 사용하여 균일한 변수를 만듭니다.
  • ‘multi compile’ 또는 ‘shader feature’: 셰이더 배리언트와 함께 사용할 키워드 세트를 만들 때 사용합니다. 내부적으로 Unity는 이러한 키워드를 사용하여 #define 프리 프로세서 지시문을 생성합니다.
    • ‘multi compile’은 셰이더 배리언트와 함께 사용할 키워드 세트를 선언합니다.

      Unity는 세트의 모든 키워드에 대한 셰이더 배리언트를 컴파일합니다.
    • ‘shader feature’는 셰이더 배리언트와 함께 사용할 키워드 세트를 선언하며, 이러한 키워드가 활성화되지 않은 경우에도 컴파일러에 배리언트를 컴파일하도록 지시합니다.

      Unity는 빌드 시 프로젝트의 상태를 검사하고 사용 중인 키워드에 대한 배리언트만 컴파일합니다. 빌드에 포함된 머티리얼에 해당 키워드가 활성화된 경우 키워드가 사용 중인 것입니다.

‘multi compile’ 또는 ‘shader feature’의 선택은 키워드 사용 방식에 따라 다릅니다. 키워드를 사용하여 프로젝트의 머티리얼을 설정하고 런타임 시 C# 스크립트에서 값을 변경하지 않는 경우 ‘shader feature’를 사용하여 프로젝트의 셰이더 키워드 및 배리언트 수를 줄여야 합니다. C# 스크립트를 사용하여 런타임 시 키워드를 활성화하거나 비활성화하는 경우, ‘multi compile’을 사용하여 배리언트가 잘못 스트리핑되지 않도록 해야 합니다. 셰이더 스트리핑에 대한 자세한 내용은 셰이더 배리언트 스트리핑을 참조하십시오.

셰이더의 조건부에는 ‘범용’ 접근 방식이 없으며 주어진 프로젝트에서 주어진 셰이더에 대한 각 접근 방식의 장점과 단점을 고려해야 합니다.

어떤 조건을 사용할 것인지는 셰이더가 다른 코드 브랜치로 전환해야 하는 시점에 따라 다릅니다.

편집 중에 코드 브랜치 전환

런타임에 다른 코드 브랜치로 전환하기 위해 셰이더가 필요하지 않은 경우 Unity가 편집하는 동안에만 평가하는 조건부를 사용할 수 있습니다.

예를 들어 머티리얼의 인스펙터 창에서 프로퍼티를 설정하여 셰이더가 다음과 같은 작업을 수행하도록 할 수 있습니다.

  • 머티리얼의 일부 인스턴스에는 스페큘러 반사를 추가하지만 다른 인스턴스에는 추가하지 않습니다.
  • 수중 씬에 나타나는 오브젝트와 같은 특정 오브젝트에 다른 모양을 추가합니다.

이 접근 방식을 사용하면 보다 간단하게 셰이더 코드를 작성하고 유지 관리할 수 있으며, 빌드 시간, 파일 크기 및 성능에 영향을 줄 가능성이 적습니다.

이렇게 하려면 다음 중 하나를 수행하십시오.

shader_feature 키워드 정의를 사용하는 경우 Unity는 빌드에서 머티리얼에 의해 사용되는 셰이더 배리언트를 유지하고 다른 셰이더 배리언트를 제거(‘스트리핑’)합니다. 이렇게 하면 빌드 시간이 짧고 파일 크기가 작아집니다.

런타임 시 C# 스크립트를 사용하여 shader_feature 키워드를 활성화하거나 비활성화하지 마십시오. 머티리얼이 누락된 셰이더 배리언트를 사용하는 경우 Unity는 대신 다른 사용 가능한 배리언트를 선택합니다. 런타임 시 키워드를 활성화하거나 비활성화해야 하는 경우 다음 방법 중 하나를 사용하여 빌드에 필요한 모든 배리언트가 포함되도록 하십시오.

런타임에 코드 브랜치 전환

런타임에 C# 스크립팅을 사용해서 셰이더를 다른 코드 브랜치로 전환해야 하는 경우, 편집 중에 그리고 런타임에 Unity에서 평가하는 조건부를 사용할 수 있습니다.

예를 들어 C# 스크립트를 사용하여 셰이더가 다음을 수행하도록 만들 수 있습니다.

  • 머티리얼을 동적으로 변경하여 특정 시간에 눈이 내리게 만들기
  • 사용자가 품질 설정을 변경할 때 특정 머티리얼을 변경하여 사용자가 예를 들어 안개 표시 여부를 동적으로 제어할 수 있도록 만들기

이렇게 하려면 다음 중 하나를 수행하십시오.

multi_compile 키워드 정의를 사용하는 경우 Unity는 빌드에서 머티리얼이 사용하지 않는 조합을 포함하여 가능한 모든 셰이더 코드 브랜치 조합에 대한 셰이더 배리언트를 빌드합니다. 즉, 런타임 시 키워드를 활성화하거나 비활성화할 수 있지만, 빌드 시간, 파일 크기, 로드 시간, 메모리 사용량도 크게 늘릴 수 있습니다. 셰이더 배리언트를 참조하십시오.

동적 브랜치는 셰이더 배리언트를 생성하지 않지만, 특히 다음 중 하나라도 해당되는 경우 셰이더가 GPU에서 더 느리게 실행될 수 있습니다.

  • 셰이더가 성능이 낮은 GPU에서 실행되는 경우
  • 조건부 코드에 ‘비대칭 브랜치’가 있어서 한 브랜치가 다른 브랜치보다 길거나 복잡한 코드인 경우

GPU 성능에 너무 큰 영향을 주지 않고 동적 브랜칭을 사용할 수 있는지 확인하려면 셰이더 배리언트 수를 확인할 수 있습니다. 동적 브랜칭의 장단점에 대한 자세한 내용은 셰이더 브랜칭을 참조하십시오.

추가 리소스

셰이더 키워드 기초
셰이더 키워드 선언
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961