<서론>
OpenGL의 한계
1992년 OpenGL 1.0이 세상에 출시되었다. 지금까지 OpenGL은 발전되고 있고 수 많은 어플리케이션이 OpenGL을 사용하고 있다. 하지만 CPU가 싱글코어 프로세서에서 멀티코어 프로세서로 발전하고 GPU가 Fixed Function Pipeline에서 Unified Pipeline으로 발전하면서 OpenGL은 한계에 봉착했다.
OpenGL은 State Machine의 구조를 가지고 있다. State Machine의 정의를 간단하게 설명하면 State를 변경하는 명령을 받기 전에는 현재의 State를 계속 유지하고 있다. 다시 말해 사용자는 렌더링을 위해 OpenGL의 State Machine을 조작하고 그리는 명령을 보내면 OpenGL은 해당 메모리에 렌더링 결과를 출력하게 된다.
OpenGL은 Fixed Function GPU를 동작시키기 위해 만들어진 API이기 때문에 Unified Shader GPU를 잘 반영하지 못하고 있다. 이러한 점은 최신 GPU를 효율적으로 사용하지 못하는 한계가 발생한다.
또한 OpenGL은 너무 추상화되어 있기 때문에 드라이버 벤더(NVIDIA, AMD, Qualcomm, ARM, Imagination)에 따라 구현방식 많이 다르다. 그로 인해 동일한 코드일지라도 동작이 다르고 결과가 달라질 수 있다. 최적화의 방식도 드라이버 벤더마다 굉장히 달라질 수 있다. 최악의 경우 특정 최적화가 NVIDIA에서는 빠르나 AMD에서는 느릴 수 있다. 추상적인 개념을 지원하고 모든 어플리케이션에서의 안정성도 확보해야하기 때문에 드라이버 코드가 굉장히 복잡하고 무겁다. 이로인해 많은 CPU자원을 요구하고 이는 성능에 문제가 된다.
물론 앞에서 말한 한계점을 OpenGL Extension을 사용하면 해결할 수 있다. 그러나 벤더마다 지원하는 Extension이 다르고 어플리케이션을 벤더별로 구현하는것은 유지보수가 굉장히 힘들어지기 때문에 잘 사용되지 않는다. MS, Apple에선 이러한 한계점을 오래전부터 잘 알고 있었기 때문에 OpenGL을 공식적으로 지원하고 있지 않다. MS는 DirectX로 Apple은 Metal로 OpenGL을 대체하고 있다.
Vulkan의 탄생
앞에서 언급한 한계점을 해결하기 위해 수 많은 회사들이 Khronos에 모여 표준화를 진행하였다. 본격적인 시작은 AMD가 Mantle를 Khronos에 기부하면서 시작되었다. Mantle은 AMD에 의해 개발되었으며 AMD의 Radeon 카드를 효율적으로 다루기 위해 설계된 API이다. Mantle은 최초의 저 수준 API이며 Mantle을 사용한 게임 및 벤치마크에서 성능이 크게 향상되었다. Mantle의 영향을 받아 MS의 DirectX 12, Apple의 Metal이 출시 되었다. Khronos는 Mantle을 기반으로 Vulkan을 설계했으며 Windows, Linux, Mac, Android, iOS와 같은 다른 운영 체제에서 사용할 수 있다. 아래 동영상은 AMD 설명하는 Vulkan에 대한 동영상이다.
Vulkan과 OpenGL의 차이점
Vulkan과 OpenGL의 가장 큰 차이점은 Vulkan은 저수준의 API이고 OpenGL은 고수준의 API이다. 쉽게 말해 OpenGL은 API가 호출되면 올바른 방법으로 API가 호출되었고 매개 변수들이 잘 전달되었는지 확인한다. 만약 오류가 있다면 개발자에게 피드백을 준다. 한마디로 말해 개발자가 사용하기 쉽고 해야하는 많은 일들이 드라이버 내에서 이뤄진다. 이러한 이유로 OpenGL은 벤더마다 구현방식에 차이가 크고 실제 동작방식이 다르다. 반면 Vulkan은 저수준의 API이다. 즉 개발자가 반드시 API를 올바르게 호출해야하고 올바른 매개 변수를 전달해야 한다. 그렇지 않으면 OpenGL과 달리 어플리케이션이 죽거나 심지어 커널 패닉이 발생할 수 있다.
Vulkan은 OpenGL과 달리 위의 코드처럼 버퍼를 생성하면 바로 버퍼가 생성된다. 이와 같은 명시적인 동작방식으로 인해 여러 벤더일지라도 동일한 동작 방식을 기대할 수 있고 성능도 향상시킬 수 있다.
<서론에 대한 내용참고 사이트> - 요약해서 가져온것이라고 보면된다...
https://blog.naver.com/dmatrix/221808847792
<그래서 왜 Unreal에서 사용할까?>
1. 기본적으로 모바일쪽 개발을 할때 많이 쓴다고 보면 된다.
2. 그리고 어떤 게임의 경우는 Unreal 기본으로 플랫폼에 맞추어 랜더링 한다고 해도 개발사 쪽에서 Vulkan을 사용하면 그것에 맞추어 하기 위해서 사용해서 하기도 한다고..
3. 그래서 Vulkan용으로 빌드를 해야할 때 API PlugIn을 다운 받아서 빌드하면 된다.
https://docs.unrealengine.com/5.0/ko/using-the-android-vulkan-mobile-renderer-in-unreal-engine/
Android Vulkan 모바일 렌더러
Android 프로젝트에서 Vulkan 렌더러를 활용하는 방법과 Vulkan 호환성에 관한 정보입니다.
docs.unrealengine.com
'Unreal > Unreal5' 카테고리의 다른 글
Unreal5 키보드 단축키 (Unreal Keboard ShortCut) (0) | 2023.08.18 |
---|---|
Contents Browser의 Thumbnail Scale Change (0) | 2023.08.18 |