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

스위치 에뮬레이터 유즈, 7월의 여러 개선점 소개

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

스위치 에뮬레이터인 유즈(Yuzu) 개발진은 7월의 여러 개선점을 소개했습니다.

페이퍼 마리오 종이접기 킹, 가상 메모리 관리자, UI 변경점, 버그 수정 등 다양한 내용이 있습니다.

 

버그 수정

수정 전 / 후

Rodrigo는 페이퍼 마리오 종이접기 킹이 렌더링을 시작할 때 게임이 멈추지 않게 했고, OpenGL 그래픽 아티팩트 문제를 해결했으며, 셰이더 디코더에서 S2R.Laneld 명령을 구현해 조명 문제를 해결했습니다.

 

수정 전 / 후

bunnei는 GPU 가상 메모리 관리자를 완전히 다시 만들었습니다.

덕분에 많은 게임에서 버그가 해결되었고 특히 마리오 카트 8의 보이지 않는 지형, 슈퍼 스매시 브라더스의 그래픽 문제를 해결했습니다.

커밋 메모리를 약간 줄이기도 했는데 Vulkan의 높은 VRAM 사용량과는 관계 없습니다.

 

32비트 에뮬레이션을 지원하면서 bunnei는 임의 및 기본 미(Mii) 생성을 구현했습니다. 완전하지는 않습니다.

미를 만들면 마리오 카트 8 디럭스, 뉴 슈퍼 마리오 브라더스 U 디럭스 등을 플레이할 수 있게 됩니다.

이렇게 하려면 Goldleaf를 사용해 스위치에서 시스템 아카이브를 덤프해야합니다.

 

Morph는 커비 스타 얼라이즈의 버그를 하나 고쳤으며 epicboy는 게임큐브 어댑터를 지원하게 해 게임큐브 컨트롤러를 쓸 수 있게 했습니다.

 

수정 전 / 후

Rodrigo는 지포스 튜링 GPU(RTX 2000 & GTX 1600)에서 젤다의 전설: 브레스 오브 더 와일드가 튕기는 문제를 해결했습니다. 젤다의 전설: 꿈꾸는 섬에서 풀이 검은색으로 나오는 문제도 해결했죠.

그는 지난 달 OpenGL에 이어 Vulkan에서도 슈퍼 마리오 오디세이의 삼각형 문제를 해결했습니다.

gdkchan, Blinkhawk의 도움으로 2D 픽셀 배열의 3D 복셀로 복사 지원을 추가하고 레고 마블 슈퍼 히어로즈 2 등의 렌더링 버그를 수정했습니다.

toastUnlimited와 함께 엔비디아 리눅스 Vulkan 드라이버에서만 일어나는 충돌 문제를 해결하려 애쓰기도 했습니다. 대부분의 GPU에서 상태가 완화되었지만 그것뿐입니다.

 

개발진은 멀티 코어에서도 싱글 코어와 비슷한 기능을 가질 수 있게 노력하고 있습니다.

ogniK는 새로운 멀티 코어 & 싱글 코어 에뮬레이션 방법 구현과 같이 생긴 오디오 버그를 수정해 오디오 타이밍을 개헌했습니다.

 

리눅스에서는 싱글 코어로 게임을 하면 언제라도 꺼질 수 있기 때문에 멀티 코어만이 유일한 해법이었는데요.

Lioncache는 이 문제를 해결하여 이제 리눅스에서도 싱글 코어로 게임을 원활히 할 수 있습니다. 멀티 코어에서 불안정한 루이지 맨션 3 등의 게임을 싱글 코어로 즐길 수 있죠.

 

프로젝트 코브라

 

6개월 전, Morph는 여러 업데이트와 DLC를 한 번에 설치할 수 있는 일괄 설치 프로그램을 구현했습니다.

많은 이들에게 요긴했지만 프로젝트 바이퍼라는 새 가상 파일 시스템(Virtual File System, VFS)에 관한 기대와 몇 가지 문제로 오랫동안 얼리 액세스에만 있었죠.

ogniK가 희망을 다시 가지고 동기를 부여해 Morph는 남은 문제를 수정했고 드디어 일반 빌드에 통합했습니다.

 

수많은 DLC를 한 번에 설치할 수 있다

프로젝트 바이퍼는 연기했고 Morph는 유즈를 괴롭히던 VFS의 버그를 수정하기 위해 애썼습니다.

유즈가 업데이트와 DLC를 낸드에 설치하고 정확하게 읽지 못한다는 건 잘 알려진 문제였는데요.

게임 파일을 하나하나 쉽게 제거할 수 없기 때문에 사람들은 유즈가 새로운 업데이트나 DLC를 제대로 인식하게 만드려고 설치한 모든 게임 파일을 삭제해야했습니다.

그는 VFS 내부를 자세히 살펴보았고 새로 업데이트나 DLC를 설치할 때 이전에 설치한 것이 삭제되지 않아 유즈가 제대로 파일을 인식하지 못하는 것으로 밝혀졌습니다.

그래서 이전에 설치한 업데이트, DLC가 있다면 적절하게 삭제하게 만들어 문제를 해결했습니다.


또, 유즈가 자동 생성하는 타이틀 키를 저장하는 방식의 문제도 수정했습니다.

이제 유효하지 않은 타이틀 키를 title.keys_autogenerated 파일에 저장하지 않습니다.

유즈가 게임 업데이트와 DLC가 탐지하지 못하는 경우, 새로운 게임 정보를 해독하기 위해 새로운 펌웨어 키가 필요하므로 스위치에서 최신 키 파일을 덤프했는지 확인하세요.

이후로는 이전에 설치한 업데이트와 DLC를 덮어쓰므로 게임 파일을 전부 삭제할 필요가 없습니다.

 

