구글 태그

2006년 3월 15일 수요일

물리 엔진

다음 글은 월간 게이머즈 2005년 9월호에 실렸던 내용입니다..

8월호에 들어간 Shader에 대한 내용은 자료도 많은데다 이미 알고 있던 내용을 알아보기 쉽도록 정리하는 수준이라 별 어려움이 없었지만, 물리엔진은 직접 써본 일도 없고 해서 꽤 난감했습니다.. 결국 공개 물리 엔진인 ODE와 상용인 NovodeX의 평가판을 받아다 돌려보고서야 대충 원고의 틀을 잡을 수 있었습니다.. 나름대로 꽤 노력해서 쓴 글인데, 개발자 대상의 잡지가 아니어서인지 아무런 피드백이 없더군요.. 그리고 이 글을 끝으로 '미래시대' 코너 자체가 없어졌습니다;; -_-;;

미래시대 (월간 게이머즈 2005년 9월호 수록 내용)
글 / 토끼털 두른 셋쇼마루님

Physics Engine
[물리 엔진]

게임 내의 오브젝트를 대상으로, 질량ㆍ속도ㆍ마찰ㆍ공기 저항 등의 수치를 이용하여 뉴턴 역학 모델을 시뮬레이트하는 프로그램을 통칭한다.

물리 엔진이란 무엇인가
최근의 게임계 기술에 관심이 있는 사람이라면, 근래에 들어 각광받기 시작한 '물리 엔진'이라는 고유명사를 들어본 일이 있을 것이다. 『하프라이프 2』나 『헤일로 2』에 현실적인 물리 연산을 위해 하복(Havok) 물리 엔진이 사용되었다더라는 등의 얘기를 들으며, 한번쯤은 물리 엔진이 과연 게임 내에서 어떤 기능을 하는 프로그램인지 궁금하게 여긴 사람도 있을지 모른다. 만약 이러한 궁금증을 느낀 적이 있다면, 이번 회에서 해답을 찾을 수 있을 것이다.

'물리 엔진(physics engine)'이라는 명칭을 바탕으로 생각해보면, 게임에 있어 물리 엔진이란 곧 '자연계의 물리 현상을 게임 내에서 흉내 내는(simulate) 프로그램'일 것이다. 그렇다면, 물리 엔진을 이용하여 어떤 종류의 물리 현상을 시뮬레이트하는 것일까?

CPU의 연산 능력에는 한계가 있으므로, 모든 물리 현상을 게임 내에서 완벽하게 구현하거나 범지구적인 거대한 자연계의 현상까지 시뮬레이트하는 것은 물론 불가능하다. 앞서 정의한대로, 물리 엔진은 다양한 변수에 기초하여 게임 내의 오브젝트의 운동에 뉴턴 역학(Newtonian mechanics; 주 1)을 적용하여 시뮬레이트하는 프로그램이다. 즉, 현재의 물리 엔진은 실시간으로 '게임 내'라는 국지적인 범위 안에서 뉴턴 역학 모델을 시뮬레이트하는 것이 주목적이다. 물리학의 발전에 따라 뉴턴 역학과 상대성 역학은 '고전 역학'이 되었고, 현재의 물리학에서는 양자역학(quantum mechanics)에 따라 복잡한 물리 현상을 설명하고 있지만, 우리 눈에 보이고 우리 주변의 생활 속에 있는 사물들의 운동은 일반적인 뉴턴 역학으로도 충분히 설명할 수 있다. 물리 엔진은 이러한 뉴턴 역학을 실시간으로 계산하여, 게임 내에서 다양한 오브젝트에 가해지는 힘과 운동 상태와의 관계를 계산하는 프로그램인 것이다.

하나의 게임 내에는 게임 논리, 렌더링 엔진(rendering engine), 네트워킹, 물리 엔진, 사용자 입력 처리 등의 수많은 프로그램이 결합되어 있다. 물리 엔진은 이중 게임 내부에 논리적으로 뉴턴 역학 공간을 구성하고, 이 공간 안에서 일어나는 물리 현상을 시뮬레이트하는 일을 하게 된다. 즉 물리 엔진은 논리적으로만 공간을 구성하기 때문에 물리 엔진이 연산한 움직임을 화면에 그려주는 작업은 다른 부분에서 맡아서 하게 되는데, 이 부분이 우리가 흔히 그래픽 엔진이라고 부르는 렌더링 엔진이 된다.

