Top

불칸 프로그래밍 가이드 [불칸 제작자의 공식 가이드]

  • 원서명Vulkan Programming Guide: The Official Guide to Learning Vulkan (ISBN 9780134464541)
  • 지은이그레이엄 셀러(Graham Sellers)
  • 옮긴이이상우
  • ISBN : 9788960779860
  • 40,000원
  • 2017년 03월 29일 펴냄
  • 페이퍼백 | 524쪽 | 188*250mm
  • 시리즈 : 오픈소스 프로그래밍

책 소개

원서의 예제 코드가 아직 등록되지 않았습니다. 대안으로 다음의 두 링크를 알려드립니다.
- https://github.com/LunarG/VulkanSamples
- https://github.com/SaschaWillems/Vulkan

요약

기반부터 재설계해 애플리케이션들이 GPU 가속을 직접 조절할 수 있게 하는 차세대 OpenGL 기술 표준인 불칸에 대한 공식 가이드다. 불칸 API 수석 개발자인 저자가 풍부한 예제와 함께 불칸 API와 SPIR-V 셰이딩 언어를 소개한다. 또한 불칸의 목적, API 구성의 핵심 개념을 토대로 불칸의 고유하고 놀라운 능력을 필요로 하는 복잡한 렌더링 시스템을 보여주기 때문에 그래픽 애플리케이션을 작성하는 모든 사람들에게 필수적인 레퍼런스가 될 것이다.

이 책에서 다루는 내용

■ 불칸의 성능을 시연하고 OpenGL과 다른 점을 보여주는 테스트된 코드 예제
■ 불칸의 새 메모리 시스템을 시작하고 작업하는 전문 가이드
■ 큐, 명령어, 자료 이동, 프리젠테이션에 대한 철저한 논의
■ SPIR-V 바이너리 셰이더 언어와 계산/그래픽 파이프라인에 대한 완전한 설명
■ 그리기 명령어, 기하구조와 화소 처리, 동기화 기본체, 불칸 자료를 응용프로그램에서 읽기에 대한 자세한 논의
■ 응용프로그램의 완전한 사례 연구: 복잡한 다중패스 아키텍처와 다중 처리 큐를 사용한 지연 렌더링
■ 불칸 함수와 SPIR-V 연산 코드, 완전한 불칸 용어 사전을 보여주는 부록

이 책의 대상 독자

주요 독자는 이미 다른 그래픽과 계산 API에 친숙한 프로그래머들이다.

이 책의 구성

