본문 바로가기
게임/추가 정보

스위치 에뮬레이터 유즈, 2022년 7월의 변경점 소개

by 사과향잉크 2022. 8. 17.

스위치 에뮬레이터 유즈(yuzu)의 2022년 7월 변경점입니다.

1년 9개월만에 작성하는 내용인데 조금 더 간략하게 소개합니다. 큰 변경점은 그래픽, 오디오 재작업, LDN 예비 작업, 새 OpenGL 드라이버입니다.

 

프로젝트 Y.F.C 1부

 

지난 몇 달간 예고한 GPU 에뮬레이션 개선 프로젝트입니다. 일이 커져서 1부에서는 문제 수정과 정확도에 초점을 맞췄습니다. 1부에서도 성능이 좋아지긴 하지만 2부에서는 전적으로 성능 개선에 집중합니다.

스카이라인 에뮬레이터 개발자는 엔비디아 드라이버 서비스(NVDRV 서비스)를 구현했고 이를 유즈 측에 제공했습니다. 유즈가 사용하던 것보다 훨씬 정확했죠.

그래서 리버스 엔지니어링을 하고 GPU 드라이버, 메모리 관리를 완전히 다시 만들 예정입니다. 또한 GPU 채널 초기 구현, DMA 엔진 버그 수정 및 성능 개선 등을 진행해 슈퍼 스매시 브라더스 얼티밋, 델타룬, 제노블레이드 크로니클스 등의 버그를 수정하고 성능이 좋아집니다.

 

요괴워치 4 이전과 이후

그에 따라 이전에는 불가능했던 하데스, 마리오 골프 슈퍼 러시, 슈퍼 스매시 브라더스의 싱글 플레이인 등불의 별을 할 수 있게 되죠.

그에 따른 문제도 있고 위쳐 3 와일드 헌트처럼 아직 완벽하지 않은 게임도 있습니다.

 

 

프로젝트 안디오

 

오디오 효과를 재생할 수 없는 초기 오디오 구현의 문제를 해결하기 위한 작업입니다. 이전 코드는 관리하기가 너무 어려워 스위치의 업데이트를 따라갈 수 없었죠.

메트로이드 드레드의 경우 이전에는 수중에서 전투할 때 물 소리가 나오지 않았지만 이제는 나옵니다.

너무 많이 고쳤기 때문에 일일이 세기 어려울 정도이며 가까운 시일 내 오디오 관련 글을 올릴 예정입니다.

 

 

프로젝트 런던 예비 작업

프로젝트 런던은 온라인 연결을 위한 방을 포함한 LDN(무선 연결) 지원 계획을 말합니다. 방과 UI는 Tobi가 제작했습니다.

시트라 기반이며 완벽하게 작동하지만 네트워크 백엔드가 준비될 때까지는 사용할 수 없습니다. 좀 조정하고 버그 수정을 하면 사용할 수 있을 겁니다.

 

 

코어타이밍

 

코어타이밍은 유즈에서 많은 타이밍 관련 에뮬레이션 문제의 원인을 수 있습니다.

위의 프로젝트 안디오 진행 중 더 정확한 코어타이밍을 구현하자 일부 오디오 손상 문제와 멈추는 게임의 문제가 해결됐습니다.

이론상으로는 더 좋았어야하지만 아직 문제는 남았고 일부 사용자의 성능 문제로 수정한 것을 취소하기도 했습니다.

그밖에 인텔 엘더레이크 CPU 사용자가 슈퍼 스매시 브라더 얼티밋에서 겪는 클럭 문제를 개선하고, 파이어 엠블렘 무쌍: 풍화설월을 플레이할 수 있게 하고, 많은 게임의 성능을 개선했습니다.

 

 

커널 변경점

 

코드 블록 캐싱의 부정확성, 와치포인트의 성능 저하, 다양한 커널 문제를 수정했습니다. 덕분에 마리오 스트라이커즈 배틀 리그에서 멈추는 문제를 해결하고, 퇴마인법첩 ~요괴지옥변~을 처음으로 실행할 수 있었습니다.

 

 

GPU 변경점

 

지난 달에 새 GPU 대기열을 구현하자 파이어 엠블렘: 풍화설월에서 문제가 발생해 취소했습니다.

제노블레이드 크로니클스 3를 Vulkan으로 부팅하면 충돌해서 셰이더 문제를 해결하여 Vulkan에서도 게임을 실행할 수 있게 됐습니다.

 

윈도우에서는 AMD 라데온 GPU에서 Vulkan으로 실행하면 충돌하는 문제가 여전한데 드라이버가 VK_FORMAT_R16G16B16_SFLOAT 텍스처 형식 지원이 부족하기 때문이며 유사한 방식으로 처리하는 방법을 구현했습니다. 이는 다음에 자세히 설명합니다.

OpenGL에서 실행하면 메모리르 엄청나게 사용하는데 좀 더 '공식적인' 방법인 glDetachShader를 구현하여 램 사용량을 줄였습니다. 완전히 해결한 건 아닙니다.

