어푸푸

TriXX Boost? 그게 뭔데? 엔비디아 그래픽카드에서도 쓸 수 있는거야? 본문

잡동사니/IT

TriXX Boost? 그게 뭔데? 엔비디아 그래픽카드에서도 쓸 수 있는거야?

예수님부처 2019. 9. 21. 23:50

요즘 TriXX Boost (트릭스 부스트) 관련 이야기가 조금씩 나오고 있는 것 같다. TriXX Boost는 그래픽카드 제조사인 사파이어에서 제공하는 프로그램의 기능인데, 기능은 다소 심플하다. 사파이어에서 주장하는 작동 원리를 살펴보자.

1. 낮은 해상도에서 렌더링한다
2. RIS를 적용하고 업스케일을 한다. (CAS를 적용한다고 생각해도 된다.)
3. 낮은 해상도에서 렌더링했으나, 나름 좋은 품질로 업스케일되었다.

별로 새로운 것은 없어보인다. 사실 그게 일반적이다. 그래픽카드 제조사에서 얼마나 새로운 알고리즘을 만들겠는가. 자고로 있는거 잘써먹는게 공돌이의 미덕이다. 그리하여 살펴보자니.. CAS는 소스코드가 공개되어있다. 업스케일 방법은 기존에 굉장히 많은 방법들이 개발되었는데, 쓰는 것이 한정되어있으니 사실상 있는 알고리즘을 가져다가 썼을 것이다. 혹은 CAS에 이미 있는 알고리즘을 썼을수도 있다. ReShade에서는 써먹지 못하지만 사실 CAS에는 업스케일링 알고리즘이 포함되어있다. ffx_cas.h의 315번째 줄을 보자.

ffx_cas.h

a~p는 샤프닝 및 내삽에 사용되는 픽셀들이다. 한마디로 총 16개의 픽셀을 끌어다가 쓴다. 업스케일링이 안들어가는 경우에는 총 9개의 픽셀을 사용한다. 저기에 써있는 것을 보면 4X4 픽셀에서 서로 다른 네 개의 3X3 픽셀을 이용하여 이미지 샤프닝을 수행한다. 그렇게 수행된 결과물이 f, g, j, k이다. 그리고 이 네 개를 이용하여 내삽을 하고, 그게 최종 결과물이 된다. 이 때 내삽은 bilinear 방법을 살짝 변형한 것으로 보인다. (자세히 읽어보지는 않아서 잘 모른다.) 보통 공돌이들은 주어진 것의 결과물을 써도 되는 상황이면 그걸 써먹으려고 한다. 그래서 추측하건데 아마 사파이어에서는 CAS에 있는 업스케일 방법을 썼을 것 같다.

이 업스케일 방법은 글쎄.. 애매하다면 애매하다. 왜냐하면 이미지를 전체적으로 샤프닝을 한 후에 bilinear 방법을 사용해서 업스케일을 하는 것과 사실 다를게 없다. 차이가 있다면 전체적으로 샤프닝을 진행한 후에 내삽을 하느냐, 그때그때 샤프닝을 하면서 내삽을 진행하느냐이다. 근데 왜 저렇게 코드를 짰냐고? GPU 프로그래밍이라서 그렇다. 코어마다 일처리 속도가 달라서 그냥 저렇게 짠걸로 추정된다. 그리고 bilinear 방법이 그렇게 성능이 좋은 방법은 아니니까 나름대로 변형이야 했겠지만, 태생적인 한계라는 것은 결코 무시할 수가 없다. bilinear 방법이 아무리 애를 써봤자 1차 정확도 모델이다.

