https://docs.unrealengine.com/4.26/ko/SharingAndReleasing/PSOCaching/(UE4)
https://docs.unrealengine.com/5.0/en-US/optimizing-rendering-with-pso-caches-in-unreal-engine/ (UE5)
https://m.blog.naver.com/gjcka1234/221536629756
언리얼은 다음 단계를 거쳐 PSO 를 수집합니다.
- 게임을 플레이합니다.
- 실제로 드로되는 것을 기록합니다.
- 빌드에 이 정보를 포함시킵니다.
PSO에서 가장 중요한 데이터는 셰이더 정보입니다. 그러나 언리얼의 셰이더는 개발자가 머티리얼을 미세조정함에 따라 여러 빌드에서 달라질 수 있습니다. 애플리케이션을 오래 플레이한 뒤에 PSO 전체를 버리는 일이 없도록 PSO 캐시 파일은 두 가지 종류로 나뉩니다.
- .upipelinecache 파일, 즉 기록된 PSO 캐시 는 애플리케이션 빌드 실행 시 기록됩니다.
- .spc 파일, 즉 스테이블 PSO 캐시 는 맵 파일 쿠킹 시 생성되며 개발자가 프로젝트 내의 맵이나 셰이더를 변경할 때 이를 예측하여 변경되는 셰이더 정보를 포함합니다.
- 이는 머티리얼 이름, 버텍스 팩토리 이름, 셰이더 타입 등 여러 빌드 간에 동일하게 유지될 것으로 예상되는 안정적이고 하이레벨 디스크립션에 의해 식별됩니다. 이 디스크립션은 스테이블 키(stable key) 라고 불리며 .shk 파일(기존에는 .scl.csv )로 표현됩니다.
이렇게 하면 기록된 데이터는 자주 변경되더라도 비교적 안정을 유지합니다. 애플리케이션에 극단적인 대규모 변경이 적용된 경우 PSO 캐시를 다시 기록해야 할 수도 있지만, 애플리케이션의 전반적인 콘텐츠가 마무리되었다면 그대로 두어도 됩니다.
사전에 기록된 캐시가 포함되지 않은 빌드로 처음부터 PSO 캐시용 데이터를 수집하는 상황을 가정하겠습니다. PSO 캐시 수집 프로세스는 반복적입니다. 즉 깨끗한 슬레이트에서 시작하기보다는, 이전 데이터를 잃지 않고 시간이 갈수록 더해 가는 방식입니다. 그러나 캐시 파일이 오래된 경우에는 보통 PSO 캐시를 재생성하는 것이 좋습니다. 처음 수집된 이후로 코드 또는 콘텐츠 변화가 많아 연관성을 잃었을 수도 있기 때문입니다.
세팅 과정
1. 프로젝트가 PSO 캐시를 기록하도록 구성
1. (플랫폼)Engine.ini 파일 - 이 디렉터리를 사용하면 PSO 캐시가 필요하지 않을 다른 플랫폼이 이 세팅을 사용하는 걸 방지

2. 프로젝트의 DefaultEngine.ini 파일을 엽니다.


처음부터 시작하는 경우 (프로젝트)/Build/(플랫폼)/PipelineCache 에 파일이 없는지 확인하세요. 쿠커가 기록된 캐시 파일을 찾는 위치입니다. PSO를 처음 수집하는 경우 이 폴더가 존재하지 않을 수도 있습니다..
3. r.ShaderPipelineCache.Enabled = 1




r.ShaderPipelineCache.Enabled - PSO 캐시 활성화
r.ShaderPipelineCache.LogPSO - 런타임 로깅 여부
이 옵션이 모두 켜져있지 않으면 나중에 파일이 생기지 않을 수 도 있다.
그리고 이 설정들을 적용하기위해 다음 엔진을 한 번 껏다가 켜야 한다.
2. PSO 데이터 수집
캐시에 사용되는 데이터 일부는 프로젝트를 타깃 디바이스 중 하나에서 실행하는 도중 생성해야 한다

프로젝트 런처에서 Custom Launch Profiles(커스텀 런치 프로파일) 섹션을 찾아 더하기 부호 아이콘을 클릭하여 새 커스텀 런치 프로파일을 추가한다.


섹션의 Project(프로젝트) 드롭다운을 클릭하고 이 프로파일을 연결할 프로젝트를 선택해야 한다. (찾는 목록이 없다면 드롭다운 클릭 후 Browse…를 눌러 해당 uproject 파일을 선택한다.)
Cook(쿠킹)
섹션 아래 How Would you like to the content? (콘텐츠 쿠킹을 어떻게 할까요) 옵션을 By the Book으로 설정한다.
Window / WindowEditor (현재 Server 와 Client는 지원한다고 하지않는다)
Cooked Platforms (쿠킹 플랫폼)
섹션에서 이 프로파일이 사용할 플랫폼과 텍스처 포맷을 선택할 수 있다.

Cooked Maps (쿠킹된 맵)
(모두 표시)가 선택되었는지 확인 후 PSO캐시를 수집하기 위해 실행할 때 필요한 Level (레벨)을 체크한다.

