메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

처음 만나는 Vulkan

차세대 그래픽스 API 표준 Vulkan으로 고성능, 고효율 3D 그래픽스 만들기

한빛미디어

집필서

판매중

  • 저자 : 파르민더 싱
  • 번역 : 이환용
  • 출간 : 2017-11-01
  • 페이지 : 430 쪽
  • ISBN : 9791162240151
  • 물류코드 :10015
  • 초급 초중급 중급 중고급 고급
4.3점 (3명)
좋아요 : 32

차세대 그래픽스 API 표준 Vulkan을 기초부터 학습하기 위한 모든 것

 

OpenGL API의 차세대 표준이라고 보기도 하지만, Vulkan은 새로운 API에 대한 시장의 요구에 맞추어 완전히 새로운 접근 방식으로 기초부터 다시 설계한 차세대 그래픽스 및 컴퓨팅 API 표준이다. Vulkan은 GPU 하드웨어 설정을 제어해 병렬 컴퓨팅 능력을 최대한 활용하게 한다. Vulkan의 드라이버 계층은 작게 구성돼 있는데, 이는 응용 프로그램 개발자가 응용 프로그램과 사용하는 자원, 메모리 관리, 동기화 등 더 많은 것을 책임져야 한다는 것을 뜻한다. 따라서 Vulkan API로 프로그래밍을 하려면 일정 수준 이상의 그래픽스와 프로그래밍 관련 지식이 필요하다.

 

이 책에는 Vulkan의 기초를 학습하기 위한 모든 것이 담겨 있다. 이 책은 독자로 하여금 Vulkan의 이론과 개념, API 표준을 배우고, 실습 예제를 통해 Vulkan이 작동하는 것을 볼 수 있게 한다. 이 책에서는 되도록 일반적이고 직접적인 개념이나 용어를 사용하려고 노력했다. 특히 예제는 독자가 Vulkan을 차근차근 배울 수 있게 장 순서대로 따라 하도록 구성되어 있으며, 각 장은 이전 장의 내용에 새로운 내용을 추가하고 차이점을 소개한다. 

 

이 책을 통해 Vulkan을 완벽히 마스터하기는 어렵지만, Vulkan이 기본 개념과 API 표준을 배우고 예제를 통해 기본 동작과 기능을 살펴볼 수 있다. 게임의 성능 향상과 최적화 또는 게임 엔진 개발에 관심이 있는 개발자라면 Vulkan을 이용해 만족도 높은 결과를 얻길 바란다.

 

 

이 책에서 다루는 내용

1장 Vulkan의 기본이 되는 내용을 설명하고, 현재 가장 널리 쓰이는 OpenGL API와 비교해 Vulkan의 차별화된 기능들을 설명한다. 

2장 슈도 코드 프로그램을 통해 간단한 ‘Hello World’ 프로그램을 작성해 본다. 이를 통해 Vulkan 프로그램을 맛보고, Vulkan 응용 프로그램을 빌드하는 단계별 과정을 배우게 된다. 

3장 첫 번째 Vulkan 예제 프로그램을 만들어 보면서 프로그래밍 환경 설정 방법을 배운다. 

4장 Vulkan 응용 프로그램에서 디버깅하는 방법을 설명한다. 

5장 커맨드 버퍼를 상세히 설명하고 커맨드 버퍼를 구현해 본다. 

6장 리소스 할당과 스와프 체인 구축 이미지 리소스에 대해 살펴보고, 이미지 생성과 할당, 바인딩, 매핑 같은 메모리 관리 개념에 관해 설명한다. 

7장 버퍼 리소스와 그리려는 물체의 기하 정보를 포함하는 버텍스 버퍼를 구현하는 방법을 배운다. 

8장 Vulkan의 컴퓨팅 및 그래픽스 파이프라인을 소개한다. 이 장에서는 그래픽스 파이프라인 흐름에 대한 개략적인 설명과 함께 파이프라인의 시작부터 끝까지 다양한 모듈의 역할을 설명한다. 

