Scientia Conditorium

[Vulkan001][번역] Vulkan Tutorial - 소개(Introduction) 본문

프로그래밍/컴퓨터 그래픽스

[Vulkan001][번역] Vulkan Tutorial - 소개(Introduction)

크썸 2023. 11. 12. 13:58

원문 : https://vulkan-tutorial.com/Introduction

[Vulkan] Vulkan Tutorial - Introduction

 

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

 


 

About

이 튜토리얼에서는 Vulakn 그래픽스와 컴퓨팅 API 기본적인 사용법을 알려드립니다. Vulkan은 최신 그래픽카드를 훨씬 더 나은 추상화를 제공해주는 OpenGL로 유명한 크로노스 그룹(Khronos)의 새로운  API 입니다. 이 새로운 인터페이스를 사용하면 애플리케이션이 수행하려는 작업을 더 잘 묘사할 수 있으며, OpenGL과 Direct3D와 같은 기존 API에 비해 성능이 향상되고 드라이버의 예상치 못한 동작을 하는 경우가 덜 생깁니다. Vulkan의 기본 개념은 Direct3D 12, Metal과 유사하지만, Vulkan은 다양한 플랫폼에서 사용할 수 있다는 이점이 있으며 Windox, Linux 및 Android용을 동시에 개발할 수 있습니다.

 

하지만 이런 이점을 누리기 위해 상당히 많은 API들로 작업을 해야만 합니다. 초기 프레임 버퍼 생성, 버퍼 및 텍스처 이미지와 같은 객체에 대한 메모리 관리 등 그래픽 API와 관련된 모든 세부 사항을 애플리케이션에 처음부터 설정해주어야 합니다. 이 말은 그래픽 드라이버가 훨씬 적은 작업을 수행하므로 올바른 동작을 보장하기 위해 애플리케이션에서 더 많은 작업을 수행해야 합니다.

 

여기서 중요한 점은 Vulkan이 모든 사람을 위한 것이 아닙니다. Vulkan은 고성능 컴퓨터 그래픽스에 열정이 있고 약간의 노력을 기울일 의향이 있는 프로그래머를 대상으로 합니다. 컴퓨터 그래픽스보다 게임 개발에 더 관심이 있다면, Vulkan 대신 당장은 지원 중단되지 않을 OpenGL이나 Direct3D를 사용하는 것이 좋습니다. 또 다른 대안으로는 훨씬 더 높은 수준의 API를 사용하면서 Vulkan을 다룰 수 있는 언리얼이나 유니티 같은 엔진을 사용하는 것입니다.

 

이제 이 튜토리얼을 따라하기 위한 몇 가지 전제 조건에 대해 알아보겠습니다.

 

  • Vulkan과 호환되는 그래픽 카드 및 드라이버(NVDIA, AMD, Intel, Apple Silicon (또는 Apple M1))
  • C++에 대한 경험(RAII, 초기화리스트와 같은 개념에 익숙한 정도)
  • C++17 기능을 적절히 지원하는 컴파일러(Visual Studio 2017 이상, GCC 7 이상, 또는 Clang 5 이상)
  • 3D 컴퓨터 그래픽스에 대한 기존 경험

이 튜토리얼은 OpenGL 또는 Direct3D 개념에 대한 지식을 전제로 하지 않지만, 3D 컴퓨터 그래픽스의 기본 개념은 알고 있어야 합니다. 예를 들어 원근 투영(perspective projection)에 대한 수학은 설명하지 않습니다. 컴퓨터 그래픽스 개념에 대한 훌룡한 소개는 이 온라인 책을 참조하세요. 다른 훌륭한 컴퓨터 그래픽스 리소스도 있습니다.

 

원한다면 C++ 대신 C를 사용할 수 있지만, 다른 선형 대수 라이브러리를 사용해야만 하며 코드 구조화에 관한 것은 알아서 해야 합니다. 여기서는 클래스 및 RAII와 같은 C++ 기능을 사용하여 로직과 리소스 수명을 관리할 것입니다. 또한 이 튜토리얼은 Rust 개발자들을 위한 버전도 있습니다.

 

