어푸푸

엔비디아 그래픽카드 업스케일링 본문

잡동사니/IT

엔비디아 그래픽카드 업스케일링

예수님부처 2019. 9. 21. 04:04

직전의 포스트에서는 이미지 스케일링에 대하여 다루었다. 잠시 언급하기도 했지만 해당 포스트를 썼던 이유는 이번 포스트의 주제를 다루기 위해서 필요했기 때문이고, 이번 포스트를 쓰는 이유는 모니터를 바꿀지 말지 고민을 하는데 필요한 정보가 잘 없어서 직접 해봐야했기 때문이다. 필요한 정보라고 함은 다음과 같다.

1. 과연 QHD 모니터를 사면 (불가피한 상황에서) FHD 해상도로 게임을 할 때 FHD 모니터에 비해 화질 열화가 심하게 발생할 것인가?
2. 과연 QHD 모니터에서 FHD 해상도의 영상을 볼 때 화질 열화가 많이 발생할 것인가?
3. 이미지 스케일링을 하는 방법에는 여러 방법이 있는데, FHD→QHD의 경우의 경우 각 모델의 경우 차이가 많이 나는가?
4. 어쨌거나 낮은 해상도로 설정하면 모니터에 꽉 채워줘서 보여주는데, 이는 그래픽카드에서 기본적으로 업스케일링을 해준다는 것을 의미한다. 그렇다면 기본 (default) 업스케일링 기법은 무엇인가?
5. 만약 기법간에 차이가 많이 난다면 더 좋은 결과물이 산출되는 기법으로 업스케일링 기법을 바꿀 수 있는가?

모니터를 살지 말지 고민하는데 이런 고민을 하고 이런 짓을 하는게 이상해보이는가? 내가 생각해도 이상하다. 하지만 어쩌겠는가. 직업병인 것을... 내가 궁금한 것이 생겼는데 그걸 해결할 수 있으면 해결해야 속이 시원하다. 그런 말이 있지 않은가. [사람을 화나게하는 두 가지 방법이 있는데, 하나는 말을 하다가 마는 것이고 두 번째ㄴ ] 딱 이 느낌이다. 궁금한게 있으면 해결을 해야 속이 시원한 것이 인지상정이다.

어쨌거나 자료를 찾다보니 알 수 있는 정보도 있고 알 수 없는 정보도 있었다. 이는 국내외의 자료를 다 통틀어서 찾아봤을 때의 이야기이다. 물론 시간을 많이 투자해서 찾았다면 결국에는 찾았을지도 모르지만 그 정도 시간을 투자하느니 내가 직접하는 것이 시간이 더 적게 걸리기도 하고, 그런 자료들을 찾을 수 있다는 보장도 없었다. 그렇다면 직접 해결하는 수 밖에.

QHD 모니터로 FHD 컨텐츠를 보면 화질이 많이 열화되는가? 많은 사람들이 동영상을 볼 때 잘 느끼지 못했다고 하니 이 것은 사실이 아닌 것 같다고 간접적으로 생각된다.어쨌든 간접적으로 FHD에서 QHD로 업스케일링을 수행할 때 발생하는 화질 열화율이 그렇게 크지는 않을 것이라고 생각했기 때문에 필요한 정보 1과 2는 패스한다. 어차피 알아도 내가 뭘 할 수 있는게 없기 때문이다. 필요한 정보 3은 직접 테스트를 해보면 알 수 있는데, 테스트를 해보지 않아도 보나마나 Lanczos resampling 방법이 bilinear 방법보다 훨씬 더 좋을 것이다. 왜냐하면 연산량이 더 많은데도 여전히 언급되고 사용되고 있지 않는가. 연산량이 더 많은데 bilinear 방법보다 결과물이 안좋거나 살짝만 좋았다면 역사의 뒤안길로 사라졌을 것이다. 이 전에 쓴 포스트에서 업스케일링시에 Lanczos resampling의 결과물이 더 좋았던 것 또한 이 생각을 뒷받침한다.

이제 필요한 정보는 4와 5인데, 정보를 찾다보니 [엔비디아의 업스케일링 방법은 기본적으로 bilinear이고, 이를 lanczos resampling으로 바꿀 수 있는 옵션이 존재한다. 해당 옵션은 nVIDIA inspector에서 바꿀 수 있다.]라는 이야기가 있었다. 물론 뒷받침할 수 있는 근거는 없어서 직접 찾아봐야 했다. nVIDIA inspector를 다운받고 other 탭을 보니 확실히 이야기가 나왔던대로 nVIDIA Quality Upscaling이라는 옵션이 보였다. 근데 이걸 검증해볼 필요가 있었다. 왜냐하면 [드라이버에 nVIDIA Quality Upscaling 관련 내용이 없으므로 해당 옵션은 작동하지 않는 dummy 옵션일 수 있다.]라는 이야기도 있었기 때문이다. 음.. 결국 직접 테스트를 해볼 수밖에 없었다.

어떻게 테스트를 해야하는가? 방법은 간단했다. 컴퓨터의 해상도를 바꾸면 알아서 그래픽카드가 업스케일링을 해준다. 그렇다면 업스케일링 방법에 따라서 결과가 판이하게 달라지는 그림을 해상도를 바꾸고 열어보면 되는 것이다. 업스케일링 방법에 따라서 결과가 가장 많이 달라지는 그림은 이미지 스케일링 방법에 관련된 포스트에서 다루었던 검은색 픽셀과 하얀색 픽셀이 번갈아가면서 배치된 그림이다. 해당 포스트는 아래 링크를 통해 볼 수 있다.
2019/09/21 - [잡동사니/글쎄 무슨 분류가 좋을까] - 이미지 스케일링에 대하여