Launch (실행)
섹션아래 Initial Map(초기 맵)을 프로젝트 로드 시 사용할 레벨로 설정한다.
추가 명령줄 파라미터에 -logPSO를 입력하여 프로젝트가 실행되면 PSO 로깅이 활성화 되도록 한다.
※ PSO 데이터를 수집할 때 프로젝트에 계속 크래시가 나면, 명령줄에 -NoVerifyGC를 추가하여 가비지 컬렉션을 끄고 해야한다.

설정이 완료되었으면 Back (뒤로) 버튼을 클릭하여 Custom Launch Profiles (커스텀 실행 프로파일) 메뉴로 돌아간다.

Custom Launch Profiles (커스텀 실행 프로파일)
Launch this Profile (이 프로파일 실행) 버튼을 눌러 디플로이 프로세스를 시작한다.
※ Launch this Profile (이 프로파일 실행) 버튼을 누르기 전 타깃 디바이스 설정이 완료되고 개발 PC에 연결되었는지 확인해야 한다. 이 프로세스는 빌드, 쿠킹 뿐 아니라 디플로이 및 연결된 디바이스에서 앱 실행까지 한다.
그리고 빌드가 다 되면 독립 실행에디터가 나오고 충분히 돌아다닌 뒤 창을 닫으면

출력로그에 BUILD SUCCESSFUL 이라 나온다.
빌드가 끝나고 타깃 디바이스에 디플로이가 완료되면 프로젝트의 레벨을 전부 돌아다녀야 한다.
여기서의 목표는 게임에 사용되는 모든 콘텐츠가 로드되도록 하여 머티리얼이 사용하는 셰이더를 캡처하는 것이다.
에디터 창을 닫으면


Saved/StagedBuilds/Windows/(프로젝트이름)/Saved 에서 CollectedPSOs 라는 폴더가 생기고 그 안에 upipelinecache 파일을 확인할 수 있다.
※ 만약 CollectedPSOs 폴더가 생기지 않는다면
(Client)/Saved/StagedBuilds/Windows
위치로 가서 바로가기를 만든 후 -log -logPSO 를 붙인다.

그리고 맵을 돌아다니면 cmd 창으로 PSO캐시가 생성되는것을 확인할 수 있다.
종료하면 CollectedPSOs 폴더안에 .rec.upipelinecache 가 생긴다.
이렇게 하면 예전의 .rec.upipelinecache도 보존할 수 있다.

3. PSO 캐시 빌드
캐시 시스템의 정상 작동을 위해서는, 요청한 셰이더를 요청된 머티리얼에 매핑해야 한다. 그 방법은 ShaderPipelineCacheTools Commandlet을 사용하여 이 매핑 정보가 들어있는 파일을 빌드하면 된다.
PSO 캐시 수집을 한 프로젝트에서 scl.csv (UE5는 .shk로 바뀜) 파일을 찾는다.
/Saved/Cooked/Windows/ProjectName/Metadata/PipelineCaches

C 나 D 드라이브 루트에 PSOCaching 이라는 새 폴더를 만들어 pipeline과 shk파일을 넣는다.

엔진폴더에서 해당 실행파일 바로가기를 생성한 다음 D\PSOCaching 폴더에 넣어준다.


UnrealEditor-Cmd.exe 속성 - 대상 뒤에 다음과 같이 넣어준다.
[프로젝트 경로] -run=ShaderPipelineCacheTools expand …
shk(UE4) 나 spc(UE5) 파일명은 공식문서에 더 자세하게 나와있다.
https://docs.unrealengine.com/4.26/ko/SharingAndReleasing/PSOCaching/BuildingPSOCache/(UE4) https://docs.unrealengine.com/5.0/en-US/optimizing-rendering-with-pso-caches-in-unreal-engine/ (UE5)
UE5 를 사용하므로 사용할 .shk 파일들과 생성할 .spc 파일명을 적어주면된다.
(UnrealEditor-Cmd.exe 경로) (프로젝트이름) -run=ShaderPipelineCacheTools expand D:\PSOCaching\*.rec.upipelinecache D:\PSOCaching\*.shk D:\PSOCaching\(프로젝트이름)_PCD3D.spc
UnrealEditor-Cmd 실행 파일 경로
ProjectName -run=ShaderPipelineCacheTools expand
사용할 .rec.upipelinecache파일
사용할 shk파일들
생성될 spc파일 이름
PSOCaching 폴더나 C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\Win64 에 .spc 파일이 생성된다

프로젝트의 Build / Windows / PipelineCaches 폴더에 .spc 파일을 복사한다.
PipelineCaches 폴더가 없으면 새로 생성한다.

완료되면 지원하는 플랫폼 용으로 리빌드를 하면 생성된 PSO 캐시 데이터를 활용할 수 있는 프로젝트 버전이 완성된다.
PipeLineCaches 에 있어야 하는 spc파일은 한 개 이어야 합니다.
'언리얼 > 언리얼 기능' 카테고리의 다른 글
| Unreal Editor Mode (0) | 2023.07.15 |
|---|---|
| FMath / SpringArm / Camera (1) | 2023.07.08 |
| 언리얼 RPC (0) | 2023.01.04 |
| Assert / 언리얼에서 try catch 문을 사용하지 않는 이유 (3) | 2022.12.18 |
| 언리얼 인터페이스 (0) | 2022.12.05 |