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

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

by 사과향잉크 2020. 6. 22.

유즈(yuzu) 개발진은 5월 개선점을 소개했습니다. 주요 재구성, 막대한 성능 향상, 안정성 향상, 버그 수정 등입나다.

 

먼저 스위치의 4개 코어를 적절히 에뮬레이션하는 프로메테우스 프로젝트입니다.

CPU 코어가 4개 이상이라면 성능이 크게 좋아지죠. 이전까지는 2~3개의 CPU 스레드를 사용했는데 최대 6~7개까지 사용합니다.

일부 게임인 1개의 스레드만 쓰게 만들어져 있어 별 효과가 없죠.

코어 2개 혹은 스레드가 2~4개인 사람은 실제 코어 수가 부족해 오히려 성능이 떨어지므로 멀티코어 기능을 쓰지 않아야합니다.

호환 문제로 무료 버전에서는 멀티코어를 지원하지 않으며, 해결하기 위해 애쓰고 있습니다.

 

언리얼 엔진 문제 수정

 

Rodrigo는 3D 텍스처를 두 조각 이상으로 렌더링하여 언리얼 엔진 4 게임에서 가장 큰 문제인 '무지개' 문제를 해결했습니다. 이 방법으로 제노블레이드도 개선됩니다.

 

옥토패스 트래블러. 수정 전 / 후

모여봐요 동물의 숲 변경점

 

Rodrigo는 Vulka의 지형 경계 문제를 해결했습니다. 공식 지원이 없어 Vulakn에서 에뮬레이션해야했습니다.

 

수정 전 / 후

bunnei는 시간대를 만들었습니다. 또 윈도우에서는 자동으로 시간대를 감지합니다.

이전까지는 GMT+0 시간대라고 가정했죠.

윈도우가 아니거나 삶에 흥을 더하고 싶다면 시스템 설정의 'Custom RTC' 기능으로 시간을 원하는대로 바꿀 수 있습니다.

저장 방식도 개선했습니다. 대부분의 스위치 게임은 유저 프로필에 데이터를 저장하는데 동물의 숲은 '기기' 프로필에 저장해서 이를 따라야했습니다.

 

제노블레이드 변경점

 

제노블레이드는 렌더링 버그가 많은데 엔진이 복잡하고 해결하기 어려워서였습니다.

하지만 gdkchan의 도움과 류진x의 풀 리퀘스트를 사용해 Rodrigo는 제노블레이드 크로니클스 2의 중대한 렌더링 문제를 해결했습니다.

텍스처 깊이 샘플링의 추가 개선으로 구름과 시작 메뉴 등의 렌더링 문제를 해결했습니다. 끊임없이 움직이는 텍스처도 해결했죠.

 

너무 눈부셨던 과거

게임 성능도 최적화했습니다. 텍스처 캐시를 라인별로 프로파일링하고 병목현상을 찾아냈죠.

코드를 개선하고 프레임타임을 더 빠르게 하였습니다. 예상한 건 아니지만 정보를 적게 기록하여 GPU 스레드를 포화시키지 않게도 했습니다.

 

성능 향상

 

ogniK는 성능을 향상하기 위해 새로운 매크로 JIT를 사용하였습니다. GPU, API 관계 없이 성능이 좋아질 겁니다.

Rodrigo는 유즈의 ASTC 디코딩을 개선하며 네이티브 하드웨어 디코딩을 사용하는 규칙을 추가했습니다.

엔비디아 드라이버는 유즈에게 ASTC 디코딩을 지원한다고 했지만, 알고보니 우리가 하는 것보다 훨씬 느린 내부 소프트웨어 디코더를 사용하고 있더군요.

그래서 엔비디아를 무시하자 성능이 어마어마하게 향상되었습니다.

인텔 GPU라면 그냥 잘 됩니다. 어떤 소프웨어 최적화도 전용 하드웨어 디코더를 이길 수는 없죠.

 

버그 수정 및 개선

 

Vulkan 개발은 비교적 새롭고 복잡하여 안정성 문제가 있습니다.

Blinkhawk는 Vulkan과 비동기 GPU를 조금 바꿔 안정성을 크게 향상했습니다.

