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

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

by 사과향잉크 2022. 10. 20.

스위치 에뮬레이터 유즈(yuzu)의 2022년 9월 변경점입니다. 다양한 점을 개선했습니다.

 

 

프로젝트 런던: 오픈 소스, 온라인 로컬 무선 에뮬레이션

 

지난 번에 설명했듯이 LDN를 지원합니다. 들어가기 전에 닌텐도 스위치의 멀티 플레이 방식을 살펴봅시다.

스위치는 4가지 멀티 플레이 방식이 있습니다.

 

1. 로컬 멀티플레이

Co-op, 소파 협동 등으로 표현하는 방식으로 같은 공간에 있는 사람끼리 합니다.

사람들은 가능한 낮은 지연으로 즐기기 위해 파섹 등의 원격 스트리밍 서비스를 이용하기도 합니다.

 

2. 근거리 통신망(Local Area Network)

스위치 여러 대를 같은 로컬 네트워크에 연결합니다. 오랫동안 유즈에서 사용할 수 있었던 방식이죠. 극소수의 게임만 가능하고 지연이 좀 있습니다.

 

3. LDN 멀티플레이

보통 로컬 무선 멀티플레이라고 부르며 이번에 설명할 기능입니다.

스위치 1대는 호스트가 되어 와이파이 기기로 세션을 호스팅하고, 다른 스위치가 게스트로 연결합니다.

에뮬레이터가 서버 인프라를 사용해 방을 호스팅하는 걸 막을 수 없기 때문에 전세계에서 만날 수 있습니다.

근거리 통신망보다 훨씬 많은 게임에서 지원합니다.

 

4. 닌텐도 스위치 온라인 멀티플레이

닌텐도의 유료 멀티 플레이 서비스인 닌텐도 스위치 온라인으로 합니다. 닌텐도 스위치 온라인은 공식 고전 게임 에뮬레이터 등의 기능도 있습니다. 근시간 내 지원 계획은 없습니다.

 

프로젝트 런던은 방 호스팅 참여와 LDN 완전 지원을 포함해 LDN 코드를 사용하도록 LAN 지원을 개선합니다.

 

멀티플레이를 하려면 유즈를 실행하고 메뉴에서 멀티플레이어(Multiplayer) 설정을 누르고, 공개 방 찾아보기(Browse Public Game Lobby)를 누르거나 창의 오른쪽 아래의 '연결되지 않음'으로 나오는 글을 누르면 됩니다.

나타난 방을 더블 클릭하면 참여할 수 있습니다. 방의 선호하는 게임은 제안일 뿐이며 그 방에서 그 게임만 하라는 제한은 없습니다.

호스팅하는 방은 추방하거나 방을 잠그는 등의 행동이 가능합니다.

 

방 목록

방을 만들기 위해선 멀티플레이어 메뉴에서 방 만들기(Create Room)을 누르면 방 이름, 유저 이름, 선호하는 게임, 비밀번호, 최대 플레이어, 포트, 방 설명을 정할 수 있습니다.

일부 포트는 호스트의 라우터/모뎀 구성을 따르므로 여기를 참고하세요.

방 만들기

방에 참여하면 다른 사람과 대화할 수 있고, 자신이 하는 게임을 볼 수 있습니다.

아주 중요한 부분으로 다른 사람이 하는 게임의 버전도 볼 수 있습니다. 게임 대부분은 버전이 동일해야 멀티 플레이를 할 수 있으니 최신 버전을 사용하는 게 좋습니다.

 

유즈에서 게임을 실행하기 전에 방에 들어갈 필요는 없지만 권장하는 편입니다.

LAN으로는 실제 스위치와도 연결할 수 있지만 LDN은 유즈끼리만 연결할 수 있습니다. 언젠가는 LDN으로 실제 스위치와도 연결할 수 있게 노력하고 있습니다.

 

지금까지 LDN에 문제가 있는 게임은 거의 없습니다.

슈퍼 마리오 메이커 2, 마리오 골프 슈퍼 러시, 드래곤볼 파이터즈만 LDN를 사용할 수 없습니다.

다른 로컬 무선 호환 게임은 잘 작동하지만 문제를 발견하면 수줍어하지말고 알려주세요. 유즈에서 확인해본 게임은 여기를 참고하세요.

 

하나 참고할 점으로 슈퍼 스매시 브라더스 얼티밋은 LDN을 사용하면 하드코딩된 6프레임의 지연이 있습니다.

온라인 및 와이파이로 게임을 할 때 대기 시간을 버퍼링할 때 도움이 되라고 만든 것으로 추측하고 있습니다.