다른 프로그래밍 언어들을 사용하는 개발자들이 더 쉽게 따라할 수 있도록 하고, 기본 API에 대한 경험을 쌓을 수 있도록 원래의 C API를 사용하여 Vulkan과 함께 작업할 것입니다. 그러나 C++을 사용하는 경우 일부 귀찮은 작업을 추상화하고 특정 클래스의 오류를 방지하는 데 도움이 되는 최신 Vulkan-Hpp 바인딩을 사용하는 것을 선호할 수 있습니다.

 

E-Book

이 튜토리얼을 전자책으로 읽고 싶으시다면 여기에서 EPUB 또는 PDF 버전을 다운로드할 수 있습니다.(영문판)

 

 

튜토리얼 구조

먼저 Vulkan의 작동 방식과 첫 번째 삼각형을 화면에 표시하기 위해 수행해야 하는 작업에 대한 개요부터 살펴보겠습니다. 전체 그림에서 기본적인 역할을 이해한 후에는 모든 단계별 작업의 목적이 더 잘 이해될 것입니다. 그 다음으로 Vulkan SDK, 선형 대수 연산을 위한 GLM 라이브러리와 창 생성을 위한 GLFW로 개발 환경을 설정하겠습니다. 이 튜토리얼에서는 Windows 운영 체제에서 Visual studio를, Ubuntu Linux 운영 체제에서는 GCC를 사용하여 설정하는 방법을 다룰 것입니다.

 

그 후 첫 번째 삼각형 렌더링하는 데 필요한 Vulkan 프로그램의 모든 기본 구성 요소를 구현해 보겠습니다. 각 장은 대략 다음과 같은 구조를 따릅니다.

 

  • 새로운 개념과 그 목적 소개
  • 관련 API를 모두 사용하여 프로그램에 통합
  • 일부를 도우미 함수로 추상

각 챕터는 이전 챕터의 후속편으로 작성되어있지만, 특정 Vulkan 기능을 소개하는 독립된 문서로 읽을 수 있습니다. 즉, 이 사이트는 참고 자료로 유용하게 쓸 수 있습니다. 모든 Vulkan 기능과 유형은 사양서에 링크되어 있으므로 클릭하여 자세히 알아볼 수 있습니다. Vulkan은 매우 새로운 API이므로 사양서 자체에 몇 가지 결점이 있을 수 있습니다. 이 크로노스 레포지토리에 피드백을 제출해 주시기 바랍니다.

 

앞서 언급했듯이, Vulkan API는 그래픽 하드웨어를 최대한 제어할 수 있도록 많은 파라미터가 포함된 다소 장황한 API를 제공합니다. 이로 인해 텍스처를 만드는 것과 같은 기본 작업은 매번 반복해야 하는 많은 단계를 거쳐야 합니다. 따라서 이 튜토리얼에서는 자체 헬퍼 함수 모음을 만들 것입니다.

 

또한 모든 챕터는 해당 시점까지의 전체 코드 목록으로 연결되는 링크로 마무리됩니다. 코드 구조에 의문이 있거나 버그를 발견하여 비교하고 싶을 때 참조할 수 있습니다. 모든 코드 파일은 여러 공급업체의 그래픽 카드에서 테스트하여 정확성을 검증했습니다. 또한 각 장의 마지막에는 특정 주제와 관련된 질문을 할 수 있는 댓글 섹션이 있습니다. 사용 중인 플랫폼, 드라이버 버전, 소스 코드, 예상 동작 및 실제 동작을 명시해 주시면 도움을 드릴 수 있습니다.

 

이 튜토리얼은 커뮤니티 활동을 위한 것입니다. Vulkan은 아직 매우 새로운 API이며 모범 사례(Best Practices)가 확립되지 않았습니다. 튜토리얼과 사이트 자체에 대한 피드백이 있다면 주저하지 마시고 이슈나 풀 리퀘스트를 GitHub 레포지토리에 제출해 주세요. 레포지토리에서 튜토리얼에 대한 업데이트 알림을 받을 수 있습니다.

 

화면에 첫 번째 Vulkan 기반 삼각형을 그리는 절차를 마치면 선형 변환, 텍스처 및 3D 모델을 포함하도록 프로그램을 확장할 것입니다.

 

