TECHARTNOMAD TECHARTFLOW.IO

TECH.ART.FLOW.IO

[주석번역]STREAMING THE WORLD OF HORIZON ZERO DAWN

jplee 2024. 1. 2. 23:54

역자의 말.
언리얼엔진을 사용하는 MMORPG 개발에 참여하고 있기 때문에 주요 관심사는 스트리밍 로딩의 여러가지 전략에 대한 다양한 관찰이 요구되죠. 이 전 번역글에서는 공간효율적 패키징을 살펴봤습니다. 이번 번역글에서는 호라이즌 포비든 웨스트에서 그들이 중점으로 고민했던 부분과 어떠한 개념으로 월드 스트리밍을 처리했는지 살짝 살펴보는 시간이 될것 같습니다.


필자에 대해서... 
얀잡은 게릴라 게임즈의 수석 테크니컬 프로그래머입니다. 지난 12년 동안 데시마 게임 엔진에서 로딩 및 스트리밍 시스템, 메모리 할당기, 에셋 변환 파이프라인을 중심으로 작업해 왔습니다.

요약 
이 강연에서 얀-잽은 호라이즌 제로 던의 방대하고 풍부한 세계를 구현하는 몇 가지 시스템을 심층적으로 살펴봅니다. 에셋 파이프라인, 로우레벨 및 하이레벨 스트리밍 시스템, 메모리 관리 및 스케줄링 등의 주제를 다룹니다. 데시마 엔진의 로우레벨 작동 방식에 대한 인사이트를 얻고 마법이 어떻게 만들어지는지 알아보세요.

게임플레이/스토리상의 이유로 corridors 가 허용되지만 로딩 문제를 해결하기 위해 반드시 필요한 것은 아닙니다.

-왼쪽은 코어텍스트 파일 내용
-오른쪽은 에디터 보기
-코어텍스트는 속성 이름, 개체 링크를 지원한다는 점을 제외하면 JSON과 매우 유사합니다.

다른 파일에 있는 개체에 대한 개체 링크는 파일 경로와 객체 이름으로 구성됩니다.
파일 경로는 모두 공통 루트를 기준으로 합니다.
다음은 작은 예시입니다.

더욱 사실적인 객체.
그래프대부분의 콘텐츠에는 이러한 종류의 재귀적 종속성이 있습니다.

CoreText 파일은 바이너리 .Core 파일로 변환됩니다.프로세싱은 입력 데이터를 런타임 형식으로 변환합니다.텍스처, 메시, 애니메이션, 피직스.스트리밍 데이터는 .CoreStream 파일에 기록됩니다.디버그 데이터는 .CoreDebug 데이터에 기록됩니다.
코어 파일은 일반적으로 코어 텍스트 파일보다 작음.CoreText에서 .Core로의 일대일 매핑(기본)
- 이는 출력 파일 그래프가 입력 코어 텍스트 파일 그래프보다 다소 크다는 것을 의미합니다.
- 특히 스트리밍 데이터가 포함된 파일의 경우, .Core 파일은 파일 이름 길이보다 작은 경우가 많습니다!
- 변환 수준에서 파일 패킹이 수행되지 않으므로 출력 파일은 모두 개별적으로 읽습니다.

파일 프리페치 작동 방식의 예를 들어 두 루트 파일인 AB의 파일 그래프가 있다고 가정해 보겠습니다.

프리페치 파일에는 패키지의 각 에셋 파일에 대한 항목이 있습니다.
각 파일에 대한 파일 크기가 포함되어 있으며, fstat가 필요하지 않습니다.
링크하는 모든 파일에 대한 인덱스가 포함되어 있습니다.
서브그래픽을 로드할 때 루트 파일을 찾은 다음 재귀적으로 스캔합니다.

모든 PlayGo 초기 콘텐츠가 포함된 파일 1
모든 PlayGo 나머지 콘텐츠가 포함된 파일 1
초기 콘텐츠의 경우 언어당 로컬라이즈된 파일 1
나머지 콘텐츠의 경우 언어당 로컬라이즈된 파일 1
한 번에 하나의 활성 패치 파일
향후 하나 이상의 DLC (적은 수)

정렬된 파일을 256KiB 블록으로 쓰기
파일이 블록 경계와 겹치는 경우

크라켄(우들)을 사용하여 블록 압축하기.
압축된 블록은 길이가 가변적입니다.

골드 마스터: 게임이 완성되어 퍼블리싱 업체에 보내져 대중에게 공개될 준비가 완료된 상태입니다.

-상당히 큰 , ~800MiB제출량
-서브시스템의 런타임 데이터 관리
 

(양파/마늘 이야기가 나오는데 위 실제 발표자료 내 표기 된 어플리케이션 힙을 오니언 이라고 부르고 렌더데이터 풀을 갈릭 이라고 부른다. )

예시 설명

메인 스레드는 코어 0에서 독점적으로 실행.
다른 스레드에 의해 선점되지 않음.
게임 루프, 렌더링 루프 실행. 
일반 스레드 우선 순위로 실행.

워커 스레드는 프레임 단위로 작업을 실행합니다.
지연되지 않을 수 있음선점되지 않아야 함.
일반 스레드 우선 순위로 실행

오디오는 코어 6('하프 코어')를 사용합니다,
일반적으로 오디오 업데이트를 실행하기에 충분합니다(작업자 스레드로 넘어갈 수 있음).
다른 스레드에 의해 중단되지 않습니다.

우선순위가 높은 I/O 스레드 2
각 스레드는 클러스터당 하나씩 2개의 코어에 있음
하나의 코어가 계속 점유되지 않도록 하기
처리 중인 요청이 두 개 이상일 수 없음
청크 읽기가 포함된 간단한 우선 순위 큐
대용량 읽기 중 높은 우선순위 요청 인터럽트 허용
중단된 부분 읽기가 다시 예약

메인 코어를 제외한 모든 곳에서 실행 가능 스레드 우선순위가 낮으므로 유휴 시간에만 실행됩니다.
주요 작업: 스트리밍, 내비메시 생성

곁다리 콘텐트- 마지막에 시간이 너무 많은 경우에만, 그렇지 않으면 매우 짧습니다.

 


한글 변환 된 PPTX 다운로드

Google Slides 로드 중

Google Slides에서 "Streaming the world of Horizon Zero Dawn.pptx" 파일을 엽니다. 몇 분 정도 소요될 수 있습니다.

docs.google.com