Unity가 빌드된 애플리케이션에서 셰이더 배리언트를 처음 사용하면 씬이 불안정할 수 있습니다. 이는 Unity와 그래픽스 드라이버가 셰이더 배리언트를 컴파일하고 컴파일된 셰이더 코드와 관련 GPU 상태로 PSO(파이프라인 상태 오브젝트)를 생성해야 하기 때문입니다.
불안정한 현상을 줄이려면 처음 필요해지기 전에 셰이더를 컴파일하고 PSO를 생성하여 그래픽스 드라이버가 디스크에 캐시하도록 해야 합니다. 이를 워밍업, 예열, 프리쿠킹이라고 합니다. 일반적으로 애플리케이션이 시작되거나 씬을 로드하는 동안 화면 로딩 중에 예열합니다.
참고: 일부 API는 실험 단계에 있기 때문에 프로덕션에 사용할 준비가 되지 않았습니다. API와 기술 자료는 향후 변경되거나 삭제될 수 있습니다.
DirectX 12, Metal, Vulkan에서 셰이더를 예열하려면 실험 단계인 GraphicsStateCollection API를 사용하십시오. 이 API는 런타임 시 프로젝트가 사용하는 특정 GPU 상태를 수집하며, 이는 최신 그래픽스 API가 정확한 PSO를 생성하고 캐싱하는 데 필요합니다.
다음 단계를 따르십시오.
GraphicsStateCollection.BeginTrace 및 GraphicsStateCollection.EndTrace 메서드를 사용하여 애플리케이션이 사용하는 셰이더 배리언트와 GPU 상태를 기록합니다..graphicsState 파일로 저장하려면 GraphicsStateCollection.SendToEditor API를 사용합니다..graphicsstate 파일을 로드한 다음, WarmUp 또는 WarmUpProgressively API를 사용하여 셰이더 배리언트를 예열합니다. 두 API 모두 셰이더 배리언트를 비동기식으로 예열하는 데 사용할 수 있는 JobHandle 오브젝트를 반환합니다.사용하는 각 그래픽스 API에 대해 다른 .graphicsstate 파일을 생성해야 합니다.
자세한 내용은 GraphicsStateCollection을 참조하십시오.
다음과 같은 방법으로 예열합니다.
셰이더 배리언트 컬렉션을 예열하려면 다음 중 하나를 수행합니다.
ShaderVariantCollection.WarmUp을 사용하여 셰이더 배리언트를 예열합니다.Unity와 그래픽스 드라이버가 셰이더를 컴파일하고 PSO를 생성하는 시점을 확인하려면 프로파일러에서 다음 프로파일러 마커를 검색합니다.
Shader.CreateGPUProgram
CreateGraphicsGraphicsPipelineImpl