Computer Graphics/Vulkan

Vulkan - 0. 시작 전

surkim 2024. 12. 7. 17:01

shaderpixel 과제를 끝내고 very real engine 과제를 하기위해 vulkan tutorial을 보고 공부했다. 


https://vulkan-tutorial.com/

 

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

여기를 쭉 보면서 따라 해봤다. 일단 끝까지 읽었고 튜토리얼을 정리하는 것보다 그냥 느낌 위주로 끄적여 보려고 한다.

 

일단 어렵다. 아니, 솔직히 너무 복잡하다. 

 

Vulkan은 멀티스레드를 지원하려고 OpenGL에서 너무 많은 걸 포기한 것 같다.
OpenGL은 상태기반 API라 쓰기 정말 간단했다.
glEnable(GL_DEPTH_TEST) 이렇게 한 줄 쓰면 그다음엔 알아서 다 적용돼서 렌더링할 때 따로 신경 쓸 필요가 없었다.
그래서 배우기도 쉽고 프로토타입 만들기에도 딱 좋았던 API였다.

 

근데 OpenGL의 이 "상태 기반"이라는 게 글로벌 상태로 관리되다 보니 멀티스레드 환경에서는 문제가 많더랜다.
각 스레드가 서로 다른 상태를 설정해야 하면 충돌이 나기 쉬웠던 거다.
그래서 멀티스레드 지원이 거의 불가능했는데,

Vulkan은 이걸 완전히 해결하기 위해 글로벌 상태라는 개념을 아예 없앴다.

문제는 이걸 없애면서 모든 걸 개발자가 직접 관리하게 만들었다는 거다.

파이프라인 만들 때부터 시작해서 리소스 할당, 상태 설정, 동기화까지 전부 내가 직접 다 해야 한다.
OpenGL이라면 자동으로 알아서 해줬을 작업들까지 손으로 다 짜야 한다.

솔직히 쓰다 보면 "이걸 내가 왜 하고 있지?" 싶은 생각이 든다.

 

그래도 Vulkan이 이렇게 설계된 이유는 멀티스레드 지원 때문이라고 하니 이해는 간다.

아니 이해안간다. 이게 진입장벽이 너무 높다.
솔직히 처음 시작할 때부터 이게 맞나 싶을 정도로 부담스럽다.

왜 아직도 Vulkan쓰는 곳이 많이 없는지 알겠다.

 

셰이더 하나 수정하면 cpp코드에서도 수정해야할게 산더미다.

셰이더를 추가하는 것에도 코드에서 수정이 필요하다.

심지어 렌더패스 서브패스는 opengl에서도 없던 새로운 개념이다.

아니 파이프라인만 만들면됐지 뭐 이런거까지 추가해놨는지 모르겠다..

 

아 진짜 모르겠다...

Vulkan