Top

유니티 물리 기반 셰이더 개발 [기본 개념부터 커스텀 라이팅 시스템 구현까지]

  • 원서명Physically Based Shader Development for Unity 2017: Develop Custom Lighting Systems (ISBN 9781484233085)
  • 지은이클라우디아 도피오슬래시(Claudia Doppioslash)
  • 옮긴이최동훈
  • ISBN : 9791161752891
  • 30,000원
  • 2019년 04월 30일 펴냄
  • 페이퍼백 | 356쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 게임 개발 프로그래밍

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.

요약

각기 다른 플렛폼(OpenGL, Vulkan, DirectX) 및 유니티에서 사용하는 셰이딩 언어(Cg, GLSL, Shader lab)의 일반적인 범주에서 셰이더 프로그래밍이 어떻게 동작하는지부터 시작한다. 그리고 유니티 물리 기반 셰이더 개발에서는 BRDF(오렌-나얄, 쿡토렌스, 에시크민-셜리) 및 반투명, 하부 표면 산란과 같은 다양한 기술을 보여주면서 예술과 관련된 선택에 대해 논의한다. 더불어 이 기술을 어디에 사용할 수 있는지도 알려준다. 마지막으로 비슷한 결과를 내면서도 계산 비용은 저렴한 근사법을 개발하면서 코드 최적화의 중요성에 대해서 다룰 것이다.

이 책에서 다루는 내용

■ 셰이더 프로그래밍 마스터
■ 물리 기반 셰이딩 구현
■ 셰이더 하부시스템 조작법
■ 커스텀 물리 기반 라이팅 시스템 구현 및 선택 뒤에 숨겨진 로직 관찰

이 책의 대상 독자

유니티 경험이 있지만 셰이더 코딩 경험은 거의 없거나 전혀 없는 이들을 대상으로 쓴 책이다. 어느 정도 프로그래밍 경험이 있다면 코드를 다루는 것부터 공부할 필요가 없기 때문에 도움이 될 것이다.
물리 기반 셰이딩 원리나 노드 기반 인터페이스가 아닌 셰이더 프로그래밍 코드 작성법을 배우고자 하는 테크니컬 아티스트도 이 책을 읽기에 적합하다. 또한 셰이더 프로그래밍을 시작하는 방법을 배우고 싶거나 물리 기반 셰이딩과 관련된 몇 가지 기술을 구현하고자 하는 프로그래머에게도 도움이 될 것이다.

이 책의 구성

이 책은 3부, 18장으로 구성돼 있다. 처음부터 순차적으로 읽을 수 있게 집필했지만 이미 알고 있는 부분은 넘어가도 괜찮다.
셰이더 경험이 어느 정도 있고 유니티에 대한 특정 내용을 찾고 있다면, 1장을 대충 훑고 바로 5장으로 넘어가는 것을 추천한다. 이미 그래픽스 프로그래밍에 능숙하고 물리 기반 셰이딩에만 관심이 있다면, 1장을 대충 훑고 8장으로 넘어가는 것을 추천한다.
만약 단 한 줄의 셰이더 코드도 작성한 적이 없고 노드 에디터 사용에 익숙한 테크니컬 아티스트라면, 이 책을 순서대로 읽되 유니티에서 셰이더 코드를 작성하는 방법이 나오는 2장을 특히 집중해서 읽을 것을 추천한다.