많은 2D 게임의 스트라이프가 뒤집거나 완전히 망가지는데 이를 처리할 추가 기능이 부족합니다.

그래서 Rodrigo는 엔비디아 전용으로 NV_viewport_swizzle를 구현했습니다.

현재 모든 문제를 해결할 방법은 이 방법이 유일하지만, 엔비디아가 아니어도 쓸 수 있는 방법을 개발 중입니다.

 

다시 나타난 오리

라이브러리 업데이트로 6채널 오디오를 지원하는 새로운 버전의 cubeb 오디오 엔진이 생겨 ogniK는 서라운드 지원을 추가했습니다.

그는 키보드 에뮬레이션 지원도 수정하였기에 호환 게임은 키보드로 잘 입력될 겁니다.

Morph는 누락된 R8G8UI 텍스처 지원을 구현해 더 워킹 데드 게임의 성능 문제와 꺼지는 문제를 해결했습니다.

 

별 건 아니지만 유즈를 전체 화면으로 실행하면 마우스 커서가 숨겨지지 않아서 좀 짜증났는데요.

Tobi는 시간이 지나면 마우스 커서가 사라지는 설정을 추가했습니다.

 

 

멋진 기능

 

최근 얼리 액세스 빌드에 ARB 셰이더라고 하는 어셈블리 셰이더(GLASM) 지원을 추가했고 곧 일반 빌드에도 추가할 예정입니다.

몇 십년 전에는 당시 GPU에 새로 추가된 프로그래밍 가능한 셰이딩 유닛에 대한 공통 언어가 없었습니다.

그래서 OpenGL 아키텍처 리뷰 보드는 GLASM이라는 적절한 표준화 셰이딩 언어를 만들기로 결정했습니다.

더 넓게 보면 이건 GPU와 소통하기 위해 사용하는 어셈블리 언어입니다. 그에 따라 작업하기 어렵고, 제한된 디버깅 도구만 사용할 수 있어 더 상황이 나빴죠.

거기다 당시 하드웨어를 생각하고 만들었기에 현재는 작업하기 쉽고 고수준의 셰이더 표현인 GLSL이나 SPIR-V 같은 것을 선호하여 거의 쓰이지 않습니다.

그 두 개를 사용하면 게임 개발자들은 코드를 보는 시간이 줄어들어 결과가 더 빨라지지만, 에뮬레이터의 경우에는 계속 셰이더를 가로채고 디코드하고 다시 컴파일해야하기 때문에 훨씬 느려집니다.

 

ARB가 가장 빠르다

처음에 GLASM을 지원은 단순한 실험으로 시작했습니다.

Rodrigo는 그의 유일한 디버그 도구인 apitrace를 들고 일을 시작했죠.

운이 좋게도, 그리고 분명한 이유도 없이 엔비디아는 최신 OpenGL 버전에서도 그런 오랜 기능을 지원하고 있었습니다.그리하여 GLASM 지원은 현실이 되어 초기 어셈블리 셰이딩을 지원했고, 엔비디아 OpenGL 사용자는 셰이더 컴파일 시간이 매우 빨라졌습니다.

닌텐도 스위치의 네이티브 하드웨어에 더 가깝기 때문에 미래에 정밀성 수정과 더 많은 걸 기대할 수 있죠.

 

안타깝지만 GLASM에는 몇 가지 한계가 있습니다.

 

· 엔비디아와 OpenGL 전용입니다. AMD와 인텔은 특정 어셈블리 셰이더만 지원하고 미래에 바뀔 가능성이 매우 적습니다.

· 현재 루이지 맨션 3, 애스트럴 체인, 젤다의 전설: 꿈꾸는 섬 등에서 손봐야할 문제가 있습니다.

· GPU 아키텍처에 따라 문제가 다릅니다. 파스칼 GPU는 튜링이나 케플러 GPU와는 다른 문제를 겪을 수 있습니다.

 

동굴 이야기에서 볼 수 있는 버그

현재 프로젝트 바이퍼와 프로젝트 헌이 진행 중입니다.

댓글