|
향상된 쉐이더 처리 능력
DirectX 10에 이어 등장한 DirectX 10.1은 앞서도 언급하였듯이
DirectX 10의 마이너업그레이드 버전에 속하는 것으로 이전 버전의 DirectX 10의 하드웨어적인 가능성, 즉
프로그래밍의 향상과 호환성, 이미지 품질 향상, 정밀도 향상 등을 다루게 된다.
[DirectX 10.1의 쉐이더 향상 및 정밀도 향상]
대표적인 것으로 쉐이더 버전의 업그레이드와 텍스처 처리에서 이미지 품질 향상과 함께 성능
향상을 모두 고려한다. 쉐이더 버전은 이전의 Shader Model 4.0에서 Shader Model 4.1로 업그레이드
되어 처리 성능 및 효과의 향상, 그리고 프로그래밍의 유연성을 높인다.
DirectX 9에서 쉐이더 (Shader)를 처리하기 위해 Vertex와 Pixel
Shader를 분리해 놓고 각각의 파이프라인 수를 증가시켜 다양한 텍스처 데이터 처리나 Shader 효과 처리를 빠르게
처리할 수 있도록 만들어져 왔다. 그러나, DirectX 10에서는 Shader Model 4.0으로 변화되고
Vertex와 Pixel로 나뉘었던 것에 통합 쉐이더 아키텍처를 적용하여 새로운 Geometry Shader까지 통합하여
처리 성능 개선과 효과를 향상시킬 수 있도록 변화되었다.
Shader Model 4.1에서는 이를 더욱 발전시키고 있는데 아래는 기존 Shader
Model 4.0에서 지원하는 것들로 DirectX 10.1의 Shader Model 4.1 역시 이들이 지원하는 것을
기본으로 하여 향상을 가져오고 있다. Shader Model 4.1의 경우 아래에 나온 것과 같은 명령어 등의 수가
공개되진 않았지만, Shader Model 4.0을 기반으로 더 많은 명령어들이 추가될 것으로 보여진다.
Shader Model 4.1로 처리 능력 증대
[Shader Model 4.0 프로그래밍 및 명령어 리소스]
DirectX 10에 포함된 Shader Model
4.0에서는 이전 버전들보다 더 많은 명렁어인 6만 4천기 이상, 텍스처 크기도 4048x4048에서 8096x8096으로
증가되어 높은 디테일의 오브젝트를 생성할 수 있다. Shader Model 4.1에서 역시 자세한 공개가 이루어지고 있지는
않지만, 4.0보다 처리 능력이 증가되었을 것으로 알려지고 있는 상태다.
또, DirectX 9에서는 싱글 패스를 통해 4개의 렌더링이 가능했던 것이
DirectX 10에서는 8개로 증대되었는데 DirectX 10.1에서는 멀티렌더링으로 생성된 결과물을 합하는 블랜딩
과정의 처리 능력을 높이기 위해 이 블랜딩 과정을 독립적으로 설정할 수 있는 방법을 도입한다. (Separate Blend
Modes per-MRT) 이 방법을 통해 복잡한 3D화면의 효율적인 렌더링을 통해 성능 향상을 얻을 수 있게 된다.
블랜딩 부분에서 FP16과
FP32 적용은 같지만, DirectX 10이 8bit 정수연산 (Int8) 연산만 지원하는 것에서 8bit 정수연산에
추가로 16bit 정수연산 (Int16)을 지원함으로써 지오메트리 연산 성능을 개선할 수 있도록 개선된다. (블랜딩은
64bit 정수 픽셀 포맷 필요)
Texture Filtering 처리 부분에서도 DirectX 9와 10이 FP16
Filtering
연산을 처리하여 왔다면, DirectX 10.1은 FP32 Filtering 연산을 통해 HDR 렌더링 등에서 품질 향상을 가져올 수
있게 되었다. 또한, 아직까지 정확한 개선 내용이 알려지고 있지는 않지만, 렌더링 파이프라인 전체의 정밀도 역시
향상되었다. (이전까지 옵션 사항이었던 필터링 처리에서 128bit Floating Point Texture Format이
기본 적용된다. 그에 따라 품질은 높아지나 성능 저하가 발생한다.)
하지만, 32bit
Floating Point (FP32) Filtering 연산을 적용한 다는 것은 품질을 높일 수 있지만, 성능의 저하가 따르는 문제가 있다.
이런 부분들은 고성능 그래픽 카드들의 성능과 이하 그래픽 카드들의 전반적인 성능이 향상되면 성능 저하 문제는 점차 개선되어질 것으로 보여진다.
또, 이런 연산 능력 개선에 따른 트랜지스터 증가로 인한 다이 크기나 발열 등의 문제는 공정 개선 등을 통해 해결될 수
있을 것으로 보여지며, AMD 의 DirectX 10.1 그래픽 카드는 55nm 공정이 적용되어 이런 문제점들을 해결할 수
있을 것으로 보여진다.
여기서 살펴본 DirectX 10에 대해 궁금한 부분들은 이전 보드나라의 기사인
코드명 G80, DirectX 10, nVIDIA GeForce 8800 / 도대체 어떤게 바뀐거야?를
참조하도록 하자.
DirectX 10.1의 Cubemap 배열 생성 및 멀티코어 성능 향상
[DirectX 10의 Texture Array를 통한 Cubemap 생성]
[DirectX 10.1은 Cubemap에 배열 생성]
기존 DirectX 10에서 다수의 텍스처를 배열 구조로 처리하는 방식을 도입하고 있는데
DirectX 10.1에서는 이에 추가로 텍스처를 배열 구조로 하여 생성된 Cubemap 자체의 배열 구조를 정의할 수
있도록 개선되고 있다. Cubemap 자체의 배열 구조를 정의함으로써 성능 향상을 얻을 수 있게 된다.
또한, DirectX 10.1은 멀티코어 즉, 현재의 듀얼 및 쿼드 코어 프로세서
시스템에서 향상된 성능을 얻을 수 있도록 개선되는데 그리기와 렌더링 과정에서의 반사와 굴절을 표현하는 과정에서의 API
호출을 줄임으로써 성능 향상을 얻을 수 있도록 변경된다.
AMD에서 언급된 DirectX 10.1 지원
또한, AMD의 DirectX 10.1 지원 그래픽 카드들에서 지원하는 기능들을 포함한
문서가 유출되었는데 여기에는 DirectX 10.1 지원 부분에 대한 내용들이 포함되어 있다. 여기에서 소개하고
있는 내용들은 DirectX 10.1에서 지원하고 있는 내용들이다.
대표적으로 LOD Instruction과 Global illumination,
Gather4의 3가지를 들 수 있다.
LOD Instruction은 새로운 쉐이더 명령어셋으로 LOD 즉, Level Of
Detail의 약자로 거리에 따라 모델링 된 데이터를 선택적으로 사용하는 기법으로 렌더링 물체와 화면 사이의 거리에 따라
폴리곤의 개수가 다른 모델링 데이터를 선택적으로 렌더링 하는 기법이다. 이는 하나의 물체를 표현할 때 거리가 멀면 적은
수의 폴리곤이 적용된 모델링 데이터를 사용하여 실제 렌더링 되는 폴리곤의 수를 줄여 렌더링 속도를 증가시킬 수 있게 된다.
이렇게 되면 멀리 떨어진 많은 개체를 적은 폴리곤 수로 모델링하여 사용하므로 화질 저하 없이 빠르게 화면에 나타낼 수 있고
가까운 개체는 많은 수의 폴리곤을 사용하여 현실감 있게 표현이 가능해진다. 화면의 위치를 고려하면 폴리곤 수를 가변적으로
조절할 수 있으므로 화질의 저하는 없으면서 빠른 속도까지 얻을 수 있게 된다.
또, Global illumination은 전역조명(광원)으로 해석될 수 있는데 이 부분은
DirectX에서 사용하는 지오메트리 쉐이더를 통한 Cube map 배열 생성 부분에서 이미지 품질을 증가시키기 위해
사용하는 것이다.
[Ray Tracing 화면 (출처 :
Henrik Wann Jensen 부교수의 웹 게시 이미지)]
[Global illumination 화면] [(출처 :
Henrik Wann Jensen 부교수의 웹 게시 이미지)]
레이트레이싱 (Ray Tracing)은 삼차원 그래픽에 사용되는 기법 중의 하나로
가상광원에서 나온 빛이 여러 물체의 표면에 반사되는 경로를 추적하여 각 물체의 모양을 형성하는 것을 말한다.
전역조명 (Global illumination)은 광원을 통해 사물을 직접 나타내는
방식과 배경에 광원을 비추어 사물을 부각해주는 방식이 많이 사용된다. 이 사이트에도 나타나고 있지만, Global
illumination을 적용하면 이미지 표현이나 품질에서 앞설 수는 있으나 그에 따르는 연산이 늘어나기 때문에 성능
부분에서는 저하가 일어날 수 있다.
전역조명 (Global illumination)을 적용하면 다수의 Cubemap을 싱글 패스 렌더링으로
읽고 쓸 수 있기 때문에 실시간으로 복잡한 움직임과 역동적인 화면, 직사광선, 반영 및 반사, 고품질 광택 등을 표현할 수 있게
된다.
또, 복잡한 쉐이더 처리에서의 성능 향상을 위해 Vertex Shader 입출력 처리
부분 역시 기존 DirectX 10에서는 쉐이더 당 128bit 16개의 처리가 가능하였던 것과 비교하여 DirectX
10.1에서는 128bit 32개의 두 배의 처리가 가능해져 쉐이더의 처리 능력을 향상시킬 수 있게 된다.
Gather4는 컴퓨터 어플리케이션의 흐름을 향상시키기 위한 기능으로 필터링되지 않은
텍스처 블럭 값의 2x2 블럭을 싱글 bilinear 필터 텍스처에 위치하도록 패치하여 검색하도록 하는 방식으로 처리
성능을 개선할 수 있게 된다.
DirectX 10.1은 Shader Model 4.1로의 업그레이드 및 블랜딩 및
필터링 연산, 버텍스 쉐이더 처리, 파이프라인 처리 성능 개선, 멀티코어 CPU 등을 통한 성능 향상 등을 다루고 있다.
이를 통해 기존보다 향상된 쉐이더 처리 능력을 제공하고 텍스처 부분에서도
Cubemap 배열 등을 통한 연산 성능 및 이미지 품질 향상을 꾀하고 있다. |