Top

유니티 5.x Shader와 Effect 제작 [유니티 5의 물리 기반 렌더링 활용]

  • 원서명Unity 5.x Shaders and Effects Cookbook (ISBN 9781785285240)
  • 지은이앨런 주코니(Alan Zucconi), 케네스 램머스(Kenneth Lammers)
  • 옮긴이권혁이, 오은진
  • ISBN : 9788960779518
  • 30,000원
  • 2016년 12월 30일 펴냄
  • 페이퍼백 | 300쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 게임 개발 프로그래밍

판매처

개정판

책 소개

소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/unity-shaders)

요약

유니티 작업에 생동감을 더하는 셰이더 프로그래밍에 대해 자세히 안내한다. 예제를 하나씩 따라 하다 보면 방대한 수학 지식 없이도 급이 다른 세련된 게임을 만들 수 있다. 고급 3D 게임이나 모바일 게임과 같은 결과물을 만드는 데 필수적인 광원과 화면 효과를 생성하는 방법부터 시작해, 법선 매핑, 이미지 기반 라이팅, 애니메이션 효과를 주는 방법 등을 설명한다. 또한, 물리 기반 렌더링과 같이 매우 유용한 기술을 자유자재로 다루는 비법도 소개한다. 이 책의 마지막 장을 덮을 때쯤이면 어둠의 마법처럼 멀게만 느껴졌던 셰이더가 매우 친숙하게 다가올 것이다.

이 책에서 다루는 내용

■ 물리 기반 렌더링으로 게임의 심미적인 측면 부각
■ 후처리 효과를 통해 시각적으로 더욱 매력적인 게임 제작
■ 상호보완적인 스크립트로 셰이더 프로그래밍을 보완하고 머티리얼에 생기 부여
■ 모바일 플랫폼에 디자인적으로 효과적인 셰이더 적용
■ 볼륨형 폭발이나 헤어 셰이더 등의 최신 기술 소개
■ 셰이더 모델이 진화하는 과정 이해와 자신만의 테크닉 습득
■ 셰이더의 구조 분석 및 빛의 동작 이해
■ 광원 모델에 가장 많이 사용되는 수학과 알고리즘 마스터

이 책의 대상 독자

유니티 5에서 처음으로 셰이더를 만들어 보거나, 전문적인 후처리 효과를 추가해 완전히 새로운 게임으로 재탄생시키고자 하는 개발자를 위해 쓰인 책이다. 이 책을 시작하기에 앞서 유니티에 대한 개념부터 확실히 정립하기를 권한다.

이 책의 구성

1장, ‘셰이더 생성하기’에서는 유니티 4와 5에서 셰이더 코드를 작성하는 방법에 대해 소개한다.
2장, ‘표면 셰이더와 텍스처 매핑’에서는 표면 셰이더를 구현할 수 있는 가장 일반적이면서도 유용한 기술에 대해 다룬다. 또한, 모델의 텍스처와 노멀 맵(Normal Map)의 사용 방법도 포함한다.
3장, ‘광원 모델의 이해’에서는 셰이더로 어떻게 빛의 움직임을 만드는지 깊이 있는 설명을 제공한다. 특히 툰 셰이더(Toon Shading)처럼 특별한 효과를 시뮬레이션할 때 필요한 사용자 정의 광원 모델을 생성하는 방법에 대해 알아본다.
4장, ‘유니티 5의 물리 기반 렌더링’에서는 게임을 현실감 있게 만들어주는 물리 기반 렌더링이라는 유니티 5의 표준 기술을 소개한다. 물리 기반 렌더링을 최대한 활용해 투명도 및 빛을 반사하는 표면을 처리하는 방법과 전역 일루미네이션에 대해 자세히 알아본다.
5장, ‘정점(Vertex) 함수’에서는 오브젝트의 지오메트리를 셰이더로 어떻게 변경시키는지 학습한다. 정점 모디파이어(Modifier)에 대해 소개하고, 이를 이용해 볼륨형 폭발(Volumetric Explosions)과 눈 셰이더와 같이 게임 그래픽에 생기를 불어넣는 효과를 만든다.
6장, ‘프래그먼트 셰이더와 그랩 패스’에서는 반투명한 머티리얼을 통해 변경된 형상을 그대로 모방하는 또 다른 머티리얼을 생성할 때 그랩 패스를 어떻게 사용하는지 알아본다.
7장, ‘모바일 셰이더 조정하기’에서는 어떤 디바이스든 구애받지 않고 최적의 셰이더 효과를 끌어낼 수 있다.
8장, ‘유니티 렌더 텍스처를 통한 화면 효과’에서는 오직 유니티 렌더 텍스처를 통해서만 가능한 특수 효과와 시각 효과를 만드는 방법에 대해 설명한다.
9장, ‘게임 플레이와 화면 효과’에서는 야간 투시경과 같은 시뮬레이션이나 게임플레이를 보완할 때, 후처리 효과를 어떤 방식으로 사용하는지 알아본다.
10장, ‘고급 셰이더 기술’에서는 이 책의 내용 전체를 통틀어 가장 고급 셰이더 기술을 설명한다. 모피 셰이더(fur shading)와 히트 맵(heatmap) 렌더링을 포함한다.