9장 Vulkan에서 개체를 그리는 과정을 상세히 설명한다. 

10장 디스크립터와 푸시 상수를 사용해 Vulkan 응용 프로그램에서 셰이더 리소스의 값을 변경하는 방법에 관해 설명한다. 

11장 텍스처를 추가해 3D 물체에 사실감을 부여하는 렌더링 방법을 배운다. 

 

 

이 책을 배우는 데 필요한 사전 지식

이 책에서 설명한 하드웨어와 소프트웨어가 필요하며, C/C++ 프로그래밍에 대한 지식과 일정 수준의 코딩 경험이 있어야 한다.

 

 

이 책의 대상 독자

이 책은 크로스 플랫폼, 고성능 그래픽과 컴퓨팅 응용 프로그램을 만들어 사용하는 데 관심 있는 독자를 대상으로 하고 있다. 그래픽스와 컴퓨팅 분야의 지식과 경험이 있다면 관련된 Vulkan 개념을 이해하는 데 도움이 될 것이다.

파르민더 싱 저자

파르민더 싱

싱가포르에 위치한 블랙매직디자인Blackmagic Design에서 컴퓨터 그래픽스 엔지니어로 일하고 있다. 그래픽스 응용 개발 관련된 업무를 해왔고, 특히 네트워크 시뮬레이션, 기하 모델링, 네비게이션, 자동차, 인포테인먼트 시스템, 영상처리, 포스트 프로덕션 관련 분야에서 10년 이상 일해왔다. 그의 관심 연구 분야로는 GPU 프로그래밍, 그래픽스 및 컴퓨팅 응용 프로그램의 확장성을 위한 포팅과 성능 최적화 기술 등이 있다.

그는 Vulkan과 Metal, OpenGL ES 트레이너로 활동하고 있으며, 『OpenGL ES 3.0 Cookbook』(Packt, 2015)을 저술한 바 있다. 여행과 가벼운 요리가 취미이고, 딸아이와 좋은 시간을 보내려고 노력하고 있다.

저자와 연락하고 싶다면 https://www.linkedin.com/in/parmindersingh18 또는 http://openglescookbook.com을 통해 만날 수 있다.

 

이환용 역자

이환용

KAIST에서 전산학과를 졸업하고 POSTECH 전산학과에서 석·박사 과정을 이수하였으며 경북대학교에서 박사 학위를 받았다. 20년 넘게 컴퓨터 그래픽스 관련 연구와 개발을 수행해 왔으며, 그래픽스 관련 표준화 활동에 많은 노력을 기울여 왔다. (주)휴원에서 기술 이사로서 최초의 OpenVG 상용 소프트웨어 제품인 AlexVG의 개발을 주도하였으며, 최근에는 OpenVG 1.1 Lite 버전의 표준 스펙 에디터로 활동하고 있다. 현재 아주대학교 소프트웨어학과 산학협력중점교수로 재직 중이다. 표준화 기구인 ISO/IEC JTC1 SC24, Khronos Group과 한국정보과학회 CG&I 소사이어티, 한국컴퓨터그래픽스학회, 한국HCI학회에서 활동하고 있다. 

CHAPTER 1 차세대 3D 그래픽스 API 시작하기

1.1 Vulkan과 그 진화 과정 

1.2 Vulkan vs OpenGL 

1.3 알아두어야 할 주요 용어 

1.4 Vulkan의 기초 

1.5 Vulkan 응용 프로그램의 이해 

1.6 Vulkan 프로그래밍 모델 시작하기 

1.7 요약 

CHAPTER 2 처음 만드는 Vulkan 슈도 프로그램

2.1 Vulkan 설치 

2.2 Hello World 슈도 코드 

2.3 하나로 맞추기 

2.4 요약 

CHAPTER 3 장치와 인사하기

