본문 바로가기
공부/TIL•기타

OpenGL / DirectX / Vulkan / Metal

by svcbn 2024. 11. 26.

09/12

 

사실 뭐 이것들을 자세하게 알아보자는 건 아니고,
근본 없는 개발자로서 뭔지는 알고 가야 할 것 같아서 간단하게 알아보고 비교하는 글.

 

OpenGL

Open Graphics Library 의 약자로, 1992년 컴퓨터 그래픽을 하드웨어 가속으로 렌더링 함과 동시에 여러 분야에서 사용할 수 있도록 보장하는 그래픽 API 규격. 이름과는 달리 작동을 하는 라이브러리는 아니고 API 규격에 대한 정의만 한다.

Khronos Group 에서 개발했고, 오픈 소스이기 때문에 계속해서 발전해 나가고 있으며,
외국 개발 커뮤니티 같은 곳에서는 OpenGL의 자료를 더 많이 찾을 수 있다고 하는데..
GPU 가 지원을 하지 않으면 사용할 수 없지만, 사실상 이미 표준으로 자리잡은 터라 전부 지원한다고 보면 된다.

State Machine 의 구조를 가지고 있고, Fixed Function GPU를 위해 만들어진 API라 최-신 Unified Shader GPU를 효율적으로 사용하지 못하는 한계가 있다.

추상화의 정도가 높아, 드라이버 벤더(NVIDIA, AMD, Qualcomm, ARM, Imagination) 에 따라 구현방식이 달라진다.
동일한 코드라도 동작이 다르고 결과가 달라질 수 있는 편. 최적화의 경우에도 마찬가지이다.
추상적인 개념을 지원하는 동시에 모든 어플리케이션에서 안정성을 확보하기 위해 드라이버 코드가 복잡하고 무겁다.

 

DirectX

Microsoft 에서 Windows 와 Xbox 플랫폼용으로 개발한 API 모음.
전용으로 개발했기 때문에, 더 최적화 되어 있으며 플랫폼에 맞게 조정된 고급 기능들도 제공하는 편.
설명서와 튜토리얼 제공 자체는 더 자세한 편이라고 한다.

OpenGL 이 순수한 그래픽 API인 반면, DirectX는 같이 작동하는 그래픽, 오디오, 네트워킹,
기타 하드웨어 API까지도 포함하고 있다. 하드웨어 관리도 직접 할 수 있다는 점이 OpenGl 과는 다른 점.

성능은 직접 사용했을 때 DirectX가 대체적으로 더 좋게 나오는 편이지만, 상용 엔진에 얹어 사용할 때는
그렇게까지 많은 차이가 나지는 않는다고 한다. 
OpenGL과의 비교는 DX11 까지만 비슷하고, DX12 는 완전히 다른 API로 오히려 Vulkan과 유사하다고.

 

Vulkan

OpenGL 을 개발했던 Khronos에서 한계점들을 해결하기 위해 만들기 시작했다.
기반은 AMD 에서 개발하던 Mantle의 지원을 중단 하게 되면서, 오픈소스로 기부하게 된 것에서 시작됐다.
Microsoft의 DirectX12, Apple의 Metal도 이 Mantle의 영향을 받아 만들어졌다.

OpenGL 의 후속작인 만큼 OpenGL과 비교를 해 보자면 드디어 멀티 스레딩이 가능해졌고, 
Vulkan은 훨씬 low-level의 API로, 개발자가 반드시 API를 올바르게 호출해야 하고, 올바른 매개 변수를 전달해야 한다.
그렇지 않으면 어플리케이션이 죽거나, 커널 패닉이 발생할 수 도 있다.

확실히 최적화와 퍼포먼스 향상에는 도움이 많이 되지만, 극악인 난이도로 인해 실제로 잘 사용된 사례들은
별로 없다고 한다. 누군가 써놓은 글을 보면, 실력 있는 개발자가 잔뜩 손을 대서 개발 해 놓아도, 자칫하면
Metal로 적당히 만든 것 보다도 퍼포먼스가 떨어지는 경우도 심심찮게 발생하는 편 이라고.
이런 좋지 않은 환경의 순환으로 사료도 그다지 찾을 수 없다고 한다.

그나마 공식보다 더 설명이 잘 되어 있다는 학습 가이드가 있는데...
또 힙스터라면 한번 정도는 맛을 봐도 괜찮지 않을까..? 

 

Introduction - Vulkan Tutorial

About This tutorial will teach you the basics of using the Vulkan graphics and compute API. Vulkan is a new API by the Khronos group (known for OpenGL) that provides a much better abstraction of modern graphics cards. This new interface allows you to bette

vulkan-tutorial.com

 

 

Metal

애플에서 더이상 우리는 OpenGL ES, OpenCL 을 쓰지 않겠다고 선언, 2018년에 deprecate 하면서
사용하라고 들고 나온 프레임워크. 의외로 발표된건 그보다 더 이전인 2014년이다.

딱히 쓰고 있지 않다고 생각해도, 이미 SpriteKit, SceneKit, RealityKit, Core Image, Core Animation 등을 사용 중이었다면
당신은 이미 Metal 사용자라고 할 수 있다.

OpenGL 의 그래픽과 OpenCL의 계산을 통합 API로 결합했고, 멀티스레딩도 지원하며,
낮은 오버헤드, c++ 기반으로 앱에서 사용된 모든 쉐이더를 precompile 할 수 있어 만들기도 쉬운 편이다.

모든 자체 표준을 사용하는 Apple 답게 최적화도 잘 맞춰져 있고, 동작 범위도 한정되어 있다 보니
다양한 기능과 높은 퍼포먼스를 보이는 것 같다. 저사양 기기를 지원하지 않는다는 사소한 단점이 있기는 한데..
그쪽은 쓰던 OpenGL 을 사용해도 되니 진짜 사소한 정도. A7만 넘으면 지원 된다.
Intel로는 HD4000 이상, AMD 는 GCN기반, Nvidia 는 Kepler 정도..?

 

 

총평

뭔가 보면서 좀 흥미로운데, 시간 날때 조금씩 만져 보고 싶은 생각은 생겼다.
이게 생각에 그치지 않아야 할 텐데..
Vulkan 아니면 Metal 로 입문을 해 보고 싶은데, 애플 기기 사용하는 것이 하나도 없어서..
아무래도 Vulkan으로 시작하게 될 것 같다.

'공부 > TIL•기타' 카테고리의 다른 글

Global  (0) 2024.10.22
Node.js 란?  (0) 2024.10.17
.ini  (0) 2024.10.07
결합도 / 응집도  (0) 2024.10.07
TDD(테스트 주도 개발)  (7) 2024.09.14