002.jpg

 

기술 설명회에서 DSR과 MFAA에 대해 설명한 Tom Petersen(Distinguished Engineer, NVIDIA)

 

2세대 맥스웰을 채용한 GM204 코어의 지포스는 몇가지 새로운 기능이 추가됐습니다. GM204의 특수한 요소를 효과적으로 활용한 것부터 케플러 세대의 지포스에서도 쓸 수 있는 것까지 다양합니다.

 

여기에선 GM204 코어를 쓰는 지포스 GTX 980, 지포스 GTX 970에 도입된 새로운 기술, Dynamic Super Resolution(DSR)과 Multi Frame Anti-Aliasing(MFAA)에 대해 해설하고자 합니다.

 

 

DSR. 디스플레이 해상도를 넘는 고해상도로 렌더링한 후 다운 샘플링

 

NVIDIA가 2014년 9월 미국 몬타레이에서 실시한 기술 설명회. 가장 먼저 소개한 것이 DSR이었습니다.

 

003.jpg

 

DSR이 어떤 것인지를 설명하기 전에 우선 DSR의 탄생 경위를 설명할 필요가 있습니다.

PS3와 Xbox 360 세대의 멀티 플랫폼 대응 타이틀을 PC 버전으로 컨버전해 고급형 GPU에서 실행하면, 1920×1080 해상도와 모든 옵션을 가장 높음으로 올려도 부하가 크지 않고 프레임 레이트는 60fps를 넘어서는 경우가 많았습니다.

 

풀 HD 해상도에 풀옵으로 60fps 이상을 유지할 수 있다면 되는 것 아닌가라고 생각할 수 있겠으나, 게이머 입장에서 그래픽 렌더링을 한 후에도 GPU 성능이 남아돈다면 그걸 활용해 영상 품질을 더 높이는 것도 좋은 일일 것입니다.

 

그런 발상에서 나온 것이 NVIDIA의 DSR로, 구체적으로는 디스플레이 해상도보다 높은 해상도로 렌더링하고, 그 결과를 다운 샘플링한다는 GPU 활용법입니다.

 

다운 샘플링은 슈퍼 샘플링이라고도 부르는데, 이것은 NVIDIA에게 인수되기 전에 3dfx가 Full Screen Anti-Aliasing을 내세우면서 주장했던 것과 같은 발상이라 할 수 있겠습니다.

 

그럼 DSR에서 어떤 효과를 얻을 수 있을까요. 주요 장점은 2가지입니다. 하나는 풀처럼 매우 가느다란 폴리곤을 쓰는 모델을 정확하게 그려낼 수 있다는 것입니다.

 

현재 GPU의 레이아웃 시스템에선 폴리곤이 라스터라이즈(폴리곤이 픽셀로 분해)될 때 해당 폴리곤이 픽셀화되는지 여부는 샘플 포인트와 폴리곤이 겹치는지를 보고 판단합니다. 그리고 풀처럼 가느다란 모델은 샘플 포인트와 겹쳐지지 않는 경우가 있습니다.

 

이 경우 실제 렌더링 결과에선 가느다란 모델이 프레임마다 점선과 실선을 오가며 그려지는 상황이 불규칙하게 반복될 수 있습니다.

 

004.jpg

 

가느다란 풀을 렌더링할 때의 흐름. 하얀색 실선 2개 사이가 폴리곤의 윤곽, 녹색 점이 샘플 포인트입니다. 폴리곤의 윤곽과 샘플 포인트가 겹치지 않는 곳은 그려지지 않기에 오른쪽처럼 결과가 나옵니다. 시간이 흐르면 그 결과도 흩어지게 되겠지요. 

  

3D 모델의 윤곽선에서 같은 현상이 일어나면 시간이 흐를수록 픽셀이 사라지고 나타나는 것을 반복하며 깜빡거리기도 합니다. 이런 현상은 Pixel Crawling이나 Pixel Shimmer라 부르기도 합니다.

 

005.jpg

 

다크 소울 2를 1920x1080 해상도에서 렌더링

 

006.jpg

 

왼쪽이 1920x1080 해상도, 오른쪽이 3840x2160 해상도에서의 샘플링 결과  

 

이를 개선하려면 샘플 포인트 수를 늘려야 합니다. 그리고 이를 가장 단순하게 실현하는 방법은 렌더링 해상도를 올리는 것입니다. 고해상도로 렌더링하면 가느다란 폴리곤도 제대로 픽셀화될 가능성이 높아지기에 표시 해상도를 다운 샘플링해도 그 정보는 사라지지 않고 제대로 표시됩니다.

 