1부. 유니티 셰이더 소개 1부는 독자를 셰이더 초보에서 그래픽스 프로그래밍의 중요 개념 지식 및 비물리 기반 셰이더 작성에 대한 지식을 갖춘 사람으로 만들어 줄 것이다. 1장, ‘셰이더의 동작 방법’ 렌더링과 그래픽스 프로그래밍의 기본 개념을 다룬다. 셰이더가 무엇인지, 그래픽스 파이프라인의 동작, 렌더링 프로세스, 빛의 성질, 셰이더 및 렌더러 타입에 대한 전체적인 지식을 얻을 수 있다.
2장, ‘첫 번째 유니티 셰이더’ 첫 번째 유니티 셰이더를 작성해 볼 것이다. 프로젝트 설정, 씬 제작, 문법, 유니티 셰이더를 구성하는 부품을 다룬다. 단순한 단색 언릿 셰이더를 작성해볼 것이다.
3장, ‘그래픽스 파이프라인’ 그래픽스 파이프라인이 어떻게 동작하는지, 그래픽스 파이프라인으로 셰이더의 다양한 부분을 어떻게 후킹하는지, 거기에 무슨 데이터가 전송되고 어떻게 처리되는지, 데이터를 가지고 할 수 있는 것이 무엇인지를 설명한다.
4장, ‘좌표 공간 변환’ 그래픽스 파이프라인에서 일반적으로 쓰이는 각각의 좌표 공간을 보여주고 설명한다. 그리고 유니티가 제공하는 변환 도구에 대해서 설명한다.
5장, ‘첫 번째 라이팅 셰이더’ 몇 가지 일반적인 라이팅 콘셉트와 근사법(디퓨즈나 스펙큘러와 같은)을 소개한다. 그리고 이를 언릿 셰이더에 구현하는 방법에 대해서 설명한다. 이 장을 마치면 독자는 첫 번째 커스텀 라이팅 셰이더를 작성하게 되는 것이다.
6장, ‘스펙큘러 구현’ 5장에 이어 스펙큘러 근사법을 구현해 디퓨즈를 완성한다. 또한 언릿 셰이더에 한 개 이상의 빛을 지원하는 방법과 셰이더 랩 패스의 실용적인 사용에 대해 설명한다.
7장, ‘서피스 셰이더’ 지금까지 언릿 셰이더만을 사용했다. 언릿 셰이더가 좀 더 직관적이고 그래픽스 파이프라인과 셰이더가 맞닿는 곳을 숨기지 않기 때문이다. 하지만 언릿 셰이더는 불필요한 내용이 많을 수 있으므로, 이 장에서는 서피스 셰이더를 소개하고 서피스 셰이더가 어떻게 꽤나 많은 양의 시간과 타이핑을 절약하는지에 대해서 설명한다. 앞의 두 장에서 구현했던 언릿 셰이더를 서피스 셰이더의 커스텀 라이팅 함수로 재구현할 것이다.

2부. 물리 기반 셰이딩
이론부터 구현까지 온전히 물리 기반 셰이딩에 집중한다. 이제 독자는 유니티 셰이더를 구현해봤으므로 렌더링이 어떻게 동작하는지 탄탄한 기초를 알 것이다. 따라서 물리 원리에 따른 셰이더 작성에 완전히 집중할 수 있다.
8장, ‘물리 기반 셰이딩이란?’ 미세면 이론을 보여주고 1장에서 빛이 동작하는 방식을 설명하는 데 단순화한 몇 가지 것을 바로잡는다. 프레넬 반사와 굴절률뿐만 아니라 빛을 측정하는 방법, 재질을 때리는 빛의 성질을 함수로 표현하는 방법을 살펴볼 것이다. 물리 기반 라이팅 모델에 필요한 것을 설명하고, 렌더링 방정식의 모든 부분을 설명한다.
9장, ‘물리 기반 셰이더 제작하기’ 물리 기반 셰이딩의 개념을 곧바로 실전에 적용하기 위해 7장에서 배운 커스텀 라이팅 서피스 셰이더를 가지고 물리 기반에 필요 조건들을 갖춘다.
10장, ‘후처리 효과’ 후처리는 HDR 렌더링에 필요한 부분이다. 물리 기반 셰이딩에 HDR 자체가 필요하다. 에셋 스토어를 통해 유니티가 제공하는 후처리 효과 스택은 강력하지만, 여전히 이해가 필요하며 종종 후처리 효과를 구현할 수 있어야 한다. 또한 유니티 후처리 스택 버전 1과 버전 2의 개요를 포함하고 있다.
11장, ‘BRDF 누가 누구인가?’ 일반적인 라이팅 함수들을 이름과 효과에 따라 알게 될 것이다. 이 장에는 디즈니 연구소에서 커스텀 라이팅 함수를 개발하고 분석하기 위해 개발한 엄청난 프로그램인 BRDF 익스플로러가 등장한다.
12장, ‘BRDF 구현’ 몇 가지 물리 기반 라이팅 함수를 알게 됐으므로 하나 혹은 둘 정도를 실제로 구현해본다. 정보를 수집하고 물리 기반 BRDF를 구현하는 방법을 다루며, 쿡토렌스 스펙큘러와 디즈니 BRDF 디퓨즈를 구현할 것이다.
13장, ‘표준 셰이더 후킹’ 12장에서 구현한 라이팅 함수를 유니티 표준 셰이더 인프스트럭처에 주입하는 방법을 설명한다. 이로써 거의 무료로 반사와 광역 조명등을 제공할 것이다.
14장, ‘고급 기술 구현’ BRDF 구현과 관련된 모든 것을 마치고, 반투명과 같이 BRDF로 구현할 수 없는 빛 현상을 추가하는 방법을 설명한다. 또한 반사 프로브가 작동하는 복잡한 메커니즘을 설명한다.

