셰이더란 참 이상한 기술입니다. 분명히 프로그래머가 알아볼 수 있는 언어로 구성되어 있고, 그 안의 프로세스도 지극히 하드코어한 공학적 내용입니다. 그렇지만 그런 수학적 프로그래밍 결과물이 예술이 되어 나오는, 공학과 예술이 조합된 신기한 세계라고 할 수 있습니다. 그 때문에 3D 게임을 제작할 때, 그래픽 아티스트가 셰이더에 대해 민감하게 관심을 가지고 접근하고 싶어하는 것도 이상한 일이 아닐 것입니다. 자신들의 작품이 더욱 아름답고 예술적으로 보이고 싶어하는 것은 아티스트의 본능에 가까운 것이니까요. 아티스트였던 저 역시 그랬습니다.
그 후에 제가 처음 셰이더라는 것에 관심을 가지고 프로그래머가 보는 책을 뒤적거렸을 때가 생각납니다. 지금은 물론 많이 바뀌었지만, 그 때에는 더더욱 셰이더라는 것은 엄연한 프로그래머의 분야였으며(외국은 어땠을지 잘 모르겠지만) 그래픽 아티스트는 범접할 수 없는 미지의 세계였었습니다. 물론 그 당시 그래픽 아티스트가 볼 수 있는 셰이더와 관련된 책은 전무했으며, 프로그래머를 위한 기초 셰이더 책도 기껏해야 한두 권 정도였습니다. 그리고 놀랍게도 지금도 크게 변하지 않았습니다. 여전히 많은 책에서 기초 셰이더는 3D 프로그래밍에 소속된 한 단원에 불가한 경우가 대부분이며, 그나마도 빈약하거나, 그래픽 아티스트를 전혀 배려하지 않은 철저하게 3D 프로그래머를 위해 씌여진 책이었습니다. 그래서 저와 같이 셰이더에 관심을 가지게 된 그래픽 아티스트는 전혀 알아듣지도 못하는 C++와 DirectX 프레임워크를 공부하며, 어떻게든 셰이더에 근접해 가기 위해 발버둥을 치다가 많은 좌절을 겪곤 했었습니다. 그리고 그때 정말 아쉬웠던 것이, 그래픽 아티스트를 조금이라도 배려한 셰이더 책이 한 권쯤 있으면 좋겠다는 것이었습니다. 셰이더는 사실 DirectX의 프레임워크를 제외하고, 구현이나 프로그래밍 수준은 무척 간단합니다. 그래픽 아티스트도 조금만 관심을 가지면, 적어도 어느 정도까지는 크게 어렵지 않게 접근할 수 있도록 만들어 놓은 언어입니다. 그렇지만 아티스트의 그 마음과 수준을 이해하고 고려하면서, 이런 전문적인 내용을 쉽게 설명할 수 있는 책을 집필할 수 있는 사람이 없었다는 것이 문제였습니다. 그리고 드디어, 프로그래머와 그래픽 아티스트를 모두 친절하게 고려한 셰이더 책이 처음으로 세상에 나오게 되었습니다. 이 책을 집필한 Pope Kim님은 캐나다에서 일류 그래픽 프로그래머로 오랜 기간 근무하면서, 대학에서 강의하면서 준비하고 정리한 지식을 이 책에 정리해 놓았습니다. 프로그래머와 그래픽 아티스트 모두를 고려한 내용을 말이지요!
다른 책에서는 한 번에 묶어서 설명하기 때문에 그래픽 아티스트도 어쩔 수 없이 같이 배워야 했던 DirectX 프레임워크를, 이 책에서는 선택사항으로 단원마다 분리해서 필요없는 그래픽 아티스트는 건너뛸 수 있도록 배려하고 있습니다. 게다가 어려운 수학과 이론은 건너뛰고, 바로 실습해 볼 수 있도록 친절하게 준비되어 있는 모습이 마치 그래픽 아티스트를 위해 씌여진 책으로 보일 정도라고 할 수 있습니다. 그렇다고 프로그래머에게 부족한 책도 아닙니다. 셰이더를 처음 시작하는 프로그래머가 셰이더에 대한 기본 개념을 실습을 통해 쉽게 잡을 수 있도록 구성되어 있기 때문에, 이 책은 그래픽 아티스트나 프로그래머 모두 만족할 수 있는 '실용적인' 책이라고 말할 수 있을 것입니다. 부디 이 책이 많은 사람에게 읽히고, 그들의 '즐거운 결과물'을 완성하는 데 밑거름이 되기를 바라는 바입니다.
정종필 (Ndoors Tecnical Art Director)
제가 게임 프로그래밍을 시작할 때는 셰이더로 멋을 내는 시절이 아니었습니다. 그러다 보니 제가 처음 셰이더를 공부할 때는 맨 땅에 헤딩하며 새롭게 공부해야만 했고, 그때 참고할 수 있었던 건 영어로 된 원서나 웹사이트였습니다. 주변에서 공부하는 걸 봐도 역시나 영어로 된 원서 위주였고, 한글로 된 책은 대부분 번역서였습니다. 심지어 번역이 매끄럽지 않아 혼란을 주기도 했습니다. 그리고 셰이더라는 게 초보자들보다는 어느 정도 그래픽 프로그래밍을 할 수 있는 사람이 사용하다보니 책 또한 그런 사람을 대상으로 적혀있었습니다. 물론 그 시절(몇 년 안됐지만^^)에는 그게 정상이었고, 그래도 되는 시절이었습니다. 저 역시 그렇게 공부를 하던 중 너무 어렵기도 하고, 개인적인 사정으로 인해 공부를 중단하였습니다.
최근 몇 년 사이 3D 그래픽 프로그래밍에서 셰이더는 필수가 되었고, 이제는 초보 프로그래머도, 학생도 공부해야만 하는 필수 요소로 떠올랐습니다. 하지만 저와 같은 초보자나 학생이 참고할 수 있는 책은 여전히 찾기 힘들며, 제가 이전에 공부하던 때와 비교해 봐도 셰이더 관련 서적은 별로 변화가 없습니다. 지금과 같은 때에 이 책이 출간된 것은 저와 같은 사람에게는 큰 행운이라고 생각됩니다. 그저 C++, DirectX 정도만 살짝 익힌 초보자도 이해할 수 있을 정도로 쉽게 구성되어 있으며(실제로 검수에 참여한 한 분은 DirectX도 잘 모르시는 테크니컬 아티스트였다고 합니다) 빛과 공간에 대한 설명과 기초적인 단어의 설명부터, 실제 게임에 사용되는 기법들을 차근차근 설명하고 있습니다. 다시 말해 초보자가 혼자서 셰이더를 익힐 수도 있고, 이 책을 통해 익힌 셰이더 기술을 바로 게임에 활용할 수도 있으며, 새로운 기법으로 응용하는 것 또한 가능할 정도의 근본적인 설명과 실용적인 설명이 공존(모순같지만 사실입니다)합니다. 그동안 원서, 어려운 책, 이해되지 않는 책을 보며 힘들었던 저와 같은 셰이더를 공부하는 분들을 생각하면, 이런 책이 지금이라도 나오게 된 것에 대해 다행스럽게 생각하며, 추천사를 핑계로 남들보다 먼저 『셰이더 프로그래밍 입문』을 접하게 된 것에 대해 감사하게 생각합니다. 이제 막 게임을 만들려고 하는 게임 프로그래머 지망생과, 우리 게임에 조금 더 멋진 셰이더 효과를 넣기 위해 에너지 음료와 함께 밤낮으로 고민하고 있는 프로그래머 여러분에게 진심으로 이 책을 추천합니다.
이상대 (NCSoft 블레이드 앤 소울 팀 클라이언트 프로그래머)