Top

셰이더 코딩 입문 [셰이더 코딩의 기초에서 유니티와 언리얼 셰이더까지]

  • 원서명Practical Shader Development: Vertex and Fragment Shaders for Game Developers (ISBN 9781484244562)
  • 지은이카일 할러데이(Kyle Halladay)
  • 옮긴이조형재
  • ISBN : 9791161753720
  • 36,000원
  • 2019년 11월 29일 펴냄
  • 페이퍼백 | 448쪽 | 188*235mm
  • 시리즈 : 게임 개발 프로그래밍

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/practical-shader-develop

요약

셰이더 코딩의 기초부터 유니티와 언리얼 엔진의 커스텀 셰이더 제작까지 실습과 함께 설명한다. 먼저 오픈프레임웍스를 이용해 버텍스와 프래그먼트 셰이더부터 라이팅과 노말 매핑까지 게임 그래픽의 핵심 개념을 실제 코딩으로 구현한다. 그 다음 게임 최적화에 관련된 문제를 개념과 원리를 바탕으로 깊이 있게 설명한다. 마지막으로 앞에서 배운 내용을 바탕으로 유니티, 언리얼, 고도 엔진에서 커스텀 셰이더를 제작한다. 게임 그래픽과 셰이더에 관심이 있으며 프로그래밍의 기초 지식을 갖춘 게임 개발자나 아티스트에게 추천할 수 있는 책이다.

이 책에서 다루는 내용

■ 셰이더의 개념과 작동 원리
■ 버텍스 셰이더와 프래그먼트 셰이더 작성
■ 블렌딩 공식의 원리와 활용
■ 실시간 컴퓨터 그래픽에서 좌표 공간의 개념
■ 애니메이션, 라이팅, 기타 시각 효과를 위한 수학
■ 셰이더의 성능 문제 파악과 해결
■ 유니티, 언리얼4, 고도 엔진에서의 셰이더 개발

이 책의 대상 독자

게임이나 다른 리얼타임 애플리케이션에 사용할 셰이더 코드를 공부하려는 사람을 위한 책이다. 간단한 C++ 코드를 작성할 수 있는 사전 지식을 갖췄다고 가정하고 작성했다. 진행에 필요한 모든 수학적 내용은 책에서 다룬다. 또한 3D 메쉬가 무엇인지부터 시작해 다양한 그래픽 테크닉을 자세히 분석한다. 설령 C++ 실력이 시원치 않아도 큰 문제가 되지 않는다. 이 책은 셰이더 개발을 주로 다루기 때문에 C++를 깊이 다룰 일은 없다. 그나마 작성하게 될 코드도 아주 단순한 수준이다.

이 책의 구성

이 책은 크게 세 부분으로 나뉜다. 1장에서 12장은 셰이더 테크닉을 가르치고 중요한 그래픽 개념을 소개한다. 이 분야를 처음 접한다면 1장부터 시작해 모든 내용을 순서대로 읽어 나가길 권장한다. 각 장은 이전 장에서 다뤘던 내용에 기반하고 있기 때문에 너무 급하게 건너뛰면 내용을 따라가지 못할 수 있다.
이미 어느 정도 셰이더 개발에 대한 지식을 갖추고 있다면 새로운 내용이 나올 때까지 건너뛰는 것도 나쁘지는 않다. 중간에 이해할 수 없는 개념이 나온다면 책 뒤에 있는 인덱스에서 그 개념이 소개된 부분을 찾을 수 있고, 그때 거기로 돌아가 내용을 파악하면 된다.
13에서 15장은 셰이더 코드의 디버깅과 최적화를 설명한다. 지금 개발 중인 프로젝트가 초당 10 프레임으로 실행되고 문제를 고쳐야 하는 상황이라면, 앞 부분을 읽기 전에 바로 여기로 와서 당면한 문제의 해법을 찾아볼 수도 있다.
16에서 18장은 가장 인기 있는 세 개의 게임 엔진인 유니티, 언리얼, 고도(Godot)에서 이 책에서 배운 개념을 실제로 활용하는 방법을 설명한다. 책에서 배운 주요 개념을 프로젝트에 적용할 준비를 마칠 때까지 이 부분은 남겨두길 권장한다.
마지막으로 부록에는 이 책의 프로젝트에 필요한 주요 코드가 수록돼 있다. 이 코드들은 셰이더 코드가 아니기 때문에 자세히 설명하지 않는다.