3.1 LunarG SDK 시작하기 

3.2 CMake로 첫 번째 프로젝트 설정하기 

3.3 확장판 소개 3.3.1 레이어와 확장판에 대한 쿼리

3.4 인스턴스 생성 

3.5 물리적 장치와 논리적 장치 이해하기 

3.6 큐와 큐 패밀리 이해하기 

3.7 장치와 큐를 함께 구현하기 

3.8 요약 

CHAPTER 4 디버깅

4.1 디버깅 맛보기 

4.2 LunarG 유효성 검증 레이어와 해당 기능 이해하기 

4.3 디버깅 구현 

4.4 요약 

CHAPTER 5 커맨드 버퍼와 메모리 관리

5.1 커맨드 버퍼 시작하기 

5.2 커맨드 풀과 버퍼 API 

5.3 커맨드 버퍼의 레코딩 

5.4 커맨드 버퍼를 위한 래퍼 클래스 구현 

5.5 메모리 관리 

5.6 요약 

CHAPTER 6 WSI를 이용한 이미지 리소스 할당과 스와프 체인 구축

6.1 이미지 리소스 시작하기 

6.2 이미지 리소스 이해하기 

6.3 메모리 할당과 이미지 리소스 바인딩 

6.4 스와프 체인 소개 

6.5 깊이 이미지 생성 

6.6 응용 프로그램의 흐름 요약 

6.7 요약 

CHAPTER 7버퍼 리소스, 렌더 패스, 프레임 버퍼와 SPIR-V 셰이더

7.1 버퍼 리소스의 유형 이해하기 

7.2 버퍼 리소스로 기하 데이터 생성하기 

7.3 렌더 패스 이해하기 

7.4 렌더 패스 사용과 프레임 버퍼 생성하기 

7.5 배경색 지우기 

7.6 Vulkan에서의 셰이더 작업 

7.7 요약 

CHAPTER 8 파이프라인과 파이프라인 스테이트 관리

8.1 파이프라인 시작하기 

8.2 PCO로 파이프라인 개체 캐싱 

8.3 그래픽스 파이프라인 생성 

8.4 컴퓨팅 파이프라인 이해 

8.5 Vulkan의 파이프라인 스테이트 개체 

8.6 파이프라인 구현 

8.7 요약 

CHAPTER 9 개체 그리기

9.1 Vulkan의 그리기 과정 개요 

9.2 드로잉 개체 준비하기 

9.3 드로잉 개체의 렌더링 

9.4 인덱싱된 기하의 렌더링 

9.5 Vulkan의 동기화 프리미티브 이해하기 

9.6 디스플레이 윈도의 크기 조정 

9.7 요약 

CHAPTER 10 디스크립터와 푸시 상수

10.1 디스크립터의 개념 이해하기 

10.2 Vulkan에서 유니폼을 구현하는 방법 

10.3 푸시 상수 업데이트 

10.4 요약 

CHAPTER 11 텍스처 그리기

11.1 이미지 리소스의 개요 

11.2 텍스처 드로잉을 위한 사전 작업 

11.3 선형 타일링으로 이미지 리소스 구현하기 

11.4 최적 타일링으로 이미지 리소스 구현하기 

11.5 이미지와 버퍼 간 데이터 내용 복사 

11.6 디스크립터 세트의 업데이트 

11.7 요약 

 크로노스그룹(Khronos Group)이 관리하는 컴퓨터 그래픽스 업계의 표준이 된 OpenGL 홈페이지의 메인 문구는 아래와 같다.

 

The Industry's Foundation for High Performance Graphics 