007.jpg

 

3840x2160의 4K 해상도로 렌더링하고 1920x1080으로 다운 샘플링. 바로 이것이 DSR의 효과입니다.

 

008.jpg

 

렌더링 효과의 비교. 왼쪽이 표준 1080p 렌더링, 오른쪽이 DSR의 결과

 

DSR의 두번째 장점은 화면 깜박거림을 줄일 수 있다는 것입니다. 현재 게임 그래픽은 다수의 폴리곤을 쓴 모델을 멀리 배치했을 때, 하나의 픽셀에 다수의 폴리곤이 포함되고 이들 폴리곤이 다른 방향을 향하고 있을 경우가 자주 생기게 됩니다.

 

이 때 일반적으론 가장 앞의 폴리곤이 해당 픽셀에 그려지지만, 여러 폴리곤이 비슷한 Z축 옵션을 지녔을 경우 카메라의 위치에 따라 폴리곤의 앞뒤가 바뀌며 조명이 발생, 하이라이트가 생기면서 이것이 프레임마다 깜빡거리게 될 수 있습니다.

 
특히 오늘날엔 High Dynamic Range Rendering(HDR)과 Physically Based Rendering의 채용으로 매우 밝은 하이라이트가 나오는 경우도 많습니다. 그만큼 하이라이트가 프레임마다 바뀌면 깜빡거리는 현상이 눈에 거슬리게 됩니다.

 

009.jpg

 

DSR에서는 다운 샘플링을 할 때 가우시안 필터Gaussian Filter)를 적용해 깜빡임을 줄여줍니다.

 

그에 비해 DSR에서는 고해상도 렌더링을 실시하기 위해 1920×1080 해상도에서 1픽셀로 표현하던 폴리곤을 여러 픽셀로 그려냅니다. 그래서 시간의 경과에 따라 깜빡거리던 고휘도 하이라이트를 실제 크기로 제대로 그린 후 다운샘플링으로 1픽셀로 다시 그려내 깜빡임을 상당 수준 줄였습니다.

  010.jpg

 

지포스 익스피리언스의 다크 소울 2의 프로파일. 1920x1080 해상도의 디스플레이가 연결하면 내부 처리 해상도를 3840x2160으로 올려 DSR을 사용하게 됩니다.

 

DSR의 설정에선 렌더링 해상도를 실제 디스플레이의 몇배로 하는지를 정해야 합니다. 주로 쓰게 되는 건 1920x1080의 디스플레이에서 렌더링 해상도를 3840x2160으로 하는 것인데, 2560x1440로 렌더링하는 것도 가능하고 2560x1440 디스플레이에서 3840x2160으로 렌더링도 가능합니다. GPU 성능과 디스플레이 해상도에 맞춰 다양한 조합을 할 수 있지요.

 

011.jpg

 

DSR는 NVIDIA 제어판의 3D 설정 관리에서도 설정 가능합니다. 디스플레이 해상도의 몇 배로 렌더링 할지를 설정하는 것이 DSR Factors

 

012.jpg

 

실제 디스플레이 해상도로 다운 샘플링하는 데 필요한 필터링 관련 설정. 부드러움을 높일수록 오차 확산율은 높아지고 흐림 효과가 강해지기에 깜빡거림이 줄어들게 됩니다.

 

013.jpg

 

설정 후의 디스플레이 해상도 선택 화면

 

Super Resolution은 잃어버린 해상도 정보를 추측하고 복원하는 알고리즘을 말합니다. 그에 비해 DSR은 슈퍼 샘플링입니다. 이 차이를 NVIDIA의 Tom Petersen에게 문의하자 "그 지적은 옮으며 Super Resolution는 그 의미가 아니라 뉘앙스를 살려서 붙인 명칭"이라 답했습니다.

 

또 DSR에는 NVIDIA의 데모 담당자가 인정한 문제가 있습니다. 결론부터 말하자면 DSR 기능 자체의 문제가 아니라 현재 게임의 4K 렌더링에 존재하는 문제입니다.

 

3D 그래픽 자체는 아무리 해상도를 높여 렌더링해도 화면에서 3D 오브젝트가 차지하는 크기는 일정하며, 늘어난 해상도만큼 정보의 양이 늘어납니다. 그러나 화면에 표시된 2D 그래픽 부분은 해당 해상도에 적합한 크기의 데이터가 준비되지 않기에 작게 표시될 수 있습니다.

 

014.jpg

 

