Vulkan

2022. 6. 8. 11:17Vulkan

이제부터 Vulkan을 사용해 보려고 합니다. 애초에 개발 중이던 게임 프레임워크에서는 OpenGL을 사용하고 있었고 기본적으로 필요한 사항은 진작에 다 되어 있는 상황이지만, 그림자맵, 법선맵 같은 상대적인 고급 기능을 하려던 때에 Vulkan에 눈이 돌아가더라고요. 이유는 간단한데 현재 구조를 유지하면서 여러 번에 걸친 렌더링을 시키자니, 여러 경우에 대하여 모두 충족시키려니까 (특히 셰이더의)코드가 지저분해지는 느낌이었기 때문입니다(뭣보다 프로젝트를 시작할 때 템플릿 정적 다형성을 모르고 있었음). 계승 프로젝트가 필요하다고 느껴졌습니다.

 

그래서 최근 며칠 간 Alexander Overvoorde의 Vulkan Tutorial을 통째로 번역했는데요, 이해하기도 어렵지 않았고 성능 관련 내용도 잘 알려 줘서 좋았지만 개인적으로 보기에 코드가 다소 확장하기 어려운 모양새를 가지고 있어(예를 들어 파이프라인, 렌더패스 등 유관한 객체들을 묶지 않고 모두 동등하게 클래스 멤버로 포함하여 여러 개의 파이프라인으로 하나의 프레임버퍼에 그리기 위해 어떤 것이 여러 개 필요하며 어떻게 그들을 프레임버퍼에 연계하는지 처음 배우는 입장에서 애매했다..), 보다 다양한 자료를 보고 GL을 아는 수준에서 따라가면 좋을 만한 한국어 튜토리얼 정도 작성해 보면 어떨까 싶습니다.

 

참고로 vulkan-tutorial.com에 나오는 교육용 코드는 저자가 퍼블릭 도메인(CC0 1.0 유니버설)에 해당한다고 했기 때문에 자유롭게 사용하면 됩니다. 강의 내용 자체도 CC BY-SA 4.0 에 해당하여 강의 내용 자체 및 수정본을 배포해도 됩니다. 역본 하나 드릴까요? 이것저것 잘못 번역하거나 의식의 흐름을 따라 번역한 부분도 있었던 걸로 기억하지만 아마 원본이랑 같이 두고 보면 나름대로 도움이 되지 않을까 싶습니다..

Vulkan Tutorial kor.pdf
6.17MB

목표하는 결과물은 이렇습니다. (요약: 게임 프레임워크 - 렌더링과 오디오 출력, 응용 개발자의 제어권) 라이센스는 기존 OAGLE과 동일하게 MIT입니다.

  내용 목표 완료 시점
1차 그래픽스 API 상에서의 렌더링 목적으로 객체(파이프라인, 텍스처, 메시, 프레임버퍼 등)를 캡슐화하기 6월 30일
2차 OAGLE 계승: 기존 기능 + 리눅스, 안드로이드 빌드를 추가. 원래 안드로이드는 지원이 안 됐고 리눅스는 빌드하려면 추가 링킹 라이브러리를 직접 준비해야 했음 1차 이후 +14일
3차 가속 구조 등의 고급 기능 2차 이후 +30일

참고로 Vulkan 1.0을 기준으로 지원하는 안드로이드 버전은 7 이상부터이며(전체의 약 77%) 지원하는 하드웨어는 언리얼에 따르면 이렇다고(

  • Google Pixel/Pixel XL or newer
  • Nexus 6P (Android N Devices)
  • Galaxy S7 (Mali & Adreno variants)
  • Galaxy S8
  • Galaxy S9
  • Galaxy S10
  • Razer Gaming Phone

) 합니다. 이는 아주 많은 수준이라고 할 수 없으며 모바일을 주 대상으로 삼고자 한다면 언리얼이나 유니티와 같이 널리 사용되는 엔진 혹은 그 아래의 원리 등을 이용하고자 한다면 GL ES(안드로이드 링크)를 배우고 쓰는 게 좋을 겁니다.

 

튜토리얼 내용은 위의 알렉산더님의 글을 비롯하여 여러 가지가 기반이 될 예정입니다. 아마 여기서 가장 많은 참고가 이루어질 것 같습니다. 원초적으로 크게 다르진 않지만, hpp 버전을 쓰는 곳도 있으니 참고하세요. 코드는 제가 직접 작성할 거고 그 때문에 전개나 순서가 약간 달라질 수도 있습니다. 선수 과목은 C++17(필수), 3D 기하학(필수), GLSL(필수), OpenGL과 같은 기성 그래픽스 API(필수는 아님)입니다. 아마 글을 적는 내내 OpenGL과 비교할 것 같습니다. 이들이 부족한 경우라면 Joey De Vries의 LearnOpenGL을 기준으로 framebuffers까지는 학습하고 오는 게 좋습니다. C++가 안 된다고 해도 벌칸이라는 키워드를 알아서 찾아서 올 정도라면 금방 배울 수 있지 않을까 생각합니다.

 

현재 있는 내용은 이렇습니다(현재는 마우스를 올려야 제목 확인 가능). 이쁘게 만들어 드리고 싶지만 더 중요한 게 많아서..