1장, ‘불칸의 개요’에서는 불칸을 간략히 소개하고, 불칸의 기반을 구성하는 개념을 알아본다. 또한 불칸 객체를 생성하는 기본을 살펴보고, 불칸 시스템을 시작하는 기초적인 방법도 함께 알아본다.
2장, ‘메모리와 자원’에서는 인터페이스의 기반이 되는 불칸의 메모리 시스템을 소개한다. 불칸 장치가 사용하는 메모리를 어떻게 할당하는지와 애플리케이션 안에서 수행되는 시스템 요소들을 알아본다.
3장, ‘큐와 명령어’에서는 명령어 버퍼(command buffer)를 설명하고 이를 제출하는 큐를 소개한다. 불칸 프로세스가 어떻게 작동하고 애플리케이션 실행을 위한 명령어 다발을 생성한 뒤 장치에 어떻게 보내는지 보여준다.
4장, ‘자료 이동’에서는 최초로 자료 이동에 중점을 둔 몇몇 불칸 명령어를 소개한다. 3장에서 처음 다룬 개념을 사용해 명령어 버퍼를 생성하며, 2장에서 소개한 자원과 메모리에 저장된 자료를 복사하고 포맷한다.
5장, ‘프리젠테이션’에서는 애플리케이션이 생성한 이미지를 어떻게 화면에 표현하는지 보여준다. 프리젠테이션은 윈도우 시스템과 상호작용하기 위해 사용되는 용어로, 플랫폼에 특화됐으며, 이 장에서는 플랫폼 특화 주제 중 일부를 자세히 알아본다.
6장, ‘셰이더와 파이프라인’에서는 불칸이 사용하는 바이너리 셰이딩 언어 SPIR-V를 소개한다. 또한 파이프라인(pipeline) 객체도 살펴보며, SPIR-V 셰이더를 사용해 어떻게 생성되는지를 보여준다. 그리고 계산 파이프라인(compute pipeline)의 개념을 알아보는데, 이는 불칸을 사용해서 계산 작업을 처리하는 데 사용할 수 있다.
7장, ‘그래픽 파이프라인’에서는 6장에서 다룬 것을 기반으로 그래픽 파이프라인을 생성하고 소개하는데, 이는 불칸에서 그래픽 프리미티브를 렌더하는 데 필요한 모든 설정을 포함한다. 8장, ‘그리기’에서는 불칸에서 가용한 다양한 그리기 명령어를 알아보고, 색인된(indexed) 것과 비색인된 그리기, 인스턴싱, 간접 명령도 함께 살펴본다. 그래픽 파이프라인에 자료가 들어가는 방법, 7장에서 소개한 것보다 더 복잡한 기하구조를 그리는 방법을 알아본다.
9장, ‘기하구조 처리’에서는 불칸 그래픽 파이프라인의 첫 반쪽을 더욱 자세히 알아보고, 테셀레이션과 기하구조 셰이더 단계에 대해 다른 시각으로 접근한다. 또한, 이 단계에서 가능한 일부 더 발전된 방법을 보여주고 래스터라이제이션 단계까지 파이프라인을 다룬다.
10장, ‘화소 처리’에서는 9장에서 처리하지 않는 기하구조를 유저에게 보여주기 위한 픽셀의 연속을 변환하는 방법인 레스터라이제이션 과정과 그 후의 모든 일을 알아본다.
11장, ‘동기화’에서는 불칸 애플리케이션에 가용한 다양한 프리미티브 동기화를 다루며, 펜스(fence), 이벤트(event), 세마포어(semaphore)도 알아본다. 이들 모두는 애플리케이션이 불칸 병렬 본질의 효율적인 사용을 가능하게 하는 기반이 된다.
12장, ‘자료 돌려받기’에서는 이전 장에서 사용된 통신의 방향을 역으로 해 애플리케이션에서 불칸으로부터 자료를 읽을 때 일어나는 사안들을 살펴본다. 불칸 장치가 수행하는 연산의 시간을 측정하고, 불칸 장치로부터 연산에 대한 통계를 받고, 애플리케이션에서 불칸이 생성한 자료를 받는 방법을 보여준다.
13장, ‘다중 패스 렌더링’에서는 이전에 다룬 다양한 주제를 다시 되짚어보고, 더 발전된 애플리케이션(복잡한 다중 패스 설계와 다중 처리 큐를 사용한 지연 렌더링 애플리케이션)을 생성하기 위해 여러 가지를 한데 묶는다.
‘부록’에서는 불칸 애플리케이션에서 가용한 함수를 생성하는 명령어 버퍼를 표로 보여주며, 속성을 결정할 때 빠르게 참조할 수 있다.

저자/역자 소개

지은이의 말

불칸은 거대하고 복잡하며, 새로운 시스템이다. 책 한 권에서 API의 모든 부분을 다 포함하는 것은 극도로 어려운 일이다. 이 책과 더불어 불칸 매뉴얼을 철저하게 읽기를 권장하며, 이종 계산 시스템의 사용과 다른 API를 사용한 컴퓨터 그래픽에 관한 다른 책을 읽는 것을 추천한다. 이런 자료들은 수학과 이 책에서 가정한 다른 개념들을 이해하기 쉽게 해준다.

지은이 소개

그레이엄 셀러(Graham Sellers)

AMD의 소프트웨어 설계자로, AMD의 라데온과 FirePro 제품의 OpenGL, 불칸 드라이버의 개발을 관장했다. 컴퓨터와 기술에 관한 열정은 어린 나이에 BBC Micro와 함께 시작했으며, 여전히 작업을 즐기는 8비트와 16비트 가정용 컴퓨터로 이어졌다. 영국의 사우스햄튼 대학교(University of Southampton)에서 공학 석사를 취득했으며, 지금은 플로리다의 올랜도에서 아내와 두 자녀와 살고 있다.

옮긴이의 말

