모두 아시다시피 유니티는 멀티플랫폼을 지원하는 엔진입니다.
유니티가 안드로이드, IOS, PC 등의 다양한 플랫폼을 지원할 수 있는 이유는, 중간 과정에서 각 플랫폼에 따라 적합한 그래픽스 API를 지원하고 있기 때문입니다.
각 그래픽스 API에 대해 간단히 살펴본다면,
1. Open GL
Open Graphics Library의 줄임말로, 그래픽 하드웨어(GPU)와 통신할 수 있도록 지원해주는 API 또는 표준 규격을 뜻합니다. Open GL은 GPU를 이용한 하드웨어 가속화를 통해 렌더링을 하여 2D, 3D 벡터 그래픽을 표현할 수 있게 합니다.
하드웨어 가속 : 어떤 작업을 CPU가 처리하는 것이 아닌 해당 작업에 최적화된 다른 하드웨어(그래픽 카드, 사운드 카드, ...)에게 작업을 전송하여, 해당 하드웨어가 CPU보다 빠르게 고품질의 작업을 처리하는 것
또한, Open GL은 State Machine의 구조를 가지고 있습니다. State Machine의 정의를 간단하게 설명하면, State를 변경하는 명령을 받기 전에는 현재의 State를 계속 유지하고 있고, 사용자가 렌더링을 위해 State Machine을 조작하고 그리는 명령을 보내면 Open GL이 해당 메모리에 렌더링 결과를 출력하는 구조를 말합니다.
이 구조는 싱글코어 프로세서에서는 별 문제가 없지만, 멀티코어 프로세서에서 문제가 되기 시작했습니다. State Machine이 쓰레드에 안전하지 않기 때문에, 다른 쓰레드에서 State를 변경하고 또 다른 쓰레드에서 State를 접근할 때 동기화 문제가 발생하는 것입니다.
2. Vulkan
앞서 말한 Open GL의 한계점을 해결하기 위해 개발된 그래픽스 API입니다. Vulkan과 Open GL의 가장 큰 차이점은 Vulkan은 저수준의 API이고, Open GL은 고수준의 API라는 것입니다. 간단히 말하면, Open GL은 개발자가 사용하기 쉽고 해야하는 많은 일들이 드라이버에서 이뤄지는 반면에, Vulkan은 개발자가 커널 수준의 작업까지 직접해야 하기 때문에 Open GL과 달리 어플리케이션이 죽거나 심지어 커널 패닉까지 발생할 수 있습니다.
하지만 이러한 어려움에도 Vulkan을 사용하면 많은 장점을 가질 수 있는데, 대표적으로 멀티코어 프로세스의 힘을 최대한 사용할 수 있습니다. Vulkan은 Open GL과 달리 State Machine의 구조가 아니라서 여러 쓰레드에서 동시에 Vulkan을 사용해도 문제가 되지 않습니다. 따라서 멀티코어 프로세스를 이용하여 렌더링 커맨드를 동시에 기록할 수 있고, 리소스의 복사도 여러 쓰레드에서 동시에 수행할 수 있게 됩니다.
3. Metal
Metal은 Apple 기기용 표준 그래픽스 API입니다.
장점으로는,
- 그래픽스 API 호출 시 적은 CPU 소모
- API 수준 확인 레이어
- 빌트인 GPU 시스템에서 GPU 제어 강화
- 메모리리스(memory-less) 렌더 타켓 지원(iOS/tvOS)
- 새로운 Apple 표준
- 컴퓨터 셰이더
- 테셀레이션 셰이더
단점으로는,
- 저사양 기기 미지원
- 지오메트리 셰이더 미지원
이 있다고 합니다.
4. Direct X
Microsoft Direct X는 멀티미디어, 특히 게임 프로그래밍에서 Microsoft 플랫폼에서 작업을 하기 위한 API의 집합입니다. Direct X는 COM(Component, Object, Model) 인터페이스를 사용하고 있는데, 이는 프로그래밍 언어의 독립성과 하위 호환성을 가능하게 하는 기술이라고 합니다.
자료 출처
1. https://www.youtube.com/watch?v=r_eatgPFQYg&t=5652s
2. https://medium.com/@su_bak/opengl-%EC%9D%B4%EB%9E%80-ad19cf68c948
3. https://blog.naver.com/dmatrix/221808847792
4. https://docs.unity3d.com/kr/2018.4/Manual/Metal.html
5. https://zerapix.tistory.com/entry/1-DirectX-DirectX%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-1