키워드 세트를 선언할 때는 셰이더 배리언트 또는 동적 브랜칭과 함께 사용할지 선택합니다.
#define 프리 프로세서 지시문을 생성합니다.
‘multi compile’ 또는 ‘shader feature’의 선택은 키워드 사용 방식에 따라 다릅니다. 키워드를 사용하여 프로젝트의 머티리얼을 설정하고 런타임 시 C# 스크립트에서 값을 변경하지 않는 경우 ‘shader feature’를 사용하여 프로젝트의 셰이더 키워드 및 배리언트 수를 줄여야 합니다. C# 스크립트를 사용하여 런타임 시 키워드를 활성화하거나 비활성화하는 경우, ‘multi compile’을 사용하여 배리언트가 잘못 스트리핑되지 않도록 해야 합니다. 셰이더 스트리핑에 대한 자세한 내용은 셰이더 배리언트 스트리핑을 참조하십시오.
셰이더의 조건부에는 ‘범용’ 접근 방식이 없으며 주어진 프로젝트에서 주어진 셰이더에 대한 각 접근 방식의 장점과 단점을 고려해야 합니다.
어떤 조건을 사용할 것인지는 셰이더가 다른 코드 브랜치로 전환해야 하는 시점에 따라 다릅니다.
런타임에 다른 코드 브랜치로 전환하기 위해 셰이더가 필요하지 않은 경우 Unity가 편집하는 동안에만 평가하는 조건부를 사용할 수 있습니다.
예를 들어 머티리얼의 인스펙터 창에서 프로퍼티를 설정하여 셰이더가 다음과 같은 작업을 수행하도록 할 수 있습니다.
이 접근 방식을 사용하면 보다 간단하게 셰이더 코드를 작성하고 유지 관리할 수 있으며, 빌드 시간, 파일 크기 및 성능에 영향을 줄 가능성이 적습니다.
이렇게 하려면 다음 중 하나를 수행하십시오.
shader_feature 키워드 정의를 사용하는 경우 Unity는 빌드에서 머티리얼에 의해 사용되는 셰이더 배리언트를 유지하고 다른 셰이더 배리언트를 제거(‘스트리핑’)합니다. 이렇게 하면 빌드 시간이 짧고 파일 크기가 작아집니다.
런타임 시 C# 스크립트를 사용하여 shader_feature 키워드를 활성화하거나 비활성화하지 마십시오. 머티리얼이 누락된 셰이더 배리언트를 사용하는 경우 Unity는 대신 다른 사용 가능한 배리언트를 선택합니다. 런타임 시 키워드를 활성화하거나 비활성화해야 하는 경우 다음 방법 중 하나를 사용하여 빌드에 필요한 모든 배리언트가 포함되도록 하십시오.
shader_feature 키워드 조합에 대한 빌드에 머티리얼을 포함하십시오.
런타임에 C# 스크립팅을 사용해서 셰이더를 다른 코드 브랜치로 전환해야 하는 경우, 편집 중에 그리고 런타임에 Unity에서 평가하는 조건부를 사용할 수 있습니다.
예를 들어 C# 스크립트를 사용하여 셰이더가 다음을 수행하도록 만들 수 있습니다.
이렇게 하려면 다음 중 하나를 수행하십시오.
multi_compile 키워드 정의를 사용하는 경우 Unity는 빌드에서 머티리얼이 사용하지 않는 조합을 포함하여 가능한 모든 셰이더 코드 브랜치 조합에 대한 셰이더 배리언트를 빌드합니다. 즉, 런타임 시 키워드를 활성화하거나 비활성화할 수 있지만, 빌드 시간, 파일 크기, 로드 시간, 메모리 사용량도 크게 늘릴 수 있습니다. 셰이더 배리언트를 참조하십시오.
동적 브랜치는 셰이더 배리언트를 생성하지 않지만, 특히 다음 중 하나라도 해당되는 경우 셰이더가 GPU에서 더 느리게 실행될 수 있습니다.
GPU 성능에 너무 큰 영향을 주지 않고 동적 브랜칭을 사용할 수 있는지 확인하려면 셰이더 배리언트 수를 확인할 수 있습니다. 동적 브랜칭의 장단점에 대한 자세한 내용은 셰이더 브랜칭을 참조하십시오.