Version: Unity 6.0 (6000.0)
언어 : 한국어
장애 또는 멈춤 현상 해결
예열 셰이더

셰이더 로딩

Unity는 빌드된 애플리케이션에서 다음과 같은 방식으로 컴파일된 셰이더를 로드합니다.

  1. Unity는 씬 또는 런타임 리소스를 로드할 때 씬 또는 리소스에 대해 컴파일된 모든 셰이더 배리언트를 CPU 메모리로 로드합니다.
  2. 기본적으로 Unity는 모든 셰이더 배리언트를 CPU 메모리의 다른 영역으로 압축 해제합니다. 다른 플랫폼에서 셰이더가 사용하는 메모리 양을 제어할 수 있습니다.
  3. 처음으로 셰이더 배리언트를 사용하여 지오메트리를 렌더링해야 하는 경우 Unity는 해당 셰이더 배리언트와 해당 데이터를 그래픽스 API 및 그래픽스 드라이버에 전달합니다.
  4. 그래픽스 드라이버는 GPU 전용 버전의 셰이더 배리언트를 생성하여 GPU에 업로드합니다.

이 접근 방식은 Unity와 그래픽스 드라이버가 GPU에 필요한 모든 셰이더 배리언트를 처리하고 저장하지 않도록 합니다. 하지만 그래픽스 드라이버가 GPU 전용 셰이더 배리언트를 처음 생성하면 눈에 띄는 지연이 발생할 수 있습니다.

Unity는 각 GPU 전용 셰이더 배리언트를 캐시하여 셰이더 배리언트가 다시 필요할 때 또 다른 지연을 방지합니다.

셰이더 배리언트를 참조하는 오브젝트가 더 이상 존재하지 않으면 Unity는 CPU 및 GPU 메모리에서 해당 셰이더 배리언트를 완전히 제거합니다.

Unity에서 로드하는 셰이더 

Unity는 플랫폼의 그래픽스 API, 하드웨어 및 그래픽스 티어와 호환되는 컴파일된 셰이더만 로드합니다.

사용자나 Unity가 빌드된 애플리케이션에서 셰이더 배리언트를 스트리핑했기 때문에 Unity가 필요한 셰이더 배리언트를 찾을 수 없는 경우, Unity는 유사한 셰이더 배리언트를 선택하려고 시도합니다. 유사한 셰이더 배리언트를 찾을 수 없는 경우 Unity는 자홍색 오류 셰이더를 사용합니다.

엄격한 셰이더 배리언트 매칭을 활성화하면 Unity가 유사한 셰이더 배리언트를 선택하지 않게 할 수 있습니다.

Unity가 서브셰이더를 선택하는 방법

셰이더 배리언트에 여러 개의 서브셰이더가 포함된 경우 Unity는 다음 모든 항목과 호환되는 단일 서브셰이더를 선택하여 사용하려고 시도합니다.

Unity는 다음 요소 중에서 호환 가능한 첫 번째 서브셰이더를 다음 순서로 검색합니다.

  1. 셰이더에 표시되는 순서의 서브셰이더
  2. 모든 폴백 셰이더 오브젝트 내의 서브셰이더(셰이더 오브젝트에 표시되는 순서)

호환되는 서브셰이더를 찾을 수 없는 경우 Unity는 자홍색 오류 셰이더를 사용합니다.

ShaderLab 태그를 사용하여 각 하드웨어와 호환되는 서브셰이더를 설정할 수 있습니다. ShaderLab: 서브셰이더에 태그 할당을 참조하십시오.

Unity가 언제 셰이더를 로드하는지 확인

직렬화된 데이터에서 셰이더가 로드되는 시점을 확인하려면 프로파일러에서 다음 프로파일러 마커를 검색합니다.

  • Shader.ParseThreaded
  • Shader.ParseMainThread

추가 리소스

장애 또는 멈춤 현상 해결
예열 셰이더