War Thunder의 그래픽 설정 옵션. 1920×1080의 디스플레이 해상도에서 DSR 4.00 X로 설정하고 게임을 실행하면 게임 쪽의 해상도 설정에선 3840×2160을 고를 수 있게 됩니다.

 

NVIDIA의 데모 담당자가 예시로 든 것은 War Thunder입니다. 1920x1080 해상도 표시와 DSR에 의한 4K 다운 샘플링을 비교하면 당연히 4K 다운 샘플링의 화면이 더 보기 좋지만, 게임 플레이에서 중요한 레이더 표시, 지도 화면, 각종 수치 정보 등의 2D 데이터가 1920x1080 해상도에 비해 1/4 크기로 줄어들게 됩니다.

 

폴리곤에 텍스처가 붙어 있는 부분은 DSR을 이용해도 적절한 크기로 표시되지만, 그것 외의 2D 그래픽 표시는 알아보기가 힘들어지는 것입니다.

 

015.jpg

 

일반적인 1920x1080 해상도로 워 썬더의 게임 화면을 표시

 

016.jpg

 

DSR로 4K 해상도 수준의 화면을 그렸을 때.  왼쪽 아래의 레이더 표시나 하단의 맵, 왼쪽 위의 수치 표시가 작아졌습니다.

 

NVIDIA의 데모 담당자는 "이것은 단순히 게임에서 4K 해상도를 염두에 두지 않아 발생한 문제로, 4K 표시를 지원하면 DSR을 사용한 4K 표시에서도 제대로 표시됨"이라 설명합니다.

 

다만 이를 반대로 말하면 4K 표시를 지원하지 않는 게임은 DSR를 사용했을 때 플레이하기 어려워진다는 이야기이기도 합니다. 특히 나온지 시간이 오래된 게임에선 그런 경우가 쉽게 발생할 수 있지요.

 

 

2x MSAA 수준의 부하로 4x MSAA 수준의 품질을 실현하는 MFAA


다음은 MFAA입니다. MFAA는 그 이름에서 알 수 있는대로 여러 프레임의 정보를 이용하는 AA 기법입니다. MFAA의 개발 컨셉은 Multi Sampled Anti-Aliasing(MSAA)보다 낮은 수의 샘플로 보다 뛰어난 품질을 실현하자는 것으로, 투입 자원 대비 효과가 뛰어난 AA 기법입니다.

NVIDIA의 AA 기법으론 케플러 세대인 지포스 GTX 680의 발표에 맞춰 도입된 Temporal approXimate Anti-Aliasing(TXAA)도 있습니다. TXAA는 심도 버퍼의 참조, 이전 프레임과 현재 프레임 사이에서 생기는 픽셀 단위 이동 벡터 정보의 참조 등 상당히 수준이 높았던 게 특징인데요.

 

그에 비해 MFAA는 제법 단순한 구현 방식이며 MSAA와 기본 알고리즘은 똑같습니다. MSAA에서 픽셀 쉐이더는 렌더링 해상도의 1픽셀 단위로 동작하지만 심도 버퍼에 출력하는 건 서브픽셀 해상도에서 수행합니다. 예를 들어 4x MSAA는 총 4배가 되는 해상도로 심도 버퍼에 출력해 이를 바탕으로 AA를 처리합니다. 

 

017.jpg

 

AA를 사용하지 않을 때와 4x MSAA를 사용할 때의 차이. 사각형이 실제 1픽셀에 해당하는 이미지이며 빨간색 점은 서브픽셀 해상도의 심도 버퍼인 샘플 포인트입니다. 여기서 No AA는 1픽셀을 그려낼 때 1샘플을 쓰지만 4x MSAA는 1픽셀을 그릴 때 그 4배의 샘플링 결과를 씁니다.

 

그럼 기본 알고리즘이 MSAA와 같은 MFAA는 어떨까요. MFAA는 AA 처리를 하는 데 필요한 샘플 포인트의 수가 MSAA보다 적지만 샘플 포인트의 위치를 프레임마다 바꾸게 됩니다. 4x MFAA를 예로 들면 1프레임 당 샘플 수는 2개니 2x MSAA 수준이나 다음 프레임에서 샘플 포인트의 위치를 다른 곳으로 옮기는 것입니다.

그럼 MFAA는 프레임마다 샘플의 위치를 바꾸는 MSAA일까요? 그건 또 아닙니다. 해당 프레임의 실질적인 처리는 샘플의 위치를 바꾼 MSAA지만, 최종적으로 화면에 나오는 건 저장해 둔 기존 MSAA의 결과와 합성해서 이루어집니다. 이 합성 처리에 NVIDIA는 Temporal Synthesis Filter라는 이름을 붙였습니다.

 