이제 TriXX Boost가 뭘 하는지 알았으니 정리를 해보자. 첫 번째로 저해상도에서 렌더링을 한다. 이거야 게임 내 옵션에서 해상도를 낮은 해상도로 설정하면 자동으로 되는거니까 특별한건 아니다. 두 번째로 샤프닝과 업스케일을 수행한다. 확실하지는 않지만 CAS 내의 업스케일 모델을 사용할 수도 있고, 널리 사용되는 bicubic 모델이나 Lanczos 모델을 사용할 지도 모른다. 어쨌거나 널리 사용되는 리샘플링(업스케일) 모델들을 사용했을 것이다. 여기에서 선택지가 둘 있다. 이미지 샤프닝과 업스케일을 어떤 순서로 할 것인지를 정해야한다. 이미지 샤프닝을 수행한 다음에 업스케일을 할 수도 있고, 업스케일을 수행한 다음에 이미지 샤프닝을 진행할수도 있다. 참고로 ReShade를 통하여 CAS를 쓰는 경우에 후자의 방법은 쓸 수 없다. ReShade에서 필터를 적용할 때 해상도를 변경할 수가 없기 때문이다.

어쨌거나 저 두 가지 옵션 중에 뭐가 더 좋은 결과를 내는지를 확인해야 했다. 만약에 TriXX Boost에서 업스케일링을 먼저 진행한 후에 샤프닝을 진행한다면, 그리고 그렇게 하는 것의 결과가 더 좋다면 현재로써는 엔비디아 그래픽카드로는 해당 기능을 따라할 수 없다. 반면에 이미지 샤프닝을 진행한 후에 업스케일을 하는 것이 더 이미지 품질이 좋다면 엔비디아 그래픽카드로 TriXX Boost 기능을 따라할 수 있다. 만약 TriXX Boost에서 업스케일을 bilinear 방식으로 한다면 오히려 엔비디아에서 ReShade를 통해 CAS를 적용하고 업스케일 하는 것이 더 이미지 품질이 좋을 수도 있다. 왜냐하면 저번 포스트에서 테스트를 했더니 엔비디아 그래픽카드의 업스케일 방법은 bicubic 방법이나 Lanczos 방법인 것 같기 때문이다.
2019/09/21 - [잡동사니/글쎄 무슨 분류가 좋을까] - 엔비디아 그래픽카드 업스케일링

위와 같은 이유로 샤프닝과 업스케일 순서에 따라서 이미지 품질이 어떤 것이 더 좋은지를 일단 봐야한다. 이를 위해 공개된 CAS 소스를 토대로 매트랩 코드를 짰다. bilinear 방법이나 Lanczos 방법의 경우 워낙에 널리 알려진 방법이라서 소스 코드를 공개하지 않았지만 오랜만에 매트랩 CAS 소스 코드를 공개한다. Double 형식의 이미지 변수와 샤프닝 강도를 파라미터로 주면 샤프닝 처리가 된 이미지를 반환해준다. 어쨌든 이 CAS 코드와 기존에 작성했던 Lanczos 이미지 업스케일링 코드를 이용하여 이미지 샤프닝과 업스케일링 선후 순서에 따른 이미지 품질 비교를 하였다. 이 때 비교를 위해서 이미지 스케일링의 비율은 4/3배로 하였다.
(이 비율은 FHD→QHD 비율이다.)

CAS.m
0.00MB
그냥 업스케일링만 한 결과
업스케일링을 한 후 이미지 샤프닝을 한 결과 (CAS, Lanczos)
이미지 샤프닝을 하고 업스케일링을 한 결과 (CAS, Lanczos)

티스토리에서 자체적으로 이미지 리사이즈를 해서 잘 보일지 모르겠지만 나무통의 디테일, 칼 손잡이 디테일 등을 보면 된다. 일단 전체적으로 이미지 샤프닝을 하고 안하고는 정말 큰 차이가 난다. 다시 한 번 CAS의 위대함을 느낄 수 있다. 그리고 이 테스트의 주요 목적인 이미지 샤프닝과 업스케일링 순서에 다른 이미지 품질에 대해서 살펴보니 놀랍게도 큰 차이는 없었다. 이미지 샤프닝을 하고 업스케일링을 하나, 업스케일링을 하고 이미지 샤프닝을 하나 눈에 띄는 차이를 관찰하기 힘들다. 물론 자세히 비교하면 차이는 난다. 근데 자세히 비교했을 때에도 이미지 샤프닝을 하고 업스케일링을 한 것이 더 이미지 품질이 좋은 것으로 보인다.