본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.

저자/역자 소개

지은이의 말

유니티 5에서 셰이더 생성과 포스트 이펙트를 익히기 위한 안내서다. 처음에는 가장 기초적인 셰이더 생성과 셰이더 코드 작성법부터 알아볼 것이다. 이러한 기본 지식을 바탕으로 한 장씩 배워 나가면, 나중에는 볼륨형 폭발(Volumetric Explosions)과 모피 셰이더(fur shading)처럼 고급 테크닉을 학습함으로써 실력을 향상시킬 수 있다. 이 책은 유니티 5를 기준으로 쓰였으며, 물리 기반의 렌더링과 전역 일루미네이션(Global Illumination)을 충분히 익히고 나면 최대한 실사에 가까운 결과물을 만들 수 있을 것이다.

지은이 소개

앨런 주코니(Alan Zucconi)

매우 열정적인 개발자이자 작가이며 청중을 사로잡는 연설가다. 게임 전문 매거진 ‘디벨롭(Develop)’이 선정하는 ‘30인의 유능한 30세 미만 개발자’에 뽑히기도 했다. 게임 산업 분야와 학계에 걸쳐 총 10여 년의 경력을 갖췄다. 자신의 창의력을 온전히 쏟아부을 수 있는 독자적인 일부터 시작해 현재는 예술과 게임의 벽을 무너뜨리는 데 영향력을 발휘하고 있다. 그 전에는 런던 임페리얼 대학(Imperial College London)에서 강의와 집필을 했다. 개발한 게임으로는 중력 퍼즐 게임인 <오비탈리스(ORBITALIS)>와 시간 여행 플랫폼 게임 <스틸>이 있다.

케네스 램머스(Kenneth Lammers)

경력 15년의 게임 개발자로, 캐릭터 아티스트와 테크니컬 아티스트, 테크니컬 아트 디렉터, 프로그래머를 겸하고 있다. 작업한 게임으로는 <콜>, <크랙다운(Crackdown)>, <앨런>, <키넥트>가 대표적이다. 현재 동업자 노아 카보(Noah Kaarbo)와 오존 인터랙티브(Ozone Interactive) 사를 운영하고 있으며, 아마존과 엘린 미디어(Eline Media), IGT, 마이크로소프트를 주요 고객으로 하고 있다.
마이크로소프트 게임 스튜디오와 액티비전(Activision), 써리얼(Surreal)에서 근무한 바 있으며, 최근 독자적인 사업을 시작해 크리에이티브티디(CreativeTD)와 오존 인터랙티브를 운영하고 있다.
또한 그는, 팩트에서 출간한 첫 번째 유니티 도서인 『유니티 Shader와 Effect 제작』(에이콘, 2014)을 저술한 바 있어, 이번 유니티 5.x 도서의 집필과 감수에 참여하게 된 것에 매우 기뻐하고 있다.

옮긴이의 말