물리 엔진이 제공하는 기능
최근의 물리 엔진이 내세우는 가장 핵심적인 기능은 강체(剛體 rigid body)의 동역학(dynamics)과 충돌 검출(collision detection)이다. 이외에 부수적으로 입자(particle)나 파동(wave), 옷감(cloth), 래그돌(ragdoll) 등의 시뮬레이션을 지원하기도 한다. 이제부터 이들 각각에 대하여 알아보자.

강체의 동역학은 물리 엔진의 근간을 이루는 가장 중요한 학문이다. 강체란 외부에서 어떠한 힘을 가해도 모양과 크기가 절대로 변하지 않는 물체를 이르는 말로, 현실에서는 존재하지 않는 이상적인 물체이지만 물리 엔진 상의 시뮬레이션에서는 연산의 편이를 위해 각종 탈것이나 인체 등의 오브젝트를 모두 강체로 가정한다. 동역학이란 힘과 운동 상태와의 관계를 다루는 역학으로, 이를 응용하여 게임 내에서 등장하는 물체에 힘이 가해지는 현상이나 충돌 등을 시뮬레이트하여 다시 게임 내의 물체들의 상태에 반영하게 된다(주 2).

강체의 동역학을 시뮬레이트하기 위해, 물리 엔진은 강체ㆍ조인트ㆍ충돌ㆍ마찰 등을 구현하여 게임 제작자들이 사용하기 쉬운 형태로 제공한다. 게임 제작자는 물리 엔진이 지원하는 이러한 기능을 이용하여 흔들리는 다리, 밧줄, 로봇 팔, 탈것들, 인체 등의 다양한 오브젝트가 가진 물리적인 특성을 게임 내에서 효과적으로 구현할 수 있는 것이다.


그림 1 - 물리 엔진을 이용한 시뮬레이션

충돌 검출은 모든 게임이 필요로 하는 기본적인 기능이다. 물리 엔진이 논리적으로 공간을 구성하고 그 공간 안에서 일어나는 현상을 시뮬레이트하는 역할을 담당하기 때문에, 충돌 검출은 물리 엔진에서 도맡게 된다. 예를 들어 레이싱 게임에서 게이머의 차량이 경쟁자의 차량을 들이받아 차량이 파손되거나, 비행 시뮬레이션 게임에서 게이머의 기체가 지면에 추락하는 등의 상황에서는 강체의 기본적인 충돌 외에 다른 종류의 시뮬레이션이 필요하다. 이런 경우에 적절한 처리를 하기 위해 충돌 검출이 필요하게 된다.

입자ㆍ파동ㆍ옷감ㆍ래그돌 등은 모두 강체가 아닌 탓에 이들의 시뮬레이션은 강체의 동역학이라는 물리 엔진의 기본적인 개념에서는 벗어나 있다고 볼 수 있지만, 게임 상에서 현실감 있(어 보이)는 물리 현상을 표현하기 위해 물리 엔진에서 부수적으로 지원하는 기능들이다. 예를 들어, 입자는 눈이나 비, 불꽃, 화산재 등이 흩뿌려지는 현상을 나타내는데 사용되고, 파동은 물결, 옷감은 말 그대로 바람에 옷이나 깃발이 날리는 움직임 등을 나타내는데 필요하다.

래그돌(꼭두각시) 시뮬레이션은 최근의 FPS(First-person Shooter; 1인칭 슈팅) 장르에서 많이 사용되는 기능이다. 예를 들어 캐릭터가 총탄에 맞아 쓰러지는 경우, 넘어지는 동작을 모션 캡처 등의 전통적인 방법으로 제작할 경우 동작이 몇 가지로 한정될 수밖에 없어 게임을 장시간 플레이하는 게이머에게 어색한 느낌을 주게 된다. 이때 물리 엔진의 래그돌 시뮬레이션을 이용하면 게임 내의 상황과 조건에 따라 수많은 종류의 쓰러지는 동작을 실시간으로 연산하여 표현하게 되므로, 총탄에 맞아 쓰러질 때마다 다른 동작을 연출하는 캐릭터를 만들어낼 수 있는 것이다.