그는 가장 오래되었고 유명한 VFS 버그 중 하나인 루이지 맨션 3 자동 저장 문제에 다가갔습니다.

자동 저장 때마다 게임이 망가지는 문제로 오카미 HD, 카타나카미 등에도 같은 문제가 있었죠.

루이지 맨션 3의 저장 부분을 넘기는 theboy181의 모드를 바탕으로 그는 VFS 코드를 파고 들었습니다.

그리고 파일 이름을 바꾸거나 이동하기 전에는 파일이 닫히지 않는다는 걸 알아냈으며 간단히 해결했습니다.

 

디아블로 3: 이터널 컬렉션은 EULA 화면을 통과하지 못해서 저장 파일을 이용해 화면을 넘겨야 했습니다.

그는 이 부분도 파고들어고 오래된 PR 때문에 파일 대신 폴더가 만들어져 생기는 문제임을 알아챘고 바로 해결했습니다.

 

바이오쇼크 트릴로지는 저장 전에 여유 공간을 확인하는데 이때문에 유즈에서는 저장할 수 없었습니다.

낸드 파티션 크기를 기본값으로 설정하고 파일 시스템 서비스 명령으로 제대로 읽히게 만들어 해결했습니다.

 

포켓몬스터 소드·실드는 날씨 버그가 있었습니다.

보니까 global_setting.bin 파일이 weather_data.bin이라는 파일을 건너뛰게 하고 있었죠.

이름에서 알 수 있다시피 weather_data.bin 파일 안에 모든 날씨 정보가 들어있어서 게임에서 날씨가 없었던 거죠.

그는 매우 간단한 수정으로 문제를 해결했습니다.

또, 게임 업데이트와 DLC를 제거할 수 있게 하고, 게임 목록 하위 디렉토리 스캔, 메타데이터 검색 등 게임 목록의 문제를 해결하고 일을 끝마쳤습니다.

 

쉬워진 업데이트와 DLC 삭제

옛 것

 

유즈를 코난으로 옮길 때 이전 것들도 옮겼는데 그전까지 쓴 오디오 Opus는 별로 좋지 않은 설정을 가지고 있었습니다.

그때문에 AMD 페넘, 인텔 펜티엄/셀러론/아톰 등 AVX/AVX2 명령어를 지원하지 않는 오래된 CPU에서도 이 명령어를 쓰게 강제했고 이 CPU에서 오디오를 처리하면 게임이 꺼졌습니다. ogniK가 Opus 버전을 대체하여 해결했습니다.

 

Merry는 FMA 명령어 세트가 없는 CPU의 성능이 떨어지는 문제를 해결할 준비를 마쳤습니다.

영향을 받는 CPU는 AMD 페넘, 3세대까지의 인텔 코어 i 시리즈 이전/펜티엄/셀러론/아톰 등입니다.

 

UI 변경

 

toastUnlimited는 게임마다 따로 설정을 저장하는 기능을 추가했습니다. 많은 사람들이 요청한 기능이죠.

현재는 입력 설정은 따로 저장하지 않지만 추가할 예정입니다.

이 기능을 사용하려면 게임 목록에서 게임을 마우스 오른쪽 버튼으로 클릭하고 속성(Properties)을 누르세요.

 

Morph는 밝은 걸 싫어하는 사용자를 위해 미드나이트 블루(Midnight Blue)라는 새로운 테마를 추가했습니다.

Emulation → Configuration → General → UI에서 바꿀 수 있습니다.

 

Tobi는 단 한 개의 스위치 프로필이 있을 때 어떤 스위치 프로필을 사용할지 선택하지 않게 바꿨습니다.

 

각 게임을 실행하기 전에 유즈 설정을 바꿀 필요가 없다

샤크라고도 불리는 ogniK는 오랫동안 유즈의 주요 오디오를 다시 만들어왔습니다.

닌텐도의 오디오 렌더러 시스템은 복잡하여 자세한 설명은 넘기고, 그는 복잡한 몇가지 기능을 두고 많은 걸 해결했습니다. 이전까지 빠진 음향효과, 섞인 음악, 소리 없음, 게임 꺼짐 등 많은 문제가 있었던 게임들이 이제 제대로 실행되며 스위치와 비슷한 수준으로 바뀌었습니다.

당분간은 버그가 좀 있습니다. 삽질 기사와 패스트 RMX는 음성이 끊어지고 모여뵈요 동물의 숲은 한쪽에서만 소리가 나는 등이죠.

 

또, 이전까지 게임 도중 새로운 셰이더를 만들어야한다면 한 번에 하나씩만 할 수 있었는데 이제 비동기적으로 셰이더를 디코딩합니다. ogniK가 3DS 에뮬레이터인 CEMU의 개발자인 Exzap의 도움을 받아 이룬 성과죠.

동시에 여러 CPU 스레드에서 셰이더를 컴파일하여 시간이 크게 줄어듭니다.

 

epicboy는 Vulkan에서 비동기 셰이더를 지원하게 만들었습니다.

단, AMD 라데온 GPU를 사용한다면 OpenGL에서는 비동기 셰이더를 쓰지 않기를 권장합니다.

AMD 윈도우 OpneGL 드라이버의 한계로 프레임이 스킵되어 아주 안 좋은 게임을 경험하게 될 겁니다.

리눅스 OpneGL 드라이버나 Vulkan 드라이버는 상관 없습니다.

 

향후 계획

Rodrigo는 텍스처 캐시를 다시 작업하고 있습니다. 이 일이 끝나면 Vulkan의 버그 수정, 더 좋은 성능과 경험으로 OpenGL과 Vulkan 모두 좋은 결과가 있을 겁니다.

아직 공개하지 않았지만 인상적인 프로젝트가 있습니다.

댓글