switch模拟器吧 关注:14,588贴子:10,502
  • 3回复贴,共1

进度报告2020年11月【机翻】

只看楼主收藏回复

敬礼,尤兹人!这是11月的进度报告,它将无限期地为您提供数百个图形化修复、改进的性能、内核更改、输入添加和主要代码清理。
4-JIT,一种4种
bunnei和Blinkhawk一直在研究yuzu的内核实现,寻找可以重构的bug或代码,也就是说,在不改变核心功能的情况下,重写以获得性能或使其更易于阅读。
这个内核重构PR重点介绍如何修改JIT(Just-in-time)编译器(一种模拟任天堂交换机CPU的基本工具)在yuzu中的使用方式。因为用户需要一个巨大的页面设置来减轻这些文件的变化。将默认页面文件大小设置为auto现在应该足够了,虽然有些游戏,比如超级粉碎兄弟终极版,可能仍然需要一个更合理大小的页面文件,因为所分配的资源非常多。用户可能希望将页面文件大小设置为10000MB以覆盖这些最坏的情况。
说到Super Smash Bros. Ultimate,这些变化也修复了一个软锁,这是在DLC角色“英雄”最后粉碎时经常发生的。你现在可以自由地将对手踢出屏幕,而不需要屏住呼吸和交叉手指。
英雄最后一击(超级粉碎兄弟终极)
此外,在许多比赛中出现的口吃已经消失了。这包括那些在Super Smash Bros. Ultimate在世界地图和教程视频播放之前超级马里奥奥德赛(视频播放也更加流畅)。
世界地图在超级马里奥奥德赛,前后(左)的变化,现在结巴免费!
所以,你可能会想,窗帘后面到底发生了什么?
计算机程序,如游戏,通常是用高级编程语言编写的。这些程序基本上由一系列语句组成,这些语句将由处理器按顺序执行,以完成不同的任务。但是,处理器不理解这些高级指令,因此它们被转换成一组更基本的二进制操作,称为机器代码,与系统硬件直接兼容。将源代码转换为机器代码的过程称为compilation,这将生成一个文件,该文件可以加载到内存中并由处理器从那里执行。
任天堂交换机使用了一个基于ARM的4核CPU,因此任何交换机游戏生成的机器代码都将与该架构完全兼容。然而,这就产生了一个问题,因为yuzu被设计为在使用AMD64体系结构的处理器的计算机上运行,而AMD64体系结构无法理解这些指令。因此,它们必须从客户机代码(ARM)解释或翻译为主机代码(AMD64)。有不同的方法来实现这一点,yuzu通过使用Dynarmic动态编译程序MerryMage实时执行这个翻译。这个过程,即所谓的JIT编译,读取内存中的程序块,解码指令,并发出翻译后的代码,以便主机CPU可以运行它。通过调用dynamic,可以将游戏代码重新编译为在主机架构上本机运行的机器代码。
以前,yuzu将为交换机上模拟的每个来宾线程创建一个dynamic实例。这导致同时运行多个JIT实例,如果不是更多的话,可能多达20个实例!结果,很多资源被这样不必要地浪费了。但是随着本PR中引入的更改,yuzu现在只创建了dynamic的四个实例:每个核心一个,这是一个更有效的解决方案。下面的图表比较了在这个PR实施之前和之后一些流行的游戏的内存使用情况;测试是在内部测试阶段进行的,而yuzu是在googlechrome和Discord上运行的。可以看出,内存使用的差异在3 GB到6.4 GB之间,这取决于游戏。在其他标题中也观察到类似的结果。

实现4-jit前后的内存使用情况
bunnei仍在进行更多的清理工作,并寻找可以进一步改进的地方,因此预计将来会有更多的更新。
纹理缓存重写
我们已经详细讨论过纹理缓存重写在它的专用文章,所以简而言之Texture Cache Rewrite(这不是着色器缓存更改)由罗德里戈重新实现yuzu使用的旧纹理缓存,它是从Citra.这项工作花费了10000多行代码,修复了许多游戏中的图形错误,并在此过程中提高了性能。
这为将来的重要变化铺平了道路,例如Buffer Cache Rewrite,这不仅可以继续提高渲染精度,而且可以通过优化源代码中GPU部分的“最热门”代码来提高性能。后来,发展哈迪斯计划是有计划的。这是一个重写Shader Cache,其主要目标是提高精度和稳定性,以及在英特尔gpu中提高性能,这些都是当前实现的瓶颈。
很快就会有Compute Texture Decoders它将利用gpu的计算着色器功能来解码任天堂Switch游戏处理的纹理格式。这甚至包括一些难以捉摸的格式,比如ASTC,这是非Intel GPU上非着色器相关结巴的主要原因。
最漂亮的快速旅行(塞尔达传说:野性气息)
这次重写的一个悲哀之处是“Vulkan内存管理器”,现在称为Texture Reaper由于在开发过程中出现了一些技术上的复杂问题,预计将有助于减少Vulkan使用VRAM的时间。在专门的文章中有更详细的信息。
小型PSA,AMD用户应安装20.11.3驱动程序版本或更新版本VK_EXT_robustness2所有缺少的Radeon产品,有助于提高稳定性和精度。
以太计划,或如何从裕祖内部访问裕祖
任天堂交换机游戏有权访问web applet它通常用于在播放时显示教程或指南。我们最初的实现使用QtWebEngine在某些情况下,有一些持续的错误阻碍了游戏的进行,比如第一次启动时的教程Super Smash Bros. Ultimate .
变形重写yuzu的web applet,仍基于QtWebEngine,但已彻底检修。webapplet现在接受控制器输入,而不仅仅是通过鼠标进行触摸模拟,呈现从交换机上的本机操作系统提取的字体,或者使用开源软件回退。