그림 2 - 래그돌 시뮬레이션의 예

물리 엔진의 작동 과정
예를 들어, 레이싱 게임을 만든다고 가정해 보자. 레이싱 게임 내에는 주행 과정에 영향을 미치는 요소로서 자동차ㆍ트랙ㆍ벽면ㆍ바람 등이 있고, 이외에 주행 과정에 크게 영향을 미치지는 않지만 현실적인 시각 표현을 위해 빠질 수 없는 요소인 배경 묘사가 있다. 이 모든 요소는 게임의 현실감을 위해 최대한도로 구현되어야 하지만, 자동차와 트랙 바닥, 벽면, 바람은 주행 과정에서 물리적으로 영향을 미치는 물체이므로 물리 엔진 상에서 구현되어야 하고, 렌더링 엔진은 물리 엔진 상에 구현된 요소 중 눈에 보이지 않으므로 그릴 필요가 없는 바람을 제외한 자동차ㆍ트랙 바닥ㆍ벽면과 (물리 엔진 상에는 구현되지 않았지만 시각적으로 필요한) 배경을 그리는 식으로 역할을 분담하게 된다. 게임 내에서 논리적으로 이 모든 것을 구현하면서 이와 같이 역할을 구분하여, 물리 연산이 필요한 물체는 물리 엔진을 활용하고 시각적인 표현이 요구되는 부분은 렌더링 엔진을 이용하도록 구성하면 레이싱 게임의 기본적인 뼈대가 이루어진다.

물리 엔진은 타임 스탬프를 통해 PC의 성능과는 관계없이 동일한 게임 플레이를 제공한다. 게임의 논리 부분에서는 물리 엔진에서 제공하는 인터페이스를 이용하여 논리적으로 물리 공간(역학 시스템)을 구성하고, 이 공간 안에서는 임의의 주기에 따라 타임 스탬프를 받는다. 타임 스탬프는 이전의 상태에서 얼마나 시간이 흘렀는지를 나타내 주는 데이터로, 이 데이터를 받은 물리 엔진은 시간이 경과한 만큼의 시뮬레이션을 통해 역학 시스템에 오브젝트의 다음 상태 변화를 전달한다. 예를 들어 레이싱 게임에서 차량이 벽면에 부딪히는 경우, 성능이 좋은 PC에서는 0.01초마다 물리 엔진에 타임 스탬프가 넘어가게 되어 0.01초가 지난 다음의 상태로 갱신되고, 성능이 떨어지는 PC에서는 0.1초마다 타임 스탬프가 넘어가 0.1초 이후의 상태로 바로 반영되어 갱신되는 식이 된다. 이런 방식을 통해 PC의 성능에 관계없이 게임 내에서 동일한 물리 효과를 반영할 수 있는 것이다.


그림 3 - 물리 엔진이 실제 게임에서 동작하는 흐름

종전에는 게임 개발사에서 게임 논리 외에 렌더링 기능과 물리 연산 기능 등의 여러 가지 구성 요소를 모두 직접 구현해야 했지만, 이러한 구성 요소들이 전문 개발사에 의해 독립적으로 개발되면서 렌더링 엔진과 물리 엔진 등이 이와 같이 각각의 전문적인 엔진으로 대체되어, 게임 개발사에서는 게임 개발시 게임 논리의 구현에만 개발력을 집중할 수 있게 되었다. 물론 이러한 변화의 근간에는 게임의 논리 자체가 점점 더 복잡해지면서, 다른 요소는 차치하고라도 게임의 논리만을 구현하는 일조차 어려워지고 있는 개발 현장에서의 현실적인 요인이 깔려있을 것이다.

