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

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

by 사과향잉크 2022. 9. 19.

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

큰 변경점은 그래픽, 커널, 파일 시스템, UX 개선과 네트워킹 에뮬레이션입니다.

 

그래픽 변경

제노블레이드 크로니클스 3

7월 출시한 게임인 제노블레이드 크로니클스 3는 출시와 동시에 유즈로 실행할 수 있었지만 안정성 문제가 있었습니다.

이 중 하나는 리컴파일러로 유즈는 GLSL 컴파일러를 사용하기 때문에 Vulkan 셰이더 언어로 SPIR-V를 생성하지 않고, 직접 하는데 속도는 더 빠르지만 오류가 일어날 가능성이 높습니다.

이렇게 되면 컴파일할 때 셰이더가 드라이버를 충돌하게 했고 Maide와 byte[]는 빨리 문제를 해결하여 출시와 동시에 게임을 실행할 수 있었죠.

 

이 게임의 파이프라인 세트는 거대하고, 게임을 좀 하면 캐시가 15,000개 이상이 됩니다.

유즈는 모든 그래픽 백엔드에서 게임 실행 전 미리 셰이더를 컴파일하고, 그 전에는 실행이 안 됩니다.

게임이 큰 만큼 GLSL의 OpenGL로 이 게임을 컴파일하면 1분 이상이 걸리는데 도중에 취소할 수도 없습니다. 유즈를 종료하려고 하면 컴파일할 때까지 기다린 다음 꺼집니다.

byte[]는 각 셰이더가 컴파일 후 취소했는지 확인하게 만들어 언제라도 종료할 수 있게 했습니다.

 

에뮬레이션에도 문제가 있는데 유즈는 게임 도중 최대한 게임이 끊기지 않게(스터터링) 하기 위해서 실행 전에 모든 파이프라인을 로드하려고 합니다. 그게 수천개 뿐이라면 괜찮지만 말했다시피 이 게임은 15,000개 이상이므로 GPU 드라이버의 메모리 사용량이 폭증합니다.

유즈와 뿌리가 같은 Cemu도 엔비디아 GPU에서 그런 문제가 있었죠.

 

또 다시 byte[]가 나섰고 유즈가 GPU 드라이버가 필요한 것보다 더 많은 메모리를 가질 수 있는 문제를 발견하고, OpenGL이 컴파일하지 않은 셰이더의 소스 코드까지 추적한다는 것을 알아내고 적당히 조절했스니다.

이제 OpenGL로 GPU 메모리(VRAM)과 램을 훨씬 적게 사용합니다.

 

또 다른 문제로 OpenGL은 안정적이었지만 Vulkan은 초기 셰이더 문제 수정 후에도 컷신 중에 무작위로 충돌했죠.

또 다시 byte[]가 문제를 재현 후 이 문제가 게임이 원래 이런 건지 버그인지는 둘째치고 적절히 우회했습니다.

 

Vulkan 문제를 하나 더 들면 윈도우에서 AMD GPU를 사용하는 경우 Vulka 지원이 이상했죠.

테스터 한 명이 Vulkan 오류가 있었는데 리눅스 메사 드라이버는 지원했지만 윈도우 드라이버에서 지원하지 않는 형식을 사용하려고 해서 그렇다고 판단했습니다.

byte[]는 둘 모두 사용할 수 있는 형식으로 대체해 여러 문제를 해결했습니다.

 

Vulkan 수직동기화

GPU와 관련 없는 변경점이 있습니다.

Vulkna을 지원한지 몇 년이 지난 뒤에야 djrobx가 Vulkan에서 수직동기화를 추가해 모니터와 유즈 프레임이 동기화하여 저더링을 방지합니다.

 

Merry는 GPU 프로레서를 최적화했고 게임 성능에는 큰 영향이 없지만 콘솔에 표시할 모든 프레임을 변환하는 홈브류 앱(혹은 에뮬레이터)의 성능이 크게 좋아집니다.

 

구현 전 / 후
구현 전 / 후

