使用OpenGL渲染场景时,有时会添加一个覆盖层,其中包含信息,设置和一些可拖动项。目前,覆盖层的背景略透明,以使文本易于阅读,同时仍使场景照亮,并让用户看到覆盖层后面/通过覆盖层的场景。

我想替换掉透明背景和半透明背景,据我所知,这要求场景的清晰图像非常模糊*。尤其是在高分辨率和处理能力有限的移动设备(例如iPad)上,许多纹理查找和实时渲染不能很好地协同工作。

有一种方法可以使实时半透明在iPad等移动设备上可行吗?还是有一种方法可以避免在每个帧中都严重模糊场景?

编辑:

如评论中所建议,这是我刚刚在其中找到的图像描述透明度(右列)和半透明(中间列)之间差异的维基百科。



(图片来源:维基百科)


*我知道存在两次通过模糊(一次模糊)然后在另一个方向)以减少纹理查找。但是对于半透明而言,这仍然需要进行大量纹理查找。

评论

我不确定我是否了解您。稍微透明==半透明。因此,您已经在使用半透明。您能说明您要做什么吗?完全透明的背景? (又称透明或不可见)或半透明背景? (也可以在其后面看到一些东西,但是被背景色覆盖)

@RichieSams当前,我使用简单的黑色背景并应用了alpha透明度。因此可以看到场景,但场景仍然很锐利,这分散了文本的可读性。因此,我想将简单的alpha透明度更改为半透明。现实世界中的示例也许是透过有色冰镇玻璃之间的区别。

@Nero在图形中,“半透明”通常并不意味着“磨砂”或“结冰”,所以我建议您在问题中更清楚地查找内容,因为我对此也感到很困惑。

@yuriks半透明:(某种物质)允许光线通过,但不允许细微的形状通过。半透明通常具有问题中使用的含义,因此这似乎很清楚。

#1 楼

我认为,如果您认为实时模糊超出了移动硬件的范围,则可能需要再看一下iOS用户界面:




模糊完全在移动硬件范围内。是的,对于具有大内核的模糊,您需要大量纹理样本,但是纹理样本也可以很好地缓存,并且可以使用可分离的模糊,这实际上意味着MxN模糊需要M + N个样本,不是M * N个样本。您还可以利用硬件双线性采样来减少模糊所需的采样数量。

评论


$ \ begingroup $
我知道通知中心和控制中心。但是我怀疑这些模糊是实时显示的,因为在显示其中一个时冻结了活动的应用程序(或者至少它不再更新用户界面了)。但是链接看起来很有希望。谢谢!
$ \ endgroup $
– Nero
15年8月11日在6:40

$ \ begingroup $
@Nero我怀疑这主要是出于功耗原因。当您从Springboard向下滑动以进入Spotlight时,您会得到一个可变宽度的模糊效果,具体取决于您拉下的距离,这当然是实时的。
$ \ endgroup $
– John Calsbeek
2015年8月11日14:30在

#2 楼

没有办法解决。如果要使文本框后面的区域显示为模糊的,则必须对其进行模糊处理。

减轻性能成本的一种方法是确保使用两遍可分离的模糊处理。

另一种可能有用的方法(取决于文本框覆盖的屏幕数量)是使用剪式或模版测试,仅计算屏幕区域中的模糊,稍后再被文本框覆盖。如果这样做,请确保至少留出至少模糊内核宽度一半的垂直填充,否则,第二次模糊处理将尝试对中间纹理中未计算的纹理像素进行采样,从而导致伪像或附近的模糊化文本框区域的边缘。 (对于第一次通过来说,这不是问题,因为您将从那里的原始未遮罩纹理中进行采样。)