Steady Seller

Physically Based Rendering Second Edition 물리 기반 렌더링 [현실 같은 그래픽스를 위한 알고리즘, 게임 엔진과 렌더러까지]

  • 원서명Physically Based Rendering, Second Edition: From Theory To Implementation (ISBN 9780123750792)
  • 지은이매트 파르(Matt Pharr), 그렉 험프리스(Greg Hunphreys)
  • 옮긴이이상우
  • ISBN : 9788960777620
  • 58,000원
  • 2015년 10월 16일 펴냄
  • 페이퍼백 | 1,224쪽 | 188*255mm

책 소개

2016년 대한민국학술원 우수학술도서 선정도서
요약

이 책은 게임과 영화 등에 사용되는 컴퓨터 그래픽스에 대한 심도 깊은 이해를 돕고, 게임 엔진이나 렌더러 구현에 관심이 있는 현업 종사자나 학생들에게 매우 유용한 책이다. 영화 프로덕션의 렌더맨(RenderMan)이나 언리얼 엔진의 라이트 매스(Lightmass) 같은 오프라인 렌더러의 기술에 더해, 최근 게임 엔진에서 사용하는 렌더링 기술까지 다루는, 컴퓨터 그래픽스를 위한 최고의 서적이다.

추천의 글

이 책은 대단한 책이다. 이 책은 기묘한 수학, 매혹적인 물리, 실용적인 소프트웨어 공학, 그리고 최첨단 실사 렌더러를 작성하는 데 필요한 기발한 기술을 모두 다룬다. 이 모든 주제를 깔끔하고 교육적인 방식으로, 실제로 중요한 모든 세부사항을 생략하지 않고 상세히 설명한다.
pbrt는 단지 레이트레이서(ray tracer)의 ‘장난감’ 구현만이 아니라, 일반적이고 안정적인 완전한 전역 조명 렌더러다. pbrt는 수행 시간을 줄이고 복잡한 장면의 메모리 소모량을 줄이기 위한 많은 중요한 최적화를 포함한다. 더욱이 pbrt는 기타 렌더링 알고리즘 변종과 함께 쉽게 확장할 수 있다.
이 책은 학생을 위한 교과서일 뿐만 아니라, 실제 분야의 전문가들을 위한 유용한 참고 도서다. 개정판은 메트로폴리스 빛 전송, 표면 밑 산란, 사전 계산 빛 전송 등에 대한 부분으로 확장됐다.
-페르 크리스텐센(Per Christensen) / 픽사 애니메이션 스튜디오(Pixar Animation Studios) 렌더맨 프로덕션, 선임 소프트웨어 개발자

연구나 최고급 렌더링 분야에서 직업을 찾고 있는가? 기초 교육을 받고난 후에는 이론과 실전 예제, 즉 실제 코드가 함께 하는 이 책으로 자신의 프로젝트를 시작하라. 개정판에서 매트 파르와 그렉 험프리스는 메트로폴리스 빛 전송이나 의사 몬테카를로 방식 같은 가장 발전된 렌더링 기술에 대해서도 쉬운 접근을 제공한다. 게다가 기반 작업을 통해, 렌더러에 자료를 넣고 추출할 때의 고통을 겪지 않게 해준다. 거시적 접근 방식의 문학적 프로그래밍은 읽기 쉬운 문장의 깔끔한 로직으로 나타난다. 그래픽을 진지하게 생각한다면 최신 기술을 다룬 이 독창적이고도 극도로 가치 있는 이 책을 반드시 읽기 바란다.
-알렉산더 켈러(Alexander Keller) / 멘탈 이미지스(Mental Images) 수석 과학자

이 책에서 다루는 내용

이 책은 현대 실사 렌더링 시스템 기반의 수학적인 이론과 함께 실질적인 구현을 설명한다. 문학적 프로그래밍(literate programming)으로 알려진 메소드를 써서 사람이 읽을 수 있는 문서와 소스코드를 합쳐, 잘 이해할 수 있도록 특별히 설계된 하나의 참고문헌으로 만들었다. 그래픽 교육에 있어 경탄할 만한 성취다. 이 책의 개념과 소프트웨어를 통해 굉장히 아름다운 이미지를 생성하는 완전한 기능의 렌더링 시스템을 디자인하고 사용하는 방법을 배우게 될 것이다.

표면 밑 산란, 메트로폴리스 빛 전송, 사전 계산 빛 전송, 다중 분광 렌더링 등을 다루는 많은 내용이 개정판에 추가되었다.

이 책에서 설명한 렌더링 시스템의 윈도우, OS X, 리눅스 지원 소스코드는 www.pbrt.org에서 볼 수 있다.

코드와 문서는 각 함수, 변수, 메소드를 처음 설명하는 페이지를 열거하고, 고유한 색인 기능으로 긴밀히 상호 참조할 수 있도록 정리했다.

이 책의 대상 독자

