1 前言

某天在Github上面看到了两个Switch的模拟器:

于是就想动手想尝试一下在Linux上面玩上Switch

本文首先简单介绍一下两个模拟器,接着是两个模拟器的安装使用及基本配置。附录包括了Vulkan以及OpenGL的比较和Ryujinxyuzu的比较。下面先来看一下两个模拟器究竟是什么。

2 模拟器、平台以及兼容性

2.1 关于模拟器

  • yuzuCitra的制作者写的一个开源NS模拟器,用C++编写,高达14.2k star,特点包括Vulkan API的支持、灵活的模拟器配置以及游戏配置等等
  • Ryujinx:基于.NET 5.xC#的开源NS模拟器,特点包括OpenAL音频输出、PPTC(下文有介绍)、支持多种输入、支持DLC等等,5.8k star

2.2 关于平台

目前这两个模拟器支持的平台只有WindowsLinux

至于Macyuzu没有说明支持,而Ryujinx在计划中,在下载页面(上图)可以看到Mac的图标,但是处于灰色状态。

另外,笔者还发现了一个在M1 Mac上运行的issue

大概看了一下需要等待2021年11月的.NET 6去支持了,所以Mac党还得再等等。

2.3 关于兼容性

官方给出了游戏的兼容性列表:

3 环境

笔者测试的环境为:

  • 笔记本
  • 系统:Manjaro
  • 显卡:RTX 2060
  • 固件版本:Firmware 11.0.1
  • 测试游戏:超级马里奥3D世界

4 准备工作

无论使用的是yuzu还是Ryujinx,都需要准备:

  • prod.keys
  • 游戏本体

如果使用的是Ryujinx,还需要额外准备固件。

先来看一下prod.keys

4.1 prod.keys

yuzu以及Ryujinx都需要prod.keys,里面包含了NS设备需要的key,需要通过 Hekate等一些列工具生成,这部分比较复杂,因此文末附录直接提供了现成的prod.keys

另外,在yuzu的官方文档还提到了需要使用title.key,笔者实测发现title.key不是必须的,可以自动生成:

而在Ryujinxtitle.key也不是必须的,在system文件夹下只需存在prod.keys即可。

4.2 游戏本体

游戏本体这里推荐三个网站下载:

注意:游戏下载完成后需要放在一个文件夹中。