로컬 멀티 플레이에서는 지연이 없기 때문에 파섹 등을 사용해 로컬 멀티 플레이를 하는 게 좋지만, 모든 사람이 호스트 업로드 속도가 좋은 것이 아니고 원격 스트리밍에 익숙하지 않은 사람도 있다는 단점이 있습니다.

속도 퍼센트 제한은 사진과 같이 체크도 되고, 파란 배경색도 있어야 변경 가능

대안으로는 게임을 120프레임으로 실행하여 지연을 3프레임으로 줄이는 방법이 있습니다. 이렇게 하려면 그 방에 있는 모든 사람이 아래처럼 설정해야합니다.

 

1. 여기에서 120프레임 모드를 설치하세요. 유즈의 게임 목록에서 게임을 마우스 오른쪽 버튼으로 누르고 'MOD 데이터 경로 열기'를 누른 다음 열린 위치에 압축을 풀어서 나온 폴더를 넣습니다.

2. 게임 목록에서 게임을 마우스 오른쪽 버튼으로 누르고 '속성'을 누른 다음 일반 탭을 누르고 속도 퍼센트 제한을 해제하고 200%로 설정합니다.

 

주의점으로 속도 퍼센트 제한은 3가지가 있습니다.

먼저 속도 퍼센트 제한은 말 그대로 제한입니다.

한 번 클릭하면 제한은 풀리나 문구에 파란 배경색이 생기고 오른쪽의 속도제한은 풀수 없습니다. 속도를 제한하지 않고 게임 기본값을 사용하겠다는 뜻입니다.

한 번 더 누르면 체크가 되고 파란 배경색도 있는데 게임 값을 무시하고 사용자 지정 값을 사용한다는 뜻입니다. 바로 이걸로 설정해야 속도를 바꿀 수 있습니다.

 

당연하지만 120프레임으로 게임을 하려면 GPU(그래픽카드) 성능이 받쳐줘야합니다.

따라서 최소 권장 사양으로는 제대로 즐기기 어려울 수 있습니다. 예시로 유즈 최소 사양 GPU AMD 라데온 RX 550은 1v1 전투 상황에서 100프레임도 나오지 않습니다.

그래도 RX 550은 5년 전 제품이니 최신 중저가 그래픽카드는 괜찮을 겁니다.

그리고 AMD 윈도우 드라이버는 디스플레이가 60프레임 이상의 고주사율을 지원해야만 그 이상의 프레임에 도달합니다. AMD에 이 문제를 알렸고 빨리 해결하여 사람들이 고주사율 모니터를 강제로 사용하는 일이 없길 바랍니다.

 

이 노력은 라이센스를 면제해준 ldn_mitm 프로젝트, 열심히 작업한 Tobi와 german77, 진전이라는 명목으로 여러 게임을 즐겁게 충돌시키는 여러 테스터 덕분에 가능했습니다.

다른 사람들과 싸우고, 포켓몬을 교환하는 등 즐기시길 바랍니다.

 

아, 그리고 정식 출시 후 리눅스 사용자는 LDN 방이 일부 리눅스 배폰에서 작동하지 않는 걸 알아냈습니다.

SSL 패키지가 배포되는 방식에 문제가 있었으나 Docteh가 해결했습니다.

간혹 포켓몬스터 소드 · 실드에서 충돌하는 문제를 겪는 사람이 있는데 팀이 문제를 해결할 때까지는 메뉴에서 에뮬레이션 →설정→시스템→네트워크로 이동해서 네트워크 인터페이스를 없음 외의 다른 것으로 설정하세요.

네트워크 인터페이스가 '없음'으로 설정된 경우에 충돌하는 것 같습니다.

 

 

그래픽 변경

수정 전 / 후

엔비디아 OpenGL 사용자는 드래곤 퀘스트 빌더즈, 스낵 월드 트레져러스 골드, 쯔꾸르 시리즈 늑대의 카구야 공주 등의 게임에서 유즈의 performance-enhancing vertex_buffer_unified_memory 확장 처리 때문에 이상한 결함을 봤을지도 모릅니다.

vonchenplus가 수정해서 이제 제대로 렌더링 됩니다.

 

수정 전 / 후

라이브 어 라이브에서 달이 사각형인 걸 봤을 수도 있습니다.

텍스처 캐시가 게임이 모든 레이어에 사용하는 ASTC 텍스처를 제대로 동기화하지 못해서 그런 것으로 vonchenplus가 해결하여 이제 달이 둥글어졌습니다.

 

