注册 登录
琵琶行论坛 返回首页

红莲火焰的个人空间 https://www.ppxclub.com/?89405 [收藏] [复制] [分享] [RSS]

日志

SEGA Saturn模拟效能研究

热度 3已有 5409 次阅读2020-4-27 10:26 |个人分类:模拟日志| 世嘉土星

       《世嘉土星模拟不良的神话》

       关于土星模拟最新状况,现有3个土星模拟器值得一看,SSF(由同一个作者积极维护了20年这可能是一个记录),Mednafen和Kronos。

       土星模拟器当前处于非常健康的状态,至少有两个模拟器SSF、Mednafen经兼容性测试 http://www.segasaturn.org/)能够稳定运行大多数的游戏,SSF、Mednafen是目前最好的土星模拟器,尽管在个别游戏兼容上互有短长,使用上建议一主一备或互为主备。


       SS模拟器的声音表现


       土星在技术上拥有强大的声音系统,有硬件采样器、合成器和效果器,由包括摩托罗拉68k CPU和一个定制的32通道雅马哈FM/PCM音频处理器组成,该处理器带有一个集成的DSP,它有自己独立的RAM和DAC芯片。

       
       SS模拟器FM合成器音色和DSP后处理音效之间的区别:
       实机 (10分) = SSF PreviewVer (10分)  > Mednafen Saturn (6分) > Yaba Sanshiro (3分) 
       我先说声音系统仿真结果:
       SSF的高动态范围超过了真正的实机
       Mednafen未实现SCSP-DSP汇编动态链接库这在实机中是不存在的。
       Yabause及其衍生版Yaba Sanshiro、Kronos都不具有模拟这样的自定义声音驱动程序,因为它根本就不能工作。

       与实机同级别的音源采样和效果处理作对比,Yaba Sanshiro、Mednafen仍然仅限于简单的采样和微弱的效果。Mednafen从2016年开始支持SS模拟,在功能仿真上,开发者表示由于SCSP-DSP硬件算法复杂,Mednafen未能实现SCSP-DSP汇编动态编译,目前为止使用传统静态编译处理缺少汇编级性能优化

       土星实机PCM音频是44.1KHz/13bit,bit位深精度约为13。SSF PCM音频是44.1KHz/15bit,bit位深的采样精度略高于实机,接近CD的16bit标准(数据来源SSF_PreviewVer_R28/Document/index.html索引页)
       
       CD数字音频是44.1KHz/16bit的PCM标准。bit位深越大,信噪比和动态范围越好,音色也就越真实、生动。
       由于录音和播放设备都会有一定的底噪,事实上往往有2-3bit是被底噪信号耗掉的,在动态范围上有意义的位深只有13bit,这时实际的动态范围也就80dB左右,听一般轻音乐录音问题不大,但大动态的录音作品,就可能存在一定影响(动态被压缩)了。

       SSF实现土星DSP实时数字音效处理

       SSF Test Version (18.01.03) (Sega Saturn Emulator for WIN)
       SSFに関しては以下の修正が出来ればいいなぁ おそらくバグってるSCSP-DSP処理 バーニングレンジャーなどフェードアウト後にゴミが残る現象 VDP2のビットマップの表示不具合 BIOSのエミュレート
