작가의 말
DirectX 11이 나온 지 상당히 시간이 흘렀음에도 3D 개발자들에게 그다지 많은 관심을 받지 못하는 점은 안타깝다. 게임 산업에서 PC라는 플랫폼의 비중이 나날이 높아지고, 3세대 Xbox 게임 콘솔이 발매된 현재, DirectX 11로의 완전한 전환은 시간문제인 것으로 보인다.
이 책에서는 DirectX 11이 제공하는 유용하면서도 새로운 3D 기법들을 설명한다. 기본적인 라이팅(lighting)에서부터 화면 공간 효과까지 아우르는 예제들을 통해 컴퓨트 셰이더(Compute Shaders), UAV, 테셀레이션(Tessellation) 등 새로운 DirectX 11 기능들을 익힐 수 있다.
HLSL 프로그래밍과 함께라면 게임과 시뮬레이션에서 사용되는 다양한 DirectX 11 API 렌더링 기법들을 살펴볼 수 있다. -저자의 말
3D 궁극적으로 지향해야 하는 목표는 언제나 한결같았다. 3D 프로그램으로 현실과의 차이가 최대한 적도록 시뮬레이션하는 것이다. 과거 고정 파이프라인을 쓰던 시절에는 현실적인 한계를 뛰어넘기가 불가능에 가까웠으나, 셰이더란 개념이 등장한 이후 어느 정도 의도한 바를 구현할 수 있다. 즉, 3D 프로그래머의 목표는 이러한 기술을 활용해 가능한 자원 내에서 최대한 아름다우며 현실적인 그래픽을 뽑아내는 것이다.
존 카멕부터 시작된 응용 3D 프로그램의 영역은 해가 지나며 급격히 발전해왔다. 계속해서 성능이 곱절로 뛰는 그래픽 카드가 나왔고, 기능 또한 풍부해져 게이머들은 나날이 향상되는 그래픽에 환호성을 보냈다. 그때에 비하면 최근의 그래픽 하드웨어는 기술적 정체를 겪고 있다. 게다가 그래픽이 좋은 게임에 대한 게이머들의 눈높이도 높아져 현실적인 그래픽을 추구하는 게임은 높은 개발비로 인해 점점 줄어들고 있는 실정이다. 이런 답보 상태를 넘어서기 위해 아예 버텍스, 지모에트리, 프래그먼트 셰이더 구조를 프로그래머블하게 만들려는 시도가 있기는 하지만, 전망은 매우 불투명하다. 그런데 이를 바꿔 말하면 중소규모의 게임을 만들기 위해서는 하드웨어의 성능을 전부 끌어다 쓸 필요가 없다는 뜻이다. 즉 현실적으로 우리는 주어진 한도 내에서 최대한 완벽한 화면을 구현하는 것을 목표로 삼으면 된다. 이 책이 도움을 줄 수 있다면 바로 이 부분이다.
이 책은 독자들이 DirectX에 대한 기본적인 지식은 갖고 있다고 가정한다. 즉 모델과 텍스처를 불러와 그래픽 카드에 밀어 넣는 방법을 알고 있는 중급 이상의 프로그래머들을 대상으로 쓰여졌다. 초심자에게는 HLSL 기초 서적을 참고한 후 읽어보는 것을 추천한다. 아예 경험이 없다면 상용 3D 엔진을 사용할 것을 추천한다. 자체 엔진을 개발해 사용하는 경우가 점점 줄어들고 있기 때문이다. 그러나 이 책에서 설명하는 내용이 불필요하다는 것은 아니다. 다른 3D 엔진을 통해 개발할 경우 HLSL보다 더 쉽게 개념을 적용해볼
수 있다는 뜻이다. 이 책이 HLSL을 사용함에 있어 고급 단계로 진입하고자 하는 독자들에게 도움이 되기를 바란다. -옮긴이의 말
출판사 서평
★ 이 책에서 다루는 내용 ★
■ 포워드, 디퍼드 라이팅 등 다양한 상황의 광원 구현 방법
■ 셰도우 맵 기능을 활용한 다이내믹 라이팅 표현
■ 블룸, 톤 매핑 등 다양한 종류의 포스트프로세싱 기법
■ 데칼, 강우 등의 3D 엘리먼트 표현
■ 다양한 화면 공간 기법을 통한 시각 효과 향상
★ 이 책의 대상 독자 ★
이 책은 Direct3D에 대한 기본적인 지식이 있고, 고급 기법을 통해 추가로 시각적인 효과를 구현하기 원하는 사람들을 대상으로 한다. 또한 HLSL의 고급 사용자 중 DirectX 9에서 DirectX 11로 옮겨가고 싶어 하는 독자에게도 매우 유용한 지식을 제공할 것이다.
★ 이 책의 구성 ★
1장, 포워드 라이팅에서는 조명 공식을 살펴보고, 포워드 라이팅(Forward Lighting) 기법을 통해 주요 광원을 구현하는 방법을 알아본다.
2장, 디퍼드 셰이딩에서는 1장에서 배운 광원 계산을 복잡한 씬(scene) 구현과 분리해 최적화하는 방법을 알아본다.
3장, 셰도우 매핑에서는 앞에서 살펴본 광원 계산에 그림자 구현을 더해 좀더 사실적으로 만드는 방법을 알아본다.
4장, 포스트프로세싱에서는 여러 가지 2D 필터링 기법을 통해 광원의 품질을 향상시키는 기법을 알아본다.
5장, 화면 공간 효과에서는 2장의 ‘디퍼드 셰이딩’에 추가적인 효과를 화면 공간 계산으로써 구현하고, 이를 통해 광원 계산을 확장하는 방법을 알아본다.
6장, 환경 효과에서는 렌더링한 씬에 날씨 등 상호작용 효과를 추가해서 최종적으로 사실성을 부여하는 기법을 알아본다.