调整发光着色器以使其看起来更好


9

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

在此处输入图片说明

我试图向他们添加实时发光有两个原因

  1. 我试图掩盖一个事实,我没有足够的渲染时间来处理大多数设备上的抗锯齿。
  2. 游戏的主题应该是纯光,因此应该使图片看起来像是纯光。

我已经调整了一个可分离的高斯模糊着色器一段时间了,但我感到很沮丧,只是无法正确显示,也许是我想徒劳地隐藏光线的锯齿边缘同时不要使光线看起来模糊。

我最大的问题是使它看起来最好的所有变量。

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

  • A.添加混合模式,屏幕混合模式或其他混合
  • B.对模糊进行加权,然后在合并之前对法线进行加权
  • C.高斯钟形函数的Sigma(我一直在使用这个 令人困惑的计算器,但它似乎并没有提供别人看到的相同值)
  • D.标量发送到sigma函数的“ x”值
  • E.样本比例(使模糊半径变小或变大)
  • F.更改发光缓冲区的分辨率

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

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

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

Answers:


8

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

关于如何选择高斯矩阵的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宽的边缘衰减。


@Nathan_Reed我应用了您的大多数技巧,除了不做MSAA以外,奇怪的是完成了技巧,并且没有2倍的命中率。如果我对向当前效果添加更多高光有疑问,我应该编辑问题还是提出一个新问题?
J.Doe '16

@ J.Doe太好了,很高兴听到它正在解决!我想最好是问一个关于调整效果的新问题,如果您要使用特定的外观。
内森·里德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.