以下将从抗锯齿滤镜、放大增强滤镜、效果滤镜和硬件仿真滤镜四个角度对仿照器常用滤镜进行先容,并着重对现在该当如何仿照 CRT 进行解释。
抗锯齿滤镜
对仿照器常见的 2D 游戏,抗锯齿滤镜基本没什么用,以是只是大略先容一下。

首先是为什么要抗锯齿。大家知道时域采样每每要用规则采样。时域采样在频域中相称于用狄拉克梳子卷积旗子暗记本身,如果被采样旗子暗记的带宽低于采样旗子暗记的奈奎斯特频率,就没问题,不然就会堆叠失落真产生 aliasing(一维叫混叠,二维叫锯齿)。在空间域中采样几何本身或者现实天下图片的时候,规则采样用得很少,由于很随意马虎对周期性高频旗子暗记涌现 aliasing。人们通过局部改进分辨率、随机采样等等路子进行抗锯齿,就产生了各种 AA 算法。
我们知道仿照器滤镜都是浸染于屏幕空间(不是仿照器图形设置中的 AA 选项),和图形渲染不同:它每每是通过减少图像中的高频旗子暗记,而非增加采样频率或改变采样策略进行 AA 的。是纯粹的初次采样完毕之后的空间域行为,不须要获知图形的几何信息。
常用的屏幕空间 AA 便是 FXAA 了,其详细事理太过繁琐,可参考此贴:
https://catlikecoding.com/unity/tutorials/advanced-rendering/fxaa/
一样平常来说,2D 游戏,尤其 16 位机器以下的游戏不要利用 Anti-aliasing shader。像素图像本身乃至可以说便是由锯齿构成的,如果强行进行 AA 会使图像看起来非常诡异:
3D 游戏可酌情利用,尤其是仿照器本身 AA 开的不高的情形下。屏幕空间的 AA 效果虽然一样平常但常日速率较快,如果开 3D 游戏仿照器内 AA 比较吃力的情形下,就凑合用屏幕空间的 AA 吧。
放大增强滤镜
这类滤镜这天常平常最常见的,也是人们最为常常利用的滤镜(虽然 LZ 并不常用这类滤镜)。它的紧张浸染是减少像素画面的颗粒感。像素艺术最大的问题便是经不起放大:一旦放大往后,原来可爱的 Sprite 瞬间变得狰狞了起来:
为理解决像素图像放大的问题,人们发明了一系列增强算法。在机器学习参与之前,这类滤镜还比较大略,我们也只考虑机器学习之前的常用滤镜。
首先是基本的插值:Nearest Neighbor,Bilinear 两种。
像素图片放大这件事上,只要仿照器输出分辨率跟详细显示分辨率不匹配,仿照器本身就要选择一种插值办法。可以进行线性插值(颜色设为邻居的加权均匀)或者最近邻插值(与最近的邻居像素颜色相同)。显示上最近邻插值能够还底本来的像素颗粒,而线性插值能进行初步的模糊和润滑,详细喜好哪种就看个人喜好了。
Scale 系列:
包括 Scale2x、2xSal、EPX、AdvMAME2x 等等。这类滤镜是利用大略的 filter 对图像进行卷积。有时比纯挚的卷积要繁芜一些,等价于利用了多个不同的滤镜进行卷积往后产生多个图像,末了对图像进行条件稠浊。还有些强调边缘的滤镜也会通过图像的二次差分判断边缘从而采纳不同的稠浊策略(权重)。
考虑最大略的 Scale2x,将像素 P 放大为 4 个子像素,根据周围 4 像素设置子像素的颜色采取以下规则:
1=P; 2=P; 3=P; 4=P;
IF C==A => 1=A
IF A==B => 2=B
IF D==C => 3=C
IF B==D => 4=D
IF of A, B, C, D, three or more are identical: 1=2=3=4=P
则称之为 Scale2x 算法。其结果实在基本上便是把一个像素分成了四个像素,颗粒感会大大低落。规则大略,性能也好:
其它 Scale 系列同理,紧张都是在放大之后根据原图像周围像素颜色通过一定规则决定子像素颜色。
Eagel、2xSal 也是同一系列的滤镜,只不过考虑的周围像素范围不同。例如比较复合的 Super2xSal 考虑的像素范围就要更大一些,涉及周围 11 个像素的值,并且也设置了相似的剖断规则,效果如下:
Scale 系列滤镜是我认为 16 位机和 8 位机的底线,下面的就轻微有点越界了。
HQx 和 xBR 滤镜系列
有时候当代人口味刁钻,希望能肃清像素本身的颗粒感。而前面那些大略的临像素加权均匀或分支的滤镜会导致边缘模糊,并且处理像素游戏中的线条非常苦手,因此有人开拓了相应更繁芜的滤镜知足这些人的需求。
HQx 系列 :(high-quality scale)
这一系列滤镜会根据周围像素颜色与自己的不同关系(周围 8 个像素根据阈值分为相似或者不相似两类,因此共 256 种可能),通过查找表的办法确定放大之后的像素颜色如何定义。而这一查找表本身的定义比较繁芜。用 C 写几千行也很不随意马虎(包含了 HQx-2/3/4 https://github.com/grom358/hqx/blob/master/src/hq2x.c),当然用 GLSL 要大略不少。其目的紧张是为了放大之后的线条能够更加顺滑。
xBR 滤镜系列
xBR 滤镜系列,包含 xBR , xBRZ, xBR-Hybrid, Super xBR, xBR+3D 和 Super xBR+3D.
同样的,这些滤镜也紧张是用来嬉戏像素游戏时肃清像素颗粒感利用。总有人认为这种调皮感看起来比颗粒感的像素更舒畅一些。
这类滤镜比 HQx 更强大的地方在于通过多个 pass 办理了许多 HQx 的单次查找表索无法办理的问题,让还原的线条更加锐利。
详细事理参考:( https://forums.libretro.com/t/xbr-algorithm-tutorial/123)( https://pastebin.com/cbH8ZQQT)
虽然这里可怜的马里奥看起来有点不堪,但一样平常情形下这个滤镜没有那么惨。xBR 滤镜对边缘的处理远比 HQx 更加强大,非常长于肃清像素的颗粒感并且保留色块和边缘的锐利。NGA 有人专门写过一篇文章吹这个滤镜,并且认为 xBRZ 是最好的 2D 放大滤镜(纯挚从放大角度,不考虑深度学习类的方法,该当算是没错的)。有需求的可以参考一下:
https://bbs.nga.cn/read.php?tid=9171524
(然而说实话我是 xBR PTSD,看着就难熬痛苦)
其他大多数像素增强也都是采取了各种不同的自定规则对子像素进行插值。效果有好有坏。游戏之间的图像特色也有很大的差异,适用不同滤镜,大家利用时可以根据自己的视觉体验进行选择。
比如 NEDI(New Edge-Directed Interpolation), 论文: http://web.archive.org/web/20101126091759/http://neuron2.net/library/nedi.pdf
比如专门为 GB/GBA 设计的 OmniScale: https://sameboy.github.io/scaling/
深度学习方面尤其跟 GAN 有关的方法则包含一些 AI 将图片库中特色结合进行的创作,不符合高还原度 retro gaming 的主题,一样平常也不推举利用。
效果型滤镜
以下滤镜会天生一些有趣的效果,一样平常用不着,想体验一下也行。
Dithering:dithering 是早期 PC、针式打印机等等用点阵表示密度来展现色彩的。最近很火的独立游戏《obra dinn》也是这种风格。但纯挚基于图像的 dithering 实在很花费韶光,采取一些近似的化效果也不好。用在 16 位机的游戏上也并不得当,凑合看看吧:
bayer-matrix-dithering:
Cel-shading:卡通渲染用在 16 位机上当然是个灾害,但 3D 游戏有时候也有点意思。同样的,不要指望纯挚的屏幕空间的滤镜能搞出什么花来:
老电影:
technicolor 滤镜是一个不错的老电影效果滤镜,还能仿照胶卷上的点和划痕:
效果型滤镜随喜好添加即可。
硬件仿真型滤镜
这是我认为仿照器屏幕空间滤镜真正有用的地方,也是本帖的重头戏。这类滤镜的目标是只管即便仿照真实硬件的显示设备,在当代 LED 显示器上对古旧显示设备(掌机屏幕、电视、街机 CRT 等)进行仿真,从而带来更多仿照游戏和怀旧乐趣的一类滤镜。
把稳,这里先容的大部分滤镜的最佳利用场景都是 4K 显示器全屏嬉戏。各种掌机屏幕险些都没有能力仿照这些效果,而手机屏幕太小,效果是看不清的。
首先来说说比较大略的掌上设备。利用显示器屏幕仿照掌机设备的一大问题是无法准确仿照掌机屏幕的表现。而屏幕空间的滤镜通过色彩、像素颗粒感这两方面考试测验逼近掌机屏幕的表现。
例如 GB(带光)式的色彩和像素映射(gameboy-light):仔细不雅观看会创造马里奥采取了方形像素,并且利用了横向和纵向的像素分割线对老式 LCD 进行了风格化。色彩映射也是 GB 的绿屏。
可见像素并非大略隔壁插值,而是同时仿照了像素本身的荧光扩散效果。利用了大量的像素仿照了单个 GBA 像素的荧光扩散灰度显示不同亮度时的不同梯度。因此才能将像素显示的阴影感准确仿照出来。而这一效果也是在 4K 显示器下才能表示得最为明显。由于 4K 显示器有足够的像素去表现这些效果。(你要问我为什么用 4K 显示器全屏玩 GB 游戏?可能是吃得太饱了……)
比拟一下就知道加滤镜和不加滤镜的寰宇之别。很可爱吧,是不是想起了另一个古旧 LCD 设备(文曲星):
这里这个 GB 的滤镜是 LCD 系列滤镜的一种。这一系列滤镜便是为了创造相应掌机设备 LCD 屏幕效果而涌现的。它的事理大框架便是增加像素之间的间隔形成 LCD 颗粒感,通过隔离的荧光过渡形成像素本身的阴影感,从而复原当年的古旧 LCD 屏幕的样子。
比如 GBA 样式(包括了 GBA 屏幕的颜色映射,GBA 反射颜色并不鲜艳,用当代的屏幕去显示须要通过一定的映射)。一定程度上还原了像素排列办法,乃至还原了 GBA 屏幕本身的动态模糊:
举个 GBA 游戏的例子:用 GBA 的朋友对这种色彩和像素风格的画面该当有印象
比拟不加滤镜的鲜艳色彩和线性插值的图像 (用仿照器玩晓月的朋友影象中该当是这个画面):
如果你以为 9102 年了还要还原 GBA 的色彩切实其实开历史倒车(虽然这正是这篇文要干的事情……),那么也可以只进行 LCD 像素映射。只利用 LCD3X 系列滤镜而不映射色彩即可:
同样的,NDS 也可以采取类似滤镜。
由于 PSP 的屏幕相对来说要好不少,类似当代显示器屏幕,一样平常没有针对 PSP 屏幕的仿照需求。如果想仿照 PSP 的屏幕可以利用 RetroArch 自带的 PSP-color 进行色彩映射。
下面说说另一个(真正的)重头戏:
CRT 滤镜
首先请把所有其它 CRT 滤镜扔掉,只留下一个:CRT-Royale(除非硬件跑不了,再考虑其他)。
滤镜利用了大量 pass 进行了 CRT 的仿照。如果 PC 性能够强的话,延时方面的影响也很小。CRT-Royale 十分繁芜和强大, 对 GPU 有一定的哀求。如果用 intel 的 GPU 的话(集显)须要进行修正,改版也在 RetroArch 里供应了。
用来显示 CRT-royale 滤镜的屏幕至少须要 2K 以上的分辨率,4K 乃至 8K 屏幕的仿照效果更加真实。是的你没看错,要仿照 CRT,最低哀求是 2K 分辨率,4K 更佳。
我们知道 CRT 中的磷光体(或荧光体)是产生冷发光征象的物质,受到阴极射线(电子束)激活发光。它发出的光芒具有一定的特色,与当代 LED 的像素光芒有较大的差异。CRT 滤镜的关键便是通过大量当代 LED 像素去仿照磷光体的发光特色,从而仿照 CRT 的显示效果。而在这方面做得最好的便是此滤镜了。(CRT 虽然没有直接的像素的观点,只有荧光粉或者荧光条。不过电子束的信息改变是离散的,因此我们可以将离散电子束信息改变周期内扫过的空间等价为像素的观点)。
在 RetroArch 的桌面 UI 里打开 CRT-royale 的设置界面,我们可以看到很多干系设置,涉及到一些主要的调度项。如果你对 Shader 措辞略有理解,也可以直接打开 Shader 文件进行调度,只是没有界面中方便。根据每个人打仗到的不同型号和不同厂家生产的 CRT,你所喜好的 CRT 参数一定有所不同,玩家可以自行调度到喜好的设置选项。
首先看看效果(网络图片有压缩,要不雅观看大体效果还是自己 4K 全屏运行仿照器比较靠谱。看图片也要看大图,小图自带 AA,把所有特色都抹掉了):
比拟没开滤镜的游戏:
影响终极效果的选项很多。下面我们来阐明一些影响较大的参数:
Halation and Diffusion
Halation 是被荧光体直接反射的光芒,而 Diffusion 是光芒穿过 CRT 玻璃时产生的散射荧光。这两项参数的权重可以进行调度。
Bloom
如果点亮的荧光体发光过强影响到了电视上的其他面积,使全体画面变得过亮,便是一种 bloom 的效果。特殊好的 CRT 会掌握 bloom,但由于这是大量中低端电视可能产生的效果,因此也须要虔诚仿照。
Beam
这项参数掌握了实际进行扫描的电子束的各项维度。不知为何一贯有人认为 scanline 是黑线:scanline 是扫描到的线,而没扫描到的地方才是黑线。除了可以调度 Beam 本身的大小以外,这里也可以调度高斯模糊函数的各个参数。根据不同的参数选择可能产生不同型号电视或街机的效果:
Convergence
彩色电视电子枪发射的三束射线对荧光粉的轰击是否足够整洁:好的 CRT 比如彩监是非常整洁的,但许多消费者级别的 CRT 这方面的表现就很一样平常了,根据每个人童年不同质量的 CRT 可以仔细微调。
MASK
这项掌握的是荧光体的排列办法。滤镜供应了三种排列:0.0 (Aperture Grille), 1.0 (Slot Mask), 和 2.0 (Dot Mask)。这三种排列如下:
每一种排列都对应不同厂家的电视效果,可以分别予以调度。同时,MASK 也有大量参数可以进行调度。比如利用的荧光体个数可以调度 CRT 显示的粒度。
和其它滤镜比较也是高下立判。如果你以为没有高下立判,就调度参数让它高下立判!
不同的制式和不同的输入会有一定程度的图像失落真,没紧要,这些失落真可以用额外的 pass 来仿照。比如电视机的 composite 输入导致的色彩失落真效果,加 NTSC 的色彩映射的效果如下:
再传两个其他游戏的图,还是那句话,要在自己的屏幕上运行仿照器动态才能比较明显看到效果。
以上基本先容了常见的几种 Filter 和它们的大体效果。那么如何利用这些 filter?哪些仿照器支持 shader 措辞写的 filter 呢?
这里:http://emulation.gametechwiki.com/index.php/Shaders_and_Filters 先容了一些常见仿照器支持的 filter 文件类型。一样平常来说,采取通用前端 RetroArch 可以利用大部分的 shader,而利用仿照器自带前端则有很多限定。以是最大略的方案便是直策应用 RetroArch,然后从其 shader 文件夹中选择所需 shader,并通过菜单调度相应参数即可。
总结:仿照器滤镜是个挺大的话题,这里只是大略先容一些类型和它们的效果。一样平常来说,对 32 位及以下机型仿照时才推举利用屏幕空间的滤镜,抗锯齿滤镜一样平常不推举像素游戏利用。像素放大增强滤镜根据个人口味利用,一样平常来说进行大略的 2xSal 等即可,特殊讨厌像素的颗粒感的话,可以考虑 HQx 或 xBR 系列滤镜。如果追求一些分外效果,可以利用效果型滤镜。而为了仿照古旧硬件(紧张是显示设备),则可以分别利用该种硬件的滤镜。CRT 滤镜紧张便是 CRT-Royale,按照自己口味调度之后,合营高亮度 4K 显示器,基本可以知足一样平常 CRT 仿照需求。如果有分外须要当然实机 + 彩监更好,没有这个条件的话仿照器效果也不赖,而且彩监只能体验一种或少数型号的显示效果,而滤镜可以自行配制体验多种电视和旗子暗记的不同觉得,因此也并不冲突。此外,部分 Filter 会降落游戏性能,或者由于须要帧信息从而略微增加游戏延时,有性能需求时应该关闭所有滤镜。
不摸鱼了。
参考:
http://emulation.gametechwiki.com/index.php/CRT-Royale
https://en.wikipedia.org/wiki/Pixel-art_scaling_algorithms
https://www.retroarch.com/index.php?page=shaders
http://emulation.gametechwiki.com/index.php/Shaders_and_Filters
作者:Lunamos@tgfc
原文链接:https://bbs.tgfcer.com/thread-7657428-1-1.html