사용자 삽입 이미지

제가 학교다니던 시절만 해도   (그러니까, 10년 전이죠) Phong shading은 앞으로 당분간은 오프라인 처리만 가능할 것이라고 보곤 했었습니다. 그 당시만 하더라도 PC, 게임 콘솔을 막론하고 3D가속칩셋은 Gouraud shading만 지원했기 때문이죠. 그런데 지금은, 요새는 퐁 셰이딩은 per-pixel lighting으로 더 많이 알려져서 그냥 아무나 다 쓰는 기술이 되었고, 퐁 셰이딩을 넘어 노멀맵 적용이 일반적인 추세가 되고 있습니다. (여기서 격세지감)

몇달전 저희 편집장이 GDC 강연을 듣고 왔습니다. 레이트레이싱이 앞으로 대세가 될거라는 내용이었다더군요. 앞으로 대세는 몰라도 많이 쓰이게 되긴 할겁니다. 벌써 퐁 셰이딩도 대세가 되었으니까요. 단, 처리를 위한 비용이 지금까지의 방법보다 더 리소스를 적게 먹거나 그 비용을 무시할 수 있을 정도로 하드웨어가 발전한 다음이 되겠죠. 당연한 겁니다. 게임은 상품이고, 상품은 당연히 수지가 맞아야 만드는 겁니다. 고급기술이야 얼마든지 써먹을 수 있지만, 개발 단가가 높은데 팔리지는 않는다면 어느 누가 상품을 만들겠습니까.

프로그래머들이 몰라서 고급 기술을 안써먹는게 아닙니다. 지금 각광받는 기술들은 모두 오래 전에 정립된 이론들입니다. 레이트레이싱은 70년대쯤에 제시된 아이디어죠. (찾아보니 1979년, 딱 30년째군요) 다만 비용의 문제 때문에 쓰이지 않았을 뿐이지 다 알려져 있던 것들이죠. 물론, 문제는 몰라서 못쓰는 프로그래머가 있을 경우입니다. 물론 모를 수 있습니다. 이바닥은 워낙 빨리 변하기 때문에 이걸 따라잡으려면 가랑이가 찢어질 지도 모르죠. 하지만 세상이 너무 많이 바뀌기 전에 캐치는 해야 쓸만한 프로그래머가 되죠.

문제는 새롭게 대두되는 기술에 프로그래머가 얼마나 빨리 적응하는가입니다. 사실 적응의 문제는 익숙함의 문제입니다. "아, 그거 전에 들어봤어" 하고 "어? 그게 뭔데?"라는 반응의 차이는 적응 속도의 차이로 바로 이어집니다. 프로그래머에게 꾸준한 공부를 강조하는 이유가 그겁니다. 뭐 주워들은게 하나라도 많은 사람은 적응 속도가 차이가 있거든요.

프로그래머가 무한히 많은 지식을 머릿속에 담아둘 수는 없습니다. 그래서 저는 되도록이면 오래전에 정립된, 기초지식과 기초 이론을 공부하는 쪽을 선호합니다. 주변에도 그렇게 추천하구요. 멀티쓰레딩 프로그래밍이 요즘 각광받지만, 최신 기사를 읽는 것보다는 그냥 익숙한 공룡책을 읽었던 기억이 훨씬 도움이 많이 됩니다. 그래픽스 기술이 눈부실정도로 발달하지만 그래픽스 수업시간에 봤던 책이 없었다면 잘 이해를 못하고 넘어갔을 겁니다. 돌이켜 보면, 책에 있었는데 아직 쓰이지 않은 거는 대부분 비용의 문제 때문에 아직 실용성이 없었다는 증거입니다. 기술이 발달해서 쓸모가 없어진 내용은 책에서도 사라지거든요. 책에 있다는 것은 효용은 있지만 비용이 크다는 것의 반증이죠.

그렇다고 아무책이나, 그러니까 '깡통들을 위한 XXX'같은 책을 보면 별 도움이 안됩니다. 얘네들은 현재 많이 쓰이고 있는 (즉, 한물 갈) 기술만을 대상으로 하거든요. 그보다는 교과서를 보십시오. 고유 등록상표(DirectX나, OpenMP나, Windows나.. 등등)에 대한 책보다는 이들의 기초가 되는 이론을 보십시오. 읽기는 어려워도 확실히 머릿속에 무언가가 남게 됩니다. 쓸만한 프로그래머가 되고자 한다면 기초지식을 쌓는 편이 훨씬 도움이 됩니다. 그래야 개념프로그래머로 인정받습니다.
기초지식이야말로 미래의 기술입니다.


  • Gouraud shading (고로 셰이딩) - 프랑스 컴퓨터과학자 앙리 고로가 제안한 표면 음영 계산법입니다. 표면을 구성하는 각 점의 노멀벡터로부터 음영을 광원으로부터 따로 계산하고 각 점 사이의 영역은 선형 보간법(linear interpolation)으로 채워넣습니다. 현존하는 모든 PC용 그래픽 가속 칩셋의 기본 고정파이프라인 동작입니다.
  • Phong shading (퐁 셰이딩) - 베트남계 컴퓨터그래픽스 연구자 뷔 툉 퐁이 제안한 음영 계산법입니다. 퐁 셰이딩에서는 각 점 사이의 영역에 대해서 노멀벡터를 선형보간하여 광원을 각각 계산하여 색상을 채워넣습니다. 요즘 per-pixel lighting이라는 용어가 나오는데, 퐁 셰이딩을 말하는 겁니다.
  • Normal mapping (노멀 매핑) - 텍스쳐에서 현재 그리는 픽셀에 대응되는 텍셀의 RGB값을 각각 (x,y,z)좌표로 해석하여 노멀벡터로 삼고 광원의 영향을 계산하는 기법입니다.
  • Phong reflection model (퐁의 반사모형) - 뷔 툉 퐁이 제안한 물체 표면에서 반사되는 색상의 근사값을 계산하는 공식. 물체의 표면에서 반사되는 색상을 환경색(ambient), 난반사색(diffuse), 정반사색(specular)으로 구분하고 각각의 색을 모든 광원에 대해 구하여 합성한 최종 색상을 물체 표면의 색상으로 정의합니다. 퐁 셰이딩과 혼동되어서는 안되죠.
  • Ray Tracing (광선 추적) - 물체 표면의 색상을 구하기 위해 광선이 어떤 경로를 거쳐 굴절/반사의 과정을 거쳐왔는가를 계산하는 알고리듬입니다. 이를 계산하기 위해 시점으로부터 화면의 각 점을 향해 뻗어나가는 광선이 어디에서 부딪히는가를 계산하죠. 광선이 물체와 부딪혔다면, 부딪힌 위치에서 굴절된 성분과 반사된 성분으로 갈라서 다시 각각의 광선을 추적합니다. 광선이 어느것에도 부딪히지 않게되거나 광원과 부딪힐 때에 광선 추적이 끝나지만, 계산 속도를 올리기 위해서 트리가 일정 레벨 이상 커지거나, 혹은 광선의 세기가 일정 수준 이하로 떨어지면 추적을 중단하는 방법을 씁니다. 퐁의 반사모형은 이 과정을 통해 나오는 결과의 근사값을 구하는 방법이라고 생각하셔도 됩니다.

'칼럼' 카테고리의 다른 글

전자 보드게임의 시대가 온다.  (4) 2008.06.05
이명박정부와 게임업계  (0) 2008.04.17
신입프로그래머에게 물어보는 것  (5) 2008.03.21

+ Recent posts