4.3 固件(Ryujinx

Ryujinx中还需要额外的固件(Firmware),固件的版本需要与prod.keys对应,固件可以到此处下载或者从文末提供的链接下载,目前最新的版本是11.0.1

5 yuzu

5.1 下载

yuzu提供了AppImage,直接下载然后添加执行权限即可:

添加执行权限:

chmod u+x yuzu-*.AppImage
./yuzu-*.AppImage

5.2 prod.keys

第一次运行会提示没有key,先忽略进入界面,选择右上角的File->Open yuzu Folder,打开后,新建一个keys文件夹:

prod.keys放进去并重启即可。

5.3 添加游戏

点击Add New Game Directory,选择游戏目录进行添加即可:

添加完游戏后就可以直接双击启动游戏了。

5.4 配置

yuzu的配置比较丰富,除了模拟器本身的配置外,每个游戏也拥有独立的配置:

5.4.1 一般配置

一般的配置包括系统语言、一些热键等的配置,通常情况下保持默认即可:

另外在按键的配置中可以根据需要选择自己合适的按键,可以根据单手柄和双手柄的形式配置:

5.4.2 图形配置

这里的配置很重要:

主要包括:

  • API设置:yuzu支持OpenGL还有Vulkan,笔者实测发现Vulkan会运行得更流畅,帧率更高,具体根据个人情况进行选择,文末附录有提到两者的比较
  • Use disk shader cache:磁盘着色器缓存,建议开启,这样就不用每次都重新编译,而是直接从磁盘加载到内存
  • Use asynchronous GPU emulationGPU异步模拟,yuzu重写了GPU显存管理器,加速了缓存机制,使得帧数得到明显提示,同时性能提升40%-400%(来自BSoD Gaming的测试数据,链接在文末)
  • Use NVDEC emulationNVDEC是一项硬件转码技术,能减少转码期间计算密集型任务中CPU的负担,这是Nvidia的一个技术,有了它,过场动画的播放会畅顺很多

5.4.3 游戏配置

yuzu可以根据每个游戏进行独立的配置,在对应的游戏上面右键,并选择properties选项卡即可进入如下界面:

大部分设置与模拟器设置一样,就不详细说了。

5.5 启动游戏

双击游戏就可以愉快地开始了。

6 Ryujinx

6.1 下载

直接到Ryujinx官网下载即可:

6.2 key与固件

打开RyujinxWindows直接打开exeLinux直接./Ryujinx即可,首次运行的时候应该会如下提示:

先选择OK,进入界面后选择File->Open Ryujinx Folder,把prod.keys放进system并重启。

重启之后,在界面中选择Tools -> Install Firmware -> Install a firmware from XCI or ZIP安装下载好的固件。

6.3 添加游戏

打开Options -> Settings,选择其中的Add并选择对应的游戏文件夹进行添加即可。

6.4 配置

添加完游戏后就可以看到游戏了,别急着打开,先把一些常规设置做一下。虽然Ryujinx的配置选项比yuzu要少,但并不代表不需要配置,其中最重要的三个是InputSystemGraphics

6.4.1 Input

这里是一些输入配置,与yuzu一样,也是可以根据双手柄以及单手柄的类型来设置键盘的按键:

6.4.2 System

这是一些时区以及系统语言的设置,一般会使用操作系统的设置,不需要更改,这里说一下勾选的三个选项:

  • VSync:垂直同步,当显卡每秒渲染的帧率大于屏幕的刷新率时,会将显卡的输出与屏幕刷新率协调,从而阻止画面撕裂,比如屏幕刷新率只有60Hz,如果原来显卡每秒能渲染120帧,那么启用Vsync会让显卡同步屏幕的刷新率
  • PPTC:这是一项可以减少游戏加载时间的技术,实际上是一项缓存技术,第一次启动游戏的时候会创建或更新.info文件,第二次启动游戏的时候从该文件决定转译哪一个函数以及怎样转译,每次游戏结束都会更新该文件。这些缓存文件的位置在User’s AppData\Roaming\Ryujinx\games\<game id>\cache\cpu~/.config/Ryujinx/games/<game id>/cache/cpu 里面

  • FS Integrity Checks:这是一个安全性的检查选项

6.4.3 Graphics

这里是一些显卡相关的选项,包括:

  • 是否启用着色器缓存:建议开启,这是一项可以提高用户体验性的技术,着色器被编译后会被放进硬盘中,随着下次启动游戏从硬盘加载到内存中
  • 各向异性过滤:用来过滤、处理当视角变化导致3D物体表面倾斜时造成的纹理错误等问题,可以设置从2倍到16倍,数值越大对显卡要求越高
  • 分辨率缩放:默认是原生的720p或1080p,可以根据显示屏缩放调整
  • 画面比例:默认16比9,根据屏幕设置即可

6.5 启动游戏

双击愉快地启动游戏了。

7 截图

笔者很懒就随便截了两张马里奥的:

附录一:Vulkan还是OpenGL

这里是针对yuzu来说的,因为Ryujinx只提供了OpenGLAPI

yuzu提供了两种图形API

  • Vulkan
  • OpenGL

笔者尝试玩了一下超级马里奥3D世界,发现OpenGL会经常性的卡顿,玩起来很不流畅,就连顶一个金币都会卡顿大约1s左右,这种用户体验就非常的不好,但是,使用Vulkan就没有问题。

当然这也有可能是游戏本身的原因,笔者并没有测试更多的游戏。下面是Vulkan相比起OpenGL的优点:

  • 更加接近底层:API更加接近驱动和硬件,方便开发者优化
  • 多线程:Vulkan天然支持多线程,也支持异步数据交互以及并行绘制

而下面是在Linux上对Dota2以及Mad MaxRX 560以及GTX 1050 Ti下不同场景不同分辨率下的测试数据,包括帧数以及CPU使用率(2018年7月,作者Michael Larabel,链接在文末),首先是Dota2的数据:

下面是Mad Max,图形预设为低,1080p

图形预设为低,2k分辨率:

图形预设为高,1080p

图形预设默认,2k分辨率:

可以看到Vulkan的大部分表现都要比OpenGL要好,在GTX 1050 Ti中,无论是1080p还是2k,在更高帧率的同时保持着更低的CPU使用率。

不过,虽然Vulkan能表现出更好的性能,但是要比OpenGL复杂得多,由于笔者不是学图形的,就不展开了,需要的请自行查阅资料。

附录二:Ryujinx还是yuzu

这里同样参考了别人的测试(数据来源BSoD Gaming,2020年8月,链接见文末),环境为有两组:

  • i5 4690k + GTX 1080 Ti
  • i7 8700k + GTX 1080 Ti

下面是一些测评的截图,显示了不同环境下的CPU使用率以及帧数:

比较特别的是塞尔达传说:荒野之息,可以看到只有一组变量了,因为在低配置的机器上测试不了,而在i7 8700k上,可以明显看到Ryujinx的帧数要比yuzu低很多,而且RyujinxCPU占用率要比yuzu高:

另外在异界锁链中,虽然yuzu有着比Ryujinx更高的帧率,但是会出现错误的材质,如下图所示:

下面总结一下优点:

  • Ryujinx:新手友好,配置方便快捷,而且带有分辨率缩放功能,还有Mac平台支持(目前在计划中)
  • yuzu:能针对硬件以及游戏进行更详细的配置,而不是像Ryujinx那样的统一全局配置,游戏加载速度更快,更重要的是带有Vulkan API支持,这是最大的优点

缺点:

  • Ryujinx:新游戏加载缓慢,需要较长时间等待加载,但是有了PPTC的帮助,加载时间快了不少
  • yuzu:配置较为复杂,而且不具备分辨率缩放的功能,会有更好的内存使用率以及页面文件使用率

如何选择取舍就看各位读者了。

附录三:资源下载

提供了prod.keys、最新的Windows+Linux模拟器、固件以及测试所用的游戏,链接请关注公众号“氷泠之路”并回复关键字Switch获取。

参考

1、Ryujinx-PPTC

2、yuzu-New Feature Release - NVDEC emulation!

3、YouTube-Yuzu Emulator - The Async GPU Update | 40 - 400% Performance Improvements

4、Vulkan vs. OpenGL Performance For Linux Games

5、知乎-openGL、vulkan求解惑?

6、知乎-Vulkan相比于OpenGL、DX12、Metal和Mantle有什么优势、劣势?

7、YouTube-What is the Best Nintendo Switch Emulator? Performance & Features Tested

让你的Windows/Linux玩上Switch!的更多相关文章

  1. 《如何将windows上的软件包或文件上传到linux服务上》

    昨天晚上朋友让我帮他简单的搭建个环境,他公司让他做款软件测试温度的,他自己搞的是嵌入式,在公司担任的是软件工程师,应届毕业生.也可能他们搞嵌入式的对这个linux系统不太熟,不会把windows上的软 ...

  2. Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务

    一.引言 今天本来没有打算写这篇文章,当初我感觉使用这个工具应该很简单,下载的过程也不复杂,也没有打算记录下来.但是在使用的过程中还是出现了一些问题,为了给第一次使用Redis Desktop Man ...

  3. 定时备份windows机器上的文件到linux服务器上的操作梳理(rsync)

    由于需要对网络设备做备份,备份文件是放到windows机器上的.现在需要将备份数据同步到linux备份机器上,想到的方案有三种: 1)将windows的备份目录共享出来,然后在linux服务器上进行挂 ...

  4. Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务(转载6)

    Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务 一.引言 今天本来没有打算写这篇文章,但是,今天测试Redis的时候发现了两个问题 ...

  5. 以安装PyTorch为例说明Anaconda在Windows/Linux上的使用

    在Windows10上配置完MXNet 1.3.0后,再配置PyTorch 1.0时,发现两者需要依赖的NumPy版本不一致,之前是通过pip安装NumPy,根据pip的版本不同,会安装不同版本的Nu ...

  6. windows平台是上的sublime编辑远程linux平台上的文件

    sublime是个跨平台的强大的代码编辑工具,不多说. 想使用sublime完毕linux平台下django网站的代码编辑工作以提高效率(原来使用linux下的vim效率较低,适合编辑一些小脚本). ...

  7. Windows服务器从Linux服务器上以FTP形式获取图片

    Windows服务器上运行一个获取图片的程序,获取图片采用的是FTP方式: 准备条件: Linux服务器上创建一个FTP的用户:ftppic 这个账号要有权限才可以,然后编写Windows端代码: p ...

  8. 解决Linux下Svn检出Windows SVN服务器上项目SSL handshake failed: SSL error: Key usage violation in certificate has been detected.

    在Linux上检出windows SVN服务器上项目时出现了SSL handshake failed: SSL error: Key usage violation in certificate ha ...

  9. windows 安装 jenkins 自动化构建部署至linux服务器上

    一.环境准备 1.git安装环境 参考链接 https://www.cnblogs.com/yuarvin/p/12500038.html 2.maven安装环境,包括jdk环境安装 参考链接 htt ...