지금까지 물리 엔진의 정의와 기능, 동작 방법을 알아보았다. 앞으로 물리 엔진은 PC 및 게임 콘솔의 성능이 발전함에 따라 더욱 정교해질 것이고, 아직까지 지원되지 않는 다양한 물리 모델이 지원되어 이제껏 체험해 보지 못한 풍부한 게임 플레이를 제공해 줄 것이다(주 3).



그림 4 - 지난 7월 22일 일본 도쿄에서 있었던 '플레이스테이션 미팅 2005' 행사에서 공개된 PS3의 테크니컬 데모의 한 장면. PS3가 표현할 수 있는 물리 시뮬레이션의 예시로서, 기본적인 강체 시뮬레이션이나 충돌 검출, 오브젝트 간의 상호작용 등은 물론 포탄의 탄도, 직물, 물보라, 수면의 움직임 등 다양한 물리 계산이 한꺼번에 구현될 수 있음을 보여주고 있다

(주 1) J. C. 맥스웰의 전자기론과 함께 고전물리학의 기초를 이룬다. 뉴턴은 만유인력과 몇 가지 운동법칙을 바탕으로 수학적인 방법을 사용하여 지구를 비롯한 여러 천체의 운동을 성공적으로 기술했다. 19세기 말까지는 그 근본원리가 모든 역학현상에 적용되는 것으로 여겨졌지만, 아인슈타인이 상대성이론을 확립하면서 뉴턴 역학에서 제시된 시간공간의 절대성 개념에 근본적인 변혁을 초래하였다. 또 원자분자의 현상이 분명해짐에 따라 그 적용범위도 제한되어, 오늘날 물체의 속도가 빛의 속도에 가까울 경우에는 상대성이론을, 미시적 세계에서는 양자역학을 각각 대신 적용하고 있다. 현재는 상대성역학에 상대되는 개념으로서 뉴턴의 법칙에 기초한 역학을 뉴턴 역학이라 하고, 상대성역학ㆍ뉴턴 역학 등 양자역학 이전의 역학을 고전역학이라 하기도 한다. (출처 : 네이버 백과사전)

(주 2) 물체의 운동의 시간적 변화는 물체에 작용하는 힘의 방향으로 일어나며 힘의 크기에 비례한다는 법칙을 '운동의 제 2법칙'이라 한다. 운동의 변화를 힘과 가속도로 나타내면, 'F(힘) = ma(질량 가속도)'가 된다. 즉, 물체에 힘이 작용할 때 물체는 그 힘에 비례하여 가속도를 받는다. 이때 비례상수를 질량이라 하며, 이 식을 '뉴턴의 운동방정식'이라 한다(출처 : 네이버 백과사전). 물리 엔진에서 시뮬레이션에 사용하는 각종 수식은 대부분 이 법칙에 근간을 두고 있다.

(주 3) 게임 엔진 시장에서 에픽 게임즈의 언리얼 엔진, 이드 소프트웨어의 퀘이크 엔진 등이 널리 알려져 있는 것처럼, 물리 엔진계에서는 하복 사의 하복 엔진과 AGEIA 사의 PhysX 엔진(일명 NovodeX) 등이 널리 채택되어 쓰이고 있다. 최근 SCE가 이 양대 물리엔진 제작사와 계약을 체결하고 PS3의 개발툴에 이들 엔진 라이브러리를 포함시킨다고 발표한 것은, 앞으로의 게임 제작에 있어 물리엔진의 역할과 비중이 더욱 늘어날 것임을 시사한다고 봐야 할 터이다.

2006년 3월 9일 목요일

Shader

다음 글은 월간 게이머즈 2005년 8월호에 실렸던 내용입니다..

우연찮게 게이머즈의 기술관련 컬럼에 외부 필자가 필요하다고 해서 하게 되었는데요.. 이전부터 잡지사의 원고료가 짜다는 말은 많이 들었지만, 실제로 겪어보니 정말 짜더군요;; 페이지 수로 따지니까 그런것도 있겠지만, 이런 류의 원고는 원고 작성에 필요한 참고서적 값도 안 나올듯 합니다.. 어찌됐든 기술에 문외한 일반인을 대상으로 한 컬럼이니 감안하시고, 제가 썼던 초고가 아니라 잡지사 기자분이 약간 다듬어 주신 내용이니까 읽기에 편할겁니다.. 라곤 하지만 단 2회 쓰고 잘린걸 보면 이 내용도 일반인 대상으로는 좀 어려웠을지도 모르겠네요.. ^^;;