스팀 등은 Vulkan 지원을 확인하기 위해 새 프로세스를 만드는 유즈의 동작을 좋아하지 않습니다.

toastUnlimited가 Vulkan 검사기를 업데이트해 이전 빌드와 동일하게 작동하게 바꿨습니다.

 

3개월간의 문제와 평소처럼 매우 늦어진 결과 드디어 프로젝트 Y.F.C 1부를 마침내 일반 사용자용 유즈에 통합했습니다.

GPU 에뮬레이션 개선 작업이며 자세한 건 7월 보고서에서 확인할 수 있습니다.

현재는 스플래툰 2의 싱글 플레이 모드에서 특정 퍼즐에 영향을 주는 문제가 남아있고, 이 문제를 겪는다면 2부로 문제를 해결할 때까지 일반 사용자용 1190 버전을 사용하는 게 좋습니다.

 

지난 달 보고서에서 리사이저블 바(스마트 액세스 메모리)를 사용할 수 있는 GPU 사용자의 성능 향상을 위해 보다 공격적인 스테이징 버퍼 값 푸시 시도를 언급한 적이 있습니다.

일반 사용자용 1189 버전에 잠깐 넣었는데 사람들이 CPU, GPU 종류에 무관하게 성능 향상과 하락 둘 다 크다고 알렸습니다.

플랫폼에 따라 매우 다른 성능을 보여주며 평균적으로 성능이 떨어지기 때문에 다시 뺐습니다.

 

닷핵//G.U. 라스트 리코드는 과도한 수직 동기화 이벤트 호출로 실행할 수 없는 문제가 있었습니다.

디스플레이당 한 번으로 이벤트를 제한하니 드디어 실행할 수 있었습니다.

 

 

오디오 변경

 

지난 달의 제노블레이드 크로니클스 3의 처리는 새로운 오디오 처리와 함께 이번 달도 계속됩니다.

Maide의 작업으로 일부 사람들이 컷신에서 오디오가 적절하지 않은 문제를 해결했습니다. Maide가 오디오를 구현할 떄 호스트 오디오 백엔드(SDL이나 Cubeb)가 적절한 시간에 재생할 수 없는 샘플을 너무 빨리 만드는 문제가 있었기 때문이며 지금은 샘플을 너무 많이 만들면 오디오 백엔드가 따라잡을 때까지 게임을 일시정지합니다.

 

그는 오디오 시스템과 일시정지 및 종료에 관해서 상대적으로 큰 규모의 정리를 했습니다.

유즈의 타이머 시스템인 코어타이밍과 독립적으로 실행되는 백엔드를 처리하는 자체 타이머가 있었는데 후자를 없앴죠.

하지만 이런 변경으로 다시 생긴 문제도 있었는데 Maide가 다시 처리했습니다.

 

그 외에도 오디오를 작업한 사람은 더 있습니다.

vonchenplus는 Opus 오디오의 최적화 서비스인 HwOpus 서비스가 드래곤 퀘스트 X를 실행하는데 필요한 멀티 스트림 기능이 없다는 걸 알아차리고, GetWorkBufferSizeForMultiStreamEx라는 새 기능을 추가하여 게임을 실행할 수 있었습니다.

 

 

코어 에뮬레이션

 

유즈는 느리지만 확실하게 홈브류 앱을 실행하는 능력이 좋아지고 있습니다.

유즈에서 젤다의 전설: 시간의 오카리나의 PC 이식인 Harkinian 홈브류가 제대로 작동하지 않자 흥미를 느꼈고, 누락된 서비스가 하나 있다는 걸 알아냈습니다.

german77가 글꼴을 불러오는 pl:s 서비스를 추가해 게임은 최대 60프레임으로 프레임 보간이 됩니다.

 

다른 아키텍처 처리 부문에서 liushuyu는 ARM64 아키텍처와 부분적으로 호환되게 유즈의 CMake 설정을 수정했습니다.

이를 통해 ARM64용 yuzu-room LDN 서버 애플리케이션을 구축할 수 있습니다.

 

 

입력 변경

 

유즈의 입력 에뮬레이션과 관련한 오랜 문제 중 하나는 컨트롤러를 다시 연결하면 작동하지 않는다는 점이었습니다.

유즈는 컨트롤러를 처음 연결할 때만 모션 컨트롤을 확인하고 재연결 때는 확인하지 않아서 생기는 문제였고, german77이 모든 재연결에서 확인하게 바꿔서 해결했습니다.

 

수년 동안 유즈는 인기 있는 몬스터볼 플러스의 에뮬레이션 지원이 없었습니다.