テストバージョンを更新しました … 内蔵音源で音程が狂うバグを修正してみました 怪しいソフトは一通り確認したつもりですが、まだ音程の狂っているソフトがあるかもしれません

       SSF TestVer自2018/01/03到更高版本的SSF PreviewVer R9有一个严重错误,内置声源的混响(混响效果)无法工作使用SS回声和混响音效的游戏,音频流访问SCSP-DSP处理时存在bug,原因是声音CPU在游戏启动时不准确地崩溃并破坏了SCSP-DSP寄存器,导致一部分旧版SSF运行中不定时发生崩溃。

       DSP(数字信号处理),用于对声音信号进行数字化处理。DSP具有高速的运算能力,在上面应用各种快速算法,可进行很多复杂的实时数字音效处理,如均衡,混响、回声、3D Sound定义声音在3D空间中的定位和声响。
       
       在土星DSP编程单元中,世嘉混响效果处理上使用了24位浮点运算,但在实机DSP环形缓冲区中写入的浮点数据是什么格式,世嘉是不公开的,长久以来,开发者不清楚DSP混响效果计算的浮点数据(用于声源相位旋转滚动的横坐标时间计算格式)。SSF只是采用单精度浮点运算,由于世嘉在土星DSP内部对声源相位中心坐标的定位还使用了定点计算,SSF在DSP环形缓冲区模拟上,一直没实现所需要使用的SCSP寄存器功能,环形缓冲区不更新,因为数据没有被写入SCSP DSP使用的环形缓冲器内存,任何试图直接访问环形缓冲器的软件都会产生错误的声音。此类访问会导致一部分旧版SSF运行中随机发生崩溃。真正的实机内置声源定位效果的DSP能自动处理直接访问环形缓冲区的软件声音,这种DSP实时数字音效处理,由于涉及到复杂的数字信号处理算法,开发者过去也认为没有软件可以完成如此棘手的事情。为了纠正旧版中拖了很长时间的各种错误,进一步提升兼容性、速度和准确性,SSF TestVer被放弃修改,版本回退,重新更名为SSF PreviewVer。

       频繁更新至SSF PreviewVer R10,开发者尝试修复SCSP-DSP处理中的bug,该版将单精度浮点运算改为和SS实机处理相同的固定点运算,从SSF PreviewVer R12开始,声音改为使用波形音频播放,并且可以选择切换XAudio2 (动态库处理音频数据) 播放,XAudio2内置效果:混响、音量计量,提供灵活且强大的DSP框架,支持音频信号编程处理,信号是声音编程的基本单位,好比是图形中的像素。DSP(数字信号处理)效果好比是游戏音频的像素着色器,如原始信号缺乏低音,DSP可通过算法为其补偿一些低频。同样也适用于歌曲的人声、中音和高音,动态范围,立体感和清晰度这些,通过数字优化补偿能消除任何不完美的地方,使其相对 "更好"。

       为完整模拟实机SCSP-DSP三维空间声源定位算法,需要解开世嘉在土星DSP环形缓冲区中写入的浮点数据格式,实现PCM脉冲编码调制线性反馈移位寄存功能,由SCSP寄存器(流密匙ON/OFF)组成声源定点坐标交替变换,会在每次采样时更新,至此就将原三维空间的声源定位由线性回归问题转化为非线性分类。

       开发者经过一番努力推导,终于得出了DSP环形缓冲区中写入的浮点数据格式,将此浮点地址转换为定点地址,用于旋转滚动(代表电流采样的正半周)的坐标计算。直到SSF PreviewVer R17终于实现DSP混响算法实时主动处理,提高了音频解码性能和质量,开发者认为现在的SSF声音听起来像一台真正的实机!这一改进提高了声源处理的边缘保真度(基于严密的精确算法),相对于(实机)原始硬件。
---------------------------------------------------------------
       多机种模拟器Mednafen(My Emulator Don't Need A Frickin'Excellent Name的首字母缩写词)

       作为兼容多机种运行环境的软件平台,核心在设计开发框架时要满足的,往往是一个需求类别,优先考虑的是抽象出软件最合理的设计,使得程序具有良好的可读性和扩展性,通常一开始写出的逻辑就为了以后的重用,多机种模拟器包含的许多通用性开发框架就是一步步抽象/埋坑/优化而来的,而不是具体到某个实机其硬件环境指标的需求,所以一定会考虑代码的复用性、组件的复用性、同一个功能对不同场景的复用性。有了复用的能力,才能够用更少的开发去满足更多场景的同类需求问题。考虑到实现代码框架环境的通用性,复用性代码的堆砌比较多,为实现某个主机运行所需的兼容环境,比照实机硬件函数 (机制) 的取值精度一般比较低,直观表现在图像/声音效果的还原上。

       土星对CPU周期的要求非常严格,改变任何关于解释器的东西都可能需要重写与时序有关的一切。因此在准确性和速度之间的权衡是一个困难的命题。对于老硬件系统,精度几乎总是更可取的,而现有PC硬件在软件中模拟主机硬件处理对于精度的仿真速度已经非常快了,并且通常包含更严格的时序限制。Mednafen的图像、声音处理精确度虽然低于SSF,但时序容错率和数据实时性较好(SSF这方面相较实机目前调整过高)。我觉得它使用了回溯算法求解约束满足问题 (约束满足问题中弧相容算法),通过全局约束相容性检查,使模拟系统一个方面相对于其他一切都在正确的时间发生,在请求与响应时间序列数据状况上好于SSF

       Mednafen的世嘉土星模拟是CPU密集型计算,近年完善土星模拟上作了大量修正和优化,目前还在积极开发中,最新正式版在兼容性和执行效率上较过去的旧版更好。

       Mednafen土星错误报告、兼容性列表:

       另一个多机种模拟器BizHawk在模拟土星上使用了Mednafen内核(版本更新晚于官网),在内存和CPU占用率上都比Mednafen原版更高。