상세 이미지

저자/역자 소개

지은이의 말

이 책을 선택한 것을 환영한다. 게임 개발에 필요한 셰이더 작성의 이론과 실습을 최대한 친절하게 소개하려는 의도로 이 책을 집필했다. 셰이더 작성은 매우 큰 주제라고 할 수 있다. 나 역시 처음 셰이더를 접했을 때 매우 당황스러웠던 기억이 있다. 이 책을 통해 독자가 그런 당황스러움에서 벗어나고, 게임 그래픽이라는 방대한 세상에 빨리 그리고 자신감 있게 첫발을 내딛게 하는 것이 나의 바람이다.
이 책은 ‘목수가 연장을 만드는 법까지 알 필요는 없다’는 기본 철학을 바탕으로 했다. 아름다운 시각 효과를 위한 셰이더를 만들려고 렌더링 엔진을 만드는 방법까지 알 필요는 없다고 생각한다. 특히 이 일을 처음 시작할 때는 더욱 그렇다. 이 책은 독자가 창의적으로 다양한 시도를 하고, 멋진 것을 만들고, 나아가 그 과정에서 재미를 느끼는 데 중점을 뒀다. 그런 목표에 집중하기 위해 그래픽 프로그래머가 되는 방법을 안내하거나 체계적인 수학 교육을 시도하지는 않는다(다양한 주제를 다루다 보니 약간의 수학 내용이 나오기는 한다). 대신 아주 기초적인 부분에서 출발해 현대 게임이 어떻게 화면에 대상을 그리는지 설명한다. 그 다음 원하는 화면을 그리기 위한 셰이더 작성 실습으로 곧바로 들어간다. 이 과정에서 수많은 예시 코드와 참고 그림을 보게 된다. 그리고 이 책을 마칠 무렵이면 현재 가장 인기 있는 게임에서 볼 수 있는 라이팅 환경과 셰이더를 직접 재현하는 단계에 이를 것이다.
이 책을 마치고 그래픽 프로그래밍을 더 공부하고자 결심하거나, 자신만의 렌더링 엔진을 만들거나, 좀 더 고급스러운 셰이더 테크닉을 원할 수 있다. 이 책이 한결 심화된 주제를 위한 탄탄한 기초를 제공할 것으로 기대한다.

지은이 소개

카일 할러데이(Kyle Halladay)

시카고에 거주하는 게임 프로그래머다. 셰이더 프로그래밍을 비롯해 게임과 건축 시각화와 관련된 그래픽 기술 개발 분야에서 7년 이상 종사했다.

옮긴이의 말