018.jpg

 

4x MFAA의 개념도. 현재 프레임의 2x MSAA 결과에 이전 프레임에서 나온 2x MSAA의 결과를 합성

 

019.jpg

 

4x MSAA와 4x MFAA의 차이

 

다만 TXAA와 같은 픽셀 단위 이동 벡터를 검출하는 처리계를 넣지 않아 TXAA보다는 분명 빠르다네요. 4x MSAA와 4x MFAA를 비교해도 4x MFAA의 프레임 단위 처리는 2x MSAA 수준이며, MFAA의 추가 처리로 Temporal Synthesis Filter를 하지만 이 합성 처리는 부하가 그리 높지 않습니다. 따라서 NVIDIA는 4x MFAA가 2x MSAA와 같은 수준의 부하로 4x MSAA의 품질을 실현한다고 설명합니다. 

 

020.jpg

 

4x MSAA와 4x MFAA에서 나온 결과는 차이가 없다고 NVIDIA는 설명합니다.

 

정지 화면에 적용하면 위 주장처럼 되진 않겠지요. 허나 움직이는 화면에선 이전 프레임과 현재 프레임의 영상 내 오브젝트가 움직일 가능성이 크기에 이상적인 결과가 나올 것입니다. 또 프레임 레이트가 높을수록 좋은 화면을 볼 수 있다네요.

 

화면이 움직이고 있을 때 해당 프레임에서 AA 처리 계통이 주목하는 픽셀과, 그와 같은 위치의 좌표에 있는 픽셀이 같은 폴리곤을 구성하는 픽셀이라는 보증은 없지만, 프레임 레이트가 충분히 높으면 같은 픽셀까진 아니어도 부근에 위치한 픽셀이라는 건 틀림 없습니다. 따라서 오차를 줄여주는 효과를 기대할 수 있겠지요. AA는 폴리곤의 윤곽을 부드럽게 하는 것이니 그 목적을 이루는 데엔 지장이 없습니다.

 

게다가 MFAA는 Alpha to Coverage도 가능합니다. 이는 OpenGL의 기능으로 제공된 것으로 나중에 NVIDIA가 지포스 7000 시리즈의 발표와 함께 ransparency Anti-Alising란 이름으로 출시한 것입니다. 다이렉트 X 10의 표준 스펙으로도 책정된 바 있습니다.

 

021.jpg

 

배틀필드 4의 한 장면. 이러한 선분 표현은 투명한 영역에 선분을 그린듯한 텍스처를 평평한 폴리곤에 붙여 실현합니다. 여기서 Alpha to Coverage을 활성화하면 MFAA가 도움을 줍니다. 

 

이러한 선분 표현은 판자 형태의 폴리곤에 선분 표현과 투명 영역을 포함한 텍스처럴 붙여서 실현합니다. MSAA는 폴리곤의 윤곽에만 들어가는 AA이기에 선분 표현에선 쓸 수 없습니다. 그러나 Alpha To Coverage를 활성화하면 투명 및 불투명함이 섞인 텍스처를 쓰는 폴리곤에서, 불투명한 부분에 MSAA가 잘 들어가게 됩니다. MSAA가 잘 적용되는 부분에선 MFAA도 유효하지요.

 

NVIDIA의 조사 결과에 따르면 4x MSAA와 4x MFAA의 성능을 비교했을 때, 4x MFAA는 4x MSAA보다 30% 정도 프레임 상승 효과가 있습니다. 실질적으로는 거의 2x MSAA의 성능이라고 볼 수 있겠습니다.

 

022.jpg

4x MSAA와 4x MFAA의 성능 비교. 30% 정도 4x MFAA의 처리가 빠릅니다.

 

 

DSR은 가벼운 게임, MFAA는 무거운 게임을 위해 준비한 것

 

NVIDIA의 주장은 다크 소울 2 같은 가벼운 게임에선 DSR로 렌더링 품질을 더욱 높이고, 배틀필드 4 같은 무거운 게임에서는 MFAA로 렌더링 품질을 유지하면서 성능을 향상시킬 수 있다는 것입니다. 게임에 따라 DSR과 MFAA를 골라 사용해 어떤 게임에서건 높은 렌더링 품질과 프레임 레이트 향상 효과를 볼 수 있습니다. 

 

023.jpg

 

024.jpg

 

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.