셰이더 제작 과정은 다양한 시각 효과를 연출할 뿐만 아니라, 게임플레이 자체에도 영향을 미치기 때문에 대부분의 게임 개발에 활발히 사용되고 있다.
유니티 5와 그 이전 버전의 가장 큰 차이점은 물리 기반 렌더링(physically-based rendering)에 있다. 이를 통해 현실 세계의 물리 원리를 활용해 머티리얼에 적용할 수 있으며, 전역 일루미네이션(Global Illumination)으로 물리 기반의 빛의 이동을 시뮬레이션할 수 있다.
이 책은 유니티 게임 개발과정 자체에 대한 기본 지식만 있으면, 셰이더를 처음 접하는 독자라 할지라도 기초부터 유니티 5의 새로운 기능까지 무리 없이 따라 할 수 있다. 반대로 셰이더를 이미 다뤄본 독자는, 다양한 예제를 통해 좀 더 고급 수준의 응용 능력을 키울 수 있다. 또한 이 책은, 유니티 4의 사용자를 위해 기존 셰이더 코드를 유니티 5로 옮기는 방법에 관해서도 설명한다.
이 책의 구성은 기본적인 표준 셰이더를 시작으로 표면 셰이더와 광원 모델, 물리 기반 렌더링, 정점(Vertex) 함수의 사용 및 모바일 게임에서 셰이더 사용 시 유의할 사항, 특별한 화면 효과, 고급 셰이더 기술뿐만 아니라 볼륨형 폭발이나 헤어 셰이더와 같은 최근 기술을 다루고 있다. 각 장 별로 명확한 예제를 제공하고 있어 직접 셰이더 코드를 작성하며 책을 따라 하다 보면 어느 순간 셰이더를 자유자재로 다루고 있는 자신을 발견할 수 있을 것이다

옮긴이 소개

권혁이

클라이언트 게임 프로그래머로서, 소프트맥스, EA에서 캐릭터 및 전투 시스템 등 다양한 PC 온라인과 모바일 게임 개발에 참여해 왔다. 옮긴 책으로는 『언리얼 UDK 게임 디자인』(에이콘, 2014)이 있다.

오은진

신문방송학과 영어학을 전공하고 IT 매체 외신 기자, 삼성과 LG 홍보 팀을 거쳐 현재는 이상형이던 남편과 게임 서적을 번역하고 있다. 게임 개발자 남편과 언어학 전공 아내가 함께 작업하여, 독자가 좀 더 이해하기 쉬운 번역을 위해 노력하고 있다.

목차

목차
  • 1장. 셰이더 생성하기
    • 소개
    • 기본적인 표준 셰이더 생성
    • 기존의 유니티 4에서 사용하던 셰이더를 유니티 5로 옮기기
    • 셰이더에 속성값 추가
    • 표면 셰이더의 속성값 다루기

  • 2장. 표면 셰이더와 텍스처 매핑
    • 소개
    • 디퓨즈 셰이더
    • 압축 배열 사용
    • 셰이더에 텍스처 추가
    • UV 값을 수정하여 텍스처 스크롤하기
    • 법선 매핑
    • 투명한 머터리얼 생성
    • 홀로그램 셰이더 생성
    • 텍스처 압축 및 블렌딩하기
    • 지형 주변에 원 생성

  • 3장. 광원 모델의 이해
    • 소개
    • 사용자 정의 디퓨즈 광원 모델 생성
    • 툰 셰이더(Toon Shader) 생성
    • 퐁 스페큘러 타입 생성
    • 블린 퐁 스페큘러 타입 생성
    • 비등방성 스페큘러 타입 생성

  • 4장. 유니티 5의 물리 기반 렌더링
    • 소개
    • 금속성 구축에 대한 이해
    • PBR에 투명도 추가
    • 거울과 반사 표면 생성
    • 씬에서 빛 굽기

  • 5장. 정점 함수
    • 소개
    • 표면 셰이더에서 정점 색상에 접근하기
    • 표면 셰이더에서 정점 애니메이션
    • 모델을 압출 가공하기
    • 압출 맵 추가
    • 눈 셰이더 구현
    • 볼륨형 폭발 구현

  • 6장. 프래그먼트 셰이더와 그랩 패스
    • 소개
    • 정점 및 프래그먼트 셰이더 이해하기
    • 그랩 패스 사용 방법
    • 유리 셰이더 구현
    • 2D 게임을 위한 물 셰이더 구현

  • 7장. 모바일 셰이더 조정하기
    • 소개
    • 비용이 저렴한 셰이더란
    • 셰이더 프로파일링
    • 모바일을 위한 셰이더 수정

  • 8장. 유니티 렌더 텍스처를 통한 화면 효과
    • 소개
    • 화면 효과 스크립트 시스템 구축
    • 화면 효과로 밝기와 채도, 대비 효과 이용하기
    • 화면 효과로 포토샵 같은 기본적인 블렌드 모드 사용하기
    • 화면 효과로 오버레이 블렌드 모드 사용하기

  • 9장. 게임 플레이와 화면 효과
    • 소개
    • 오래된 영화 화면 효과 생성
    • 야간 투시경 화면 효과 생성

  • 10장. 고급 셰이더 기술
    • 소개
    • 유니티에 내장된 CgInclude 파일 사용하기
    • CgInclude로 셰이더 월드 모듈러 생성하기
    • 모피 셰이더 구현하기

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표

