模拟器中的 Filter 或 Shader 基本都是基于图像本身的 。一般来说模拟器不会提供与几何相关的 shader(32 位机以后会有少量这类 shader) 。也就是说,模拟器滤镜生成的图像都是在不清楚游戏本身运行逻辑的情况下,单纯对最终输出的图像进行变换 。因此这里用 Filter 远比用 Shader 来得更为精确 。不过因为 RetroArch 的滤镜系统将其称为 Shader,因此之后将不分辨该用词(shader = 滤镜 = filter) 。
以下将从抗锯齿滤镜、放大增强滤镜、效果滤镜和硬件仿真滤镜四个角度对模拟器常用滤镜进行介绍,并着重对现在应该如何模拟 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 两种 。
像素图片放大这件事上,只要模拟器输出分辨率跟具体显示分辨率不匹配,模拟器本身就要选择一种插值方式 。可以进行线性插值(颜色设为邻居的加权平均)或者最近邻插值(与最近的邻居像素颜色相同) 。显示上最近邻插值能够还原原本的像素颗粒,而线性插值能进行初步的模糊和润滑,具体喜欢哪种就看个人喜好了 。
猜你喜欢
- 苹果期货价格走势图 – 苹果期货历史最低价
- 李世民完了是哪个皇帝 历史上李世民完了是哪个皇帝
- 微信在新手机登录还能查到删除人聊天记录吗? 如何查历史微信聊天记录
- 山东历史名人 孟子简介
- 数码知识:qq音乐历史播放怎么找qq音乐历史播放在哪
- 历史复习资料 历史复习资料介绍
- 水浒传中的林冲历史上存在吗?
- 鲁智深历史上存在吗?
- 历史上有吴用吗?
- 俄罗斯的历史简介 俄罗斯的历史简述