미래시대 (월간 게이머즈 2005년 8월호 수록 내용)
글 / 토끼털 두른 셋쇼마루님 (마감날짜에 쫓겨 급조한 필자명입니다.. ㅠ_ㅠ)

Shader
[셰이더]
기존의 경직된 3차원 그래픽 파이프라인(주 1)에 유연성을 주기 위하여 만들어진, 그래픽 파이프라인 상의 프로그래밍 가능한 구성요소를 통칭한다.

3차원 그래픽 파이프라인
PC용으로 등장하는 최신 게임을 즐기려 할 때면 어김없이 등장하여 게이머의 머릿속을 어지럽히는 단어가 있으니, 그 이름 ‘셰이더’. 오늘은 이 셰이더의 정체를 파헤쳐보고, 앞으로의 발전 방향도 짚어보도록 하자.

앞서 정의한 내용에 따르면, 셰이더란 ‘기존의 경직된 3차원 그래픽 파이프라인’에 ‘유연성’을 주기 위해 만든 것이라고 했다. 그렇다면 기존의 경직된 3차원 그래픽 파이프라인이 무엇인지, 왜 경직되었다고 말하는지를 알아야 이야기를 풀어갈 수 있을 것이다.

우선, 일반적으로 3차원 그래픽 가속 하드웨어(즉 3D 그래픽 카드)에서 3차원 그래픽을 어떻게 지원하는지 살펴보자. 이 글에서는 우리가 흔히 접하는 DirectX를 기준으로 설명하도록 하겠다. 다음은 마이크로소프트에서 제공하는 DirectX 개발도구에서 발췌한 Direct3D의 그래픽 파이프라인의 개략도이다.

그림 1 - Direct3D의 그래픽 파이프라인

뭔가 알 수 없는 단어들이 잔뜩 나오는데, 우리가 이걸로 당장 3차원 게임을 개발할 것도 아니니 자세히 알 필요는 없다. 대강 이게 뭘 하는 것인가만 살펴보자.

맨 처음에 정점(vertex) 데이터와 원시(primitive) 데이터가 들어간다. 여기서 들어가는 정점 데이터와 원시 데이터가 바로 우리들이 소위 말하는 폴리곤이다. 3차원 화면 안에 들어갈 폴리곤 덩어리가 데이터로 입력되는 것이다.

그림 2 - 폴리곤은 이와 같이 점과 선으로만 구성되어 있다

테셀레이션(tessellation)이란 ‘공간분할’이라고도 하는데, 필요에 따라 다각형의 폴리곤을 삼각형으로 쪼개는 등의 작업을 한다. 이건 우리의 관심사 밖이니 그냥 넘어가도록 하겠다.

그 다음 작업은 정점 처리(vertex processing)이다. 이것은 정점의 좌표를 필요에 따라 변환하고 정점 단위의 재질 속성을 준 다음, 정점 단위의 안개를 주고 정점 단위의 광원을 처리하는 작업이다. 여기서 재질 속성과 안개와 광원은 DirectX에서 미리 지정한 몇 가지 방식을 결합하여 사용한다.

정점 처리가 끝난 폴리곤은 기하 처리를 거치게 된다. 기하 처리란 폴리곤 데이터를 화면에 표시할 수 있는 데이터로 바꾸고, 화면에 그릴 필요가 없는 부분을 빼는 등의 작업을 말한다.

이 다음에 등장하는 픽셀 처리에 앞서 텍스처 평면이 입력되는데, 화면에 입체감 입게 보이는 텍스처도 실제로는 평면이기 때문에 ‘텍스처 평면’이라고 부른다. 텍스처 샘플러는 이 텍스처를 읽어 들여 적당한 해상도로 변환하는 역할을 한다.


그림 3 - 폴리곤에 입히는 텍스처는 이와 같이 평면 이미지이다