超级粉碎兄弟终极工作教程
以前的非渲染小程序现在可以工作了。这包括少数几个由于之前的实现而导致游戏停滞的情况,如Super Smash Bros. Ultimate. 不再需要绕过applet的mod,比如超级马里奥奥德赛 .
拉取请求中列出了一些限制,我们将继续处理这些限制。由于需要将Qt更新到5.14.2或更高版本,预计这一变化将迫使我们的Ubuntu最低版本要求在未来达到20.10。

尤祖ception!
一般错误修复和改进
罗德里戈给Xenoblade风扇带来了一个不错的小修理。实施early fragment tests修复了导致暗渲染区域的重影几何体问题。

就像白天和黑夜!(Xenoblade编年史最终版)
此修复目前将是Vulkan专用的,以避免使当前OpenGL着色器缓存失效。
更多的瓦肯修复,现在epicboy!他实施了失踪alpha test culling特征解决与透明度相关的渲染错误。这在超级粉碎兄弟终极版或是Tales of Vesperia: Definitive Edition .


那些是一些奇怪的植物(维斯佩里亚传说:最终版)
当我们谈论epicboy,他还改进了NVDEC视频解码器的质量对所有帧排队清理代码。这样可以减少跳过的帧数,并极大地改进了在中编码的视频VP9 .
你需要帮忙吗?(超级粉碎兄弟终极版)
游戏中的嵌入式视频示例(超级马里奥奥德赛)
在轻游戏性的世界里已经有了一些进展Super Smash Bros. Ultimate. 主要问题还没有解决,但多亏了bunnei留茬GetAlbumFileList3AaeAruid ,现在用户可以在光的世界里做一个单打独斗,保存,重启yuzu,再做一个。我们正在慢慢地到达那里!
的后续更新Animal Crossing: New Horizons加载失败,但是留茬OLSC Initialize和SetSaveDataBackupSettingEnabled,bunnei再次恢复可玩性。您现在可以享受所有新内容和最新更新添加的活动。
ogniK开始前期工作关于音频模拟的未来修复。这种变化目前提高了游戏的保真度Shovel Knight以及乐高系列。期待更多的音频相关的变化很快。
裕祖在停止仿真时总是不稳定,这有几个原因。bunnei修正了两个不同的案子,什么时候在着色器编译时关闭,关门的时候呢在引导过程的早期生活质量修正总是受欢迎的。
投入改进
你已经问了很久了,而且77德国交付鼠标支持在这里!有了这个功能,用户现在可以随心所欲地设置鼠标,无论是模拟棒、按钮、运动还是触摸屏模拟。带运动支持的控制器仍然是推荐的输入方法,但是鼠标可以在紧要关头省去你的麻烦。
作为对键盘使用者的额外礼物,77德国还添加了对更好的模拟模拟键盘输入。有了这个改变,键盘播放器现在可以“漂移”模拟棒,以获得任何角度,而不仅仅是固定的八个方向,你可以按组合键。

You can find this setting in Emulation > Configure... > Controls > Advanced > Emulate Analog with Keyboard Input
77德国还可以使用最多8个不同的UDP服务器。这允许每个玩家进行运动控制。
通过使用NpadStyleSet ,变形现在根据游戏限制可用的输入选项。例如,在Pokémon: Let’s Go,选项现在仅限于手持式、左Joy Con或右Joy Con。

不许作弊!
77德国调整了隆隆声的放大功能,使它更线性化,更少攻击性。当使用低强度百分比值时,这将有所帮助。
通过两边都留茬SetNpadCommunicationMode和GetNpadCommunicationMode ,77德国制造的Borderlands: Game of the Year Edition和边疆2:年度游戏版可玩!
沉默的守护者,警惕的保护者
Lioncache,我们严厉但公平的代码评审员拆卸这个global variable accessor从整个项目(链接公关只是最新的部分),工作已经花了几个月。yuzu以前可以运行单个全局系统实例,但是通过这次更改,yuzu现在可以根据需要创建任意多个仿真实例,所有这些实例都是相互独立的。这提供了对仿真系统生命周期的完全控制,允许更快的游戏启动时间,也许更重要的是,迫使开发人员保持更干净的代码,这在将来更容易维护。
未来项目
这个Buffer Cache Rewrite到目前为止进展很快,没有延误,罗德里戈对首发非常热情哈迪斯计划完成后。随着输入的改进,更多的多核变化正在到来。
就这些人!非常感谢您抽出时间阅读本进度报告。下个月见,也许圣诞节会提早到来!


IP属地:湖北1楼2020-12-21 19:29回复


    来自Android客户端4楼2020-12-23 19:13
    回复
      2025-08-22 13:03:47
      广告
      不感兴趣
      开通SVIP免广告


      IP属地:澳大利亚来自Android客户端5楼2020-12-26 17:57
      回复