随机推荐

  1. JVM Attach实现原理剖析

    本文转载自JVM Attach实现原理剖析 前言 本文旨在从理论上分析JVM 在 Linux 环境下 Attach 操作的前因后果,以及 JVM 为此而设计并实现的解决方案,通过本文,我希望能够讲述清 ...

  2. 主键策略+mybayisPlus自动增长

    主键策略: 1.自动增长 有一点小缺陷:例如当一张表里的数据过于庞大时我们会进行分表操作,若是用自动增长策略,那么除了第一张表外的每一张表都必须知道上一张的表的的最后ID值.这个操作便会造成效率的变低 ...

  3. 转: 微信已支持发送最大 200MB 的视频了,并且不会被压缩 来自腾讯微信团队的视频消息,目前 iOS 版本的微信已支持发送最大 200MB 的视频与图片了,并且不会被压缩.安卓版本未来一段时间会支 ...

  4. 【图像处理】使用OpenCV+Python进行图像处理入门教程(三)色彩空间

    这篇随笔介绍使用OpenCV进行图像处理的第三章 色彩空间. 3  色彩空间 之前的介绍,大多是基于BGR色彩空间进行的,但针对不同的实际情况,研究人员提出了许多色彩空间,它们都有各自擅长处理的领域. ...

  5. 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题

    剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...

  6. 使用python模块plotdigitizer抠取论文图片中的数据

    技术背景 对于各行各业的研究人员来说,经常会面临这样的一个问题:有一篇不错的文章里面有很好的数据,但是这个数据在文章中仅以图片的形式出现.而假如我们希望可以从该图片中提取出数据,这样就可以用我们自己的 ...

  7. swaks制作钓鱼邮件

      一.在网站:https://bccto.me/ 申请一个十分钟的邮箱 二.使用命令行,命令行解释如下: --from hacker@qq.com //发件人的邮箱 --ehlo qq.com // ...

  8. Java 获取小程序openid(基于SpringBoot)

    Java 获取小程序openid(基于SpringBoot) 官方文档 wx.login 1.引入Request封装依赖 <!--Request依赖--> <dependency&g ...

  9. kubernetes生产实践之mysql

    简介 kubedb mysql 生命周期及特性 Supported MySQL Features Features Availability Clustering ✓ Persistent Volum ...

  10. 2019HDU多校第七场 HDU6656 Kejin Player H 【期望递归】

    一.题目 Kejin Player H 二.分析 因为在当前等级$i$,如果升级失败可能会退回到原来的某一等级$x$,相当于就是失败的期望就是$E + (Sum[i-1] - Sum[x-1]) + ...