그 다음 단계는 픽셀(주 2) 처리로서, 폴리곤과 텍스처를 결합하여 화면에 찍을 점 하나하나를 생성하는 단계라고 할 수 있다. 여기서 폴리곤과 텍스처를 결합하는 방식은 DirectX에서 미리 지정한 몇 가지 방식을 혼합하여 사용한다.

마지막에는 화면에 대한 후처리를 거쳐 생성된 그림을 화면에 뿌려주는 픽셀 렌더링을 수행하게 된다. 이 단계에서는 투명도, 깊이, 안개 등을 처리하여 최종적으로 그림을 생성하고 이를 화면에 뿌려준다.

그림 4 - 셰이더를 적용하지 않고 기존의 그래픽 파이프라인을 거쳐서 폴리곤과 텍스쳐를 결합하면 이와 같이 단정한(?) 결과를 얻을 수 있다

왜 셰이더인가
이와 같이, 기존 방식대로의 고정 그래픽 파이프라인을 사용하게 되면 결과적으로 모든 게임이 비슷비슷한 화면을 보여줄 수밖에 없게 된다. GPU의 성능이 발전함에 따라 한 화면에 그려줄 수 있는 폴리곤의 수와 텍스처의 양은 늘어만 가는데, 이러한 게임들이 화면에 보여주는 물체의 재질이나 광원은 모두 비슷비슷한 탓에 모든 게임이 비슷한 외형을 지니게 되자, 이는 표현상의 한계로 작용하게 된다. 따라서 개발자들이 고정 그래픽 파이프라인의 일부를 개발자가 만든 프로그램으로 대체할 수 있는 기능을 요구하게 되었는데, 이것이 구현된 형태가 바로 셰이더이다(주 3).

DirectX에서는 프로그래밍 가능한 정점 셰이더(programmable vertex shader)와 프로그래밍 가능한 픽셀 셰이더(programmable pixel shader)가 3차원 그래픽 파이프라인에서 개발자가 직접 개발한 코드로 대체할 수 있는 부분이 된다.

여기서 다시 3차원 그래픽 파이프라인으로 돌아가 보자. 파이프라인에 셰이더가 적용되면, 다음 그림과 같이 정점 셰이더와 픽셀 셰이더가 기존의 정점 처리와 픽셀 처리를 대신하게 된다. 실제로는 픽셀 처리 작업의 경우 2단계로 이루어져 있고, 픽셀 셰이더는 그 중에 1단계 부분만을 대체한다.

그림 5 - 셰이더가 적용된 3차원 그래픽 파이프라인

앞에서 정점 셰이더는 ‘정점의 좌표를 필요에 따라 변환하고, 정점 단위의 재질 속성을 주고, 정점 단위의 안개를 준 후, 정점 단위의 광원을 처리한다’고 말한 바 있다. 이 내용을 떠올려보면, 이 부분을 개발자가 만든 고유한 프로그램으로 대치했을 때 어떤 효과가 얻어질지 미루어 짐작할 수 있을 것이다.

예를 들면, 폴리곤으로 만들어진 사람의 모델에서 정점의 좌표를 변환하는 부분을 고쳐 관절의 꺾이는 부분을 부드럽게 해준다든가(정점 스키닝), 재질과 광원을 설정하는 부분을 고쳐 특별한 재질과 광원을 만들어 독특한 질감을 나타내는 등의 표현이 가능해지는 것이다.

고정 그래픽 파이프라인의 픽셀 처리 단계에서는 폴리곤과 텍스처를 그래픽 하드웨어가 제공하는 몇 가지 방식으로 결합하여 화면에 찍을 픽셀의 색상을 결정하게 된다. 이 단계에서 고유한 기능을 프로그램으로 구현하면, 폴리곤에 텍스처를 입히는 과정에서 그래픽 하드웨어가 제공하는 방식을 벗어난 독자적인 표현 방식을 표현해낼 수 있다. 예를 들어 평면 텍스처를 입혔는데도 텍스처가 울퉁불퉁해 보이도록 만든다던가(흔히 말하는 범프 매핑 등), 배경 이미지를 텍스처에 섞어 반사 효과를 준다던가(픽셀별 환경 매핑) 하는 기능들이 모두 픽셀 셰이더를 이용하여 구현되는 것이다.