이 책의 주요 독자층은 대학원생 혹은 학부 고학년 컴퓨터 그래픽스 강의를 들을 수 있는 수준의 학생들이다. 이 책은 기본적으로 독자들이 대학 입문 수준의 컴퓨터 그래픽스 지식을 갖췄다고 가정하지만, 벡터 기하학이나 변환 같은 특정한 중요한 개념은 설명한다. 몇 만 줄 이상의 프로그램을 경험해보지 못한 학생들에게 문학적 프로그래밍 방식은 이런 복잡성에 대한 바람직한 소개가 될 것이다. 우리는 이런 독자들에게 왜 시스템이 이런 방식으로 구성됐는지를 알려주기 위해 시스템의 핵심 인터페이스와 추상화에 대한 이유를 설명하는 데 특별히 신경을 썼다.
두 번째 대상 독자층은 전문적인 대학원생들과 연구자, 소프트웨어 개발 종사자, 그리고 자신만의 렌더링 시스템을 구현하는 데 재미를 느끼고 관심이 있는 사람들이다. 이 책의 많은 내용이 이런 독자들에게는 익숙하겠지만, 알고리즘들의 문학적 방식의 설명을 보는 것이 새로운 관점을 제공할 수 있다. pbrt는 표면 세분화(subdivision surfaces), 몬테카를로 빛 전송(Monte Carlo light transport)과 메트로폴리스 표본화(Metropolis sampling)같이 고도화된 구현이 어려운 알고리즘들과 테크닉들의 구현을 포함하고 있으며, 이 내용은 특히 경험 있는 렌더링 현업자에게 관심 있는 분야일 것이다. 하나의 완전하고 비중 있는 렌더링 시스템의 구조를 파헤치는 것이 이런 독자들의 관심을 유발하기를 기대한다.

이 책의 구성

개정판에서 달라진 점
초판이 발행된 지 6년이 지났다. 그 동안 수천 권이 팔렸으며, 수천 번의 pbrt 다운로드가 있었다. 많은 피드백과 격려가 있었으며, 우리의 경험을 바탕으로 초판의 pbrt 버전과 업데이트된 버전의 변화를 결정했다.

1.플러그인(plugin) 아키텍처를 제거 초기 버전 pbrt는 실행 중(run-time) 플러그인 아키텍처를 통해 장면을 렌더하기 위한 기하 모양(shape), 광원, 적분기(integrator), 카메라 등의 물체(object)를 동적으로 불러왔다. 사용자들은 렌더링 시스템을 다시 컴파일할 필요 없이 새로운 물체 종류(예, 새로운 기하 모양)를 추가해 확장할 수 있었다. 이 방식은 초기에 우아하게 보였지만, 복잡한 멀티플랫폼의 지원과 어려운 디버깅을 야기했다. 유일하게 사용 가능한 시나리오(바이너리(binary) pbrt 배포본 혹은 바이너리 플러그인)는 우리의 교육적 오픈소스 목표와 반하므로 이번 판에서 제외됐다.

2.이미지 처리 파이프라인(image processing pipeline)을 제거 초기 버전에서는 톤 매핑(tone-mapping) 인터페이스를 통해 고명암비(HDR, High Dynamic Range) 부동소수점 결과 이미지를 직접 저명암비(low dynamic range) TIFF로 전환해 보여줬다. 이 기능은 HDR 이미지가 드물던 2004년 기준으로 만들어졌다. 하지만 2010년에는 디지털 사진술(photography)의 발달로 HDR 이미지가 흔해졌다. 톤 매핑의 이론과 실습은 우아하고 배울 가치가 있지만, 새 버전에선 이미지 형성(formation) 과정에 집중하고 이미지 디스플레이(display)를 제외하기로 했다. 관심 있는 독자들은 레인하드(Reinhard) 등(2005)의 철저한 최신 HDR 이미지 디스플레이를 위한 처리에 관한 책을 읽어보자.

3.작업 병렬화 멀티코어 아키텍처는 이제 도처에 존재하며, pbrt 역시 유저들의 사용 가능한 코어의 개수대로 성능을 확장할 수 있어야 의미 있다. 이 책의 병렬 프로그래밍 구현에 관한 세부 사항(예, 적절한 작업 크기나 뮤텍스(mutex) 종류)이 그래픽 프로그래머가 아직도 어렵고 잘 가르쳐주지 않는 확장 가능한 병렬 코드 개발의 세부 사항과 복잡성을 이해하는 데 도움이 되길 바란다.