역공학을 진행하면서 german77은 가장 의미 있는 기능이 닌텐도 스위치 온라인에 엮여있다고 알아냈습니다. 그렇게 되자 그는 관심을 잃었지만 에뮬레이션을 부분적으로 구현해 다른 사람들이 개선할 수 있게 했습니다.

지금은 포켓몬스터 레츠고! 피차큐 · 레츠고! 이브이에서 이 컨트롤러를 선택할 수 있으며 모션 컨트롤도 지원합니다. 다만 몬스터볼 플러스에 데이터를 넣거나 빼는 건 안 됩니다.

 

지난 달의 아미보 에뮬레이션 지원 작업에서도 주요 개선점과 버그 수정이 있었습니다.

그래서 아미보 키는 모든 데이터를 읽고 쓰는데 필수 요구 사항이 됐습니다. 그렇게 하자 삽질기사, 슈퍼 스매시 브라더스 얼티밋 등의 게임에서 아미보 지원 문제도 해결됐죠.

 

게임큐브 컨트롤러의 입력 지정의 사소한 버그로 GC 트리거가 ZL/ZR 버튼을 덮어쓰는 문제를 수정했습니다. german77은 추가 보완으로 사용성 확장을 위해 아날로그 입력 버튼도 토글할 수 있게 했습니다.

 

접근성은 매우 중요하지만 무시하기 쉬운 부분입니다.

간단한 예를 들면, 사람들이 버튼을 개별적으로 지정하는데 더 많은 시간이 필요하다고 한다면 어떻게 해야할까요?

이런 특별한 경우를 위해 버튼 지정 제한 시간을 2.5초에서 4초로 늘렸습니다.

 

 

UI 변경

 

작은 부분이 중요하다

이번 달에는 여러 기여자들이 UI를 다양하게 개선했습니다.

SD 카드 아이콘은 Dev-draco에서 다양한 색상의 새 마이크로 SD 카드 아이콘으로 교체했습니다.

Tachi107은 소스 코드 안의 몇 가지 사소한 오타를 고쳤습니다.

german77은 에뮬레이션 → 설정 → 컨트롤에 저장된 입력 프로필의 순서를 수정했습니다. 이제 이름별로 정렬합니다.

 

컬러풀 테마가 한동안 기본값이긴 했지만 일부 아이콘은 기본 테마 위치에 남아있었습니다.

그러나 리눅스에서는 다른 테마에서 아이콘을 가져올 수가 없어서 의미가 없었죠. Docteh는 모든 아이콘을 컬러풀 테마로 옮겼습니다.

 

설정의 디버그 탭의 항목이 많아서 Docteh는 스크롤을 넣었습니다. 윈도우 사용자에게도 도움이 되지만 리눅스 사용자는 큰 이점을 누릴 수 있습니다.

그는 TAS 구성 창에서 도움말 페이지의 하이퍼링크가 깨진 것도 수정했습니다.

 

 

그밖에

 

오랫동안 윈도우 사용자가 겪는 버그를 보고받으면 팀에서 수동으로 재현하고 조사해야했습니다.

리눅스 사용자는 스택 추적을 제공하는 설정이 있었지만 우니도우 사용자가 유사한 방식을 쉽게 제공할 방법이 없었기 때문이죠.

toastUnlimite는 유즈 자체적으로 윈도우 크래시 덤프를 생성하게했고, 이제 윈도우 사용자도 쉽게 크래시 덤프를 얻을 수 있습니다.

그렇지만 성능이 크게 떨어져서 사용자가 원할 때 켤 수 있게 했습니다. 게임을 디버그하거나 개발자에게 파일을 전달할 때만 사용하세요.

사용하려면 메뉴의 에뮬레이션 → 설정 → 디버그 탭으로 이동하여 '충돌 후 미니덤프 생성'을 선택하세요.

 

그리고 덤프는 최신 윈도우 SDK 기능을 사용하므로 이번 변경으로 이전 윈도우 설정과의 호환성이 손상될 수 있습니다.

유즈는 공식적으로 윈도우 10 1803 이상만 지원합니다. 물론 리눅스도 지원하고 윈도우보다도 빠릅니다.

 

 

하드웨어

 

정확도를 높이면 충돌하는 AMD

AMD 라데온 GPU는 공식 AMD 드라이버(리눅스 amdvlk 드라이버)로 제노블레이드 크로니클스 3를 실행하면 충돌한다고 합니다.

원인을 알아내기 위해 amdvlk 소스 코드를 조사하고 있으며 가지고 있는 모든 관련 정보를 AMD에 알렸습니다.

 

