Version: 2019.3
언어: 한국어
컬링그룹 API
그래픽스 퍼포먼스 최적화

비동기 텍스처 업로드

비동기 텍스처 업로드는 렌더 스레드(Render-thread)로 디스크에서 텍스처 데이터를 비동기식으로 로드하고 GPU로 시간 분할 업로드를 할 수 있게 해줍니다. 이 기능은 메인 스레드에서 GPU 업로드 대기 시간을 단축시켜 줍니다. 비동기 텍스처 업로드는 읽기-쓰기가 활성화되지 않은 모든 텍스처에 대해 자동으로 적용되므로 이 기능을 사용하기 위해 직접적인 행동을 취할 필요가 없습니다. 하지만 비동기 업로드가 작동되는 방식 중 일부를 제어할 수 있으므로 해당 프로세스를 이해하는 것은 이러한 제어 기능을 사용하는 데 도움이 됩니다.

프로젝트가 생성되면 비동기 업로드가 가능한 텍스처 데이터는 스트리밍 리소스 파일에 저장되고 비동기 방식으로 로드됩니다.

메모리/타임 슬라이싱에 대한 간단한 제어 및 전면적 제어

단일 링 버퍼는 텍스처 데이터를 로드하고 GPU에 업로드할 때 재사용되며 필요한 메모리 할당량을 줄여줍니다. 예를 들어 작은 텍스처 20개가 있다면, Unity가 텍스처 20개 모두 한번에 비동기 로드 요청을 합니다. 만약 하나의 큰 텍스터가 있다면 Unity가 단일 요청을 합니다.

버퍼 크기가 요청된 텍스처만큼 크지 않은 경우 텍스처에 맞게 자동으로 크기를 조정합니다. 그러나 업로드할 텍스처 중 가장 큰 텍스처에 맞게 사이즈 조정을 해 둬야 더 큰 텍스처를 만날 때마다 버퍼를 재조정할 필요가 없어집니다.

값이 크다는 것은 텍스처가 더 빨리 GPU에 준비되는 것을 의미하지만 해당 프레임에서 더 많은 CPU 오버헤드가 다른 프로세싱에 사용되기 때문에 텍스처 업로드에 소요되는 시간은 조절이 가능합니다. 이 CPU 시간은 GPU에 업로드될 텍스처가 버퍼에서 대기 중일 때에만 사용됩니다.

Quality 설정을 통해 버퍼 크기와 타임 슬라이싱을 지정할 수 있습니다.

Quality 설정에서 비동기 업로드 설정
Quality 설정에서 비동기 업로드 설정

비동기 텍스처 업로드 스크립팅 API

스크립트에서 버퍼 크기와 타임 슬라이스 값을 조절할 수 있는 기능을 제공합니다.

타임 슬라이스

스크립트 레퍼런스를 참고하세요: QualitySettings.asyncUploadTimeSlice.

프레임당 비동기 텍스처 업로드에 소요되는 CPU 시간을 ms로 타임 슬라이스를 설정합니다. 타겟 플랫폼과 API에 따라 다르게 설정할 수 있습니다. 업로드할 텍스처가 있을 경우 함수 호출에만 시간이 소요되고 그렇지 않으면 조기 종료됩니다.

버퍼 크기

스크립트 레퍼런스를 참고하십시오. QualitySettings.asyncUploadBufferSize

비동기 텍스처 업로드의 링 버퍼 크기를 설정합니다. 단위는 MB입니다. 타겟 플랫폼에 따라 적당한 사이즈를 설정했는지 확인하고 게임에 큰 텍스처를 로드할 만큼 충분한지 확인합니다. 예를 들어 22MB 크기의 큐브맵이 있고 RingBuffer 사이즈를 16MB으로 설정했다면 앱이 해당 씬을 로딩하는 동안 자동으로 링 버퍼를 22MB로 재조정합니다.

참고

읽기/쓰기가 비활성화된 텍스처의 경우 TextureData는 resS(Streaming Resource)의 일부이며 렌더 스레드에서 업로드가 진행됩니다. 전과 마찬가지로 AwakeFromLoad로 호출하는 동안 텍스처의 유효성은 보장되므로 렌더링 시 텍스처의 유효성이나 로딩 순서에는 변화가 없습니다.

읽기/쓰기가 활성화된 텍스처나 LoadImage(byte[] data) 함수로 직접 로드한 텍스처 또는 Resources 폴더에서 로딩 등 다른 형식의 텍스처 로딩에 대해서는 비동기 버퍼 로딩이 사용되지 않고 이전 메서드가 적용됩니다.

컬링그룹 API
그래픽스 퍼포먼스 최적화