FROM GAMES TO VIRTUAL REALITY, MOBILE PHONES TO SUPERCOMPUTERS

 

 원래 OpenGL은 그래픽스 용도로 만들어져 사용되었으나 현재 업계의 상황으로 인해 컴퓨팅 환경에도 사용되고 임베디드, 안드로이드 같은 모바일 폰 에서 PC, 슈퍼컴퓨터까지 폭 넓게 사용되는 이른바 업계의 진정한 표준이라고 할 수 있다.  이렇게 OpenGL이 성공할 수 있었던 이유는 이름에서 알 수 있듯 공개되어 있어 일부 플랫폼에서만 사용할 수 있는 다른 프레임웍, API들과 차별되는 기술이었던 덕분이다.

 

 Nvidia 칩셋에서만 사용할 수 있는 Cuda, iOS 환경에서 사용할 수 있는 Metal, Windows 환경에서 사용하는 Direct X, 컴퓨팅 목적으로 만들어졌으나 모든 환경에서 완벽지원이 되지 않는 현실인 OpenCL 등의 상황을 고려하면 하위호환을 위해 큰 아키텍처 변경이 피하면서 효율적으로 성장하지 못한 구시대 기술로 볼 수 있는 OpenGL이 아직도 최고의 자리에 있는 것이 이해될 수 밖에 없다.

하지만 세월이 흘러, OpenGL을 그래픽스 환경에만 이용하지 않고 앞서 언급한 제한된 환경으로 인해 GPU의 성능을 컴퓨팅(계산)에도 이용하고자 하는 시도들이 많이 나오게 된다. 만약 모든 그래픽 프로세서가 Nvidia의 칩셋으로 되어 있다면 Cuda를 이용할 수 있고, 모든 환경에서 OpenCL이 완벽 지원된다면 좋았겠지만, 절대적으로 많이 사용되는 OpenGL처럼 호환 및 동작이 검증되는 API는 없기에 이를 이용하게 된 것이다.

 

 또한 GPU의 성능이 비약적으로 발전하면서 강력해진 GPU 리소스를 직접적으로 이용하고 싶어하는 요구가 강해지면서 기존의 OpenGL을 업그레이드 하는 것이 아닌 새로운 아키텍처로 강력한 성능을 내도록 만들어 진 것이 Vulkan API이다. Vulkan은 OpenGL처럼 다양한 플랫폼에서 사용할 수 있는 것을 보장하고, 뛰어난 성능과 최신의 고성능 GPU를 직접적으로 제어할 수 있다.

 

 이런 배경지식을 갖고 있던 상황에서 Vulkan에 대해서 좀 더 알아보고 싶어 가장 최근 책인 한빛미디어의 <처음 만나는 Vulkan>을 읽어보았다.

vulkan.jpg

 

 책을 통해 알게된 내용을 몇가지를 아래와 같이 정리해본다.

 

- Vulkan API는 AMD의 Mantle API를 기반으로 개발되었다. AMD가 Mantle API를 기부하여 진행된 것인데, 아무리 노력해도 Nvidia의 CUDA를 따라잡을 수 없는 상황이니 Open Source의 힘으로 나은 상황을 만들어보려는 AMD의 노림수가 아닐까?

 

- OpenGL은 임베디드, 모바일폰에 사용되는 별도의 버전인 OpenGL ES가 존재하였으나, Vulkan은 일관성있게 모든 플랫폼에 대해 하나의 API만 존재한다. 모바일이 최우선이 되어버린 현재 상황에 맞게 Vulkan은 기존과 달리 모바일 플랫폼이 최우선 된다.

 

- 스테이트 머신이 기반인 OpenGL에서는 멀티 스레딩 확장성이 좋지 않았으나, Vulkan은 암묵적인 전역 스테이트가 없고 개발자가 멀티 스레딩 기능을 완전히 활용할 수 있도록 처음부터 설계되었다. 

 

