从19年末开始项目,还在更新中,国内的各个论坛和视频网站好像从来没有人介绍过。
严格来说应该算是overlay,整合了几个深受喜爱的crt滤镜(包括Royale、Guest-Venom、Guest-Sm)、点阵滤镜,还整合了MDAPT和ScaleFX,增加了很多调整选项,所以画面表现是不俗的。最特殊的是给游戏画面外围加了一圈可以实时反射游戏内容的边框,立体感极强。
MDAPT:全称merge dithering and pseudo transparency,是可以改善老游戏半透明效果的算法,在retroarch着色器目录下的dithering目录就有,由sp00kyFox实现。原帖给了MD索尼克中瀑布的效果图,我这里再给个对比图便于比较。第一图是原始的,第二图是开了MDAPT的。
ScaleFX:2D图像的平滑缩放算法,等效xBRZ甚至更好,有了它就不用再想念着xBRZ了,在retroarch着色器目录下的scalefx目录就有,也是由Sp00kyFox实现的。在本套shader中,通过改变几个参数,可以关闭扫描线效果,开启任意放大倍数的ScaleFX,生成非常好的2d平滑画面,满足不同人对画面的需求。下面的参数调整里会详细说明。
使用前提:
1、retroarch 1.9版
2、设置--驱动--视频中,驱动必须选glcore(opengl)或vulcan。作者推荐用vulkan,性能更好。我自己是把vulkan设为全局有效,但是对某些核心专门指定用glcore,例如beetle psx hw,也是没问题的。
3、设置--视频--缩放中,关闭“整数缩放”,“高宽比”选显示器的实际比例(比如16:9)。不用担心游戏画面变形,该着色器接管后会正确处理的。
-------------------------------------------------------------------------------------
该滤镜有一套专用的4K超清框体包,感兴趣的请自行下载。
-----------------------------------------------------------------
放一张作者给的预设文件说明,不过稍有点过时了。
Base部分是功能最全、运算量最大的。可以看到有著名的royale crt滤镜;guest-dr-venom、guest-sm也是流行的crt滤镜。我目前用的是guest-dr-venom,也推荐用这个。
Glass部分是玻璃特效,在屏幕空白部分加上毛玻璃,可以朦胧映射更多的游戏画面,非常炫。
--------------------------------------------------------------------------------
下面介绍几个和画面有关的参数调整。在“着色器参数”里设置。设置好后别忘了保存为该核心的预设或该游戏的预设。
[ROTATE] Rotate CRT Tube
旋转游戏画面。
当使用FBneo核心玩街机的纵版游戏时(比如1942),先在FBneo的选项里开启vertical mode,然后再打开本开关,这样操作才能显示正确的纵版缩放画面。
___HSM MEGA BEZEL__ V.202X-XX-XX-0 - Debug ON
[ASPECT] Type
[ASPECT] Explicit Aspect Ratio
[SCALING] Int Scale Mode
对核心处理完后传来的一帧图像进行二次拉伸,在横向和纵向上分别拉伸,达到匹配选定的宽高比类型的目的。
拉伸的原则由[SCALING] Int Scale Mode决定。模式0(默认的),非整数倍拉伸,比如纵向放大6.5倍 同时横向放大7.4213倍;模式1,纵向整数倍拉伸;模式2,纵向和横向都整数倍拉伸。
在进行设定的时候,打开Debug ON开关,可以在显示器上列出各项信息方便查看,包括:核心传来的图像大小、二次拉伸后的图像大小、在纵向和横向的拉伸倍数、你的显示器的分辨率等。
宽高比类型有如下七种可选:
0 - auto:默认的,程序根据核心传来的游戏图像的宽高比自动选择一种输出比例。在玩fc/sfc/md/ss/ps1游戏时,都会自动按照4:3放大输出,模拟出crt电视机相同的显示效果。但是智能程度还是不够,比如用flycast核心玩dc的刀魂2,如果开启了宽屏选项,它就判断不出来是宽屏的,还按照4:3输出,这时就得手动选择16:9了。
1 - Explicit:按照玩家手工设定的宽高比数值来处理。[ASPECT] Explicit Aspect Ratio就是可以手工设定的宽高比数值,比如1.33就对应4:3、1.78就对应16:9。
2 - 4:3
3 - 3:2
4 - 16:9:如上面所说,有时程序判断不对正确的输出比例,就需要手动选择宽屏,主要应对宽屏hack后、wii等等宽屏画面游戏。
5 - PAR:原始像素图的长宽比,也就是核心传来的是什么比例就用什么比例。用于模拟psp、gba等等固定液晶屏比例的掌机,因为它们的游戏都是针对自身的固定比例设计的,稍有改变就会失真。
6 - Full:将游戏图像拉伸到填满显示器的屏幕,可能导致连反射边框都没了。
以模拟psp和gba这两个比较特殊的举例。这两个掌机都是固定分辨率的液晶屏设备,游戏也是针对这样的分辨率开发的,所以我们希望把原始分辨率整数倍拉伸就好了,没有一丁点变形。
那么将[ASPECT] Type设置成5 - PAR,将Int Scale Mode设置成模式1,就ok了。之后在核心的选项里随意调整其处理输出的图像,比如ppsspp核心,我针对我的4K屏,将internal resolution设成了2880*1632,最后屏幕上显示的就是2880*1632的图像。
[2D CURVATURE] 2D Curvature on Long Axis
[2D CURVATURE] 2D Curvature on Short Axis
横向和纵向的曲率,不喜欢球面显示的,把这2个值设为0就是直边了。
特别提醒:有时调整扫描线参数会导致出现摩尔纹,这是球面显示造成的,所以设成直边就行了。
接下来是游戏画面效果的参数介绍。
首先要说明的是,使用该着色器,即便保持默认设置,画面也算是不错的。
①[CORE RES SAMPLING] Scanline Dir
②[CORE RES SAMPLING] Opposite Dir
③[SCALEFX] ScaleFx On
④[INTERLACE] Trigger Res
⑤[SCREEN FX] Fake 240p Scanline Opacity
③参数是ScaleFX的开关,默认是关闭,也就是不进行纹理缩放。同时联动①②参数。
①②参数设定了对核心传来的图像在横轴和纵轴的采样率/放大率,默认是1,也就是不采样/不放大,原封不动再处理。设为小数就是降采样,比如①设为0.5/②设为0.25,那么可以把核心传来的1280*960的图像采样成640*240的。设为大于1时,就是调用ScaleFX来进行纹理缩放,2x、3x、4x……。
下面用sfc的马里奥世界、ss的月下来演示一下ScaleFX的效果。
第一张都是默认参数的效果,可见都是马赛克放大+扫描线黑线。特别说明,这时的扫描线黑线是滤镜程序直接插在图像的每行之间的,所以是图像自身的一部分,区别于④⑤的那个扫描线黑线图层,作者特意强调了这点。
第二张都是③开启、①②都设为2时的效果。画面中Sampling Res这行表示图像已经是2倍平滑放大了,可以看到边界的平滑程度都是xBRZ级别的。也不再插入扫描线黑线了。至于为什么不再插入黑线,作者的意图应该是这样的。如果当初FC/SFC诞生时能够有足够强的机能,那就不必采用non-interlaced方式了,那么我们在普通crt家电中就再看不到黑线了,应该差不多也是这种2倍ScaleFx后的画面。原则上应该和用DC玩480P的感觉差不多。
如果你觉得少了黑线就缺了感觉,或者就是DC接传说中的1080i crt电视,那么下面就是把黑线加回来的方法,不过是“伪黑线”。
④参数是个门限值,表示当Sampling Res里图像纵轴达到多少分辨率时,在图像表面再覆盖一层扫描线黑线图层,目的是看起来更像crt电视的效果。默认值是600,随意调整。
因为是覆盖的图层,所以黑线不是图像自身的一部分,所以⑤称为fake scanline。
下面的2张图给出了效果,仍然是③开启、①②都设为4,因为纵轴分别达到了956、960,都超过了600,所以都自动覆盖了扫描线黑线图层。
当然也可以①②都设为2,把④设为400。
⑤参数则是设定扫描线黑线图层中黑线的明暗的(注意不是粗细),1为最黑,0为不可见。
ScaleFx的另一大用处,以ppsspp为例。之前ppsspp核心(包括独立版)的xBRZ texture upscale功能一直存在失效的问题,虽然在1.11版引入了texture shader功能,但并不完美。现在,可以让ppsspp核心不做任何多余的处理,只输出480*272的原始图像,由着色器的ScaleFx来做纹理缩放,也就相当于xBRZ texture upscale,并且不会失效。下面的2张截图展示了效果。皇骑大场景变化后边缘都很平滑,少年街霸3运动人物边缘也是平滑的。采用如下的策略基本上能获得很好的画面:
如果最终输出画面是原始画面的6倍,那么在核心的选项里把内部分辨率设为3x、纹理过滤就用nearest,着色器里再设置为2倍ScaleFx。
如果最终输出画面是原始画面的8倍,那么,或者在核心的选项里把内部分辨率设为4x、着色器里再设置为2倍ScaleFx,或者在核心的选项里把内部分辨率设为2x、着色器里再设置为2倍ScaleFx、最后的2倍整数放大由着色器默认自动完成。
不单是2D游戏,2D背景+3D人物的游戏也适用。用duckstation核心跑FF9为例。duckstation核心选项中,内部分辨率设为3x(for 720p),TextureFilter为Nearest,MSAA都没开;着色器这边设置为2倍ScaleFx,并开启fake 240p scanline。在保持良好解析度的同时,不显油腻。后2张图是有没有开启fake 240p scanline的对比。
以及用beetle psx hw核心跑最终幻想7,设置上基本相同,无论是游戏画面还是装备文字界面,表现都不错。
下面介绍模拟crt电视显示风格的参数,也就是对荫罩板的模拟。
在介绍参数前先简单普及一下概念,便于对参数的理解。
crt电视的荫罩板大体上有荫罩式(Shadow Mask)和荫栅式(Aperture Grille)两大类。
荫罩式又有点状、沟槽状(slot mask)之分;荫栅式就是特丽珑(Trinitron)/钻石珑了。
点状荫罩式都是中低端电视机采用的,老式的球面屏都是,是最普通的;沟槽状荫罩式要高级些;特丽珑当然是王座了。放两张网上找来的图方便后面说明,从左到右就分别是点状、沟槽状、荫栅式的结构模型。
现在再来介绍参数。
①[MASK]Type:0是CGWG,1-4是Lottes,5和6是特丽珑,7是slot mask。默认是7。
②[SLOT MASK]Size:1值适合1080p显示器,2值适合4K显示器。观感不明显。
③[SLOT MASK]Strength:调节画面整体的strength。默认0,调太高了画面就花了。
④[SLOT MASK]Width:调节沟槽孔的宽度。作者说2/3适合1080p显示器,4/5/6适合4K显示器。
⑤[SLOT MASK]Height:调节沟槽孔的高度。作者说2x1适合1080p显示器,4x1适合4K显示器。
⑥[MASK]5-7 cutoff:设定how soon black appears between pixels for colors that are close to the R, G, or B primaries。
⑦[MASK]4-6 Strength Dark:调节横向上每个荧光点之间黑色间隙的宽窄。数值越小,黑色间隙越宽越显黑,荧光点就越窄,画面整体颗粒感就越强。
⑧[MASK]4-6 Strength Light:调节横向上每个荧光点的宽窄。数值越大,荧光点就越宽,颗粒感就越弱。
⑨[MASK]PVM Like Colors:模拟类似PVM/BVM的色彩。调节起来没看出啥区别。
①参数显然就是选择模拟的风格了。0/1/2/3/4都是模拟点状,观感差,适合忆苦思甜。7是模拟沟槽状,作为默认设置,观感ok,同时关联②③④⑤进一步调节。5是finer version的特丽珑,横向上的每个荧光点的间距小、分离度不高,说是适用于1080p显示器;6是more coarse version的特丽珑,横向上的每个荧光点的间距较大、颗粒感强,说是适用于4K显示器。
②③④⑤这几个参数是当①参数设为7时有效的。
⑥参数是当①参数设为5/6/7时有效的,我不太懂原理所以不好翻译,似乎是说像素在“显现颜色-->变黑-->显现颜色-->变黑”这个过程中转黑的速度该多快。总之是数值越大越快。
⑦⑧参数应该是写错了,不是4-6,而是1-6,也就是①参数设为1/2/3/4/5/6/7时都有效。
--------------------------------------------------------------------------------
上两张用flycast核心玩dc游戏的4K截图(核心设置内部分辨率为1280*960)。
一个是cvs2,开启Fake 240p Scanline;一个是3d的刀魂,在核心选项开启宽屏,着色器参数按照上面说明的手工设置为16:9,并关闭了Fake 240p Scanline。