[p.26 : 8번의 5행]
다른 형태를 띄고 있을 것이다.
->
다른 형태를 띠고 있을 것이다.

[p.40 : 4번의 2행]
띄도록
->
띠도록

[p.54 : 아래서 5행]
R은 열을, C는 행의 위치를 나타낸다.
->
R은 행을, C는 열의 위치를 나타낸다.

[p.81 : 1행]
지형 셰이더에 어울릴만한
->
지형 셰이더에 어울릴 만한

[p.81 : 예제 구현 1행]
아래와 과정에 나온 코드를 통해
->
아래 과정에 나온 코드를 통해

[p.82 : 18행]
그리고 사용자가 각 텍스처의 기울기 각도를 개별적으로 조절할 수 있게끔 Input 구조체를 변경한다. 이렇게 하면 각 텍스처별로 기울기와 오프셋 매개변수를 사용할 수 있게 된다.
->
그리고 사용자가 각 텍스처의 타일링(tiling) 비율을 개별적으로 조절할 수 있게끔 Input 구조체를 변경한다. 이렇게 하면 텍스처별로 타일링과 오프셋 매개변수를 사용할 수 있게 된다.

[p.99 : 예제 구현 3번]

[p.106 : 아래서 4행]

[p.111 : 마지막 행]

[p.112 : 마지막 행]
붓으로 칠한듯한 금속을
->
붓으로 칠한 듯한 금속을

[p.113 : 3행, 6행]
붓으로 칠한듯한
->
붓으로 칠한 듯한

[p.116 : 5번 3행]
붓으로 칠한듯한
->
붓으로 칠한 듯한

[p.123 :13행]
어떤 형태의 금속성을 띄는지를
->
어떤 형태의 금속성을 띠는지를

[p.135 : 아래서 2행]
플렉션 프로브에 관한
->
리플렉션 프로브에 관한

[p.139 :1행]
어디에 이용할 지를
->
어디에 이용할지

[p.168 : 아래서 9행]
만족할만한 형태가
->
만족할 만한 형태가

[p.176 : 13행]
정점 함수가 vertOutput을 초기화화면
->
정점 함수가 vertOutput을 초기화하면

[p.178 : 8행]
구현하는 지를 살펴봤다.
->
구현하는 지 살펴봤다.

[p.180 : 2행]
vertInput vert(vertexInput v) {
->
vertexOutput vert(vertexInput v) {

[p.206 : 아래서 7행]
최적화된 셰이더를 만드는 게 사용되는
->
최적화된 셰이더를 만드는 데 사용되는

[p.208 : 4번 1행]
브젝트의 표면에
->
오브젝트의 표면에

[p.213 : 아래서 5행]
놀랄만한 실시간 이미지를
->
놀랄 만한 실시간 이미지를

[p.222 : 아래서 7행]
효과 시스템이 얼마나 유용한 지
->
효과 시스템이 얼마나 유용한지

[p.225 : 아래서 5행]
depthPower = Mathf.Clamp(depthPower, 0. 5);
->
depthPower = Mathf.Clamp(depthPower, 0, 5);

[p.273 : 아래서 4행]
가능한 다양한 방법으로
->
가능한 여러가지 방법으로

[p.274 : 1행]
특별하게 만드는 도구로써
->
특별하게 만드는 도구로서