테스트 방법은 이렇다. (현재 내 모니터 해상도는 FHD 해상도이다. 1920X1080) FHD 해상도의 90% 해상도인 1728X972 해상도의 테스트용 그림을 준비한다. 해당 그림은 체크무늬로 픽셀이 배치되어 있다. 어떻게 생겼는지 궁금한 사람을 위해 아래에 해당 그림을 파일 형태로 첨부하였다. 해당 그림을 BiLinear 방법과 Lanczos resampling 방법을 사용해서 FHD 해상도로 업스케일링 했다. 결과 그림을 아래에 나타내었다. 티스토리에서 그림을 자동으로 리사이즈하기때문에 FHD 사이즈로 스케일링 된 그림은 올리지 않는다. 대신 패턴만을 크롭하여 확대한 그림을 올렸다.

90Input.png
0.01MB
이론적인 패턴 (Bilinear method)
이론적인 패턴 (Lanczos resampling method)

확연히 차이가 난다. Bilinear 방법을 쓴 경우에는 밝은 곳이 동그랗게 보이고, Lanczos 방법을 쓴 경우에는 밝은 곳이 사각형처럼 보인다. 그리고 전반적으로  Lanczos 방법을 썼을 때 더 맑은 곳이 선명하게 나타난다. 이제 모니터 해상도를 1728X972로 맞추고 원본 그림을 띄워보면 그래픽카드에서 사용하는 기본 업스케일링 알고리즘이 무엇인지 알 수 있다. 어떤 패턴으로 모니터에 출력되는지를 보면 되는 것이다. 위의 해외 자료에 따르면 nVIDIA Quality Upscaling 옵션을 켜지 않으면 bilinear 방법을 쓸테니 bilinear 방법을 적용한 패턴이 나올 것이다.

과연?

아래 그림은 그렇게 해서 모니터에 나온 것을 사진찍은 것이다. 근데 좀 이상하다. Bliinear 방법으로 얻어지는 패턴과는 거리가 멀다. 밝은 곳들의 패턴이 사각형에 가깝게 보이기 때문이다. 희한해서 확대해서 찍어봤다. 음.. 확실히 Bilinear 방법은 아니다. 오히려 Lanczos 방법과 유사하다.

모니터 전체 화면 사진
모니터에 나타난 픽셀 패턴 사진

 

조금 더 확실히 결론짓기 위해서 FHD의 95% 해상도인 1824X1026 해상도에 대해서 다시 테스트를 진행해봤다. 마찬가지로 이론적으로 얻어져야되는 패턴을 살펴보니 bilinear 방법은 밝은 부분이 원 모양같이 나오고, Lanczos 방법은 조금 더 사각형처럼 나오는 동시에 밝은 부분들이 전반적으로 더 밝다. 그리고 해당 해상도로 변경하고 다시 원본 그림을 모니터에 띄워봤다. 음... Lanzcos 방법에 더 근접한 것이 맞는 것 같다. 가까이서 보면 좀 헷깔릴수도 있겠지만, 멀리서 보면 확실히 알 수 있다.

이론적인 패턴 (Bilinear method)
이론적인 패턴 (Lanczos resampling method)
모니터에 나타난 픽셀 패턴 사진

 

결국 엔비디아의 그래픽카드에서 사용되는 기본 업스케일링 알고리즘은 적어도 bilinear 방법은 아닌 것으로 보인다. 오히려 Lanczos 방법에 가까워보였다.그리고 궁금해서 nVIDIA inspector에서 nVIDIA Quality Upscaling 옵션을 바꿔가면서도 테스트를 해봤는데 차이가 없었다. 결국 해당 옵션은 더미 옵션이었던 것으로 보인다. 최근에도 해당 옵션에 대해서 궁금해하는 외국인을 nVIDIA 포럼에서 본 것 같긴 한데 영어로 결론만 쓰기는 귀찮고, 이 블로그 글을 영어로 번역해서 보기를 바란다는 말을 남긴다. 요약해보자면 의외로 일이 잘 풀렸다. 엔비디아 그래픽카드의 기본 업스케일링 모델은 결과물이 bilinear보다 좋은 모델이었다. 그렇다면 굳이 업스케일링 모델을 교체할 필요가 없으니 필요한 정보 4와 정보 5도 해결되었다. 물론 nVIDIA의 업스케일링 모델은 Lanczos 모델일수도, bicubic 모델일 수도 있다. 이 포스트에 올리지는 않았지만, 두 모델의 결과물은 매우 비슷했다. 그렇다고 그래픽카드 업스케일링 방법을 확정짓자니 거기에 시간을 쓸 이유가 없었다. Bilinear 모델보다 좋은 모델이면서 굳이 엄청나게 확대 하는거 아니면 두 모델이 비슷한 성능을 내는 것처럼 보였으니까. (order of accuracy가 높은 모델들은 보통 이렇긴 하다.) 그리하여 나는 그냥 여기에서 멈추고자 한다. 어차피 스케일링 방법은 바꿀수도 없으니까.

그럼 모두 안녕~