Unity는 빌드된 애플리케이션에서 다음과 같은 방식으로 컴파일된 셰이더를 로드합니다.
이 접근 방식은 Unity와 그래픽스 드라이버가 GPU에 필요한 모든 셰이더 배리언트를 처리하고 저장하지 않도록 합니다. 하지만 그래픽스 드라이버가 GPU 전용 셰이더 배리언트를 처음 생성하면 눈에 띄는 지연이 발생할 수 있습니다.
Unity는 각 GPU 전용 셰이더 배리언트를 캐시하여 셰이더 배리언트가 다시 필요할 때 또 다른 지연을 방지합니다.
셰이더 배리언트를 참조하는 오브젝트가 더 이상 존재하지 않으면 Unity는 CPU 및 GPU 메모리에서 해당 셰이더 배리언트를 완전히 제거합니다.
Unity는 플랫폼의 그래픽스 API, 하드웨어 및 그래픽스 티어와 호환되는 컴파일된 셰이더만 로드합니다.
사용자나 Unity가 빌드된 애플리케이션에서 셰이더 배리언트를 스트리핑했기 때문에 Unity가 필요한 셰이더 배리언트를 찾을 수 없는 경우, Unity는 유사한 셰이더 배리언트를 선택하려고 시도합니다. 유사한 셰이더 배리언트를 찾을 수 없는 경우 Unity는 자홍색 오류 셰이더를 사용합니다.
엄격한 셰이더 배리언트 매칭을 활성화하면 Unity가 유사한 셰이더 배리언트를 선택하지 않게 할 수 있습니다.
셰이더 배리언트에 여러 개의 서브셰이더가 포함된 경우 Unity는 다음 모든 항목과 호환되는 단일 서브셰이더를 선택하여 사용하려고 시도합니다.
Unity는 다음 요소 중에서 호환 가능한 첫 번째 서브셰이더를 다음 순서로 검색합니다.
호환되는 서브셰이더를 찾을 수 없는 경우 Unity는 자홍색 오류 셰이더를 사용합니다.
ShaderLab 태그를 사용하여 각 하드웨어와 호환되는 서브셰이더를 설정할 수 있습니다. ShaderLab: 서브셰이더에 태그 할당을 참조하십시오.
직렬화된 데이터에서 셰이더가 로드되는 시점을 확인하려면 프로파일러에서 다음 프로파일러 마커를 검색합니다.
Shader.ParseThreadedShader.ParseMainThread