首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL/Android大精灵四足器性能差

OpenGL/Android大精灵四足器性能差
EN

Stack Overflow用户
提问于 2013-05-15 18:18:02
回答 1查看 693关注 0票数 1

我正在使用opengl在android上开发一个游戏,并且有一些性能问题。

比方说,我想画一个背景,背景部分充满了草“灌木丛”。灌木丛有不同的x,y,z,不同的大小等等(每个灌木是一个2D精灵),潜在的部分隐藏彼此(我使用透视相机)。如果这些精灵很大,我的性能就会有很大问题(即四角体大小,而不是纹理大小/分辨率):

  • 如果我使用经典的前后绘制(以避免透支),我发现自己有问题,因为(我认为) alpha测试。即使灌木丛只有不透明和完全透明的像素(没有部分透明度),如果我使用正确的alpha测试比较(GL_EQUAL 1),性能也很差,因为许多像素必须进行alpha测试(如果我理解正确)。
  • 如果我使用禁用alpha测试的背靠背显示器,我也会损失很多性能(但这一次是因为透支问题),即使禁用深度缓冲区写入(顺便说一下,如果深度测试被禁用,它是否会做任何事情)。

我有很好的表现,如果使用前到后没有阿尔法测试,但当然,雪碧断线是完全没有,这是真的很糟糕。

所有的灌木丛都有相同的纹理,我使用16位颜色,mip映射,几何分批,裁剪面,没有着色器等。所有我能想到的,以提高性能(在其他情况下并不坏),除了纹理压缩。我甚至过滤精灵,以避免“显示”的屏幕外。我还为测试目的尝试了一些“暴力优化”,例如使纹理完全不透明,大量降低纹理分辨率,禁用混合等等,但是除了alpha测试删除之外,没有什么比这更好的性能了。

我想知道我是不是忘了在这里做些什么来帮助演出。背到前创建透支,前面到后面是缓慢的,因为alpha测试(我不希望我的灌木丛是“方形”图像,所以我不能禁用alpha测试)。如果我创造了更小的精灵性能要好得多(即使有更多的精灵),但这只是一个解决办法。

总结一下,如何在不损失性能的情况下,显示需要裁剪的重叠大四角体?

PS :我正在测试一个连体一号。

PS2 :一些优化建议不要创建四边形,而是几何图形更“适合”纹理,但这似乎是一个非常乏味的过程,我认为这对我没有多大帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-15 22:40:36

因为早期的z,画正面对背通常是一个好处:硬件可以在光栅化之后,在做纹理提取或阴影之前做深度测试。对于前后排序,大多数片段都无法通过深度测试,您可以节省大量的纹理带宽、阴影吞吐量和z缓冲器写入带宽。

但阿尔法测试打破了这一点。如果一个片段通过了深度测试,它可能仍然会被alpha测试杀死,所以在纹理/阴影处理之后才会发生zwrite。大多数能够实现早期z的硬件仍然必须在管道中的同一点进行深度测试,就像它做zwrite一样,所以使用alpha测试,在纹理和阴影处理之后,您最终会执行ztest + zwrite。因此,前面到后面的排序只会节省zwrite带宽,而不是其他任何东西。

我认为你有两种选择,如果你真的想要大的精灵,并且有很大的重叠:

(a)只对你的精灵使用两个或三个不同的Z值。用混合(和α-测试,如果有帮助的话)把它们拉到前面。层中不存在重叠:您可以在原始资产中或在运行时对每个层进行预呈现,然后向左和向右移动。

(b)如果你的精灵有很大的不透明区域被半透明的边界包围,你可以在没有阿尔法测试的情况下第一次画出不透明区域,然后单独绘制边界。这将减少α测试片段的数量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16572254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档