이전에 그래픽 API를 사용해 본 적이 있다면 첫 번째 기하학적 구조가 화면에 표시되기까지 많은 단계가 필요하다는 것을 알고 있을 것입니다. Vulkan에는 이러한 초기 단계가 많이 있지만 각 단계가 이해하기 쉽고 중복되는 느낌이 들지 않는다는 것을 알 수 있습니다. 또한 중요한 것은 일단 지루한 삼각형이 완성되면 완전한 텍스처의 3D 모델을 그리는 데 추가 작업이 필요하지 않으며, 그 이후의 각 단계는 훨씬 더 보람이 있다는 것입니다.

 

튜토리얼을 따르는 동안 문제가 발생하면 먼저 자주 묻는 질문(FAQ)를 확인하여 문제와 해결 방법이 이미 올라와 있는지 확인하세요. 그 후에도 여전히 문제가 해결되지 않는다면 가장 가까운 관련 챕터의 댓글 섹션에서 언제든지 도움을 요청하세요.

 

고성능 그래픽스 API의 미래에 대해 알아볼 준비가 되셨나요? 시작합시다!



컴퓨터 그래픽스를 처음 배우시는 분들에게

 

여기서부터는 원문 글에 없는 내용입니다.

원문 글에서 적혀있듯이 Vulkan은 기본적인 컴퓨터 그래픽스 지식이 있는 상태에서 더욱 고성능을 원하는 프로그래머들을 위한 것입니다. 따라서 컴퓨터 그래픽스를 처음 배우시는 분들이라면 Vulkan, Metal, DirectX12 보다는 OpenGL, DirectX11 로 시작하는 것을 권장합니다. 유튜브에 어떤 인터뷰 영상을 보니 OpenGL은 너무 낡았고 옛날꺼니 최신 그래픽스 API를 이용해 학습하길 권장한다는 내용을 봤습니다. 그러나 개인적으로 반대합니다. 기초가 없는 상태에서 Vulkan, DirectX12로 공부하는 것은 시간이 배로 듭니다.

 

대부분의 학교에서는 OpenGL로 컴퓨터 그래픽스 수업을 진행합니다. 이유는 간단합니다. 교수님들이 DirectX 보다 OpenGL을 더 잘 알기 때문입니다. 게다가 한 학기만에 DirectX를 가르치는 건 힘들기도 합니다. 나아가 DirectX의 경우 포인터를 능숙하게 사용할 줄 알아야 합니다. 포인터 때문에 C++를 외면하는 요즘에 DirectX를 공부하는 분들이 얼마나 될까 싶기도 합니다. DirectX 프로그래밍 학습에 대한 조언으로는 프로그래머 유영천(megayuchi) 님의 글을 읽어보시면 좋습니다. 추가로 D3DX 라이브러리는 사용하지 않는걸 추천합니다. D3DX는 MS에서 내다버린 라이브러리입니다. 가장 좋은 건 DirectX11 Tutorial 시리즈를 참고하여 공부하는 것이 좋습니다.

 

선형대수학 기본 지식도 필요합니다. 그러나 시중에 나와있는 선형대수학 책을 붙잡고 공부할 필요는 없습니다. 최소한 행렬이 무엇인지 벡터가 무엇인지 정도만 알면 충분합니다. 그 이외 지식은 그래픽스 공부하면서 충분히 습득할 수 있습니다.

 

돈이 많다면 홍정모 선생님의 그래픽스 새싹 코스를 추천합니다. 인프런, 유데미 등 다른 온라인 강의에서 본인이 희망하는 그래픽스 강좌를 수강하시면 됩니다. 무료 학습을 원하신다면 learnopengl.com 을 강력하게 추천합니다. 대부분의 사람들이 OpenGL을 공부할 때 참고하는 사이트이며 한국어로 번역해주신 분들도 많습니다. 위 홈페이지에 접속하셔서 Translations 탭을 들어가시면 사이트에서 공식적으로 인정한 한국어 번역 페이지 2개가 있습니다. OpenGL의 경우 유튜브에도 참고 자료가 매우 많기 때문에 컴퓨터 그래픽스 기본 지식을 익히는데 훨씬 좋다고 생각합니다.

 

모쪼록 이 글이 컴퓨터 그래픽스 입문하시는 분들에게 도움이 되었으면 합니다.