PSO 레퍼런스

PSO 캐시 옵션 레퍼런스 전집입니다.

Windows
MacOS
Linux

여기서는 Pipeline State Object (PSO) 캐시 시스템과 사용할 수 있는 다양한 명령과 옵션 전부를 찾을 수 있습니다.

프로퍼티

프로퍼티

설명

SetBatchMode Background

일괄 모드 설정 백그라운드 - 대화식 메뉴 뒤에서 벌어질 때 사용합니다.

SetBatchMode Fast

일괄 모드 설정 빠름 - 로딩 화면 또는 무비 표시 도중 더 많은 PSO 를 컴파일할 수 있도록 할 때 사용합니다.

ResumeBatching

일괄 재개 - 일괄 프로세스 재시작하는 데 사용합니다.

NumPrecompilesRemaining

남아있는 프리컴파일 수 - 컴파일 대기 중인 PSO 총 개수를 확인하는 데 사용합니다.

NumPrecompilesActive

활성 프리컴파일 수 - 현재 이 프레임에 미리 컴파일되고 있는 파이프라인 수를 반환합니다.

OpenPipelineFileCache

파이프라인 파일 캐시 열기 - 있으면 LastOpened 세팅, 없으면 프로젝트 이름으로 된 셰이더 파이프라인 캐시 파일을 엽니다.

SavePipelineFileCache

파이프라인 파일 캐시 저장 - 정의된 저장 모드 중 하나를 사용하여 현재 셰이더 파이프라인 캐시를 디스크에 저장합니다. Fast 는 점진적으로, Slow 는 모든 데이터를 통합하여 저장합니다.

ClosePipelineFileCache

파이프라인 파일 캐시 닫기 - 기존 파이프라인 캐시를 닫아, 다른 파일 및/또는 셰이더 플랫폼으로 다시 열 수 있도록 합니다. 암시적으로 Fast Save 를 호출합니다.

ShaderLibraryStateChanged

셰이더 라이브러리 상태 변경됨 - 셰이더 코드 라이브러리 상태가 변경되어 셰이더 가용성을 재평가해야 한다고 알릴 때 FShaderCodeLibrary 가 호출합니다.

SetGameUsageMaskWithComparison

비교와 함께 게임 사용 마스크 설정 - 현재 PSO 게임 사용 마스크와 비교 함수를 설정합니다. 이 마스크가 이전 마스그와 다르면 true, 다르지 않거나 캐시 시스템 비활성화 또는 마스크 기능이 비활성화된 경우 false 를 반환합니다. 새 PSO 를 찾으면 이 값으로 기록하거나 기존 PSO 의 마스크를 업데이트합니다. 자세한 내용은 FPipelineFileCache 를 참조하세요.

FShaderPipelineCache

FShaderPipelineCache 는 새 PSO 로깅을 통해 FShaderCache 를 대체하는 시리얼라이즈 & 프리컴파일 메커니즘을 제공합니다. PSO 캐시 및 이니셜라이저를 디스크에 시리얼라이즈하면 게임을 다음 번 실행할 때 이 상태를 미리 컴파일할 수 있어, 멈춤 현상이 줄어듭니다.이런 FShaderPipelineCache 를 이뤄내기 위해서는 FShaderCodeLibrary 및 "Share Material Shader Code" (머티리얼 셰이더 코드 공유) 및 RHI 레벨 백엔드 FPipelineFileCache 에 의존합니다.

기본 런타임 사용법

PSO 캐시 기능을 사용하는 도중 PSO 데이터 컴파일이 일어날 때 멈춤 현상이 발생하지 않도록 하는 데 도움이 되는 명령은 다음과 같습니다.

  • r.ShaderPipelineCache.Enabled = 1 로 캐시를 활성화하면 파이프라인 캐시가 디스크에서 기존 데이터를 로드하여 미리 컴파일합니다.

  • r.ShaderPipelineCache.BatchSize = X 로 기본 일괄 크기를 설정합니다. X 는 기본 Fast BatchMode 에서 미리 컴파일할 때 한 번의 일괄 처리에 컴파일할 PSO 최대 개수입니다.

  • r.ShaderPipelineCache.BackgroundBatchSize = X 로 백그라운드 일괄 크기를 설정합니다. X 는 Background Batch Mode 에서 컴파일할 PSO 최대 개수입니다.

  • 게임 코드 인스트루먼트를 통해 FShaderPipelineCache::SetBatchMode 를 호출하여 일괄 모드를 Fast & Background 전환합니다.

  • BatchMode::Fast 는 로딩 화면 또는 무비 표시 도중 더 많은 PSO 를 컴파일하도록 할 때 사용하는 반면, Background 는 대화식 메뉴 뒤에서 하도록 할 때 사용합니다. 필요한 경우 NumPrecompilesRemaining 을 호출하여 컴파일 대기 중인 PSO 총 개수를 확인하고 완료될 때까지 로딩 화면 또는 무비를 계속 표시할 수 있습니다.

  • 게임 & 타깃 플랫폼 퍼포먼스에 따라 PauseBatching 를 호출하여 게임플레이 도중 미리 컴파일을 멈춘 다음 로딩 화면, 메뉴, 무비 이후 ResumeBatching 를 호출하여 재개하는 작업이 필요할 수 있습니다.