BizHawk 2.6


Mednafen 1.26.1 x64


SSF PreviewVer一直采样Clang+LLVM编译,在注重准确性模拟器中的执行效率是最高的。最新版在Ryzen7 3700X上模拟大部分SS游戏,CPU使用率都在4%以下,主SH2,协SH2,68000,即使用满DSP,也不会超过6%,4代I7-4771上CPU使用率也不超过10%。

---------------------------------------------------------------
       Kronos从2018年12月推出,至2019年5月作者FCare在过去6个月中对OpenGL核心渲染器进行了完全重写,它允许和修复了大量图形问题。
       Kronos使用的是高性能SH2缓存解释器,尽管与YabaSanshiro中使用的Dynarec不同,但CPU频率要求仍然比使用经典的SH2解释器(如甲虫土星)的模拟器低约30%。
       2020年5月,发布Kronos 2.1.2,加入了新的OpenGL Compute Shader,这个新渲染组件为OpenGL提供了很大的灵活性,并允许实现逐行渲染四边形例程绘制。准确地再现VDP1的处理行为是这个渲染器的目的,GPU需支持OpenGL 4.3。
       此处提供了兼容性列表

       OpenGL Compute Shader
       土星是怪兽,它有8个处理器,其中有2个自定义图形处理器VDP1和VDP2。VDP2处理背景,VDP1处理精灵、纹理和多边形。

       VDP1是每行绘制一条“四边形”线,其基本思想是沿水平边插值端点,然后在这些端点之间绘制纹理线。它必须在斜率改变的地方用一个额外的像素画线,所以所有的像素都有一个相邻的左、右、上或下。他们这样做是为了防止线之间的空隙。

       像OpenGL这样的现代图形api不知道如何做到这一点,因为它的渲染管道是基于三角形几何体的,所以基本上它不能再现VDP1的行为。有一些技巧,比如细化,但最终它们只是针对特定问题的解决方案,而不是针对这一问题的所有解决方案。不过,这里有一些好消息:在OpenGL 4.3中,引入了一个名为“计算着色器Compute Shader”的新功能,你可能已经通过Flycast的“顺序无关透明度”(order independent transparency)或N64的“并行”(parallel)中听说过它。

       考虑到用现代GPU正确模拟VDP1有多难,它是否被正确模拟了?一个很好的测试是世嘉拉力赛的观赏模式:正确的VDP1模拟在道路上不会有洞,在边界上几乎看不到小点,如图1-3所示:

不像下图这样:


       让我们做一些比较,从第一张到最后一张,分别是土星实机、Mednafen/beetle、Kronos(OpenGL计算着色器)、Kronos(旧式OpenGL渲染器,基于YabaSanshiro)的屏幕截图。在这些图片中与VDP1处理行为关的两件事值得注意:

       * 道路边界:在土星实机,Mednafen和Kronos的新渲染器上,如果放大,你会注意到它不是一条平滑的线,有点,这是准确的行为;最后一个屏幕虽然平滑线可能看起来更好,但实际上是不准确的。
       * 到处都是孔:如果放大最后一张屏幕截图,你会注意到在山顶,后面的道路上到处都有一些孔,其它屏幕截图中不存在这些孔。

       可以使用OpenGL渲染器解决这些漏洞,但最终最终会在此过程中产生其他问题。直到最近,我们仍使用这种解决方法,但对于世嘉拉力赛而言,它只是放大了道路边界上的点。这种新渲染器的唯一已知缺点是,它将需要一个相当不错的GPU!