이와 같은 결과는 엔비디아 그래픽카드에서도 TriXX Boost와 동일한 기능을 사용할 수 있음을 나타낸다. 다시 말해서 이 결과는 ReShade로 CAS를 적용하고 게임의 해상도를 낮추면 TriXX Boost와 동일하거나, 더 나은 결과가 나온다는 것을 시사한다. 왜냐하면 엔비디아의 업스케일링 알고리즘은 bilinear 방법보다 더 좋은 방법이기 때문이다. 다만 너무 큰 비율의 업스케일링은 그렇게 권장할만하지 않음을 미리 알린다. 그래서 그런지 사파이어의 TriXX Boost에서는 렌더링이 수행되는 낮은 해상도를 업스케일링이 수행되는 해상도의 90%로 둔 것으로 보인다.

그렇다면 엔비디아에서도 이러한 해상도를 만들 수 있을까? 대답은 "그렇다."이다. 엔비디아 제어판에서 3D 설정 관리 ->Image sharpening 메뉴에서 GPU Scaling을 체크하자. 이제 샤프닝 필터를 적용하고 게임에서 추가된 변태 해상도로 놓고 전체 화면으로 게임을 하면 된다. 아래 글을 이 기능이 나오기 전에 썼던 내용이다.

엔비디아 제어판을 가자. 좌측의 디스플레이→해상도 변경 메뉴로 들어가면 사용자 정의라는 버튼이 있다. 이걸로 우리가 원하는 해상도를 만들 수 있다. 다만 사용자 정의 해상도를 만들기 위해서는 DSR 기능을 꺼야 한다. DSR은 Dynamic Super Resolution의 약자인데, 한 마디로 모니터보다 더 높은 해상도로 렌더링을 해서 그걸 토대로 이미지 품질을 향상시키겠다는 기술이다. 쉽게 말하자면 일종의 안티 앨리어싱 기술인데, 이렇게 가성비 똥망인 안티 앨리어싱이 있나 싶을정도다. 과감하게 꺼주자. 해당 기능은 좌측의 메뉴에서 3D 설정→3D 설정 관리 메뉴로 들어가서 DSR - 요소의 모든 체크를 끄면 끌 수 있다.

DSR 기능을 껐으면 디스플레이→해상도 변경→사용자 정의→사용자 정의 해상도 만들기 메뉴로 들어가서 원하는 해상도를 만들자. 아래 그림에서는 FHD 해상도의 90% 해상도인 1728X972 해상도를 만들었다. 이때 스캔 유형은 프로그레시브로 두면 된다. 이후 테스트 버튼을 눌러 해당 해상도가 잘 작동하는 것을 확인한 뒤 확인 버튼들을 눌러 해상도를 추가하면 된다. 그렇게 하면 사용자 정의라는 곳에 추가된 해상도가 보인다. 노파심에 말하지만 컴퓨터 기본 해상도를 저걸로 변경하라는 것이 아니다. 추가한 사용자 정의 해상도는 게임 내 해상도 설정에서만 쓰는 해상도이다. 그리고 게임을 켜서 그래픽 관련 설정으로 들어가면 아까 추가한 해상도가 있는 것이 확인된다. 해당 해상도로 쓰면 된다. 물론 ReShade로 CAS를 적용하는건 필수다. 이렇게 하면 TriXX Boost와 똑같다. 너무 복잡해서 무슨 내용인지 모르겠다고? 아래에 요약을 할테니 그거 보고 차근차근 해보자. 막상 해보면 하나도 안어렵다. 일단은 아래 그림들을 참고해보자.

모든 체크를 풀어서 DSR 기능을 끄자. 어차피 쓸데없는 기능이다.
사용자 정의 버튼을 눌러 원하는 해상도를 만들자. DSR을 끈 상태에서만 만들 수 있다.
FHD의 90% 해상도로 원하는 해상도를 만드는 예
다 만들면 사용자 정의란에 만든 해상도가 있다. 다시 말하지만 여기에서 해상도를 저걸로 바꾸는게 아니다.
게임을 켜고 (전체화면으로 해야함) 해상도를 바꾸는 옵션을 보면 추가한 해상도가 보인다. 여기에서 해상도를 추가한 해상도로 바꾸자.

 