3부. 셰이더 개발 조언
유니티의 커스텀 라이팅 시스템 구현에 필수적인 것들을 모두 배웠다. 3부에서는 이에 관한 기술인 디버깅, 좋은 코드 작성법, 아티스트가 독자가 만든 셰이더를 잘 쓰게 만드는 방법에 대해서 설명한다.
15장, ‘아티스트가 사용할 셰이더 만들기’ 프로그래머가 아티스트가 사용하기에 너무 복잡한 셰이더를 만드는 경우가 많다. 심지어 본인이 그러고 있다는 사실조차도 깨닫지 못한 채로 말이다. 이 장은 프로그래머가 저지르는 셰이더 사용에 관한 다섯 가지 실수를 나열하고 몇 가지 해결책을 제시한다.
16장, ‘복잡성과 우버 셰이더’ 13장 이후 셰이더 시스템의 복잡성이 어떻게 생겼는지에 대해 어느 정도 다뤘다. 이 장은 시스템이 왜 그렇게 돼 있고, 왜 그것이 여전히 현재 셰이딩 언어에서 최고의 방법인지 설명한다.
17장, ‘셰이더가 정상 작동하지 않을 때’ 첫 번째 시도에서 작성한 셰이더가 제대로 되는 경우는 존재하지 않는다. 따라서 버그를 추적하는 방법과 문제를 찾아내는 방법을 배워야 한다. 이 장은 셰이딩 프로파일링과 디버깅 및 이것들을 위한 다양한 도구에 대해서 이야기한다.
18장, ‘최신 트렌드 따라잡기’ 게임과 영화 산업은 결코 잠들지 않으며, 매년 진보를 거듭한다. 이 책을 읽은 이후에는 독자는 SIGGRAPH 논문을 읽어가며 지식을 더 깊게 쌓는 데 유리한 위치에 있을 것이다. 이 장은 렌더링과 셰이더 개발에 대한 최신 개발 기술과 어깨를 나란히 하는 다양한 방법을 나열한다.

상세 이미지

저자/역자 소개

지은이의 말

여러분들이 유니티 혹은 물리 기반 셰이딩에 관심이 있어서 이 책을 갖고 있을 것이라 생각한다.
Shadertoy 웹사이트가 증명하는 바와 같이 셰이더는 멋지다. 그리고 유니티는 셰이더를 작성하는 방법을 배우는 좋은 도구다. 지난 몇 년간 트리플 A급 게임이 증명하듯이 물리 기반 셰이딩 역시 멋지다. 그리고 또 다시 유니티는 렌더러를 작성하지 않고도 그것에 발 담그는 편리한 방법이다. 이 책은 두 분야 모두의 온전한 범위(sanity thresholds)를 배우는 데 필요한 노력을 지속하는 편리한 매개체로서 유니티를 활용해 셰이더를 개발하는 방법과 물리 기반 셰이딩을 가르쳐 줄 것이다.