4.프로덕션(production) 렌더링에의 적합성 초기 버전은 순수하게 교육용 툴과 렌더링 연구의 디딤돌로서 제작됐다. 사실 초기 버전은 제한된 이미지 기반 라이팅(image-based lighting), 모션 블러(motion blur) 미지원, 복잡한 라이팅에서의 광자 매핑(photon mapping) 구현의 불안정성 등 프로덕션 환경에서의 사용이 어려운 점이 많았다. 초기 버전보다 훨씬 발전된 기능의 지원과 표면 밑 산란(subsurface scattering)과 메트로폴리스 빛 전송(Metropolis light transport)의 지원으로 복잡한 환경의 초고품질 렌더링 이미지에 훨씬 적합해졌다. 기능 개선을 통해 더욱 기능이 완전해졌지만, 교수에겐 학생이 처리 가능한 과제를 주는 것이 더욱 어려워졌다. 사실 초기 버전 pbrt에 대해서도 학생들이 직접 레이트레이싱 시스템을 개발하는 것의 부담과 이점에 대한 트레이드오프가 발생했다. 초기 버전의 pbrt가 많은 대학에서 사용됐으므로, 새 버전의 복잡성과 기능 완성의 트레이드오프가 바람직해 계속 고품질 렌더링 수업에 사용되길 바란다.

저자/역자 소개

지은이의 말

렌더링(rendering)은 컴퓨터 그래픽스의 근본적인 요소다. 고도로 추상화해 설명하면 렌더링은 3차원의 장면에 대한 묘사를 이미지로 변환하는 과정이다. 애니메이션, 기하학적 모델링, 텍스처링(Texturing), 그리고 여타 수많은 컴퓨터 그래픽스의 알고리즘은 그 결과를 이미지로 보여주기 위해 어떤 종류의 렌더링 과정을 거쳐야 한다. 렌더링은 이제 어디서나 볼 수 있으며, 영화에서 게임, 나아가 창조적인 표현 기법과 엔터테인먼트, 시각화를 위한 새로운 영역을 열었다.
초기 렌더링에 대한 연구는 주어진 시점에서 어떤 물체가 보이는가와 같은 근본적인 문제를 해결하는 데 중점을 뒀다. 이런 문제들에 대한 효율적인 해결책을 찾아내 그래픽스의 다른 분야에서 지속적인 발전이 이어진 덕분에 좀 더 풍부하고 현실적인 장면 묘사가 가능해졌다. 현대 렌더링은 물리학, 천체물리학, 천문학, 생물학, 심리학과 인지 연구, 그리고 순수 수학과 응용 수학 같은 다양한 분야 학문의 아이디어를 포함할 수 있도록 성장했다.
이렇듯 여러 학문 분야가 관련돼 있다는 점이 렌더링 연구의 매력이다.
이 책은 완전한 렌더링 시스템을 위해 작성된 소스코드를 이용해 현대 렌더링에서 선정한 알고리즘을 설명한다. 표지 이미지를 포함한 이 책의 모든 이미지는 이 소프트웨어를 이용해 렌더링한 결과물이다. 이 이미지들을 생성하는 데 쓰인 알고리즘들도 모두 수록했다. 렌더링 시스템인 pbrt는 산문적인 시스템에 대한 묘사와 구현하는 소스코드를 혼합하는, 문학적 프로그래밍(literate programming)이라는 프로그래밍 방법론으로 개발됐다. 우리는 문학적 프로그래밍 접근법이 컴퓨터 그래픽스와 컴퓨터 과학 전반에 걸친 아이디어를 도입하는 데 가치 있는 방법이라고 믿는다. 흔히 알고리즘의 세부적인 부분들은 구현하기 전에는 명확 하지 않거나 보이지 않으므로, 실제 구현된 코드를 읽는 것은 알고리즘의 세부적인 부분에 대한 확실한 이해를 할 수 있는 좋은 방법이다. 피상적으로 이해한 많은 알고리즘보다 이렇게 구현된 코드를 통해 제대로 이해한 엄선된 소수의 알고리즘이 컴퓨터 그래픽스를 연구하는 데 더 큰 도움이 되리라 생각한다.
또한 실제적으로 알고리즘이 어떻게 구현되는지 명확히 함과 더불어 완전하고 비중 있는 소프트웨어 시스템의 알고리즘을 살펴보면서 중규모의 렌더링 시스템에 대한 디자인과 구현에 관한 이슈도 알아본다. 렌더링 시스템의 기본적인 추상화와 인터페이스 디자인은 구현의 우아함과 확장성에 대해 중대한 영향력을 갖고 있지만, 각각의 디자인에 대한 득과 실은 명확히 알려진 바가 없다.
pbrt와 이 책의 내용은 극 사실적 렌더링(photorealistic rendering)만을 독점적으로 다룬다. 극 사실적 렌더링은 다양하게 정의할 수 있으며, 주로 카메라로 사진을 찍은 것과 구분이 불가능한 이미지를 생성하는 작업이나, 인간 관찰자가 실제 장면을 보는 것과 같은 반응을 일으키는 작업으로 정의된다. 극 사실주의(photorealism)에 집중하는 데는 다양한 이유가 있다.
극 사실적 이미지는 영화 특수효과 업계에서 매우 중요한데, 컴퓨터가 제작한 이미지는 현실의 화면과 부드럽게 이어지게 자주 혼합되기 때문이다. 모든 이미지가 인공적으로 제작되는 엔터테인먼트에서 극 사실주의는 관객이 자신이 실제로 존재하지 않는 것을 보고 있다는 사실을 잊게 해주는 효과적인 방법이다. 마지막으로 극 사실주의는 렌더링 시스템의 결과물 품질에 대한 합리적으로 잘 정의된 평가 방법을 제공한다.
우리의 접근 방식으로 인해 이 책의 내용과 기술하고 있는 시스템은 최첨단 렌더링 기술을 빠짐없이 분석하진 않는다. 많은 극 사실적 렌더링의 재미있는 주제들도 소개되지 않았는 데, 우리의 소프트웨어 아키텍처에 잘 부합하지 않거나(예, 유한 요소 라디오시티 알고리즘(finite element radiosity algorithm)) 구현의 복잡도에 비해 알고리즘 설명의 교육학적 가치가 낮기 때문이다. 대신 이렇게 소개되지 않은 주제들에 대해 관심을 보이는 독자를 위해 관련 정보를 찾을 수 있는 시작점을 제공한다. 인터랙티브 렌더링(interactive rendering), 시각화(visualization), 펜과 잉크 스타일의 회화적 렌더링 등 다른 많은 렌더링의 분야들도 다루지 않고 있다. 그럼에도 불구하고 이 시스템의 많은 알고리즘과 아이디어(예, 텍스처 맵 안티에일리어싱 알고리즘(texture map antialiasing))는 다른 다양한 렌더링 스타일에 적용할 수 있다.

