我有一个简单的游戏,它的主题是这些小线条。它针对iOS和android,因此它具有可以在其上运行的大量处理器。出于两个原因


我试图隐藏一个事实,即我没有足够的渲染时间来在大多数设备上处理抗锯齿。
游戏的主题是应该是纯光,所以我认为图片应该看起来像是纯光。只是无法让它看起来正确,也许问题是我正在徒劳地隐藏灯光的锯齿状边缘,同时又不让灯光看起来模糊。

我对图形/渲染非常陌生,我绝对不是艺术家。向我借钱最令人沮丧的是似乎所有涉及的变量。有了辉光,我已经看到了很多可能的变化。


A.添加混合模式,屏幕混合模式或其他混合方式
B.加权模糊,然后在组合前按不同的法线
C。高斯钟形函数的
Sigma(我一直在使用这个令人困惑的计算器,但它给出的值似乎与其他人输入的值不一样)
。发送到
sigma函数
E的“ x”值上的标量。样本比例(使模糊半径更小或更大)
F。更改辉光缓冲区的分辨率

使用如此多的变量时,如何找到“最佳外观”常量?

我也遇到了问题,因为时间在我进行微调和看到它之间很难看到变化之间,我会在着色器玩具中完成它,但是我无法加载此图像或通过程序生成类似的图像。

现在,我确实停留在高斯钟形曲线内核的sigma上,特别是因为我需要输入数字而不是公式,因为我需要处理器速度。您能建议使用一个好的西格玛吗?

#1 楼

高斯滤波器的Sigma和内核大小

关于如何选择sigma和高斯滤波器的内核大小(像素):您可以根据想要的模糊程度(视觉判断)设置Sigma然后根据sigma选择内核大小。这是一个寻找内核大小的游戏,该内核大小可以捕获足够的(数学上无限的)钟形曲线,看起来不错,同时又不算太贵。

作为经验法则,内核大小至少应为6倍西格玛。然后,内核在每个方向上延伸到3 sigma,足以覆盖数学钟形曲线的几乎所有权重。将像素大小四舍五入到下一个奇数也是很好的,这样滤波器将是对称的。因此,例如,在sigma = 1.5 px的情况下,您将使用9像素的滤镜;如果sigma = 2.0 px,则使用13像素的滤镜等。

或者,如果您具有控制内核大小的性能限制,则将其除以6得到最大sigma。你可以摆脱。 (请注意,sigma可以是分数,因为它只是钟形曲线方程式的输入。)

顺便说一句,在大的高斯模糊上获得更好性能的一个技巧是对图像进行降采样,然后执行较小的模糊,然后进行升采样。例如,要获得有效的13像素模糊,可以将图像下采样2倍(使用双线性滤波),然后执行7像素模糊,然后上采样(使用双线性滤波)。它看起来几乎与13像素的模糊效果一样好,但是速度会更快。多个半径不同的高斯加在一起。它比任何一个高斯本身都具有更好的发光效果。例如,这是在Photoshop中创建的模型,其中三层被叠加在一起。三个高斯的大小分别为3px,5px和11px(分别对应于sigma = 0.5px,0.83px,1.83px)。



您还可以添加更大的高斯来进一步增加光晕的视半径。这就是在3D游戏引擎中实现标准“光晕”效果的方式。

如果考虑到性能,则可以用未模糊的原始图像的副本代替最小的高斯图像;产生的效果看起来会更锐利,而不是那么柔和,但是仍然会围绕着它发光。如前所述,可以通过下采样,模糊和上采样来完成较大的高斯滤波。并且可以使用硬件双线性滤波完成升采样,将其折叠成将各层融合在一起的遍次。上面的图像。不幸的是,除非模糊半径很大,否则模糊对于隐藏锯齿不是很有效。没有一种简单的方法可以使用后处理来消除锯齿:避免锯齿的最佳方法是不要首先渲染它们。 :)

我听说您出于性能原因不能使用MSAA,但可能是另一种选择。根据渲染辉光轨迹的方式,您也许可以稍微增加它们的大小,并编写一个应用渐变的着色器,以淡化边缘几个像素内的颜色。那应该帮助他们看起来更加光滑。这是一个阴影控件,演示了用于对程序形状进行抗锯齿的1px宽的边缘衰减。

评论


$ \ begingroup $
@Nathan_Reed我应用了您的大多数技巧,除了不做MSAA之外,奇怪的是完成了技巧,并且没有2倍的命中率。如果我对向当前效果添加更多高光有疑问,我应该编辑问题还是提出一个新问题?
$ \ endgroup $
–J.Doe
16年7月12日在7:31



$ \ begingroup $
@ J.Doe太好了,很高兴听到它正在解决!我想说的是,如果您要使用特定的外观,最好提出一个有关调整效果的新问题。
$ \ endgroup $
–内森·里德(Nathan Reed)
16年7月12日在7:36