3D 그래픽의 혁명 Geforce 3! ELSA GLADIAC 920 [2]

중앙일보

입력

Geforce 3에서 많은 사람들이 관심을 끈 것은 DirectX의 성능을 최대한 이끌어 내주는 D3D Pure Hardware라는 렌더링 파이프 라인을 구현할 수 있게 한 여러 가지 최신 기술이다. 사실 스펙 면으로는 Geforce 2 Ultra와 큰 차이가 없다고 말할 수 있는 Geforce 3에 이렇게 큰 관심을 가지게 된 이유는 무엇일까? 지금부터 Geforce 3의 신기술에 대해 자세히 설명해보기로 한다.

Infinite Effects : nfiniteFX programmability

nfiniteFX는 Geforce 3의 핵심 기술이라고도 말할 수 있는 엔진이다. 기존 Geforce 2에서 사용되던 T&L 엔진에 3D 그래픽 프로그래머들을 위한 애니메이션 엔진과 Effect 엔진을 추가시켜, T&L 엔진에 비해 더 향상된 성능과 다양한 3D 특수 효과를 구현할 수 있게 한 것이다. nfiniteFX는 크게 Vertex Shader와 Pixel Shader라는 부분으로 나눌 수 있는데, 이것은 MS와 nVIDIA의 협력을 통해 Geforce 3가 nVIDIA가 DirectX 8.0에서 가장 특징적인 기술인 Vertex Shader와 Pixel Shader를 내장시킴으로써 탄생되었다. Geforce 3가 가장 DirectX의 기능을 가장 최적화 시킨 그래픽 카드라고 가장 자신 있게 이야기 할 수 있는 이유는 바로 여기에 있다.

Vertex Shader


Vertex Shader의 기술적 원리

Vertex는 정점이라는 뜻의 의미한다. 여기에서는 3D 물체를 실질적으로 구성하는 존재인 삼각형 데이터들의 코너들을 가리킨다고 할 수 있는데, Geforce 3의 Vertex Shader은 이러한 정점들의 위치를 자유자재로 변환하여, 물체의 움직임, 모양을 변환시킬 수 있는 기능을 가지고 있다. 또한 색상 값을 변경하거나 텍스쳐 좌표를 변경하여 물체의 질감 효과를 줄 수 있어 3D 그래픽 프로그래머들에게 Martix palette skinning, Blending, Morphing 등의 다양하고 뛰어난 퀄리티의 3D 그래픽을 표현할 수 있게 해준다.


Vertex Shader를 이용하여 표현한 Matrix Palette Skinning

그런데 놀라운 점은 이러한 다양한 3D 그래픽의 구현에 따른 시스템의 부하가 놀랄만큼 적다는 사실이다. 기존의 Geforce 2에서 사용되었던 Hardware T&L 엔진이 CPU에 연산을 의지하여 3D 그래픽의 구현에 있어 막대한 시스템 부하를 가져왔던 것과는 달리, 3D 그래픽의 구현을 GPU의 연산을 이용하는 Shader라는 작은 프로그램으로 제어하여 최대한 CPU의 부하를 줄이면서 제어할 수 있다. 따라서 Vertex Shader 기능을 사용하면 전체적인 3D 그래픽의 구현 속도도 빨라질 수 있다는 장점이 생긴다.

주름이나 그림자 처리 같은 좀 더 세밀한 표현이 가능하다.

하지만 Vertex Shader에서 실행될 수 있는 프로그램은 선형의 구조라서 중간에 다른 프로그램이 실행될 수 없고, 특정 크기(128개의 명령어들)로 제한된다는 것은 단점이라고 할 수 있으나 Vertex Shader라는 것이 뛰어난 3D 그래픽의 구현에 한 몫을 담당한다는 것은 분명한 사실이다.

Pixel Shader


Pixel Shader의 기술적 원리

Pixel이라는 말은 그래픽에 관심이 있으신 분들이라면 들어보았을 만한 단어일 것이니 설명은 생략하기로 한다. Pixel Shader는 GeForce2의 NSR (NVIDIA Shader Rasterizer)의 발전 형태로 생각하시면 된다. 4개의 Pixel Shader들로 구성되어 있으며 3D 어플리케이션이 동작할 때 각 픽셀에 맞는 색상을 적용한 텍스쳐 데이터를 가지고 색상과 광원 정보들을 조합하여 화면에 보이는 픽셀을 만들어 주는 것이 주 임무이다.


그림자 매핑 (Shadow Mapping)

사실 Pixel Shader는 Geforce 2 GTS에서부터 구현되어 있던 기능이기 때문에 중요하지 않은 기능이라고 생각될지도 모르지만, Geforce 2와 큰 차이점이 있다. Pixel Shader가 클럭 한 주기 동안 오직 두 개의 텍셀만 꺼내올 수 있는 것은 Geforce 2와 동일하지만, 반면에 2 클럭 주기로 움직이는 동안, 하나의 패스(pass)에 4개의 텍스쳐를 허용한다. 이는 2개의 pass를 사용해야 하는 GeForce2와 중요한 차이점이다. 즉 최대 Fill Rate를 수행하는 데 상당한 영향을 줄 수 있는 메모리 대역폭의 필요 수치에서 두 배의 차이를 보인다는 것이다. Geforce 3의 Pixel Shader를 통해 좀 더 실제와 같은 입체감을 느끼게 하기 위한 그림자 매핑(Shadow Mapping), 광원에 기초한 등방성 양방향 반사율 분포 함수(Isotropic Bi-Directional Reflectance Distribution Function: BRDF) 등의 다양한 기능들을 제공한다. 앞에서 설명한 Vertex Shader과 Pixel Shader가 결합하면 그야말로 완벽에 가까운 3D 그래픽의 구현이 가능할 것으로 생각된다.

Blinn Bump Mapping


Blinn Bump Mapping을 이용하면 이러한 표현이 가능하다.

Bump Mapping은 법선 지도라는 텍스쳐를 이용하여 표면의 각 픽셀에 새로운 법선을 부여하여, 좀 더 실제적으로 보이는 굴곡있는 표면을 픽셀에 만드는 것이다. Pixel Shader에서 구현할 수 있는 기술 중 하나이며, 이미 Geforce 2에는 dot3 Bump Mapping이란 Bump Mapping 기술을 지원했었다. 하지만 Geforce 2의 NSR은 굴곡이 있는 표면에 반사 효과 등의 좀 더 사실감 있는 표현을 구현해주는 cubic environment map를 적용할 수 있는 프로그래밍 기법을 지원하지 않는 한계가 있었다. 그러한 약점을 보완하기 위해 Geforce 3의 Pixel Shader는 사실적인 반사를 표현하는 범프 매핑 기술을 구현하였으며, 이것이 바로 Blinn bump mapping이라는 것이다. 이론적인 원리는 다음과 같다. Vertex Shader가 per-vertex dot3 setup를 수행하고 범프 맵(bump map)의 변화에 사용되는 기초 벡터를 Pixel Shader에 공급하면, Pixel Shader는 법선 벡터와 반사 효과를 만들기 위해 cubic environment map에서 필요한 시점 벡터(eye vector)에 반대 방향의 반사 벡터(reflection vector)를 발생시키는 것, 이것이 바로 Blinn bump mapping의 정체이다.

이중민
자료제공:pcbee(http://www.pcbee.co.kr)

ADVERTISEMENT
ADVERTISEMENT