옮긴이의 글을 좋아서 읽는 사람은 아무도 없다! 이 옮긴이 말을 쓰기 위해서 주변에 있는 훌륭한 게임 개발자의 조언을 구했더니 태반은 머리말은 읽어봤어도 옮긴이 말은 읽어본 적이 없었고, 나머지도 그저 책을 앞에서부터 순서대로 읽는 습관이 있었을 뿐, 특별히 좋아서 읽는 것은 아니었다. 아무래도 옮긴이의 글이 갖는 위치가 애매모호해서 그런 것이 아닐까 싶다. 머리말이 있는데 구태여 옮긴이가 쓴 글까지 읽어볼 이유가 뭐란 말인가. 그럼에도 불구하고 이 글을 읽는 독자들을 위해, 되도록 머리말에 없는 이야기를 해주려고 한다.
이 책은 게임과 데모라는 부제를 달고 있지만 구체적으로는 그래픽 프로그래밍을 다룬 책이다. 책의 두께가 그리 두껍지 않음에도 이 책에서는 DirectX의 기초, 2D 그래픽스, 3D 그래픽스, 프로그램 최적화, 골격 애니메이션, 정점 셰이더와 픽셀 셰이더 프로그래밍, 게임 엔진의 얼개에 이르기까지 다양한 주제를 다루고 있다. 이 책에서 다룬 주제들은 사실상 각각의 주제를 몇 권으로 나눠서 다시 쓸 수 있을 정도로 방대한 내용이다. 이렇게 다양한 주제를 다룸에도 본문에서 '위의 주제는 이 책의 범위를 벗어나므로 생략한다'는 구문이 있다는 것이 신기할 정도이다.
이렇게 다양한 주제를 다루려면 수박 겉핥기식이 될 것이라는 우려가 드는 것은 당연한 일인데, 그럼에도 불구하고 각 주제를 실용적으로 잘 다뤘다는 것이 이 책의 미덕이다. 이 책을 읽은 독자라면 이 책에서 다룬 주제에 대해 최소한 어느 정도의 감은 잡을 수 있을 것이고, 기초가 탄탄한 독자라면 그동안 공부했던 것들이 코드로는 어떻게 표현되는가를 알게 될 것이다. 아직 기초가 부실한 독자라면, 여기서 다룬 주제를 더 빨리 배우는 방법은 아마 찾기 힘들 것이다. 초보자라면 이 책을 읽으면서 자신에게 부족한 부분을 찾아내어, 그에 대한 개설서를 읽어보는 것도 좋을 것이다.
데모에 대한 저자의 애정과 전문가로서의 경험이 이 책 전반에 배어 있다. 유용한 실제 코드를 보면서 일일이 짚어가는 방식은 바로 해커들이 프로그래밍을 익힌 과정과 동일하다. 친절한 설명을 통해, Visual C++에서 DirectX는커녕 외부 라이브러리를 한 번도 사용해보지 않은 사람이나, 3D 그래픽의 기본적인 이론인 행렬 변환을 모르는 사람조차도 빠르고 쉽게 코드를 이해하고 직접 작성해볼 수 있다. 또한 대학교재를 통해 이론적인 공부만 했던 사람은 알기 힘든 초보적인 실수를 피하는 법이나 얼핏 보기에 간단해 보이지만 사실은 쉽지 않은 최적화 비법도 책의 곳곳에 숨겨져 있다.
책에서 소개한 주제들은 그래픽 프로그래밍뿐만 아니라 범용적인 프로그래밍에도 적용할 수 있는 내용으로 이뤄져 있지만, 이 모든 것은 그래픽 데모 프로그래밍에 초점이 맞춰져 있다. 프로그래밍으로 만들 수 있는 다양한 2D 이펙트와 3D 이펙트를 소개한 4장과 5장에서 그런 특징이 두드러진다. 전형적인 프로그래밍 서적에 조그마한 싫증이라도 느꼈다면, 이 책에서 소개한 간단하면서도 흥미로운 기법들을 탐구하면서 즐거운 시간을 보낼 수 있을 것이다. 필자는 독자들이 데모 프로그래밍의 세계로 들어오기를 간절히 바라고 있지만, 게임 프로그래밍에 입문하고 싶어하는 독자라면 누구나 이 책의 효과를 볼 수 있을 것이다. 현재 국내의 게임업계에서도 대부분의 업체가 DirectX를 이용해서 3D 그래픽을 구현하고 있기 때문이다.
이 책의 초벌번역을 마치고 나서 그 일부분을, 게임서적 전문번역모임의 일원으로 많은 책을 번역하시고 유명 게임업체의 이사로 재직하고 계시는 분께 감수를 부탁드렸다. 그분의 경험을 바탕으로 수많은 조언을 해주셨는데, 번역투라고 지적을 받은 것 중에는 옮긴이 스스로가 사용한 문학적인 표현도 섞여 있어 뼈아팠다. 그러한 조언을 밑거름 삼아 다시 재검토하며 여러 번의 수정을 거쳤고, 어떤 부분은 문장이나 문단 전체를 역자 스스로의 표현으로 다시 쓰기도 했다. 이런 과정이 좋은 품질의 번역서를 내는 데 도움이 됐기를 바란다.
옮긴이가 공부를 하면서 읽은 번역서에서 실망했던 경험을 기억하면서, 번역어를 택하는 과정에 고심을 거듭했다. 번역서에서 사용했던 용어가 개발 현장에서 사용하는 용어와 동떨어지는 것을 피하고 최대한 실무 개발자가 위화감 없이 받아들일 수 있는 번역을 하려고 했다. 수많은 프로그래밍 서적과 게임 서적을 훌륭하게 번역하신 모 유명번역가의 조언도 구했는데, 개발 현장에서는 원어 그대로 사용하던 외래어를 우리말로 순화하려는 노력에 감명을 받았다.
번역을 하고 또 번역서를 읽는 데 걸림돌 중 하나는 국내에서 통일되지 않은 전문용어가 아닐까 싶다. 번역 과정을 거치며 원어에서는 같은 단어가 여러 개의 다른 단어로 번역되거나, 다른 용어가 하나의 단어로 번역되는 경우는 매우 흔한 일이다. 그로 인한 혼란을 최대한 피하기 위해서, 우리말로 순화한 용어는 이미 수많은 책을 번역하신 유명 번역가님의 용례를 최대한 따르고, 원어나 흔히 통용되는 용어를 괄호나 역주에 표기했다. 순화한 용어가 오히려 이해를 방해하는 경우에는 과감히 외래어를 사용했다. 용어를 외래어 표기법에 맞춰 표기하다 보니 실무상에서 사용되는 용어와는 약간의 거리가 생기는 경우도 있었지만 역주를 참고하면 무리 없이 이해하리라 믿는다. 번역어를 통일하기 위한 컴퓨터학계나 번역전문가들의 공동체가 생겨서 우후죽순처럼 생겨나는 컴퓨터 전문용어에 가장 적합한 우리말 표준을 정해줬으면 하는 바람이다.
--- 옮긴이의 말