지은이 소개

매트 파르(Matt Pharr)

인텔(Intel)의 특급 엔지니어로, 어드밴스드 렌더링 테크놀로지(Advanced Rendering Technology) 그룹의 리드 아키텍트다. 이전에 이종 CPU+GPU 시스템에서의 그래픽에 대한 프로그래밍 모델에 대해 작업한 네옵티카(Neoptica)를 공동 창업했다. 네옵티카는 인텔이 인수했다. 네옵티카 이전에는 엔비디아(NVIDIA)의 소프트웨어 아키텍처 그룹에 있었으며, 픽사(Pixar)의 렌더링 R&D 그룹에서 일했다. 스탠포드 그래픽스 연구소에서 박사 학위를 받았으며, 팻 한라한(Pat Hanrahan) 지도하에 작업했다. 『GPU Gems 2』의 편집자이기도 하다.

그렉 험프리스(Greg Hunphreys)

엔비디아의 OptiX 레이트레이싱 팀의 멤버다. 버지니아 대학의 컴퓨터 과학과 교수였으며, 고성능과 물리 기반 컴퓨터 그래픽스에 대한 연구를 수행하고, 또한 컴퓨터 아키텍처와 시각화를 연구했다. 프린스턴에서 학사를 받고, 스탠포드 컴퓨터 과학과에서 팻 한라한의 지도하에 박사 학위를 받았다. 광선을 추적하지 않을 때 그렉은 브리지 게임 토너먼트와 뜨개질, 오토바이 라이딩을 즐긴다.

옮긴이의 말

컴퓨터로 표현할 수 있는 수많은 가상 세계에 대한 가장 직관적인 접근은 렌더링이다. 인간의 감각 중 가장 많은 뇌의 성능을 사용하고, 세계에 대한 인지에서 가장 큰 부분을 차지하는 것이 시각이기에 인간의 뇌는 시각 처리에 많은 부분을 할애하고 있다. 그렇기 때문에 컴퓨터 그래픽스는 수많은 분야에서 사용되며, 이제는 모든 미디어에 자연스럽게 녹아 들어있다.

수많은 컴퓨터 그래픽스의 연구 결과 중에서 가장 기본이 되는 핵심 이론이라고 할 수 있는 것이 레이트레이싱을 통한 빛 반사의 시뮬레이션이다. 알고리즘의 엄청난 비용은 수많은 최적화와 비용 대비 퀄리티 향상을 위한 연구 결과로 인해, 이제는 실시간 렌더링에서도 상당히 유사한 퀄리티 수준에 이르렀다.

대학 학부 시절에는 그래픽스에 대한 관심이 없었기에 이론적인 토대가 별로 없는 상태에서 게임 그래픽스로 귀납적으로 학습하던 과정에서 GDC와 SIGGRAPH 같은 해외 컨퍼런스의 내용은 심히 흥미로웠다. 그때 지적 갈증을 해결해준 책이 바로 이 책의 초판이었으며, 이를 통해 그래픽스 분야로 유학을 가게 되었기에 이 책은 유학길에 들고 간 유일한 서적이었다. 심도 깊은 내용과 풍부한 레퍼런스는 나의 부족했던 기반 지식을 채워주기 충분했고, 고급 실시간 렌더러와 언리얼 엔진의 개발 연구 과정에서 등의 이해에도 매우 큰 도움이 됐다.