---------------------------------------------------------------
       世嘉土星不做3D,而是做3D变形的2D精灵

       土星模拟器从技术上讲,OpenGL可以做四边形,在OpenGL或D3D中将这些四边形绘制为实际的3D对象,硬件上是通过三角形模拟的四边形但这样的3D硬件渲染会产生大量图形渲染错误和其它各种各样问题,并且无法再现土星可以做出许多奇怪的效果(比如“蝴蝶结四边形”)。主要是API的一个限制影响3D加速,老实说,它需要至少有OpenGL 4.3能力的GPU硬件,在OpenGL 4.3中,引入了一个名为“Compute Shader计算着色器”的新功能,这个新组件为OpenGL提供了许多灵活性,并允许实现按行渲染四边形的例程。Kronos新的OpenGL CS渲染器在着手解决基于Yaba Sanshiro旧OpenGL渲染器上的问题,精确地再现VDP1处理行为是OpenGL CS渲染器的目的。

       当主机硬件和PC硬件非常不同,并且PC硬件速度足够快,可以在软件中模拟主机硬件处理,一开始就这样做的有SSF。不过,SSF开发者也使用了DX11 GPGPU加速,在GPU上运行Saturn模拟器虽然仍然无法获得更高的分辨率,但你的CPU会被完全释放。