vonchenplus는 일부 게임 회사가 사용하는 레거시 OpenGL 형식을 구현했습니다.

모든 텍스처가 직사각형이라고 생각할 수 있지만 뭔가 다릅니다. 그렇게 유용한 기능은 아닌데 여전히 사용하는 회사가 있습니다.

덕분에 같은 엔진을 패스트 RMX, 더 투어리스트의 많은 렌더링 문제를 해결했습니다.

그리고 패스트 RMX에서 그래픽 설정 중 다니아믹 카메라 노출을 끄면 지나치게 밝아지는 렌더링 버그도 수정했습니다. 이 게임은 OpenGL에서 더 안정적인 것 같습니다.

 

또한 vonchenplus는 레트로아크가 유즈에서 작동하기 위해 필요한 몇 가지 지원을 구현했습니다.

에뮬레이터 안의 에뮬레이터죠. 이렇게까지 해야하나 싶긴 합니다.

먼저 콘솔 클럭 속도를 제어하는 clkrst 서비스로 레트로아크가 부팅할 수 있게 합니다. 유즈에는 큰 의미가 없습니다. switch-mesa의 특수 동작도 있죠.

 

지원 전 / 후

프로젝트 런던(LDN)을 손보면서 Tobi는 로켓 리그가 제대로 작동하지 않는 몇 개의 문제를 발견했습니다.

byte[]는 싱글 코어에서 실행할 수 있다는 걸 알아냈으나 Vulkan 렌더링이 끔찍했습니다. 그래서 게임이 쓰는 R16G16B16X16 형식을 지원해 해결했지만 아직 이 게임을 유즈에서 하려면 더 많은 일이 필요합니다.

 

그는 매그넘 오푸스를 작업하면서 슈퍼 마리오 갤럭시와 슈퍼 마리오 선샤인의 문제도 해결했습니다. 버파 캐시의 문제로 이를 해결하면서 덜 정확해졌으며 대부분의 게임은 영향이 없지만 마리오 + 래비드 킹덤 배틀, 스플래툰 2, 슈퍼 스매시 브라더스 얼티밋은 약간 깜빡이는 문제가 생겼습니다.

사진의 pessimistic buffer flushes 기능으로 자유롭게 시험해보세요.

 

추가 전 / 후

German77으 일부 게임에서 사용하는 뷰포트 스위즐링 확장에 관한 에뮬레이션을 추가했습니다.

엔비디아 GPU에서만 지원하는 기능이라 AMD, 인텔에서는 거꾸로 렌더링되거나 뒤집힌 것처럼 보였죠.

이제 베어너클 4, 셀레스트, 엑시엄 버지 등 여러 게임을 AMD와 인텔 GPU로도 플레이할 수 있습니다.

 

 

CPU, 커널, 파일 시스템 에뮬레이션

 

아직도 윈도우 7을 사용한다면 좋은 소식이 있습니다. vladkosi 덕분에 metty는 윈도우 10 1803 이전 윈도우를 지원할 수 있게 했습니다.

그럼에도 리눅스와 윈도우 10 1803 이상만 공식 지원한다는 점은 변함 없습니다.

 

모드 커뮤니티를 위한 몇 가지 변경점도 있습니다.

과거에는 호환되지 않는 방식으로 분석했기 때문에 pchtxt 모드에 인라인 주석을 허용하지 않았습니다. 이제는 16진수 값 문자열을 구분하므로 주석을 추가할 수 있습니다.

 

현 파일 시스템 에뮬레이션은 정보가 적었을 때 추측해서 만들었고, 지금은 활동하지 않는 개발자도 참여했기 때문에 스파게티 코드나 마찬가지였습니다.

쉽게 처리할 수 있는 방법은 없었기 때문에 Morph는 프로젝트 가이아라는 이름으로 현 가상 파일 시스템을 1년 넘게 완전히 다시 만들고 있습니다.

 

개발자와 모드 개발자가 겪는 문제를 해결하기 위해 빌드 ID등 몇 가지 일을 할 수 있습니다.

