Articles of performance

在Android中使用VBO与OpenGL ES性能不佳

我正在制作一个Android应用程序,我需要使用OpenGL ES绘制一些多边形。 我能够渲染他们,但我对performance感到失望。 我更新了代码使用VBO,但我没有注意到任何改进。 我想渲染每秒60帧 (每帧16毫秒 )。 我有一个testing项目,我在屏幕上呈现几个三角形。 当我渲染1000个三角形时,每帧需要大约20毫秒 (取决于设备)。 我想保持10毫秒以下的渲染,因为我需要其余的( 6毫秒 )来执行其他计算(例如更新位置,检测碰撞等)。 这里是我渲染三角形的代码: public void render(int positionLocation, int colorLocation) { GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, this.bufferIndex); GLES20.glVertexAttribPointer(positionLocation, Polygon.POSITION_COMPONENT_COUNT, GLES20.GL_FLOAT, false, Polygon.STRIDE, 0); GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0); GLES20.glUniform4f(colorLocation, this.red, this.green, this.blue, this.alpha); GLES20.glDrawArrays(this.mode, 0, this.length); } https://github.com/mauriciotogneri/test/blob/master/src/com/testopengl/Polygon.java#L51-66 以下是遍历三角形的代码: private void renderTriangles() { long start = System.nanoTime(); for (int i = 0; […]

Unity3D中2D绘画游戏在运行时高效修改Texture2D

我花了一些时间寻找不同的解决scheme,在我创建的移动绘画游戏中实施。 在这个时候,一切正常,但我在大屏幕和慢速设备上遇到了一些严重的性能问题,因为我大量使用setPixel / setPixels并应用在Texture2D上。 我遇到了两种方法来加快速度: 1)将图像拼贴成小块,每个块都将是一个Texture2D,并上传(调用Texture2D.Apply())修改的块。 2)我可以应用在平铺解决scheme之上的另一个技巧是捕获数组中的更改,并将其写入所需的Texture2D块,并在修改后每X毫秒应用一次。 我想知道我可以对这个主题进行哪些其他的优化。 也许我应该扔setPixel和另一个更有效的方式去? 干杯。

性能问题,如何在开始时加载所有精灵

在Android设备上testing时,似乎我的游戏面临性能问题,如下所示: a)在第一个屏幕/主菜单我有20个button,当我点击其中一个,然后他们需要大约7-10秒加载第二个屏幕 ,但这只是第一次。 b) 第二个屏幕打开后 ,如果我回到主菜单,它只需要大约1秒钟打开,所以这个问题只出现在第一次打开游戏…. 注意:我有7个精灵文件 ,因为如此多的图像,无法容纳在1精灵,所以我想因为我有这么多的精灵文件.. 任何想法在开始加载所有的精灵文件 ? (也许我们可以通过进度条告诉用户等待) 注意:1)使用PlayMaker创建游戏stream程 2)使用TexturePacker创建精灵 提前致谢

统一性能:每个对象有多less材料?

我已经了解到,每个尺寸为4的材质的网格比尺寸为2048×2048的材质的网格要慢一些? 在我平常的工作stream程中,我倾向于将不同的材料分成不同的材质,所以对象往往有2-8个材质。 我已经创建了超过一百个这样的资产。 性能是否受到这个显着影响? 将这些对象上传到turbosquid这样的网站或者在Unity资源商店上销售它们,还是买家会在发现之后引导我? 窗口纹理需要透明,金属/木材/混凝土需要不同的平滑度设置。 据我所知Unity不支持光泽贴图。

网格复杂性与纹理尺寸(性能)

从performance来看,这是比较好的: 一个较高的详细网格与小纹理(如32×32像素)或 一个较大的纹理(像1024×1024像素)不太详细的网格? 附加信息。 我在做一个低聚项目。 由于我只是使用大的纹理“alpha FX”(模拟复杂的几何只是通过删除alpha上的脸),我不知道这是一个坏的方法。 我可以为每个模型添加50〜150个三角形,以避免每个资源使用更高的纹理,并将这些“FX”直接放在几何上(因为擦除纹理非常小) 哪一个是“趋势”? 哪个对性能影响更大? 谢谢。