- 기존 OpenGL에서 화면 표시를 위해 운영체제의 윈도우 시스템 프레임버퍼를 직접적으로 사용하는데, Vulkan은 더 쉽고, 다양한 OS를 지원하는 일관된 API표준인 WSI를 지원하고 이를 통해 지원한다.

 

 사실 GPU를 이용한 개발은 기존 프로그래밍 언어만 해왔던 분들에게는 또 다른 도전과 영역이라 할 수 있다. 많은 프로그래밍 책들이 처음 예제로 사용하는 Hello world!를 출력하는 소스 코드와 이 책의 첫 프로젝트를 비교하면, 일단 간단한 프로그램의 구조와 출력 함수를 알면 몇 줄 심지어 한 줄로 출력되던 기존의 프로그래밍과 너무나 복잡함을 알 수 있다.

 

 이 책에서 쉽게 설명하려고 많이 노력했지만 GPU 기본이나 그래픽스 기본까지 전부 알려줄 수 있는 양은 되지 못한다. 기존 OpenGL, OpenCL, Metal 등을 사용하던, 공부하던 개발자가 앞으로 대세가 되리라 확신할 수 있는 Vulkan에 대한 공부를 시작하는 교재로는 Vulkan이 OpenGL과 어느 부분이 다르고, 어떻게 사용하는지에 대해 자세히 알려주는 책으로 적당한 것 같다. 

 

 이 글을 작성한 이후 크로노스 그룹이 Vulkan API 1.1 을 발표했다.

https://www.khronos.org/news/press/khronos-group-releases-vulkan-1-1

 인상적인 점은 developer-requested features, 즉 실제 사용을 시작한 개발자들이 요청한 부분을 반영을 하고 있다는 것이다. Vulkan을 더 주목을 하지 않을래야 않을 수 없을 것 같다.

 

 이번에 하게된 3d rpg게임 프로젝트에 Vulkan을 써보자고 해서 Vulkan책을 운 좋게 얻었다.

그래픽스 책이고 Vulkan은 저수준 그래픽스 라이브러리이다 보니까 그래픽스에 대한 지식이 없으면 읽고 이해하기 힘들 것 같다.
그래도 다른 그래픽스 라이브러리를 공부해서 알거나 그래픽스에 대한 지식이 있으면 보기 좋다.
이 책은 Vulkan 자체에 대해 굉장히 잘 알려준다. Vulkan 관련 서적이 별로 없긴 한데 Vulkan에 있는 레이어, 커멘드 버퍼, 큐, 물리적 장치 등을 그림과 표로 아주 잘 설명해놓았다. 덕분에 이해하기 쉽다.

예제 소스도 굉장히 좋은 것 같다. 한 가지 아쉬운 것은 예제 소스가 윈도우 플랫폼을 타겟으로 한다는 것이다. GLFW같은 라이브러리를 사용해서 예제 소스를 작성했다면 더 좋았을 것 같다는 생각이 든다.

내용상으로는 Vulkan을 알려주는 것에 충실하다. 정말 많은 도움이 되었다.

02월 13일 리뷰 - 리뷰자 김종욱

 

 기존의 그래픽 라이브러리는 윈도우의 경우 DirectX 그리고 안드로이드 폰의 경우 Opengl/ES 그리고 mac의 경우 metal로 나뉘었다. 본 블로거의 경우 2D 기반의 게임그래픽 프로그래밍을 많이 한 경력이 있기 때문에 위의 세 라이브러리를 이용하여 각각의 플랫폼에 맞는 2D그래픽들을 가속화하여 랜더링하는 프로그래밍을 많이 했었다. 다만 위의 프로그래밍을 할때 마다 느꼈던 점은 각각의 플랫폼 마다 최적화된 라이브러리가 서로 상이하다보니 서로 다른 그래픽 라이브러리를 사용해야한다는 점과 해당 라이브러리들 만이 가지고 있는 특징과 절차가 상이 하기 때문에 이로 인해 발생하는 비용과 시간이 엄청나다는 것이였다.(물론 윈도우와 Opengl을 사용할 순있다.(mac은 안해봐서 잘 모르는 이유로 인해 생략하였다.)) 이러한 기존의 비효율적인 메커니즘을 좀더 개선하고자 개발되고 제안된 것이 위의 Vulkan API이다. 이를 이용하여 앞으로는 보다 효율적인 하드웨어 지향적인 그래픽 프로그래밍이 가능할 것이라 기대한다

  