몬스터 헌터 라이즈가 요구하는 텍스처 형식을 구현했고 렌더링 버그를 해결하지는 못했지만 조금 나아졌습니다.

 

 

리눅스 플랫팩 및 앱이미지 수정

 

플랫팩은 낮은 성능과 일부 누락된 데스크탑 기능 때문에 리눅스에서 스위치 게임을 하는데 권장하는 방식은 아니지만, 플랫팩이 기본 설치되고 있고 유즈에 쉽게 접근하려는 사람에서는 좋은 방식입니다.

특히 스팀 덱 사용자가 선호하는 방식이었고 사람들이 알린 여러 문제를 수정했습니다. 그런데 이런 문제는 플랫팩에서만 일어났는데 플랫팩이 C++ 표준 라이브러리에서 추가 검사를 하다가 검사가 실패하면 바로 유즈가 충돌했기 때문이죠.

최적화된 레이아웃 크기를 사용해 문제를 해결하는 등 다양한 처리로 플랫팩 사용자는 다시 게임을 즐길 수 있습니다.

 

Vulkan 문제는 윈도우만의 문제가 아니라서  libQt5Multimedia 라이브러리가 앱이미지 빌드에서 문제를 일으켰습니다. 현재는 이를 제외하는 것이 유일한 해결책이라서 사람들의 반응을 보고 계속 제외할지 완전히 삭제할지 고려할 겁니다.

적절한 제목 표시줄을 위한 작업도 진행 중이며 작업이 끝나면 윈도우와 똑같이 제목 표시줄이 나타나야합니다.

 

 

입력 개선

 

닌텐도 스위치의 독특한 기능은 오른쪽 조이콘에 있는 적외선 카메라(IR)를 사용할 수 있다는 점입니다.

물체의 모양을 감지하고 거리를 측정하는 역할이지만 화면에 피드를 전송하고 열을 감지하는 식으로도 사용할 수 있습니다.

 

홈브류 앱처럼 보이겠지만 닌텐도가 제공하는 공식 IR 인터페이스

German77은 이런 기능을 추가하고 차근차근 게임코딩, 라보 등을 완벽하게 지원하는데 관심이 있어서 게임이 조이콘의 카메라나 OBS 스튜디오를 통한 데스크탑 캡처 등 사용자가 원하는 모든 카메라에 접근할 수 있게 했습니다.

설정의 Emulation > Configure… > Controls > Advanced tab > Infrared Camera에서 볼 수 있습니다.

 

최근 커뮤니티는 싱글 플레이 게임에 모드로 온라인 기능을 추가하여 원래 게임에서는 불가능한 협동을 가능하게 하고 있습니다.

슈퍼 마리오 오디세이도 최근 모드가 생겼는데 유즈는 IP 주소를 입력할 수가 없어서 못 했습니다.

Morph는 온라인 모드에서 필요한 IPv4 주소를 입력할 수 있게 했습니다.

 

최대 10명이 즐기는 슈퍼 마리오 오디세이

Link4565는 모드와의 호환성을 개선하기 위해 네트워크 서비스를 수정했습니다.

그리고 스팀 덱 사용자의 문제도 해결했습니다.

 

 

UI 변경

 

상태 표시줄 변경, 단축키에서 음량 조절을 할 때 조절되는 음량을 조정해달라는 요청을 처리했습니다.

 

일반 버그 및 개선점

 

스팀 덱에서 겪는 게임 일시정지 및 재개 문제를 처리했습니다. 스위치의 실제 일시정지 및 재개 메커니즘을 에뮬레이션해 스팀 덱에서도 스위치에서처럼 전원 버튼을 눌러 게임을 일시정지할 수 있습니다.

다운로드 크기를 24MB로 줄였습니다.

 

 

하드웨어

 

유즈에서 사용자 경험에 영향을 줄 수 있는 특정 하드웨어에 관련된 새 버그, 수정 및 발견점을 전하고 논의하기 위한 새 목차입니다.

 

엔비디아의 드라이버는 472.12에서 완벽했으나 맥스웰, 파스칼 GPU 사용자는 516 드라이버에서 Vulkan이 불안정합니다.

문제를 정확히 파악하기 어렵지만 GPU 가속 ASRC 텍스처 디코딩 등을 의심하고 있습니다.

두 GPU를 사용 중이며 최신 드라이버 업데이트를 꼭 해야한다면 Vulkan이 안정적인지 시험해보고 결과를 전달해주면 좋습니다.

설정의  Emulation > Configure… > Graphics에서 Accelerate ASTC Texture Decoding을 비활성해보세요.

또 다른 문제는 젤다무쌍: 대재앙의 시대에서 나무가 엄청나게 깜빡입니다. 아래는 516.94 드라이버입니다.

 

지싱크나 프리싱크 디스플레이를 사용한다면 프레임이 24~30 정도로 유지되는 문제가 있습니다.