또한 위에서 말했다시피 유즈에서 레트로아크를 사용할 수 있게 하면서 파일 크기 분석 과정에서 성능에 안 좋은 영향이 있다는 걸 발견했습니다. 사용자 입장에서는 정보를 무시하게 처리하면 됩니다.

이는 유즈에서 스위치 게임을 할 때는 상관 없고 레트로아크 로딩이 빨라지는 변경점입니다.

 

UI 변경

 

사람들은 오랫동안 유즈에서 소리가 더 크길 바랐기 때문에 Maide는 200%까지 음량을 설정할 수 있게 바꿨습니다. 실제로는 11이죠.

일부 게임은 사용 중인 기기의 출력에 음량이 맞춰지므로 주의해야합니다. 예를 들어 독 모드는 휴대 모드보다 소리가 더 큽니다.

 

유즈는 3DS 에뮬레이터인 시트라를 기반으로 하며 지금은 관련 없거나 오래된 코드도 남아있습니다.

예를 들어 초기에 유용하게 사용한 ELF 바이너리 로드가 있습니다. XCI, NSP 덤프를 처리하는 대신 윈도우에서 exe 파일을 실행하는 것과 유사하게 게임 파일 구조를 덤프 및 추출해 ELF 바이너리로 직접 로드했죠.

몇 년 후 이 기능은 빛을 잃었고 작동하지도 않습니다.

코드 정리는 지루하지만 꼭 필요한 일입니다. 이 부분은 처리 우선 순위도 아니라 그냥 제거했습니다.

 

 

윈도우에서 아시아 언어를 사용하는 사람은 게임 목록의 크기 열과 속도 백분율이 매우 이상해보인다는 걸 발견했습니다.

또 아시아 언어 전용 버그가 있는데 예를 들어 중국어에서 영어로 전환하면 하단 필터 표시줄과 상단 게임 목록의 언어가 바뀌지 않습니다. Docteh가 전부 처리했습니다.

그는 대화상자 등 몇 가지 다른 UI도 수정했습니다.

 

 

입력 개선

 

컨트롤러로 유즈를 조작하는 방식은 최근에 지원했고 개선할 수 있습니다.

'게임 실행 시 유저 확인' 기능을 켜면 컨트롤러로 설정을 변경하거나 게임을 실행할 수 있지만, 프로필을 변경하거나 게임 실행을 취소할 수 없는 문제가 있습니다. 신참인 JonesyUK가 Qt를 좀 손봐서 해결했습니다.

 

일부 사용자는 유즈보다 DS4Winodws를 사용하는 걸 선호하고 간단한 Xinput 에뮬레이션 방법이지만 몇 가지 문제로 이어질 수 있습니다.

DS4Winows는 2개의 후속 진동 명령을 처리할 수 없어 진동이 계속 이어지고 불편합니다. 그래서 german77은 정지 신호를 건너뛰지 않게 약간 지연을 넣었습니다.

그는 마리오 파티 슈퍼스타즈 버그를 수정하기 위해 배터리 잔량 아이콘을 수정하면서 컨트롤러 색상을 적절히 에뮬레이트하는 방법을 만드는데 오랜 시간을 썼습니다.

 

IR 카메라를 지원하면서 출력을 저장소에 저장하는 문제가 있었습니다. 그래서 많은 파일이 저장공간을 차지했죠.

초기 구현의 문제로 german77이 빠르게 출력을 버퍼로 옮겼습니다.

파일을 제거할 수 없는 경우 명령 프롬프트나 터미널을 열고 사진 폴더로 이동하여 del IMG_00*.jpg를 실행하면 전부 지워집니다.

 

 

하드웨어

 

인텔 아크 A380 GPU로 Vulkan을 사용해 게임을 실행하는데 문제가 있다는 정보를 받았습니다.

이 제품은 전세계에서 판매하는 제품이 아니기 때문에 직접 확인하기가 어려우므로 깃허브나 디스코드에 문의하시기 바랍니다.

 