책에 관한 본격적인 리뷰에 임하기에 앞서 어떤 사람들에게 본 서를 권하는지 적어보도록 하겠다.


【어떤 독자를 위한 책인가】

 

 본 서는 새로운 그래픽 API 표준에 대해서 설명한 책이다. 따라서 기본적인 그래픽에 관한 지식이 있다면 본 서를 학습함에 있어서 효율을 극대화 할 수 있을 것이라 생각된다. 그렇다고 해서 초보자가 읽기에 무한정으로 어려운 것은 아니다. 다만 기존의 지식이 없다면 몇몇 참고할 도서들을 준비하고 같이 병행해서 학습한다면 충분한 학습효과를 이룰 수 있을 것이라 생각된다. (참고서로는 시중의 기초 그래픽에 관한 도서를 참고하길 권한다.)

    

【책의 구성】 '처음 만나는 Vulkan책의 구성은 어떠한가.


망치 본 서의 구성은 총 11개의 쳅터로 구성되어있고 각각의 챕터의 주제에 맞춰 다양한 소주제로 나뉘어 있는 구조이다. 무엇보다 본서가 흥미로운 점은 각각의 함수의 기능과 절차에 대한 자세한 설명과 더불어 어떤식으로 사용해야 되는지에 대해서 쳅터별 순서에 맞춰 깔끔하게 정리해 두었다는 점이다. 아마도 본 서를 다독 하여 정말 본인 것으로 만들었다면 추후 Vulkan을 이용한 기초-중급 적인 그래픽 프로그래밍에 있어서 상당한 퍼포먼스 향상이 이루어질 것이라 기대된다.
 

【처음 만나는 Vulkan 을 읽으며…….】

 

 그래픽 프로그래밍은 참으로 어려우면서도 재미있고 심오한 주제이다. 특히 2D-> 3D로 넘어가면 훨씬 더 정교하면서 다양한 수학적 지식과 API를 효과적으로 사용할 수 있는 기술이 프로그래머에게 요구된다. 또한 그중에서도 특히나 중요한 지식이 바로 해당 API가 어떤식으로 동작하고 어떤식으로 명령어를 처리하여 결과를 보이는 지에 대해서 잘 파악하고 있는지이다. 왜냐하면 위의 API를 다중 쓰레드를 이용하여 처리할 때에 다양한 에러가 발생할 수 있고 이렇게 발생한 에러를 효율적으로 디버깅하여 최상의 퍼포먼스를 내기 위해서는 정확한 API 지식과 하드웨어 지식이 뒷받침되어야 하기 때문이다. 따라서 모든 지식과 배움이 그렇겠지만 그래픽을 처음 접하는 입문 프로그래머라면 기초를 충분히 충실히 학습한 후에 다양한 프로젝트에 임할 것을 권한다.

 

【점수…….】

구성 : ★★★★☆ 내용:★★★☆☆  디자인: ★★★☆☆ 전문성 : ★★★☆☆


#본 리뷰는 리뷰자 김종욱의 저작권에 귀속되므로 참고시 참고 URL 명시 및 저작자에게 사용 통보를 해 주시기 바랍니다.

#본 리뷰의 점수 및 평가 내용은 김종욱 리뷰자의 한정된 것이므로 지극히 주관된 평가 임을 명시합니다.

#학습과 관련된 질문과 문제에 대한 질문은 일절 받지 않습니다. 스스로 찾아서 학습하는 것 그것이야 말로 진정한 학습자입니다. 


 


######  감사합니다  ###### 

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
처음 만나는 Vulkan
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
처음 만나는 Vulkan
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
처음 만나는 Vulkan
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실