개정판에서는 전통적인 오프라인 렌더러의 기법뿐만이 아닌, 그를 응용하거나 근사해 비슷한 결과를 내는 최신 실시간 렌더러의 기술과 근래의 GPGPU까지 소개돼 있기에 이를 통해 최신 기술 동향까지 이해할 수 있다.

번역을 끝까지 진행할 수 있었던 것은 이 책에 대한 나의 존경심의 발로일 것이다. 컴퓨터 그래픽스 쪽은 아직 한글 용어가 거의 확립되지 않았기에 최대한 이해하기 쉽게 풀어보려고 했다. 이 책을 통해 좀 더 많은 사용자가 핵심 그래픽 이론에 대해 이해할 수 있기를 바란다.

옮긴이 소개

이상우

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

목차

목차
  • 1 서론
  • 1.1 문학적 프로그래밍
  • 1.1.1 색인과 상호 참조
  • 1.2 극 사실적 렌더링과 레이트레이싱 알고리즘
  • 1.2.1 카메라
  • 1.2.2 광선-물체 교차점
  • 1.2.3 빛 분포
  • 1.2.4 가시성
  • 1.2.5 표면 산란
  • 1.2.6 재귀적 레이트레이싱
  • 1.2.7 광선 전파
  • 1.3 pbrt: 시스템 개요
  • 1.3.1 실행 단계
  • 1.3.2 장면 표현
  • 1.3.3 렌더러 인터페이스와 SamplerRenderer
  • 1.3.4 주 렌더링 루프
  • 1.3.5 pbrt의 병렬화
  • 1.3.6 휘티드 레이트레이싱의 적분기
  • 1.4 이 책을 읽는 방법
  • 1.4.1 연습문제
  • 1.5 코드의 사용과 이해
  • 1.5.1 포인터 혹은 참조?
  • 1.5.2 코드 최적화
  • 1.5.3 이 책의 웹사이트
  • 1.5.4 시스템의 확장
  • 1.5.5 버그
  • __더 읽을거리
  • __연습문제

  • 2 기하 구조와 변환
  • 2.1 좌표계
  • 2.1.1 좌표계의 손 방향
  • 2.2 벡터
  • 2.2.1 연산
  • 2.2.2 크기 변경
  • 2.2.3 내적과 외적
  • 2.2.4 정규화
  • 2.2.5 한 벡터로부터의 좌표계
  • 2.3 점
  • 2.4 법선
  • 2.5 광선
  • 2.5.1 광선 미분
  • 2.6 3차원 경계 상자
  • 2.7 변환
  • 2.7.1 동차 좌표계
  • 2.7.2 기본 연산
  • 2.7.3 이동
  • 2.7.4 크기 변경
  • 2.7.5 x, y, z축 회전
  • 2.7.6 임의의 축에 대한 회전
  • 2.7.7 보는 방향 변환
  • 2.8 변환의 적용
  • 2.8.1 점
  • 2.8.2 벡터
  • 2.8.3 법선
  • 2.8.4 광선
  • 2.8.5 경계 상자
  • 2.8.6 변환의 조합
  • 2.8.7 변환과 좌표계의 손 방향
  • 2.9 애니메이션 변환
  • 2.9.1 사원수
  • 2.9.2 사원수 보간
  • 2.9.3 AnimatedTransform 구현
  • 2.10 미분 기하 구조
  • __더 읽을거리
  • __연습문제

  • 3 모양
  • 3.1 기본 모양 인터페이스
  • 3.1.1 경계
  • 3.1.2 세분화
  • 3.1.3 교차점
  • 3.1.4 잘못된 자가 교차의 회피
  • 3.1.5 음영 기하 구조
  • 3.1.6 표면 면적
  • 3.1.7 방향성
  • 3.2 구
  • 3.2.1 생성
  • 3.2.2 경계
  • 3.2.3 교차
  • 3.2.4 부분적 구
  • 3.2.5 법선 벡터의 편미분
  • 3.2.6 DifferentialGeometry 초기화
  • 3.2.7 표면 면적
  • 3.3 원기둥
  • 3.3.1 생성
  • 3.3.2 경계
  • 3.3.3 교차
  • 3.3.4 부분 원기둥
  • 3.3.5 표면 면적
  • 3.4 원반
  • 3.4.1 생성
  • 3.4.2 경계
  • 3.4.3 교차
  • 3.4.4 표면 면적
  • 3.5 다른 이차 곡면
  • 3.5.1 원뿔
  • 3.5.2 쌍곡면
  • 3.5.3 포물면
  • 3.6 삼각형과 메시
  • 3.6.1 삼각형
  • 3.6.2 삼각형 교차점
  • 3.6.3 표면 면적
  • 3.6.4 음영 기하 구조
  • 3.7 세분 표면
  • 3.7.1 메시 표현
  • 3.7.2 경계
  • 3.7.3 세분화
  • __더 읽을거리
  • __연습문제

  • 4 프리미티브와 교차 가속
  • 4.1 프리미티브 인터페이스와 기하학적 프리미티브
  • 4.1.1 기하학적 프리미티브
  • 4.1.2 TransformedPrimitive 물체 인스턴싱과 애니메이션 프리미티브
  • 4.2 집합체
  • 4.2.1 광선-상자 교차
  • 4.3 격자 가속기
  • 4.3.1 생성
  • 4.3.2 횡단
  • 4.4 경계 볼륨 계층
  • 4.4.1 BVH 생성
  • 4.4.2 표면 면적 휴리스틱
  • 4.4.3 횡단을 위한 간편한 BVH
  • 4.4.4 횡단
  • 4.5 KD 트리 가속기
  • 4.5.1 트리 표현
  • 4.5.2 트리 생성
  • 4.5.3 횡단
  • 4.6 집합체 디버깅
  • 4.6.1 집합체의 버그 찾기
  • 4.6.2 집합체의 버그 수정
  • 4.6.3 집합체 성능 버그
  • __더 읽을거리
  • __연습문제

  • 5 색과 방사 분석
  • 5.1 분광 표현
  • 5.1.1 Spectrum 형
  • 5.1.2 CoefficientSpectrum 구현
  • 5.2 SampledSpectrum 클래스
  • 5.2.1 XYZ 색
  • 5.2.2 RGB 색
  • 5.3 RGBSpectrum 구현
  • 5.4 기본 방사 분석
  • 5.4.1 기본 양
  • 5.4.2 입사와 방출 방사 함수
  • 5.4.3 휘도와 측광
  • 5.5 방사 측정 적분
  • 5.5.1 투영된 입체각에 대한 적분
  • 5.5.2 구좌표에 대한 적분
  • 5.5.3 면적에 대한 적분
  • 5.6 표면 반사
  • 5.6.1 BRDF
  • 5.6.2 BSSRDF
  • __더 읽을거리
  • __연습문제

  • 6 카메라 모델
  • 6.1 카메라 모델
  • 6.1.1 카메라 좌표 공간
  • 6.2 투영 카메라 모델
  • 6.2.1 정사영 카메라
  • 6.2.2 원근 카메라
  • 6.2.3 피사계 심도
  • 6.3 환경 카메라
  • __더 읽을거리
  • __연습문제

  • 7 표본 추출과 재구성
  • 7.1 표본화 정리
  • 7.1.1 주파수 영역과 퓨리에 변환
  • 7.1.2 이상적인 표본화와 재구성
  • 7.1.3 에일리어싱
  • 7.1.4 안티에일리어싱 기술
  • 7.1.5 이미지 합성에 활용
  • 7.1.6 렌더링에서 에일리어싱의 근원
  • 7.1.7 픽셀에 대한 이해
  • 7.2 이미지 표본 인터페이스
  • 7.2.1 표본 표현과 할당
  • 7.3 층별 표본화
  • 7.4 저불일치 표본화
  • 7.4.1 불일치의 정의
  • 7.4.2 햄머슬리와 핼톤 연속
  • 7.4.3 (0,2)-연속
  • 7.4.4 저불일치 표본기
  • 7.5 최고-후보 표본 패턴
  • 7.6 적응적 표본화
  • 7.7 이미지 재구성
  • 7.7.1 필터 함수
  • 7.8 필름과 이미지화 파이프라인
  • 7.8.1 필름 인터페이스
  • 7.8.2 이미지 필름
  • __더 읽을거리
  • __연습문제

  • 8 반사 모델
  • 8.1 기본 인터페이스
  • 8.1.1 반사
  • 8.1.2 BRDF → BTDF 어댑터
  • 8.1.3 BxDF 크기 변환 어댑터
  • 8.2 거울 반사와 투과
  • 8.2.1 프레넬 반사
  • 8.2.2 거울 반사
  • 8.2.3 반사광 투과
  • 8.3 램버트 반사
  • 8.4 미세면 모델
  • 8.4.1 오렌-네이어 확산 반사
  • 8.4.2 토랜스-스패로우 모델
  • 8.4.3 블린 미세면 분포
  • 8.4.4 비등방성 미세면 모델
  • 8.5 프레넬 입사 효과
  • 8.6 측정된 BRDF
  • 8.6.1 비균일 등방성 측정 BRDF
  • 8.6.2 균일 반각 형식
  • __더 읽을거리
  • __연습문제

  • 9 재질
  • 9.1 BSDF
  • 9.1.1 BSDF 메모리 관리
  • 9.2 재질 인터페이스와 구현
  • 9.2.1 무광 재질
  • 9.2.2 플라스틱 재질
  • 9.2.3 혼합 재질
  • 9.2.4 측정 재질
  • 9.2.5 추가적인 재질
  • 9.3 범프 매핑
  • __더 읽을거리
  • __연습문제

  • 10 텍스처 함수 필터링
  • 10.1 표본화와 안티에일리어싱
  • 10.1.1 텍스처 표본율 찾기
  • 10.1.2 텍스처 함수 필터링
  • 10.1.3 거울 반사와 투과를 위한 광선 차분
  • 10.2 텍스처 좌표 생성
  • 10.2.1 2D (u, v) 매핑
  • 10.2.2 구면 매핑
  • 10.2.3 원통 매핑
  • 10.2.4 평면 매핑
  • 10.2.5 3D 매핑
  • 10.3 텍스처 인터페이스와 기본 텍스처
  • 10.3.1 상수 텍스처
  • 10.3.2 텍스처 크기 변화
  • 10.3.3 텍스처 혼합
  • 10.3.4 이중선형 보간
  • 10.4 이미지 텍스처
  • 10.4.1 텍스처 캐싱
  • 10.4.2 MIP 맵
  • 10.4.3 등방성 삼각 필터
  • 10.4.4 타원형 가중 평균
  • 10.5 입체와 절차적 텍스처링
  • 10.5.1 UV 텍스처
  • 10.5.2 체커보드
  • 10.5.3 입체 체커보드
  • 10.6 잡음
  • 10.6.1 펄린 잡음
  • 10.6.2 임의의 물방울무늬
  • 10.6.3 잡음 관용구와 분광 합성
  • 10.6.4 울퉁불퉁하고 주름진 텍스처
  • 10.6.5 풍랑
  • 10.6.6 대리석
  • __더 읽을거리
  • __연습문제

  • 11 입체 산란
  • 11.1 입체 산란 과정
  • 11.1.1 흡수
  • 11.1.2 방출
  • 11.1.3 외산란과 흡광
  • 11.1.4 내산란
  • 11.2 위상 함수
  • 11.3 입체 인터페이스와 동일 매질
  • 11.3.1 동질 입체
  • 11.4 변화하는 밀도 입체
  • 11.4.1 3D 격자
  • 11.4.2 지수 밀도
  • 11.5 입체 집합체
  • 11.6 BSSRDF
  • 11.6.1 표면 밑 산란 재질
  • __추가 도서 목록
  • __연습문제

  • 12 광원
  • 12.1 빛 인터페이스
  • 12.1.1 시야 시험
  • 12.2 점광원
  • 12.2.1 스포트라이트
  • 12.2.2 텍스처 투영 빛
  • 12.2.3 각광도계 표 빛
  • 12.3 원거리 광
  • 12.4 영역 광
  • 12.5 무한 영역 광
  • __더 읽을거리
  • __연습문제

  • 13 몬테카를로 적분 I: 기본 개념
  • 13.1 배경 지식과 확률의 검토
  • 13.1.1 연속 임의의 변수
  • 13.1.2 기댓값과 분산
  • 13.2 몬테카를로 추정기
  • 13.3 임의의 변수의 기본 표본화
  • 13.3.1 역 방식
  • 13.3.2 배제 방식
  • 13.4 메트로폴리스 표본화
  • 13.4.1 기본 알고리즘
  • 13.4.2 변형 선택 전략
  • 13.4.3 초기 편향
  • 13.4.4 메트로폴리스 표본화로 적분 예측
  • 13.4.5 예: 1차원 설정
  • 13.5 분포 사이에서 변환
  • 13.5.1 다중 차원에서 변환
  • 13.5.2 예: 극좌표계
  • 13.5.3 예: 구좌표계
  • 13.6 다차원 변환의 2D 표본화
  • 13.6.1 예: 반구의 균일 표본화
  • 13.6.2 예: 단위 원반의 표본화
  • 13.6.3 예: 코사인 가중 반구 표본화
  • 13.6.4 예: 삼각형 표본화
  • 13.6.5 예: 부분 상수 2D 분포
  • __더 읽을거리
  • __연습문제

  • 14 몬테카를로 적분 II: 효율 개선
  • 14.1 러시안 룰렛과 분리
  • 14.1.1 분리
  • 14.2 신중한 표본 배치
  • 14.2.1 계층 표본화
  • 14.2.2 의사 몬테카를로
  • 14.2.3 표본 뒤틀림과 왜곡
  • 14.3 편향
  • 14.4 중요성 표본화
  • 14.4.1 다중 중요도 표본화
  • 14.5 표본화 반사 함수
  • 14.5.1 블린 미세 표면 분포 표본화
  • 14.5.2 비등방성 미세 표면 모델의 표본화
  • 14.5.3 FresnelBlend 표본화
  • 14.5.4 광택 반사와 투과
  • 14.5.5 응용: 반사 예측
  • 14.5.6 BSDF 표본화
  • 14.6 광원 표본화
  • 14.6.1 기본 인터페이스
  • 14.6.2 특이점이 있는 빛
  • 14.6.3 영역 광
  • 14.6.4 SHAPESET 표본화
  • 14.6.5 무한 영역 광
  • 14.7 입체 산란
  • 14.7.1 상 함수의 표본화
  • 14.7.2 광학적 두께의 계산
  • __더 읽을거리
  • __연습문제

  • 15 빛 전송 I: 표면 반사
  • 15.1 직접 광
  • 15.1.1 직접 광 적분의 예측
  • 15.2 빛 전송 방정식
  • 15.2.1 기본 유도
  • 15.2.2 LTE에로의 분석 해법
  • 15.2.3 LTE의 표면 형
  • 15.2.4 경로에 대한 적분
  • 15.2.5 피적분 함수에서의 델타 분포
  • 15.2.6 피적분 함수의 분할
  • 15.2.7 측정 방정식과 중요도
  • 15.3 경로 추적
  • 15.3.1 개요
  • 15.3.2 경로 표본화
  • 15.3.3 점진적 경로 생성
  • 15.3.4 구현
  • 15.3.5 양방향 경로 추적
  • 15.4 순간 전역 조명
  • 15.4.1 가상 광원 생성
  • 15.4.2 가상 광원으로 렌더링
  • 15.5 방사 조도 캐싱
  • 15.5.1 방사 조도 캐시로 렌더링
  • 15.5.2 검색과 보간
  • 15.5.3 새로운 값 추가
  • 15.6 입자 추적과 광자 매핑
  • 15.6.1 입자 추적을 위한 이론적 기반
  • 15.6.2 광자 적분기
  • 15.6.3 광자 맵의 생성
  • 15.6.4 광자 맵의 사용
  • 15.6.5 광자 보간과 밀도 예측
  • 15.7 메트로폴리스 빛 전송
  • 15.7.1 표본 표현
  • 15.7.2 변이
  • 15.7.3 경로 생성
  • 15.7.4 경로 기여
  • 15.7.5 MetropolisRenderer 구현
  • 15.7.6 렌더링
  • __더 읽을거리
  • __연습문제

  • 16 빛 전송 II: 입체 렌더링
  • 16.1 전송 방정식
  • 16.2 입체 적분 인터페이스
  • 16.3 방출 전용 적분기
  • 16.4 단일 산란 적분기
  • 16.5 표면 밑 산란
  • 16.5.1 표본점의 푸아송 분포
  • 16.5.2 표면 점 8진 트리의 생성
  • 16.5.3 양극 확산 근사
  • 16.5.4 계층적 적분으로 렌더링
  • 16.5.5 산란 특성의 설정
  • __더 읽을거리
  • __연습문제

  • 17 빛 전송 III: 사전 계산 빛 전송
  • 17.1 기저 함수: 이론
  • 17.1.1 부분 상수 기저
  • 17.1.2 기저로의 투영
  • 17.1.3 정규 직교 기저 함수
  • 17.2 구면 조화
  • 17.2.1 효율적인 계산
  • 17.2.2 광원 투영
  • 17.2.3 입사 방사 함수의 투영
  • 17.2.4 물결 감소
  • 17.2.5 회전
  • 17.3 방사 탐색기
  • 17.3.1 방사 탐색기의 생성
  • 17.3.2 방사 탐색기의 사용
  • 17.4 사전 계산한 확산 전송
  • 17.5 사전 계산된 광택 전송
  • 17.5.1 전송 행렬
  • 17.5.2 BSDF 행렬
  • 17.5.3 GlossyPRTIntegrator 구현
  • __더 읽을거리
  • __연습문제

  • 18 회고와 미래
  • 18.1 디자인 회고
  • 18.1.1 추상성과 효율성
  • 18.1.2 대안 디자인: 삼각형 전용
  • 18.1.3 증가된 장면 복잡도
  • 18.2 처리량 프로세서
  • 18.2.1 미래
  • 18.2.2 추가 자료
  • 18.3 결론

  • 부록 A 다용도 함수
  • A.1 주 인클루드 파일
  • A.2 이미지 파일 입력과 출력
  • A.3 사용자 인터페이스
  • A.4 탐색기와 통계
  • A.5 메모리 관리
  • A.6 수학적 루틴
  • A.7 8진 트리
  • A.8 kd 트리
  • A.9 병렬화
  • __더 읽을거리
  • __연습문제

  • 부록 B 장면 설명 인터페이스
  • B.1 매개변수 집합
  • B.2 초기화와 렌더링 옵션
  • B.3 장면 정의
  • B.4 새로운 객체 구현의 추가
  • __더 읽을거리
  • __연습문제

  • 부록 C 코드 조각 찾아보기
  • 부록 D 클래스와 멤버 찾아보기
  • 부록 E 다양한 식별자 찾아보기

도서 오류 신고

도서 오류 신고

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

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

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