때로는 동일한 셰이더가 상황에 따라 다른 작업을 수행하기를 바랄 때가 있습니다.예를 들어 머티리얼마다 다른 설정을 구성하거나, 하드웨어마다 다른 기능을 정의하거나, 런타임에 셰이더의 동작을 동적으로 변경하고 싶을 수 있습니다.텍스처 읽기, 버텍스 입력, 보간기 또는 루프와 같이 필요하지 않은 경우 계산 비용이 많이 드는 코드를 실행하지 않고 싶을 수도 있습니다.
조건부를 사용하여 GPU가 특정 조건에서만 실행하는 동작을 정의할 수 있습니다.
** 다양한 조건부 유형
셰이더에서 조건부를 사용하려면 다음 접근 방식을 사용할 수 있습니다.
셰이더의 조건부에는 "범용" 접근 방식이 없으며 주어진 프로젝트에서 주어진 셰이더에 대한 각 접근 방식의 장점과 단점을 고려해야 합니다.
어떤 조건을 사용할 것인지는 셰이더가 다른 코드 브랜치로 전환해야 하는 시점에 따라 다릅니다.
런타임에 다른 코드 브랜치로 전환하기 위해 셰이더가 필요하지 않은 경우 Unity가 편집하는 동안에만 평가하는 조건부를 사용할 수 있습니다.
예를 들어 머티리얼의 인스펙터 창에서 프로퍼티를 설정하여 셰이더가 다음과 같은 작업을 수행하도록 할 수 있습니다.
이 접근 방식을 사용하면 보다 간단하게 셰이더 코드를 작성하고 유지 관리할 수 있으며, 빌드 시간, 파일 크기 및 성능에 영향을 줄 가능성이 적습니다.
이렇게 하려면 다음 중 하나를 수행하십시오.
shader_feature
키워드 정의를 사용하는 경우 Unity는 빌드에서 머티리얼에 의해 사용되는 셰이더 배리언트를 유지하고 다른 셰이더 배리언트를 제거(’스트리핑’)합니다.이렇게 하면 빌드 시간이 짧고 파일 크기가 작아집니다.
머티리얼에서 누락된 셰이더 배리언트를 사용하는 경우 Unity가 대신 사용 가능한 다른 배리언트를 선택하므로, 런타임에 C# 스크립트를 사용하여 shader_feature
키워드를 활성화 또는 비활성화하지 마십시오.런타임에 키워드를 활성화 또는 비활성화해야 하는 경우 다음 중 하나를 사용하여 빌드에 필요한 모든 배리언트가 포함되도록 하십시오.
shader_feature
키워드 조합에 대한 빌드에 특정 머티리얼을 포함하십시오.런타임에 C# 스크립팅을 사용해서 셰이더를 다른 코드 브랜치로 전환해야 하는 경우, 편집 중에 그리고 런타임에 Unity에서 평가하는 조건부를 사용할 수 있습니다.
예를 들어 C# 스크립트를 사용하여 셰이더가 다음을 수행하도록 만들 수 있습니다.
이렇게 하려면 다음 중 하나를 수행하십시오.
multi_compile
키워드 정의를 사용하는 경우 Unity는 빌드에서 머티리얼이 사용하지 않는 조합을 포함하여 가능한 모든 셰이더 코드 브랜치 조합에 대해 셰이더 배리언트를 빌드합니다.즉, 런타임에 키워드를 활성화 및 비활성화할 수 있지만 빌드 시간, 파일 크기, 로드 시간 및 메모리 사용량이 크게 증가할 수 있습니다.셰이더 배리언트를 참조하십시오.
동적 브랜치는 셰이더 배리언트를 생성하지 않지만, 특히 다음 중 하나라도 해당되는 경우 셰이더가 GPU에서 더 느리게 실행될 수 있습니다.
보유하고 있는 셰이더 배리언트 수를 확인하여 GPU 성능에 큰 영향을 주지 않고 동적 브랜치를 사용할 수 있는지 확인할 수 있습니다.동적 브랜치의 자세한 장단점은 셰이더 브랜치를 참조하십시오.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.