티스토리 뷰
developer.arm.com/documentation/100140/0401/Vulkan
Documentation – Arm Developer
developer.arm.com
Vulkan
이 장에서는 Vulkan과이를 활성화하는 방법에 대해 설명합니다.
Vulkan은 OpenGL 및 OpenGL ES보다 많은 이점을 제공하는 Khronos 그룹의 크로스 플랫폼 그래픽 및 컴퓨팅 API입니다. 이러한 이점은 다음과 같습니다.
- 모바일, 데스크톱, 콘솔, 서버 및 임베디드 시스템을 위한 하나의 통합 API 프레임 워크를 제공합니다.
- 다양한 기능을 갖춘 하드웨어 지원.
- 최소 드라이버 오버 헤드는 Arm Mali GPU 하드웨어에서 고성능을 지원합니다.
- 애플리케이션은 GPU 및 컴퓨팅 리소스를 통해 더 낮은 수준의 액세스 권한을 얻습니다.
- 애플리케이션 프로세서 병목 현상 감소.
- 멀티 스레딩 및 멀티 프로세싱 지원.
- 여러 애플리케이션 프로세서를 효율적으로 사용합니다.
- 셰이더에 SPIR-V 중간 언어를 사용하여 런타임 커널 컴파일 시간을 줄입니다.
- 셰이더 소스 코드를 제공 할 필요가 없습니다.
- 낮은 애플리케이션 프로세서 오버 헤드, 단순화 된 드라이버 및 더 많은 온칩 메모리 사용으로 에너지 소비 감소.
- Mali-T6XX 이상의 모든 GPU 지원
Vulkan 정보
Vulkan은 Khronos 그룹의 크로스 플랫폼 그래픽 및 컴퓨팅 API입니다.
Vulkan은 이전 OpenGL 및 OpenGL ES 표준에 비해 많은 장점이 있습니다.
통합 및 휴대 가능
Vulkan은 모바일, 데스크톱, 콘솔 및 임베디드 시스템을위한 하나의 통합 API 프레임 워크를 제공합니다.광범위한 구현에 걸쳐 이식성이 있으며 광범위한 응용 프로그램에 유용합니다.
더 간단한 드라이버
Vulkan은 더 간단한 드라이버를 사용하여 드라이버 오버 헤드를 최소화합니다. 낮은 지연 시간과 더 나은 효율성은 애플리케이션이 OpenGL ES 3.1보다 Vulkan을 사용하여 더 나은 성능을 얻을 수 있음을 의미합니다. 더 간단한 드라이버는 애플리케이션 프로세서 병목 현상을 줄여줍니다. 애플리케이션은 리소스 관리를 수행하고 GPU를 직접 저수준 제어합니다.
다중 스레딩 및 다중 처리
Vulkan은 여러 애플리케이션 프로세서에서 멀티 스레딩을 지원합니다. 이 기능을 사용하면 여러 응용 프로그램 프로세서를 효율적으로 사용하여 처리 부하와 전력 소비를 줄일 수 있습니다.애플리케이션이 스레드 관리 및 동기화를 제어합니다.
Command Buffers
다중 스레딩을 사용하여 명령 버퍼에 대한 명령을 병렬로 생성 할 수 있습니다. 별도의 제출 스레드를 사용하여 명령 버퍼를 명령 큐에 배치 할 수도 있습니다.그래픽, 컴퓨팅 및 DMA 명령 버퍼를 추가 할 수 있습니다. 다양한 그래픽, DMA 및 컴퓨팅 대기열은 작업 디스패치를위한 유연성을 제공합니다. 다중 스레드 명령 생성을 통해 코드를 여러 애플리케이션 프로세서 코어에서 실행하여 성능을 높일 수 있습니다. 클럭 속도가 더 높은 하나의 프로세서 대신 더 낮은 클럭 속도로 실행되는 여러 애플리케이션 프로세서를 사용하면 전력 소비가 줄어 듭니다.
SPIR-V
Vulkan은 공통 언어 프런트 엔드를 사용할 수 있도록하는 SPIR-V 중간 언어를 사용합니다. SPIR-V는 병렬 컴퓨팅 및 그래픽을위한 다중 API 중간 언어입니다. 여기에는 흐름 제어, 그래픽 및 병렬 컴퓨팅 구성이 포함됩니다.Vulkan 셰이더 및 OpenCL 커널 소스 언어에 대한 기본 표현을 제공합니다. 여러 플랫폼에서 동일한 SPIR-V 프런트 엔드 컴파일러를 사용하여 미리 컴파일 된 셰이더를 생성 할 수 있습니다.SPIR-V를 사용하면 Vulkan 드라이버에 프런트 엔드 컴파일러가 없으므로 드라이버가 더 간단하고 셰이더 컴파일이 더 빠릅니다. 중간 언어를 사용한다는 것은 셰이더 소스 코드를 애플리케이션과 함께 제공 할 필요가 없음을 의미합니다. 또한 향후 다양한 쉐이더 언어를 사용할 수있는 유연성을 제공합니다.
로드 가능한 레이어
Vulkan을 사용하면 테스트 및 디버깅을 위해 개발중인 소프트웨어 계층을 로드 할 수 있습니다. 생산을 위해 추가 소프트웨어 계층을 제거 할 수 있으므로 배송 제품에 테스트 오버 헤드가 없습니다.
다중 패스 렌더링
다중 패스 렌더링은 렌더 패스에서 모든 것을 미리 선언하는 기술입니다. 각 서브 패스에 대해 다른 출력을 지정하고 함께 연결할 수 있습니다.다중 패스를 사용하면 한 서브 패스의 픽셀이 동일한 픽셀 위치에서 이전 서브 패스의 결과에 액세스 할 때 드라이버가 최적화를 수행 할 수 있습니다. 이러한 방식으로 데이터를 고속 온칩 메모리에 저장하여 대역폭과 전력을 절약 할 수 있습니다. 이 프로세스는 Mali GPU와 같은 타일 기반 GPU에서 더 효율적입니다.
(ex 디퍼드 렌더링, Soft-Particle, Tone-mapping)
About Vulkan in Unity
Unity에서 Vulkan을 사용할 때의 이점.
Vulkan의 많은 장점은 Vulkan의 드라이버가 OpenGL 및 OpenGL ES에 비해 더 간단하다는 사실에서 비롯됩니다.
그러나 많은 관리 작업이 애플리케이션 내에서 처리되어야한다는 단점이 있으며이 낮은 수준의 액세스로 인해 애플리케이션 작성이 더 복잡해집니다.
Unity가이 작업의 대부분을 처리하므로 애플리케이션은 Vulkan의 향상된 성능을 자동으로 활용할 수 있습니다.
Unity에서는 Unity가 애플리케이션을 빌드하는 데 사용할 수있는 그래픽 API 목록에 Vulkan을 추가하기만 하면됩니다.
Vulkan은 OpenGL ES보다 더 효율적이며 전력 소비를 줄이고 배터리 수명을 늘려 일반적으로 사용 가능한 경우 더 나은 선택입니다. 다음과 같은 경우 Vulkan을 사용하는 것이 좋습니다.
- 애플리케이션의 최대 성능을 원합니다.
- 응용 프로그램은 응용 프로그램 프로세서에 바인딩됩니다.
- OpenGL 또는 OpenGL ES 드라이버가 문제를 일으키는 것으로 의심됩니다.
Unity에서 Vulkan 활성화
Vulkan을 활성화하려면 :
- PlayerSetting창에서 OtherSetting섹션을 찾습니다.
- Auto Graphics API 확인란이 선택되어 있지 않은지 확인하십시오. 이를 통해 API를 수동으로 선택할 수 있습니다.
- Vulkan을 API로 추가하려면 +를 눌러 새 API를 목록에 추가하고 Vulkan을 추가합니다. Vulkan이 마지막 옵션으로 추가되었습니다.
- Vulkan을 기본 API로 만들려면 Vulkan을 선택하고 목록 맨 위로 이동시킵니다.
Vulkan 사례 연구
Sky Force Reloaded 최적화
게임의 초기 개발은 필요한 풍부한 그래픽 경험을 제공했습니다. 다음 단계는 최적화였습니다.
게임은 동시에 화면에 많은 것들이있는 그래픽 적으로 복잡하기 때문에 팀은 최적화를위한 가장 큰 영역이 Fill-Rate이라고 생각했습니다. Fill-Rate문제는 일반적으로 프레임 버퍼의 해상도를 줄임으로써 제거 할 수 있습니다.
그러나 게임을 저해상도로 렌더링하려고 할 때 여전히 성능 문제가있었습니다. 하이 엔드 장치에서도 항상 초당 60 프레임 (FPS)을 유지할 수있는 것은 아닙니다. 팀은 게임이 많은 수의 드로우 콜을하고 있음을 발견했습니다. 때로는 프레임 당 최대 1000 개의 드로우 콜이 있습니다.
모든 DrawCall에는 계산 오버 헤드가 있으므로 많은 수의 그리기 호출을 만드는 것은 계산 비용이 많이 듭니다. 이로 인해 OpenGL ES 드라이버는 GPU 용 데이터를 준비하는 동안 오랜 시간 동안 애플리케이션 프로세서를 바쁘게 유지합니다. 그 결과 고급형 모바일 장치에서도 속도가 느려질 수 있습니다.
최적화를 위해 팀은 DrawCall 수를 최소화하거나 게임 엔진이 일괄 처리 할 수 있도록 수정할 수 있습니다. 그러나 이것은 게임의 품질을 저하시키지 않고는 항상 가능하지는 않습니다.
다음 그래프에서 Vulkan은 OpenGL ES가 어려움을 겪는 동안 대부분의 시간 동안 60FPS를 유지할 수 있음을 알 수 있습니다. 전반적인 성능 향상은 OpenGL ES보다 15 % 높습니다. 팀은 Vulkan이 그래픽 API 일 뿐이라는 점을 고려할 때 이것이 매우 좋은 결과라고 생각했습니다.
https://www.youtube.com/watch?v=VCSkp-QZ37M 에서 비디오 비교를 볼 수 있습니다 .
이 비디오는 Vulkan 버전과 OpenGL ES 버전의 성능 비교를 나란히 보여줍니다. 왼쪽에서 게임은 OpenGL ES를 사용합니다. 오른쪽에서 게임은 Vulkan을 사용합니다. 두 버전 모두 초당 60 프레임으로 실행됩니다.
이 프레임 속도에서 Vulkan은 OpenGL ES 버전에 비해 6 배 더 많은 별과 두 배 많은 총알을 렌더링 할 수 있습니다. OpenGL ES를 사용하면 동일한 수의 개체를 렌더링하면 바쁜 장면에서 프레임 속도가 크게 떨어집니다. Vulkan을 사용하면 OpenGL ES와 비교하여 동일한 프레임 속도로 화면에 더 많은 지오메트리를 추가 할 수 있습니다.
그리고 Vulkan으로 테스트하여 전력 소비를 줄여 배터리 수명을 늘릴 수 있는지 확인했습니다. Unity에서 Vulkan을 활성화하면 전력 소비가 10 ~ 12 % 감소하여 10 ~ 12 %의 추가 플레이 시간이 발생했습니다.
https://www.youtube.com/watch?v=WI7nXq8oozw 에서 비디오 비교를 볼 수 있습니다.
'Unity > 최적화' 카테고리의 다른 글
Unity 개발자를 위한 ARM 설명서 v4.1 - part 2 (0) | 2021.04.06 |
---|---|
Unity 개발자를 위한 ARM 설명서 v4.1 - part 1 (0) | 2021.04.06 |
Unity Particle Draw call 절약 (0) | 2021.04.06 |
Diagnosing Performance Problems - 2019.3 (0) | 2021.03.26 |
Fixing Performance Problems - 2019.3 (0) | 2021.03.22 |
- Total
- Today
- Yesterday