모바일 렌더러에서 최고의 그래픽을 표현하기 위해 엔진과 렌더링 파이프라인을 커스터마이제이션하던 중에 불칸의 발표는 참으로 반가운 소식이었다. 스티브 잡스의 철학으로 인해 항상 유저 인터페이스와 그래픽에 심혈을 기울이던 애플과는 달리, 오픈 플랫폼인 안드로이드 진영의 경우 통일되지 않은 그래픽 하드웨어로 인한 많은 희생이 있기 때문이다. 애플의 경우 독자 API인 메탈을 통해서 상당한 성능 향상을 이루었지만, OpenGL ES의 경우 너무 오래되어 새로운 모바일 그래픽에 맞지 않는 많은 제약을 가져 통일되지 않은 extension에 의존해야만 했다. 비단 모바일 플랫폼만이 아니라 PC에서도 DirectX의 하드웨어 발전에 맞춘 빠른 지원과 달리 OpenGL의 제약과 시대를 따라가지 못했던 부분으로 인해 구식 API화되고 있었다. 그래픽 응용 프로그램이나 대학교에서는 항상 OpenGL을 배우게 되지만, 사실상 업계에서 표준은 항상 DirectX였으며, 언리얼 엔진 같은 업계 최고의 엔진 역시 렌더링 API는 DirectX를 기본으로 간주하였고, nVidia나 AMD같은 하드웨어 벤더들 역시 OpenGL에 대한 지원이 미흡하였다. 그러던 와중 크로노스 그룹의 불칸 발표는 아주 반가운 소식이었다. 파편화된 플랫폼 사이에서 표준이 되는 공통 API의 도입은 개발자에게 엄청난 편의를 제공하며, 플랫폼 별로 맞춰야 하는 많은 고민들을 해결해줄 수 있다. 특히 게임 같은 소프트웨어의 경우 원 소스 멀티 유즈가 대세며, 대부분의 게임 엔진들이 멀티 플랫폼을 지원하는 것을 강점으로 손꼽고 있다. 이를 통해 불칸 같이 PC와 모바일을 아우르는 공통 API의 등장은 업계 전반에 활력을 불어넣게 될 것이며, 앞으로 더 높은 그래픽 퀄리티의 애플리케이션 개발에 든든한 아군이 되어줄 것이다. 이 책은 불칸의 모체였던 AMD의 독자 그래픽 API 맨틀의 개발자로서 불칸의 개발에 깊이 참여한 수석 개발자가 직접 작성한 것으로, 불칸을 이해하기에 이보다 좋은 교재는 없을 것이라고 생각해 추천하는 의미에서 바쁜 일정 중에 번역하였다. 이 책이 많은 다른 개발자들이 불칸을 이해하는 데 도움이 되길 바란다.

옮긴이 소개

이상우

과학에 흥미가 많던 과학도로 과학고를 조기 졸업하고 KAIST에 입학, 전산학과를 수석으로 졸업했다. 컴퓨터로 표현할 수 있는 가상 세계에 대한 흥미가 높아 엔씨소프트에서 게임 개발을 시작했다. 게임 그래픽을 통해 오프라인 렌더러의 기반 이론에 관심을 가지게 됐고, 컴퓨터 그래픽 이론의 연구를 위해 UNC-CH의 그래픽 랩으로 유학을 가서 학위를 받았다. 에픽 게임스에서 최고의 실시간 렌더러를 가진 언리얼 엔진 3/4를 개발하다가, 급속히 성장하는 모바일 렌더러의 세계에서 최고의 그래픽을 표현하기 위해 액션스퀘어에서 블레이드 2의 개발에 매진하고 있다.

목차