다른 런타임 옵션

PSO 가 캐시를 빌드할 때 추가적인 제어에 도움이 될 수 있는 명령은 다음과 같습니다.

  • GGameIni (및 그에 따른 GGameUserSettingsIni) 에서 Shader Pipeline Cache 는 [**ShaderPipelineCache.CacheFile**] 섹션을 사용하여 일부 세팅을 저장합니다.

  • LastOpened 세팅은 지난 번 Open 에 지정하여 열었던 캐시 파일 이름을 저장합니다. 존재하는 경우 FShaderPipelineCache::Initialize 안에서 기존 캐시를 여는 데 사용합니다. 지정하지 않으면 기본값은 AppName 입니다.

  • SortMode 세팅은 PSO 에 원하는 정렬 모드를 저장하며, 다음 중 하나입니다.

    • Default 기본: 파일에 지정한 순서대로 로드합니다.

    • FirstToLatestUsed 먼저 사용된 순: 사용된 가장 낮은 첫 프레임에 사용된 PSO 로 시작하여 가장 높은 쪽으로 진행합니다.

    • MostToLeastUsed 많이 사용된 순: 가장 자주 사용된 PSO 로 시작하여 가장 덜 사용된 쪽으로 진행합니다.

  • 지정한 것이 없으면 FShaderPipelineCache::Initialize & OpenPipelineFileCache 에는 "Default" 를 사용합니다.

  • GameVersionKeyGGameIni 에 지정된 게임 콘텐츠 버전을 나타내는 읽기 전용 정수로, 호환되지 않는 게임 콘텐츠 버전을 구분합니다. 이 값은 기본적으로 FEngineVersion 체인지리스트에서 따옵니다.

로깅 사용법

PSO 데이터를 캡처할 때 사용할 수 있는 명령은 다음과 같습니다.

  • r.ShaderPipelineCache.Enabled = 1 명령으로 PSO 캐시를 활성화한 다음 r.ShaderPipelineCache.LogPSO = 1 명령으로 런타임 로깅을 사용할 수 있습니다.

  • 이 때 시작 시 적절한 캐시를 열고 게임을 플레이하도록 게임을 구성했는지 확인해야 합니다.

  • UE4 는 PSO 오프라인 쿠킹 기능을 제공하지 않기에 등장 순서대로 로그에 기록합니다. 즉 이 시스템은 렌더링에 실제 사용되는 PSO 만 수집합니다.

  • 그러므로 게임을 수동 플레이하여 로그를 수집하거나, 이 프로세스를 자동화할 수도 있는데 그 부분은 이 코드의 범위를 벗어나는 부분입니다.

  • 데이터 저장은 언제든 FShaderPipelineCache::SavePipelineFileCache 를 호출하면 되며, 이는 r.ShaderPipelineCache.SaveAfterPSOsLogged = X 를 설정에 지정된 PSO 개수 이후 자동으로 가능합니다. 여기서 X 는 한 번에 저장할 PSO 개수입니다 (0 은 자동 저장을 비활성화합니다).

  • 로그 파일은 오버 헤드를 줄이기 위해 셰이더 플랫폼에 따라 다릅니다.

파일 위치 및 패키징

PSO 데이터 저장 위치 관련 자세한 정보는 다음과 같습니다.

  • 쓰기 가능 캐시 파일은 항상 User Saved 디렉터리에 저장됩니다.

  • 게임은 Game Content 디렉터리 내 불변 사본을 제공할 수도 있으며, 이는 내부 또는 시드 데이터로 사용됩니다.

  • development 에서 로그를 생성하고 UnrealEd.MergeShaderPipelineCaches 와 병합하면 연관 플랫폼의 Game Content 디렉터리 안에 패키징됩니다.

요구 사항

프로젝트에서 PSO 를 캡처하도록 설정할 때 준수해야 하는 요구 사항은 다음과 같습니다.

  • FShaderCodeLibrary 는 반드시 Project Settings > Packaging > Share Material Shader Code (프로젝트 세팅 > 패키징 > 머티리얼 셰이더 코드 공유)를 통해 활성화해야 합니다.

  • Native Shader Libraries (네이티브 셰이더 라이브러리) 활성화는 선택이지만, Metal 에는 활성화하는 것이 좋습니다.

추가 노트

  • 열린 캐시 파일은 (Fast Save 가 수반되는) ClosePipelineFileCache 로 기존 파일을 닫은 다음 OpenPipelineFileCache 로 새 파일을 여는 것으로 변경할 수 있습니다.

  • 로깅할 때 파일을 전환하면 새 항목만 기록되므로, 전환 이전 기록된 PSO 는 누락됩니다. 예상치 못한 항목으로 캐시가 오염되는 것을 방지할 수 있습니다.

  • UnrealEd.MergeShaderPipelineCaches 커맨드렛은 파일 버전, 셰이더 플랫폼, 게임 버전이 같은 캐시 파일을 병합하는 데 사용할 수 있습니다.

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