shaderpixel 과제를 끝내고 very real engine 과제를 하기위해 vulkan tutorial을 보고 공부했다.
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
'Computer Graphics > Vulkan' 카테고리의 다른 글
Vulkan - 5. 두번째 Subpass에 uniform buffer추가 (0) | 2024.12.26 |
---|---|
Vulkan - 4. 감마 셰이더 추가해보기 (0) | 2024.12.26 |
Vulkan - 3. 벽을 느낌 (1) | 2024.12.24 |
Vulkan - 2. Scene 구성 (0) | 2024.12.20 |
Vulkan - 1. 전반적인 전략 (0) | 2024.12.12 |