추측으로는 Macro JIT의 정확도를 개선해서 그런 것 같습니다. 이전 드라이버나 이전 유즈 버전에서도 Macro JIT speedhack를 비활성화하면 공식 AMD Vulkan 드라이버가 충돌하기에 정확도를 개선하면 동일한 결과가 나온다는 거죠. 더 정확해지는데 문제가 되다니 슬픈 일입니다.

영향을 받는 사람은 일반 사용자용 1188 버전을 사용하거나 Vulkan 대신 OpenGL을 사용하세요. Mesa RADV 드라이버는 영향을 받지 않습니다.

 

충돌의 원인 중 하나지만 더 남은 엔비디아

엔비디아는 지난 달에 언급한 다중 스레드 ASTC CPU 디코더를 통합했으므로 엔비디아 맥스웰 및 파스칼 아키텍처 GPU(GTX 745/750/900/1000 제품군) 사용자는 최신 드라이버를 사용하는 경우 ASTC 디코딩을 비활성화하길 강력하게 권장합니다.

에뮬레이션 → 설정 → 그래픽 설정에서 'ASTC 텍스처 디코딩 가속화'를 끄면 됩니다. 켠 상태에서는 GPU로 디코딩하고, 끄면 CPU로 대신합니다.

 

그리고 이제 이 설정을 통해 지포스 MX 제품군을 사용하는 구형 노트북이나 CPU가 ASTC 디코딩을 처리하는 능력이 더 빠른 인텔 내장 그래픽 등 내장 그래픽 성능이 낮은 기기에서 성능을 높일 수 있습니다.

시험해보니 지포스 MX 500, 라데온 베가 7+ 수준에서는 GPU로 하는 게 약간 더 빨랐습니다.

영향을 받는 엔비디아 하드웨어는 ASTC 텍스처를 디코딩하는 동안 성능이 저하됩니다. 예를 들어 젤다의 전설 게임에서는 지도를 열 때인데 그래도 충돌을 막는 게 확실히 더 낫겠죠.

 

최근 드라이버 업데이트로 충돌하는 건 여전하지만 매일 엔비디아 드라이버 개발자를 괴롭히고 있습니다. 이제 인텔만 하면 세 회사에 동일한 일을 하는 거죠.

맥스웰, 파스칼 GPU는 유즈에서 최고의 성능과 호환성을 보장하는 472/473 드라이버를 권장합니다.

최신 드라이버를 사용해도 문제는 없지만 이런 충돌이 해결될 때까지 불안정하고 그래픽의 결함이 있을 겁니다.

튜링, 암페어, 에이다 GPU(GTX 1600, RTX 2000/3000/4000 제품군)도 몇 가지 이상한 동작이 있는데 520/522 드라이버에서 이전 드라이버보다 훨씬 안정적입니다.

엔비디아가 멕스웰, 파스칼 GPU를 언제까지 지원할지 궁금하네요.

 

인텔 아크 지원

GPU로도 작동할 수 있다고 하는 인텔의 새 'AV1 비디오 디코더 카드'의 Vulkan 지원 소식은 아직 없습니다.

물량이 적어서 제품을 구하기가 어렵지만 최대한 빨리 해결하려고 합니다.

OpenGL을 사용할 수는 있지만 인텔은 윈도우에서 OpenGL 지원이 최악인 회사이기에 상당히 나쁜 상황입니다. 리눅스 Mesa 드라이버에서는 OpenGL, Vulkan 둘 다 제대로 작동하고 성능도 우수하다고 합니다.

 

유즈는 매달 보고서를 쓸 때 널리 지원되고 요구사양이 낮은 h.264 인코딩을 사용하고 있습니다.

AV1으로 바꾸면 AV1 하드웨어 디코더가 없는 기기에서는 배터리를 많이 소모할 수 있지만 유사한 수준의 품질을 유지하면서 비트레이트를 더 낮출 수 있습니다. 관련 의견은 유즈 레딧, 포럼, 디스코드에서 전달해주세요.

 

향후 계획

 

아직은 할 말이 많이 없습니다. 다르게 말하면 새 프로젝트를 과장되게 말하고 싶지 않습니다.

Blinkhawk는 프로젝트 Y.F.C 2부를 작업하기 시작했고 Byte[], Maide, vonchenplus도 렌더링 정확도와 성능을 향상시킬 기밀 작업을 수행 중입니다.

프로젝트 Y.F.C가 일반 사용자용에 통합된 건 지금까지 보류한 많은 프로젝트의 발판이 됩니다. 다음에 더 자세히 얘기하죠.

댓글