지은이 소개

클라우디아 도피오슬래시(Claudia Doppioslash)

게임 개발자이자 함수형 프로그래머다. 주요 관심사는 게임 개발과 함수형 프로그래밍으로 지금까지 둘 다 완벽히 소화하고 있다. ShaderCat.com에서 셰이더 개발, 그래픽스 프로그래밍, DCC 스크립팅(블렌더 및 Houdini용)에 대해 작성하고 있다.
프로그래밍 콘퍼런스에서 연사로 활동하고 있으며, 플루럴사이트(Pluralsight)의 저자 중 한 명이다(여기에서 그녀의 유니티 커스텀 셰이더 개발 과정을 찾아보자). 쉬는 시간에 게임 AI 연구 주제에 대해 심도 있게 생각하기도 하고, 멋진 예술가가 되는 것을 시도하기도 하고, 일본어를 배우기도 하고, 고양이를 칭찬하기도 한다. 그리고 3개 국어(Zenéize - 제노바 방언, 이탈리아어, 영어)를 유창하게 구사하고 일본어도 조금 할 줄 안다. 그녀에게 인사하고 싶다면 @doppiolash나 @shadercat으로 트윗을 보내면 된다.
홈페이지는 www.doppioslash.com이다.

옮긴이의 말

많은 게임 개발자가 셰이더라는 단어를 신성시하는 것 같다. 나도 처음 셰이더를 배우려고 했을 때 셰이더에 대한 지식을 접하기 매우 어려웠으며(적어도 내가 셰이더에 대한 지식을 찾아 다닐 때는 그랬다) 셰이더와 관련된 추상적이고 괴상한 이야기를 많이 들었다. 어떤 사람들은 셰이더 개발은 천재들만 할 수 있다고도 말한다. 본래 사람은 자신이 잘 모르는 분야에 대해서는 두려워하고 경외시하는 것 같다. 잘 모르는 분야라도 막상 부딪히고, 익숙해지려고 노력하다 보면 대부분 생각보다 원리가 단순한 경우가 많다. 셰이더도 마찬가지라고 생각한다.
이 책은 요즘 인기 있는 유니티의 셰이더를 다룬다. 내용을 따라 하다 보면, 유니티에서 셰이딩 프로그래밍을 어떤 식으로 진행하는지에 대한 감이 잡힐 것이다. 이 책이 예전 나와 같은 개발자들이 셰이더를 빠르고 간결하게 이해하는 데 필요한 지도가 됐으면 하는 바람으로 이 책을 번역했다. 이 책이 독자 여러분들에게 꼭 도움이 됐으면 한다.

옮긴이 소개

최동훈

실무 경력 10년차 개발자, 프로그래밍 강사, IT 서적 번역가다. 과거에는 모바일 위주로 개발 했으나 현재는 주식회사 핀플레이에서 근무 중이다.

목차