AMD GPU로 제노블레드 크로니클스 3를 하면 특정 지점에서 문제가 있다고 합니다.

현재는 특정 지점에서는 OpenGL 및 2X 해상도로 게임을 실행하고, 그 부분을 넘어간 뒤에 Vulkan으로 바꾸는 게 해결책입니다.

이 이상한 상황에 대해 AMD에 이야기했고, 지금까진 소식이 없지만 뱅가드 베타 테스트 프로그램에 접근할 수 있기에 드라이버에서 해결되면 바로 알려드리겠습니다.

OpenGL에서 게임이 그렇게 느리지는 않지만 Vulkan에서 셰이더 스터터링 향상이 훨씬 좋습니다.

드라이버에 내장된 버그 보고 도구의 간접적인 접근 방식은 콘솔 에뮬레이터의 특정 요구 사항에 적절하지 않기 때문에 더 많은 에뮬레이터 개발자가 뱅가드를 적용하길 추천합니다.

 

엔비디아는 516.XX 드라이버가 맥스웰 및 파스칼 GPU가 충돌하는 원인의 큰 부분을 차지한다는 걸 알았습니다. 컴퓨팅 셰이더 기반 ASTC 텍스처 디코더와 동조하는 컴퓨팅 셰이더를 일부 바꿨기 때문이죠.

지난 달도 그렇고 엔비디아가 드라이버를 업데이트해서 문제가 생긴 것이 처음이 아니고, 또 이러한 문제가 일어나는 걸 막기 위해 Morph가 개발한 멀티 스레드 CPU 디코더로 전환하는 걸 고려하고 있습니다.

그리고 코에이 게임에서 일어나는 그림자 문제 원인은 아직 조사 중입니다.

 

 

향후 계획

 

GPU 에뮬레이션 개선 프로젝트인 프로젝트 Y.F.C가 지연되는 건 일반 사용자 뿐만 아니라 개발 진전에도 방해입니다.

AMD가 OpenGL 문제를 수정할 것이라고 누구도 예상하지 않았듯이, 엔비디아가 우리에게 일부 문서를 공개했습니다. 공식적이라기보단 부분적이고 아주 은밀합니다.

문서에는 맥스웰 3D 레지스터의 고유명, 완전히 새로운 레지스터와 이전에 알려지지 않은 값 등이 있습니다.

Maide는 이 공식 정보로 많은 코드를 확인, 교체, 정리했지만 적용되는데는 시간이 필요합니다.

이번 일로 게임의 문제를 해결할 것이라고 예상하지는 않지만 이해와 정리는 가치가 있습니다.

 

젤다의 전설: 브레스 오브 더 와일드, 제노블레이드 크로니클스 3, 진 여신전생 5 등 대역폭이 부족한 일부 게임에 도움이 되는 실험으로 Vulkan의 스트림 버퍼 크기를 늘려봤습니다.

시험해보니 버퍼 크기를 256MB로 제한하는 리사이저블 바의 지원이 없어도 시스템에 따라 성능이 10~50% 좋아졌씁니다. 사용할 수 있는 모든 VRAM에 접근한다면 더 좋아지겠죠.

 

43 → 50. 7프레임 증가

byte는 슬라이더로 쉽게 기능을 시험하는 초안을 구성했지만 최종 목표는 동적 관리므로 실제 공식 출시판에서 UI 설정으로 나오진 않을 겁니다.

 

그리고 프로젝트 런던을 마무리하면서 Tobi는 LDN 뿐만 아니라 LAN 게임도 로컬 네트워크를 지원하는 커스텀 룸을 포함하게 프록시 소켓 패킷 기능 추가, 일부 필수 데이터 유형 추가, 방 기능 개선 등 적극적으로 작업했습니다.

 

로컬 무선 멀티플레이 기능인 프로젝트 런던은 이전에 설명했습니다.

약 열흘 전에 출시해 유료 기부자만 사용할 수 있었으나 이제 일반 사용자도 사용할 수 있습니다.

댓글