목차
  • 1장. 불칸의 개요
    • 인스터스, 장치, 큐
      • 불칸 인스턴스
      • 불칸 물리 장치
      • 물리 장치 메모리
      • 장치 큐
      • 논리 장치 생성
    • 객체 종류와 함수 규약
    • 메모리 관리
    • 불칸에서의 멀티스레딩
    • 수학적 개념
      • 벡터와 행렬
      • 좌표계
      • 불칸의 강화
      • 레이어
      • 확장
    • 깨끗하게 종료하기
    • 요약

  • 2장. 메모리와 자원
    • 주 메모리 관리
    • 자원
      • 버퍼형식과 지원
      • 이미지
      • 자원 시야
      • 자원 소멸
    • 장치 메모리 관리
    • 장치 메모리 할당
      • 주 시스템의 장치 메모리에 대한 접근
      • 메모리를 자원에 결속
      • 간헐 자원
    • 요약

  • 3장. 큐와 명령어
    • 장치 큐
    • 명령어 버퍼의 생성
    • 명령어 기록
    • 명령어 버퍼 재사용
    • 명령어의 제출
    • 요약

  • 4장. 자료 이동
    • 자원 상태 관리
      • 파이프라인 방벽
      • 전역 메모리 방벽
      • 버퍼 메모리 방벽
      • 이미지 메모리 방벽
    • 버퍼의 비우기와 채우기
    • 이미지를 비우고 채우기
    • 이미지 자료의 복사
    • 압축된 이미지 자료를 복사
    • 이미지 늘이기
    • 요약

  • 5장. 프리젠테이션
    • 프리젠테이션 확장
    • 프리젠테이션 표면
      • 마이크로소프트 윈도우에서의 프리젠테이션
      • Xlib 기반 플랫폼에서의 프리젠테이션
      • Xcb로 프리젠테이션
    • 스왑 체인
    • 전체 화면 표면
    • 프리젠테이션의 수행
    • 마무리 정리
    • 요약

  • 6장. 셰이더와 파이프라인
    • GLSL의 개요
    • SPIR-V 개요
      • SPIR-V의 표현
      • SPIR-V를 불칸에 전달
    • 파이프 라인
      • 계산 파이프라인
      • 특수화 상수
      • 파이프라인 생성 가속
      • 파이프라인 연결
    • 작업 실행
    • 셰이더에서의 자원 접근
      • 서술자 집합
      • 서술자 집합에 자원을 연결
      • 서술자 집합의 연결
      • 균일, 텍셀, 저장 버퍼
      • 푸시 상수
      • 표본화된 이미지

  • 7장. 그래픽 파이프라인
    • 논리적 그래픽 파이프라인
    • 렌더패스
    • 프레임 버퍼
    • 단순 그래픽 파이프라인의 생성
      • 그래픽 셰이더 단계
      • 정점 입력 상태
      • 입력 조합
      • 테셀레이션 상태
      • 시야 영역 상태
      • 래스터라이제이션 상태
      • 다중표본 상태
      • 깊이와 스텐실 상태
      • 색 혼합 상태
    • 동적 상태
    • 요약

  • 8장. 그리기
    • 그리기 위한 준비
    • 정점 자료
    • 색인된 그리기
      • 색인-전용 렌더링
      • 재설정
    • 인스턴싱
    • 간접 그리기
    • 요약

  • 9장. 기하구조 처리
    • 테셀레이션
      • 테셀레이션 설정
      • 테셀레이션 변수
      • 테셀레이션 예: 변위 매핑
    • 기하 셰이더
      • 기본체 자르기
      • 기하 셰이더 인스턴싱
    • 프로그램 가능한 점 크기
    • 선 너비와 래스터라이제이션 사용자의 자르기와 거르기
    • 시야 영역 변환
    • 요약

  • 10장. 화소 처리
    • 가위 시험
    • 깊이와 스텐실 연산
      • 깊이 시험
      • 스텐실 시험
      • 선행 화소 시험
    • 다중표본 렌더링
      • 표본율 음영
      • 다중 표본 처리
    • 논리 연산
    • 화소 셰이더 출력
    • 색 혼합
    • 요약
  • 11장. 동기화
    • 펜스
    • 이벤트
    • 세마포어
    • 요약

  • 12장. 자료 돌려받기
    • 질의
      • 질의 실행
      • 시간 질의
    • 주 시스템에서 자료 읽기
    • 요약

  • 13장. 다중 패스 렌더링
    • 입력 첨부
    • 첨주 내용
      • 첨부 초기화
      • 렌더 영역
      • 첨부 내용의 유지
    • 부 명령어 버퍼
    • 요약
  • 부록. 불칸 함수
    • 용어 사전

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.21 : 위에서 6행]
SK
->
SDK

[p. 272 : 3행]
셰이딩 언어인 PIR-V의
->
셰이딩 언어인 SPIR-V의

[p. 480 : 1행]
첨주 내용
->
첨부 내용