여러분들 잘 따라왔습니까? 너무 길고 장황해서 잘 못따라왔다구요? 걱정하지 마라. 여기에 간단하게 요약을 하겠다.

1. (그 전에 설치한 적이 없다면)ReShade를 설치하고 CAS를 적용하자. (혹은 alt + F3을 눌러 선명화 필터를 적용하자)
(이거 안하면 이 짓을 하는 의미가 없다. 이전 포스트를 참고하자.)
2019/09/18 - [잡동사니/글쎄 무슨 분류가 좋을까] - ReShade 설치 및 게임에 CAS (RIS) 적용하기

2. (그 전에 끈 적이 없다면) 엔비디아 제어판에서 DSR 기능을 끄자.

3. (그 전에 추가한 적이 없다면) 적당한 해상도를 엔비디아 제어판에서 추가하자. 해상도를 여러 개 추가할 수도 있다.
(엔비디아 제어판에서 추가한 해상도로 변경하지 말자. 이건 게임에서만 쓰려고 추가한거다.)

4. 게임을 켜고 그래픽 관련 설정에서 추가한 해상도로 변경하자.

5. CAS가 적용되고 있는 중이라면 완료되었다.

요약한 것을 보면 생각보다 간단하다는 것을 느낄 것이다. CAS 적용하는거야 필수적으로 해야 하는 것이고, 적당히 낮은 해상도 추가하는거야, 그 해상도에서 렌더링을 해야하니 추가하는 것이 당연하다. 그리고 그 해상도로 렌더링을 해야하니 게임에서 해당 해상도로 설정해주는 것도 당연할 것이다.

여기에서 질문이 있을 수 있다. "추가하는 해상도를 어떤 해상도로 해야해요?" 정답은 없다. 추가하는 해상도가 원본 해상도에 가까울수록 이미지 품질은 높아지겠지만 FPS는 올라갈 것이고, 원본 해상도보다 작을수록 FPS는 떨어지겠지만 이미지 품질은 높아질 것이다. TriXX Boost에서는 90% 해상도를 쓰는 것 같기는 하다. 테스트 하고 싶은 해상도를 여러 개 추가해놓고 해상도를 바꿔가면서 본인이 선호하는 해상도를 찾자. 추천 추가 해상도를 여기에 적어놓는다. 추천 해상도는 테스트 안하고 적어놓은 것이니까 막상 여기에 없는 85% 해상도가 제일 가성비 좋고 그럴 수도 있다. 그냥 그렇다는 말이다.

1. FHD로 업스케일링 하는 경우
90% FHD: 1728 X 972
80% FHD: 1536 X 864

2. QHD로 업스케일링 하는 경우
90% QHD: 2304 X 1296
80% QHD: 2048 X 1152

3. UHD로 업스케일링 하는 경우
QHD+: 3200 X 1800 (여러 사람들이 추천하는 해상도임)
90% UHD: 3456 X 1944
80% UHD: 3072 X 1728

 

이걸로 이 포스트에서 다루고자 하는 내용은 끝났다. 모니터를 구매할 때 어떻게 할지 고민에 대한 정보들도 다 정리가 되었다. QHD 모니터를 사고 FPS가 안나오면 사용자 정의 해상도를 만들어서 돌리면 되는 것이다. 이제 돈 쓸 일만 남았다. 그래도 이걸로 끝내면 섭하니까 Q&A를 써본다.

Q: 그래서 Trixx Boost가 좋은건가요?
A: 꽤 괜찮다고 생각함.

Q: TriXX Boost를 쓰려고 5700xt 그래픽 카드를 사려는데요...
A: 가성비가 좋아서 AMD 그래픽카드를 사는건 몰라도 해당 기능 때문에 AMD 그래픽 카드를 사는건 말리고 싶음.

Q: 그래서 엔비디아에서 TriXX Boost를 쓸 수 있는건가요?
A: TriXX 프로그램을 쓸 수는 없겠지만, 간단한 설정 몇 개로 그것과 유사하거나 더 좋게 쓸 수 있음. 즉, 가능함.