애니메이션, 영화, 건축, 제품 같은 컴퓨터 그래픽 분야는 일찍부터 셰이더의 중요성을 인식했다. 셰이더는 이미지나 영상의 품질을 좌우하는 핵심 요소였고, 스튜디오의 기술력을 보여주는 척도였다. 반면 게임에서 셰이더는 오랫동안 관심 밖의 초라한 존재였다. 기능 자체도 형편 없었지만, 그나마도 최적화 단계에서 일순위로 버림받기 일쑤였다.
그러던 셰이더의 지위에 변화가 생겼다. PBR이 폴리곤이나 텍스처만큼이나 흔한 말이 됐다. 모바일 게임에 헤어 셰이더와 피부 셰이더가 사용되고, UI 아티스트가 연출을 위해 직접 셰이더를 만드는 모습도 어렵지 않게 볼 수 있다. 굴욕의 시간을 버틴 주인공이 결국은 사문의 복수를 하고 무림의 일인자가 되듯, 셰이더는 어느새 게임의 때깔을 좌우하는 위치로 인정받기 시작했다.
더 강력한 하드웨어, 주요 엔진이 제공하는 직관적인 셰이더 개발 도구, 사용자의 높아진 기대치에 부합하기 위한 그래픽 경쟁. 이런 요인들이 맞물려 셰이더가 부각되는 추세는 더욱 강화될 것이다. 특히 앞으로 다가올 게임 스트리밍 서비스는 오프라인 렌더링과 리얼타임 렌더링 간의 마지막 남은 경계마저 허물어버리는 계기가 될지도 모른다. 게임에서 셰이더의 역할이 어느 때보다 높게 평가 받는 시기다. 이제 게임 개발자, 특히 게임 아트 쪽 개발자에게 셰이더는 반드시 이해해야 하는 대상인 동시에 개인의 역량을 드러낼 수 있는 기회의 영역이라고 할 수 있다.
이 책은 셰이더의 개념과 원리를 코딩을 통해 직접 경험할 수 있는 기회를 제공한다. 코드에서 버텍스와 메쉬를 생성하는 것에서 출발한다. 라이팅, 노말 매핑, 큐브 맵과 같은 현대 게임 그래픽의 근간이 되는 주요 개념을 자세히 설명하고, 직접 코딩을 통해 구현한다. 마지막으로 유니티와 언리얼에서 이 책에서 설명한 내용과의 접점을 확인한다. 당장 쓸 수 있는 화려한 최신 기법을 소개하기보다는 실제 코딩을 통해 리얼타임 컴퓨터 그래픽과 셰이더의 기본 개념을 설명한다.
독자에 따라서는 일부 그래픽과 수학 개념이 다소 어렵게 느껴질 수 있다. 최대한 친절하게 전달하려 했지만 개념 자체가 생소한 독자에게는 여전히 어렵게 느껴질 것이다. 그러나 설령 한 두 부분을 이해하지 못하고 넘어간다 해도 크게 문제가 되지는 않는다. 이 책을 읽은 것 만으로도 셰이더 사용과 게임 엔진의 셰이더 개발 도구를 활용하는 데 큰 도움이 될 것이다.
이 책의 번역이 독자 제현(諸賢)의 학습과 실무에 도움이 될 수 있기를 진심으로 기원한다.

2019년 11월
한적한 겨울 바닷가에서
조형재 드림

옮긴이 소개

조형재

서울대학교 미술대학을 졸업하고, KAIST 문화기술대학원에서 게임 내러티브에 관한 연구로 석사 학위를 취득했다. 2000년 이후부터 주로 게임 개발사에서 근무했는데, 구체적인 약력은 개인 홈페이지(www.zorotoss.com)에서 확인할 수 있다. 2019년 현재는 모바일 게임 개발사에서 근무하고 있다. 경희대학교, 가천대학교에서 게임 엔진과 관련된 강의를 맡았으며, 역서로는 에이콘 출판사의 『Unity 3D Game Development by Example 한국어판』(2011), 『유니티 3D 모바일 게임 아트』(2011), 『Unity 3 Blueprint 한국어판』(2011), 『Unity 3.x Game Development Essentials 한국어판』(2012), 『Unity 3 Game Development Hotshot 한국어판』(2012), 『유니티와 iOS 모바일 게임 개발 프로젝트』(2013), 『유니티 NGUI 게임 개발』(2014)이 있다.

목차