3가지 방법이 있는데 게임을 켤 때마다 유즈 창의 초점을 풀었다가 다시 잡던지, 설정이 View에서 Single Window Mode를 끄던지, Emulation > Configure.. > Graphics > Fullscreen Mode에서 Exclusive Fullscreen 켜고 F11을 눌러 전체화면으로 하면 문제를 피할 수 있습니다.

다른 창에서 Qt 창을 실행하는 것과 엔비디아가 창 모드 프로그램의 프레임레이트를 감지하는 것이 잘못 맞물려서 생기는 것으로 둘 중 하나를 없애서 해결하는 것이죠.

 

 

AMD는 윈도우용 22.7.1 드라이버에서 완전히 새로운 OpenGL 드라이버를 도입해 Vulkan 외에도 실행할 수 있게 했습니다.

25년만이며 성능은 100%에 가깝거나 일부 게임에서는 그 이상이며 많은 렌더링 버그가 수정됐습니다.

 

 

벤치마킹 전문가는 아니지만 게임을 해보면 위와 같은 차이가 있습니다. 성능이 AMD나 엔비디아의 Vulkan에 매우 가까워졌죠.

젤다의 전설: 브레스 오브 와일드 등 일부 게임은 엔비디아의 OpenGL 드라이버를 노골적으로 선호한다는 것도 알 수 있죠.

제노블레이드 크로니클스 3나 유니티 & 언리얼 엔진 기반 게임에서는 OpenGL로 전환해도 좋게 됐습니다.

SPIR-V 셰이더는 매우 안정적이지는 않지만 GLSL과 비교하면 엔비디아용 GLAMS에 훨씬 가까운 성능을 보여줍니다.

 

과거에는 적절한 프레임을 위해 RDNA 2의 간단한 해결책을 말했지만 오버클럭이라는 단점이 있어 AS가 어려워졌습니다.

그래서 전세계적으로 적용할 수 있고 AS도 유지하는 대안을 찾았습니다. GPU VRAM을 이용하는 것이죠.

간단한 방식으로 어떤 식이든 유즈나 다른 에뮬레이터를 실행하는 동안 통합 비디오 인코더가 백그라운드에서 작동하게 하는 겁니다.

 

설명하면 라데온 소프트웨어의 설정에서 즉시 재생을 켜면 됩니다. 인텔/리눅스 사용자는 엑스박스 게임 바를 사용하거나 버퍼를 유지하게 OBS를 설정해 비슷한 결과를 낼 수 있습니다.

이후에 유즈 설정에서 Emulation > Configure.. > Graphics > Fullscreen Mode에서 Exclusive Fullscreen를 켜고 F11을 눌러 전체화면으로 게임을 하면 됩니다.

바탕화면 녹화 설정도 켜면 전체화면으로 하지 않아도 되지만 유휴 상태에서도 전력 소비가 늘어납니다.

성능은 오버클럭 방식과 동일하게 GPU 병목 현상이 있는 게임에서 최대 73% 개선됩니다.

 

RX 6500 XT, RX 6400는 H.264 및 H.265/HEVC 인코딩 기능이 빠져서 안 됩니다.

이전처럼 오버클럭을 하거나 다른 제품을 사용하세요.

 

 

인텔은 최근 9세대, 9.5세대, 11세대의 윈도우용 내장 그래픽 드라이버를 레거시로 처리했습니다. 2020년 출시한 제품도 있으니 2년도 되지 않은 제품도 있죠.

공식적으로 더 이상 업데이트가 없다는 뜻으로 유즈에 즉시 영향을 주진 않지만 지난 번 AMD가 GCN 드라이버를 중단했던 것과 유사한 일이 일어날 수 있습니다. 미래에 추가할 새 Vulkan 기능을 지원하기 어려울 수 있죠.

내장 그래픽을 사용하는 인텔 사용자는 더 오래된 하드웨어를 지원하는 리눅스가 남아있습니다. 리눅스는 인텔 4세대 제품인 하스웰의 내장 그래픽인 HD 그래픽스 4400도 메사(Mesa) 드라이버를 통해 유즈를 실행할 수 있습니다.

 

가까운 시기에 CPU를 변경하지 않을 것이라면 리눅스를 사용하는 걸 고려해보세요. 메사는 윈도우용 인텔 내장 그래픽 드라이버보다 항상 성능이 더 좋았습니다.

 

 

향후 과제

 

프로젝트 Y.F.C 2부는 약간 지연되고 있지만 진행 상황이 있습니다.

프로젝트 런던은 잘 되고 있고 내부 테스트 결과도 좋습니다.

더 나은 GPU 성능을 위한 가능성이 최근 열렸는데 드라이버 지원이 주요 장애물이었고, 현재는 대부분 해결됐습니다. AMD, 인텔, AMD 리눅스 커널 모듈 개발자와 논의하여 요청하면 되죠.

문제를 해결하면 리사이저블 바(스마트 액세스 메모리)를 부분적으로 활용할 수 있어 PCIe 병목 현상을 줄이는데 도움이 될 겁니다.

댓글