책 소개
소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(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) 렌더링을 포함한다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
목차
목차
- 1장. 셰이더 생성하기
- 소개
- 기본적인 표준 셰이더 생성
- 기존의 유니티 4에서 사용하던 셰이더를 유니티 5로 옮기기
- 셰이더에 속성값 추가
- 표면 셰이더의 속성값 다루기
- 2장. 표면 셰이더와 텍스처 매핑
- 소개
- 디퓨즈 셰이더
- 압축 배열 사용
- 셰이더에 텍스처 추가
- UV 값을 수정하여 텍스처 스크롤하기
- 법선 매핑
- 투명한 머터리얼 생성
- 홀로그램 셰이더 생성
- 텍스처 압축 및 블렌딩하기
- 지형 주변에 원 생성
- 3장. 광원 모델의 이해
- 소개
- 사용자 정의 디퓨즈 광원 모델 생성
- 툰 셰이더(Toon Shader) 생성
- 퐁 스페큘러 타입 생성
- 블린 퐁 스페큘러 타입 생성
- 비등방성 스페큘러 타입 생성
- 4장. 유니티 5의 물리 기반 렌더링
- 소개
- 금속성 구축에 대한 이해
- PBR에 투명도 추가
- 거울과 반사 표면 생성
- 씬에서 빛 굽기
- 5장. 정점 함수
- 소개
- 표면 셰이더에서 정점 색상에 접근하기
- 표면 셰이더에서 정점 애니메이션
- 모델을 압출 가공하기
- 압출 맵 추가
- 눈 셰이더 구현
- 볼륨형 폭발 구현
- 6장. 프래그먼트 셰이더와 그랩 패스
- 소개
- 정점 및 프래그먼트 셰이더 이해하기
- 그랩 패스 사용 방법
- 유리 셰이더 구현
- 2D 게임을 위한 물 셰이더 구현
- 7장. 모바일 셰이더 조정하기
- 소개
- 비용이 저렴한 셰이더란
- 셰이더 프로파일링
- 모바일을 위한 셰이더 수정
- 8장. 유니티 렌더 텍스처를 통한 화면 효과
- 소개
- 화면 효과 스크립트 시스템 구축
- 화면 효과로 밝기와 채도, 대비 효과 이용하기
- 화면 효과로 포토샵 같은 기본적인 블렌드 모드 사용하기
- 화면 효과로 오버레이 블렌드 모드 사용하기
- 9장. 게임 플레이와 화면 효과
- 소개
- 오래된 영화 화면 효과 생성
- 야간 투시경 화면 효과 생성
- 10장. 고급 셰이더 기술
- 소개
- 유니티에 내장된 CgInclude 파일 사용하기
- CgInclude로 셰이더 월드 모듈러 생성하기
- 모피 셰이더 구현하기
도서 오류 신고
정오표
정오표
[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행]
특별하게 만드는 도구로써
->
특별하게 만드는 도구로서