그림 6 - 셰이더를 이용하여 엣지 글로우(edge glow) 효과를 적용한 예

그럼 왜 하필 다른 부분이 아닌 정점 처리와 픽셀 처리에만 셰이더를 적용하는 것일까? 이유는 간단하다. 다른 부분은 작업 자체가 정형화되어 있기 때문에, 프로그래머가 고유한 기능을 구현할 필요가 그다지 많지 않기 때문이다. 정점 처리와 픽셀 처리 부분을 고유한 프로그래밍으로 구현하면 화면에 나타나는 결과가 크게 달라지지만, 다른 부분에서는 그 효과가 미미하기 때문에 큰 의미가 없는 것이다.

현재의 셰이더는 용량상의 제약이 있고 명령어의 기능도 미약해서 구현하기 여간 까다롭지 않다. 하지만, PS3나 Xbox 360 등 차세대 게임기의 스펙에 의하면 화면 전체를 다양한 효과로 메우고도 남을 정도로 강력한 성능의 셰이더를 지원하고 있다. 현재의 게임에서 추구하는 그래픽은 실사와 같은 그래픽과 애니메이션풍의 그래픽, 이 두 가지 방향으로 나뉜다고 할 수 있다. 앞으로는 발전된 그래픽 하드웨어의 능력에 힘입어 이러한 두 방향의 그래픽이 더욱 향상됨은 물론이고, 우리가 예상하지 못했던 새로운 표현 기법들이 생겨날 것이다. PS3나 Xbox 360과 같은 앞으로의 하드웨어에서는, (실제 게임에 활용될지는 미지수이지만) 유화나 수채화 같은 그래픽의 실시간 구동도 가능한 수준에 이르렀다. 셰이더를 통해 앞으로 게임의 그래픽 표현이 어느 정도까지 발전할지를 지켜보는 것도 흥미로운 일이 될 것이다(주 4).

(주 1) 3차원 그래픽 가속 하드웨어에서 데이터를 처리하는 흐름을 나타내는 그림이 마치 수도관의 모습과 비슷하다 하여 붙여진 명칭.

(주 2) pixel. 화면을 구성하는 하나하나의 점을 의미하는 단어로, ‘화면 구성요소(picture element)’의 약자이다. 화소(畵素)라고도 한다.

(주 3) 최초로 셰이더를 탑재한 DirectX는 2000년 11월에 발표된 버전 8.0이지만, 그보다 훨씬 이전인 1999년 3월 출시된 SCE의 PS2에는 이미 CPU인 이모션 엔진 내에서 마이크로 코드(micro code) 프로그래밍을 통해 셰이더와 동일한 개념을 하드웨어적으로 지원하고 있었다. 이는 PS2가 당시로서는 개념적으로 한 세대 앞선 획기적인 하드웨어였음을 입증하는 대목이다.

(주 4) 스펙 상으로 보아, PS3에 포함되는 GPU인 RSX(Reality Synthesizer)는 엔비디아의 차세대 GPU인 G70을 90nm 공정으로 생산하고 성능을 향상시킨 제품으로 추정된다. 이는 PS2 당시 이모션 엔진을 통해 PC용 그래픽 하드웨어보다 한발 앞서 셰이더 개념을 도입했던 것과는 달리, PS3의 경우 적어도 그래픽 분야에서는 새로운 개념보다는 PC와 동시대의 GPU를 사용하는 식의 타협을 택했음을 의미하기도 한다. PS3와 Xbox 360의 GPU 성능은, 하드웨어 구조가 달라 정확히 비교할 수 없겠지만 성능상의 차이가 크지는 않다는 것이 일반적인 견해이므로, 차세대기들이 출시되는 시점에서는 이미 최신의 고급 그래픽 카드를 사용하는 PC와 그래픽으로 큰 격차가 나지 않는 상황이 될 것으로 보인다. 차세대기에서는 순수하게 게임 그 자체로 승부해야 하는 상황이 오게 된다는 뜻일지도……