목차
  • 1장. 게임 그래픽
    • 렌더링
    • 메쉬
    • 벡터
    • 색상
    • 렌더링 파이프라인
    • 셰이더
    • 요약

  • 2장. 셰이더 작성
    • 윈도우 개발환경 준비
    • 프로젝트 세팅
    • 메쉬 생성
    • 버텍스 셰이더
      • 버전 선언
      • in 키워드
      • vec 데이터 타입
      • gl_Position
      • 정규화 장치 좌표
    • 프래그먼트 셰이더
      • out 키워드
    • 셰이더 바인딩
    • 버텍스 속성
    • 프래그먼트 보간
    • 유니폼 변수
    • 요약

  • 3장. 텍스처
    • 쿼드
    • UV 좌표
    • 텍스처 사용
    • UV 좌표 스크롤링
    • 밝기 조정
    • 색상 연산
    • mix( )
    • 요약

  • 4장. 투명도와 깊이
    • 새 프로젝트 준비
    • 메쉬와 셰이더 준비
    • 알파 테스팅과 discard
    • 깊이 테스팅
    • 알파 블렌딩
    • min( )과 max( )
    • 알파 블렌딩의 원리
    • 가산 블렌딩
    • 스프라이트 시트 애니메이션
    • 요약

  • 5장. 버텍스 셰이더와 이동, 회전, 크기
    • 버텍스 셰이더와 이동
    • 버텍스 셰이더와 크기
    • 버텍스 셰이더와 회전
    • 변환 행렬
    • 변환 행렬 애니메이션
    • 단위 행렬
    • 요약

  • 6장. 카메라와 좌표
    • 뷰 행렬
    • 변환 행렬과 좌표 공간
    • 카메라 프러스텀과 투영
    • 요약

  • 7장. 3D 프로젝트
    • 메쉬 불러오기
    • 카메라와 원근 투영
    • 요약

  • 8장. 디퓨즈 라이팅
    • 부드러운 셰이딩과 평평한 셰이딩
    • 월드 노말과 뒤섞기
    • 노말 행렬
    • 라이팅 계산과 노말
    • 벡터의 내적
    • 내적을 이용한 셰이딩
    • 디렉셔널 라이트
    • 림 라이트 효과
    • 요약

  • 9장. 라이팅 모델
    • 스펙큘러 라이팅
    • 스펙큘러 셰이더
    • 디퓨즈와 스펙큘러 라이팅 합치기
    • 앰비언트 라이팅
    • 퐁 라이팅 모델
    • 블린-퐁 라이팅 모델
    • 텍스처를 이용한 라이팅 제어
    • 요약

  • 10장. 노말 매핑
    • 노말 맵
    • 탄젠트 공간
    • 탄젠트 벡터
    • 벡터의 외적
    • 노말 매핑
    • 물 셰이더
    • 노말 매핑의 현재
    • 요약

  • 11장. 큐브맵과 스카이박스
    • 큐브맵
      • 큐브맵 불러오기
    • 큐브맵 렌더링하기
    • 스카이박스
    • 원근 분할
    • 스카이박스와 원근 분할
    • 스카이박스 그리기
    • 큐브맵 반사
    • 큐브맵의 현재
    • 요약

  • 12장. 라이팅 심화
    • 디렉셔널 라이트
    • 포인트 라이트
    • 스포트 라이트
    • 정적 멀티라이트
    • 동적 멀티라이트
    • 라이팅의 현재
    • 요약

  • 13장. 셰이더 프로파일링
    • 성능 측정
    • CPU 시간과 GPU 시간
    • 수직동기
    • 드라이버와 소프트웨어
    • 프로파일링
    • 그래픽 디버거: 엔사이트 그래픽스
    • CPU 제약과 GPU 제약
      • 간편 프로파일링
    • 셰이더 추적
    • 요약

  • 14장. 셰이더 최적화
    • 버텍스 셰이더 활용
    • 동적 분기
    • MAD 연산
    • GLSL 함수
    • 쓰기 마스크
    • 오버드로우
    • 마지막 지침

  • 15장. 정밀도
    • 부동 소수점 정밀도
    • 사례연구: 애니메이션
    • 모바일 플랫폼과 저정밀도 변수
    • 사례 연구: 포인트 라이트
    • 요약

  • 16장. 유니티 셰이더
    • 셰이더와 재질
    • 셰이더랩
    • 단색 셰이더
    • 블린-퐁 셰이더 포팅하기
    • 반투명 셰이더
    • 멀티라이트 지원
    • 코드에서 데이터 전달
    • 셰이더그래프
    • 요약

  • 17장. 언리얼 엔진 셰이더
    • 재질과 재질 인스턴스
    • 단색 셰이더
    • UE4 노드 그래프
    • 림 라이트 재질
    • Default Lit 재질의 입력
    • 버텍스 셰이더와 프래그먼트 셰이더
    • 다른 셰이딩 모델
    • 블렌드 모드
    • 코드에서 데이터 전달
    • 언리얼 셰이더 코드
    • 요약

  • 18장. 고도 셰이더
    • 셰이더와 재질
    • 고도 셰이딩 언어
    • 프래그먼트 셰이더 출력 변수
    • 림 라이트 셰이더
    • 버텍스 애니메이션 셰이더
    • UV 애니메이션
    • 반투명 셰이더와 블렌드 모드
    • 코드에서 데이터 전달
    • 비주얼 셰이더 편집기?
    • 요약
    • 메쉬 탄젠트 계산

  • 부록
    • 메쉬 탄젠트 계산
    • ofxEasyCubemap 클래스

도서 오류 신고

도서 오류 신고

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

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

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