---------------------------------------------------------------
       Yaba Sanshiro重新开始编写新的Vulkan图形仿真核心


       Yaba Sanshiro 源自Yabause代码库,由日本devMiyax开发,原名uoYabause,其中的uo代表 "Un official"非官方,uoYabause为Yabause的非官方移植,是合并了OpenGL ES 3.0硬件加速的Android版Yabause,于2015年底推出2017/09/08更名为Yaba Sanshiro并发布了Windows版,与Android版同步定期更新。

       Yabause 2003年发布,Yabause代表"Yet Another Buggy And Uncomplete Saturn Emulator"又一个漏洞百出不完整的土星模拟器;2016年开发团队在其官网宣布Yabause不再继续开发和维护。作为分支版的YabaSanshiro Windows版也一度停更,都因为不恰当使用OpenGL受API限制,硬件渲染不能再现土星VDP1的处理行为,产生出大量错误和其它各种各样的问题。SH2 Dynarec在4代i7上能达到70%的CPU使用率。Yabause及其衍生版uoYabause、Yaba Sanshiro硬件渲染看似有着更快、更好的视觉改进,实际是以严重缺陷为代价提供的。Yaba Sanshiro基于Yabause架构,devMiyax断断续续做着修复,至今仍未有根本性改善(图形和其它方面模拟不完整)兼容性表现一直很烂。

       Yaba Sanshiro原名uoYabause,作为Yabause非官方移植版uoYabause上架谷歌商店后,于2017年8月遭谷歌下架原因是uoYabause该名称与Yabause太相似了,有购买用户向谷歌投诉uoYabause该移植付费版是一个欺诈项目,稳定性、兼容性差评不断,有人在推特发文,认为该模拟器在VDP1、SH2、SCU 、SCSP这些部分上可能需要重做

       从谷歌将uoYabause从Play商店下架后该项目被devMiyax改名为Yaba Sanshiro,重新上架谷歌Play商店,不久又因包含Action Replay作弊功能涉嫌违反谷歌Play商店的设备和网络滥用政策(作弊功能可能会导致自动过滤器出现故障),2020年10月谷歌将包含Action Replay作弊功能的Yaba Sanshiro列入黑名单之后它的名字更名为Yaba Sanshiro 2,重新上架谷歌Play商店,作弊功能已被删除,而为之前Yaba Sanshiro专业版付费的用户由于失去了他们的许可证,所以必须再次为此版本付费。

       2018年12月由法国FCare开发适用于Windows、Linux端的Kronos(试图协调Yabause、Yaba Sanshiro的分支版),此分支以准确性为导向,以现代OpenGL为目标,同时实施急需的修复,其图形仿真水平在很大程度上高于Yaba Sanshiro,它的兼容性和功能可以说是Yabause的最佳分支版。

       Yaba Sanshiro大可以像Kronos那样引入OpenGL Compute Shader来准确模拟VDP1处理。Compute Shader是在OpenGL 4.3(OpenGL ES 3.1)开始支持的一种专门用于并行计算的着色器。Android在Android 5.0(API 21)引入了OpenGL ES 3.1支持。

       2020年12月27日,Yaba Sanshiro开发者devMiyax推特发文称准备重新编写新的Vulkan图形仿真核心,以便准确模拟VDP1、VDP2。
       我重新开始使用#Vulkan实现新的图形仿真核心。到目前为止,我觉得好处是。
       *可以分离VDP2和VDP1
       *最大限度地减少和简化了仿真的实现。
       *快速

       Yaba Sanshiro没有引入OpenGL CS而是选择了Vulkan来初步实现新的图形仿真核心,devMiyax在4年前告知用户Vulkan不支持四边形渲染,只能通过镶嵌来处理。这里我查了下资料,PC端早在多年以前nVidia Maxwell GPU、AMD Radeon R7 250、intel MESA iGPU对于Vulkan的支持都可以实现ParaLLEl四边形渲染。

      由于土星模拟的瓶颈是多个VDP系统,硬件仿真必须分开来实现。此外,世嘉土星对CPU周期的要求非常严格,改变任何关于解释器的东西都可能需要重写与时序有关的一切。devMiyax接手Yabause开发有10年以上,考虑到硬件渲染造成的弊端矛盾,开发中在解决新bug的同时又会造成其它问题,顾此失彼陷于技术矛盾的问题处理。新版Yaba Sanshiro较旧版在兼容性、稳定性难有明显改善下,除UI界面优化调整不错外,其它方面变得更糟,若非自身程序Bug太多影响到付费用户与谷歌Play平台网络管理,招致两次除名下架在EMU圈子影响较大,开发者可能不会想办法从其它方面进行弥补。

      2022/3/15 开发者devMiyax在推特发文:“关于SH2缓存,它将在Yaba Sanshiro 2 Pro 1.8版本中提供。在1.8版本中加入了SH2缓存模拟,通过缓存命中率来修正了某些游戏bug,略微提升SH2准确性以此来改善一下兼容性。 经测试OpenGL下缺失图层问题严重,可通过调整设置解决,但会造成屏幕图层闪烁。新加入的Vulkan核心目前只能支持个别游戏。2022/3/27发布Windows版 1.8更新,测试运行情况比安卓版要好,仍然存在很多严重bug:切换全屏会使窗口上下黑边不断延长导致窗口/全屏切换失效,整体情况落后另一分支版Kronos。


      Yaba Sanshiro对VDP1、SH2、SCU 、SCSP的仿真其实很不完善。开发者devMiyax在谷歌Play向用户坦言:“硬件模拟真的很难,Yaba Sanshiro并不完善,你可以在这里检查当前的兼容性。

---------------------------------------------------------------

[Emulation General Wiki] 世嘉土星模拟器比较
表格下的比较说明 (关键点摘录


SSF
      由于最近在最新版本中检测到病毒,不建议使用。


P.S.释疑:确切地说,对于许多具有严格时序和更直接访问硬件的系统,尤其是较旧的系统,周期精度是高精度仿真的一个关键方面。SSF自R27以来作者开发了一个无限循环程序样本,因无限循环要从CPU中提取资源换取浮点精度的缘故,而被一些杀软误标记为病毒。


Yaba Sanshiro 2
      它远不如SSF和Mednafen那么成熟,仍然存在许多兼容性问题,开发似乎已经停止...


Kronos:
      
大多数游戏在Windows上仍然存在问题...   此处提供了兼容性列表。

1

路过

雷人

握手

鸡蛋
2

鲜花

刚表态过的朋友 (3 人)

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|琵琶行论坛 ( 赣ICP备12000882号 )

GMT+8, 2023-2-4 14:28 , Processed in 0.016360 second(s), 6 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部