Q: 너무 어려워요.
A: 쓰지 마세요.

Q: 한 줄 요약좀
A: 철수 ♡ 영희 (2018. 8. 18)

 

후기 1

바보같은 암드... 암드에서 CAS를 오픈소스로 공개했을 때 부터 생각했던 것이 현실이 되었다. 여러 포스트에서 이야기 했었지만, CAS는 그냥 후처리 필터일뿐이므로 이론상 동영상이고 사진이고, 픽셀로 표현되는 화면에는 별다른 개발 인력 필요 없이 어디에나 적용할 수 있다. 한 마디로 암드가 오픈소스로 CAS를 공개한 순간 모든 톱니바퀴가 돌아가기 시작했다. 엔비디아는 암드에서 공개한 CAS를 그대로 가져오던가 아니면 참고를 해서 엔비디아의 선명화 필터를 업데이트 했고, 이제 CAS는 메리트가 하나도 없어져버렸다.

기존의 엔비디아의 선명화 필터는 계산 비용이 크고 (FPS 감소가 심하다는 뜻) 선명화 품질 자체도 별로 좋지 않았는데, 암드에서 CAS를 공개한 후, 계산 비용이 줄어들고 선명화 품질도 거의 CAS와 동일해졌기 때문이다. CAS에서 이제 내세울만한 장점은 그래도 비교적 계산 비용이 작고, 오픈소스이기 때문에 ReShade를 통해서 거의 어느 게임이든 적용할 수 있다 것 밖에 없었다. 물론 암드 그래픽카드 드라이버의 RIS에서 지원하는 게임은 다소 한정적이기는 했지만 (왜 그런지 솔직히 아직도 이해가 안간다.) ReShade를 통하면 거의 모든 게임을 지원할 수 있었으니까 뭐...

앞에서 이야기 한 것처럼 선명화 필터는 후처리 필터이기 때문에 사실 마음만 먹으면 드라이버 수준에서 알고리즘을 이식해서 어느 화면이든 적용할 수 있다. 그 말은 게임 종류를 막론하고 적용할 수 있다는 뜻이다. 그리고 2019/10/29일 업데이트 된 엔비디아의 그래픽카드 드라이버에서는 '게임 종류를 막론하고 선명화 필터를 적용'할 수 있다. 더불어 계산 비용이 줄어들었고, 암드의 CAS보다 더 좋은 품질이 나오도록 업데이트 되었다고 유튜브를 통해 이야기 하였다. 그리고 TriXX Boost에서 자동으로 생성해주던 살짝 낮은 해상도도 이제 엔비디아에서 자동으로 생성해주는 것 같다. (물론 엔비디아 제어판에서 GPU scaling을 체크해야 한다.) 자세한 사항은 아래 유튜브 비디오를 확인하자.

https://www.youtube.com/watch?v=lPRPeSjYiq8

 

결론:
1. CAS 바이바이... 직접 확인해보지는 못했지만 엔비디아에서 자사 선명화 필터가 더 좋다고 공개적으로 이야기 했음
2. TriXX Boost 바이바이... 이제 엔비디아에서 공식적으로 지원함

 

후기 2

엔비디아 컨트롤 패널에서 샤프닝이 잘 적용되는 게임이 대부분이었으나, GTA 5에는 적용되지 않는 것으로 확인하였다. 당연히 찾아보면 적용되지 않는 게임들이 더 많을걸로 보인다. 이상하게도 GTA 5에 엔비디아 프리스타일 필터와 Reshade는 잘 되는 것을 확인했으므로, 엔비디아 제어판에서 샤프닝을 적용하길 원하는 경우에는 on/off 스크린샷을 비교하여 되는지 확인해보고 쓰자. 후킹에 의한 밴 위험이 없다면 나는 Reshade를 추천한다. 엔비디아 프리스타일을 사용하기 위해 켜놔야 하는 엔비디아 오버레이가 FPS를 좀먹으니까. 물론 필요한 경우 GPU scaling 기능은 켜자. 다양한 해상도를 자동으로 만들어준다.