提高上下平滑运动的性能

我想实现一个游戏对象的平稳移动。 我总是看到这样做的方式是通过正弦波,并将Y的值添加到Y的游戏对象值中。 这个方法看起来有点慢,所以我有了使用两个抛物线的想法,其中一个是负的,如下面两个: 然后根据抛物线只能使用高于或低于零的值。 但是,即使这看起来像一个钝和慢的方法,所以我想知道是否有更好的办法?

团结 – 在搅拌机中创建地形?

我要为我的RTS制作一个地形(不是太大),我想知道是使用Unity的地形工具还是在Blender中创建一个地形并将其导入到Unity中?据我所知,Unity的地形是紧张的移动GPU。所以在Blender中制作地形(就性能而言)会有什么好处?

我如何制作一个像Temple Run或Subway Surfer这样的游戏?

当你在这两场比赛的其中一场比赛中死亡(Temple Run和Subway Surfers)截图的时候,究竟是什么时候发生了“游戏结束”,并发布了你的分数和最高分? 你死后加载的是不同的场景,并说“游戏结束”,并有你所有的数据? 是否有某种UI元素在玩家死后变为可见状态,然后显示“游戏结束”并显示你的属性(就像“Unity Survival Shooter教程”上的Game Over课程一样)? 还是完全是我不知道的? 我想实现一个类似的function。

理论上完美的纹理大小是什么?

我更多的是考虑游戏开发的新手,但是我常常为了工作而优化游戏,因为我对它感兴趣。 所以据我所知,较高的纹理尺寸需要较less的绘制调用,如果你使多个对象共享相同的纹理,但占用更多的VRAM。 你也必须考虑如何acuit你想要你的纹理。 但是我对这个主题的想法越多,我认为会有一个理论上完美的纹理尺寸,纠正我,如果我错了。 思想的实验:考虑到你总是希望游戏具有相同的敏锐度,并且你有4个物体采用完全相同数量的UV空间,但是具有不同的纹理。 那么,考虑到你的目标是最好的性能,纹理大小和共享相同纹理的对象数量之间会有一个完美的地方。 在这种情况下将会有4种可能性: 1纹理的所有对象共享相同的一个 2纹理的两个对象 3 texures,这将是上述的混合 或4个纹理,每个对象都有自己的纹理 如果performance是你的主要目标,那么将只有一个variables取决于你想要你的游戏acuit,敏锐,不是吗? 希望你明白我的想法^^

根据最后一帧画出多less来规定画多less

[编辑:我find了答案 – 见下文] 我在iPhone上有一个3D游戏世界(有限的graphics速度),我已经在调整是否根据它的大小和相机的距离在屏幕上绘制每个形状。 就像是… if (how_big_it_looks_from_the_camera > constant) then draw 我现在想要做的也是考虑到有多less形状正在绘制,所以在比较忙碌的游戏世界里,我可以比其他的要less得多。 我试图通过将how_big_it_looks除以最后一帧绘制的形状的数量来做到这一点(好吧,这个的平方根,但我简化 – 问题是相同的)。 if (how_big_it_looks / shapes_drawn > constant2) then draw 但是检查发生在代表许多绘制形状的对象层面上,如果一个包含许多形状的对象被开启,它会增加形状 – 拉伸批次,并将自身从下一帧切换回来。 它开启和closures。 我试着保持一种先前值的加权平均值,每帧做一些像shapes_drawn_recently = 0.9 * shapes_drawn_recently + 0.1 * shapes_just_drawn ,但是由于反馈循环的性质,它只会减慢闪烁。 有没有解决这个问题的好方法? 我的项目是在Objective-C中,但一般algorithm或伪代码也是好的。 谢谢。 编辑:请,我不是要求对渲染性能的一般建议。 我需要回答具体的问题,如何把以前的框架中绘制的形状考虑在内,而不会闪烁。