목차
  • 1부. 유니티 셰이더 소개
  • 1장. 셰이더 개발 과정
    • 셰이더란?
      • 빛의 시뮬레이션으로서의 셰이더
      • 원근법을 활용한 렌더링
      • 렌더링 과정
      • GPU에서 동작하는 코드로서의 셰이더
      • 셰이더 실행
      • 여러 가지 종류의 셰이더
      • 좌표 체계
      • 빛의 종류
      • 점 광원
      • 방향 광원
      • 면 광원
    • 렌더링 방정식
      • 빛의 특성
        • 반사된 빛
      • 렌더러 종류
        • 포워드
        • 디퍼드
        • 포워드+(타일 포워드 셰이딩)
        • 미래 렌더러
      • 셰이더 시각 그래프
    • 요약
  • 2장. 첫 유니티 셰이더
    • 유니티 소개
      • 준비
      • 유니티 UI
      • 첫 번째 씬 생성
      • 셰이더 수정
        • 셰이더의 경로와 이름
        • 특성
        • 하위 셰이더
        • 태그
        • 패스
        • CGPROGRAM(그리고 ENDCG)
        • Pragma 선언
        • Includes
        • 입력과 출력 구조체
        • 변수 선언
        • 정점 함수와 프레그먼트 함수
    • 셰이더 수정
      • 하얀색에서 빨간색으로
      • 속성 추가
    • 요약
  • 3장. 그래픽스 파이프라인
    • 그래픽스 API 기본을 배워야 하는 이유
    • 그래픽스 파이프라인의 일반적인 구조
    • 레스터라이저
    • 언릿 셰이더의 구조
    • 정점 데이터 구조체
    • 정점 함수
    • 프래그먼트 데이터 구조체
    • 프래그먼트 함수
    • 정점 색상 지원 추가
      • Appdata에 추가
      • v2f에 추가
      • 정점 함수에 색상 할당
      • 프레그먼트 함수에서 색상 값 사용하기
      • 최종 결과
    • 요약
  • 4장. 좌표 공간 변환
    • 좌표 공간: 누가 누구인가?
      • 객체 공간
      • 월드 공간
      • 공간과 공간 간의 변환
      • 카메라 공간
      • 절단 공간
      • 정규 기기 좌표
      • 화면 공간
    • 내장 함수가 내포하는 것들
    • 셰이더 “표준 라이브러리” 코드 위치
    • 요약
  • 5장. 최초 라이팅 셰이더
    • 라이팅 셰이더
      • 근사란?
      • 디퓨즈 근사
      • 스펙큘러 근사
      • 디퓨즈와 스펙큘러의 조합
    • 기본 라이팅 계산
      • 디퓨즈
    • 최초 유니티 라이팅 셰이더
      • 디퓨즈 항 구현하기
      • 텍스처 속성 추가
      • 엠비언트 값 추가
    • 요약
  • 6장. 스펙큘러 구현
    • 기본 라이팅 계산(파트 II)
      • 스펙큘러
      • 최초 유니티 라이팅 셰이더 (파트 II)
        • 스펙큘러 구현
    • 더 많은 광원 지원하기
    • 요약
  • 7장. 서피스 셰이더
    • 서피스 셰이더는 무엇인가?
      • 기본 서피스 셰이더
      • Pragmas
      • 신규 데이터 구조체
      • 서피스 함수
      • 라이팅 모델이란?
      • 서피스 셰이더의 데이터 흐름
    • 서피스 셰이더 편집
      • 두 번째 알베도 맵 추가하기
      • 노멀맵 추가하기
      • 그림자 작동 확인하기
      • 다른 내장 라이팅 모델 사용
    • 커스텀 라이팅 모델 작성
      • 라이팅 모델 함수 시그니처
      • SurfaceOutput 데이터 구조체
      • 서피스 함수
      • 속성 블록
      • 커스텀 라이팅 함수
    • 요약
  • 2부. 물리 기반 셰이딩
  • 8장. 물리 기반 셰이딩이란?
    • 전자기파의 일종인 빛
    • 미세면 이론 개요
    • 굴절과 다른 beasts
    • 프레넬 반사율
    • 빛을 측정하는 방법
      • 입체각
      • 파워
      • 일레디안스
    • 재질을 표현하는 방법
      • 양방향 반사 분포 함수
        • 양성
        • 상반성
        • 에너지 보존
    • 미세면 이론
      • 프레넬
      • 정규 분포 함수
      • 기하 함수
    • 렌더링 방정식(파트 2)
    • 실시간 렌더링 해킹에 필요한 것들
    • HDR과 톤 매핑
    • 선형 색상 공간
    • 왜 물리 기반 셰이딩이 유용한가?
    • 요약
  • 9장. 물리 기반 셰이더 제작하기
    • 퐁 분석하기
      • 양수성 확인
      • 상반성 확인
      • 에너지 보존법칙 확인
    • 개선된 퐁
    • 요약
  • 10장. 후처리 효과
    • 후처리 효과 동작 원리
    • 왜 후처리 효과가 유용한가?
    • 후처리 효과 설정
      • HDR과 선형 설정
      • 스크립트 설정
    • 선형 변환
    • 렌더 텍스처 간략 오버뷰
    • 단순 톤 매핑
    • 후처리 스택 v1
    • 후처리 스택 v2
    • 요약
  • 11장. BRDF 누가 누구인가?
    • BRDF 익스프롤러
    • BRDF 파라미터화
    • BRDF 익스플로러의 출력 해석
      • MERL 데이터베이스
      • BRDF 비교하기
      • 실시간 렌더링에 사용하는 BRDF 불완전 리스트
        • 어시크먼 셜리
        • 쿡 토렌스
        • 오렌 네이어
        • 월드
        • 디즈니
    • 요약
  • 12장. BRDF 구현하기
    • 어떤 BRDF를 구현할 것인가?
    • 레퍼런스 찾기
      • 쿡토렌스
      • 디즈니
    • 출발은 논문에서부터
      • 쿡토렌스 (혹은 미세면) BRDF
      • 디즈니 BRDF
    • 구현
      • 속성
      • 커스텀 라이트 함수 구현
      • 유틸리티 함수
      • 쿡토렌스 구현
      • 수정된 GGX 분포항
      • 슐릭 프레넬 항
      • 수정된 슐릭 기하항
      • 쿡토렌스 함수에 넣기
      • 디즈니 디퓨즈
      • 디즈니 디퓨즈의 다른 구현
      • 전부 한곳에 담기
    • 요약
  • 13장. 표준 셰이더 후킹
    • 표준 셰이더 역공학
      • 셰이더 키워드
      • 표준 셰이더 구조체
      • 쉐이드 키워드 추적
      • 대체 표준 셰이더 구현
        • BRDF 함수 구현
        • BRDF 셰이더 작성하기
        • BRDF 셰이더를 위한 GUI 제작
    • 요약
  • 14장. 고급 기술 구현
    • 기술을 탐색할만 한 곳
    • 반투명 구현
      • 속성
      • 구현
    • 실시간 반사
      • 큐브맵이란?
      • 반사 브로브란?
      • 큐브맵 평가
      • 큐브맵 프로세싱 프로그램
    • 요약
  • 3부. 셰이더 개발에 대한 조언
  • 15장. 아티스트가 사용할 셰이더 제작
    • 디즈니 BRDF의 UX
    • 일반적인 문제 #1: 너무나도 많은 세팅
    • 일반적인 문제 #2: 불분명한 세팅 값의 효과
    • 일반적인 문제 #3: 세팅 값 의존성
    • 일반적인 문제 #4: 텍스처에 불분명한 정보 유입
    • 일반적인 문제 #5: 이상한 범위
    • 좋은 예시: 블렌더의 디즈니 BRDF
    • 요약
  • 16장. 복잡도와 우버셰이더
    • 우버셰이더란?
    • 표준 셰이더
    • 셰이더에서 복잡도 문제를 일으키는 요인
    • 우버셰이더 가챠(Gotcha)
    • 우버셰이더 장점
    • 요약
  • 17장. 셰이더가 정상작동하지 않을 때
    • 일반적인 트릭
    • 디버깅 도구
    • 생성된 셰이더 코드 살펴보기
    • 퍼포먼스 프로파일링
    • 요약
  • 18장. 최신 트렌드 따라잡기
    • 컨퍼런스
    • 서적
    • 온라인 커뮤니티
    • 웹사이트
    • 소셜 미디어

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표

[p.40: 2행]
피사계심도(Depth of Filed)
->
피사계심도(Depth of Field)

[p.182: 정규 분포 함수]
프레넬이란 얼마나 많은 미세면들이
->
정규 분포 함수란 얼마나 많은 미세면들이