Questions tagged «performance»

由于游戏的设计和结构及其架构中的几个因素,导致运行游戏的质量,效率和速度。

2
加快程序纹理的生成
最近,我开始研究在程序生成的太阳系中进行的游戏。经过一番学习之后(之前都没有使用Scala,OpenGL 2 ES或Libgdx进行过学习),我进行了一个基本的技术演示,您将围绕一个程序化纹理的行星旋转: 我遇到的问题是纹理生成的性能。我正在做的事情的简要概述:行星是已变形为球体的立方体。每一面都应用anxn(例如256 x 256)纹理,该纹理捆绑在一个8n xn纹理中,并发送到片段着色器。最后两个空格未使用,它们仅用于确保宽度为2的幂。使用在'Simplex'论文中链接的2012年更新的单纯形噪声算法,当前正在CPU上生成纹理。噪音消失了。我用来测试算法的场景包含两个球体:行星和背景。两者都使用由六个八度的3D单工噪声组成的灰度纹理,因此,例如,如果我们选择128x128作为纹理大小,则有128 x 128 x 6 x 2 x 6 =约120万个噪声函数调用。 您最接近地球的是屏幕快照中显示的内容,并且由于游戏的目标分辨率为1280x720,这意味着我希望使用512x512纹理。结合这样的事实,实际的纹理当然比基本噪声要复杂(白天和黑夜的纹理,将基于阳光和镜面反射的片段着色器混合在一起。我需要大洲的噪声,地形颜色变化,云层,城市的灯光等),而我们正在寻找的是512 x 512 x 6 x 3 x 15 =仅此星球就需要7,000万个噪声的东西。在最终游戏中,行星之间旅行时会有活动,所以等待5或10秒(可能是20秒)是可以接受的,因为我可以在旅行时计算背景纹理,尽管显然速度越快越好。 回到我们的测试场景,我的PC上的性能并不是太糟糕,尽管考虑到最终结果将比原来差60倍,但仍然太慢了: 128x128 : 0.1s 256x256 : 0.4s 512x512 : 1.7s 这是在我将所有对性能至关重要的代码移至Java之后的事情,因为在Scala中尝试这样做要差得多。但是,在我的手机(三星Galaxy S3)上运行它会产生更成问题的结果: 128x128 : 2s 256x256 : 7s 512x512 : 29s 已经太长了,这甚至没有考虑到最终版本将是分钟而不是秒的事实。显然需要做些事情。就个人而言,我看到了一些潜在的途径,尽管我并不特别热衷于其中任何一种: 不要预先计算纹理,而是让片段着色器计算所有内容。可能不可行,因为有一次我将背景作为具有像素着色器的全屏四边形,并且手机上的速度约为1 fps。 …

4
如何有效地连续找到半径内的所有实体?
我有大量的实体(单位)。在每个步骤中,每个单元都需要知道其附近所有单元的位置(距离小于给定常数R)。所有单元连续移动。这是3D模式。 平均而言,在具有给定约束的任何其他给定单位附近,将有总单位计数的1%。 我如何能有效地做到这一点,而无需强加于人?

5
Python Performance vs Game Maker [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 6年前关闭。 我最初考虑使用Python和SFML创建游戏。我了解Python与C ++相比速度较慢,但​​与Game Maker相比又如何? 我问的主要原因是我最近玩了一个Game Maker游戏(Iconoclasts),该游戏在我的计算机(GMA 950)上以相当差的帧速率运行。我担心Python / SFML会遇到类似的性能问题。

2
二维侧滚动的“最佳”游戏循环
是否可以为2D侧滚动游戏循环描述“最佳”(就性能而言)布局?在这种情况下,“游戏循环”接受用户输入,更新游戏对象的状态并绘制游戏对象。 例如,拥有一个具有深层次继承层次的GameObject基类可能对维护很有帮助...您可以执行以下操作: foreach(GameObject g in gameObjects) g.update(); 但是我认为这种方法会产生性能问题。 另一方面,所有游戏对象的数据和功能都可以是全局的。这将是维护上的麻烦,但可能更接近于性能最佳的游戏循环。 有什么想法吗? 我对接近最佳游戏循环结构的实际应用感兴趣...即使我为了获得出色的性能而为维护感到头疼。


3
小型高速物体碰撞:避免隧道效应
编辑/更新:我现在最大的问题是步骤3的“ t = ...”等式是一个好主意还是有更好的方法来做到这一点。大多数其他问题已得到部分或完全解决,但没有任何评论或答案真正涉及此问题。同样,对于我可以想到的任何迭代/递归解决方案(下面的注释中有一些建议),可能都需要解析解决方案,速度和距离太大,对象也太小(尽管有一种特殊的迭代/递归解决方案,可以很好地处理此类情况,那么我肯定会接受)。到目前为止,非常感谢您的帮助,你们都很棒,我非常感谢您的想法和帮助! 我正在尝试检测小型高速物体之间的碰撞。在这种情况下,即使以相对较低的速度,也可能非常容易发生隧穿。 射线投射将不起作用,因为这将检测两个高速物体之间的碰撞,而不是一个物体与固定墙之间的碰撞。(除非我误解了射线投射?)性能是一个非常重要的考虑因素。如果可能的话,我想避免对性能造成重大影响。我已经实现了一个功能强大且非常有效的四叉树(http://en.wikipedia.org/wiki/Quadtree),因此,我将按如下所述对其进行修改和使用。 编辑:减少时间间隔将不起作用。此解决方案的速度太高,这意味着性能损失会太大,同时仍会丢失绝大多数隧道碰撞。(例如,我可能有一个大小约为1个单位的对象,其移动速度在每个时间间隔中以百万个单位为单位...) 建议的解决方案: 步骤1: 在每个对象的运动周围创建一个框,然后将这些框输入四叉树以生成可能发生碰撞的初始列表。参见下图(此图显示了一个圆形对象从一个位置移动到另一个位置,并且该移动生成一个矩形,该矩形将被馈送到四叉树中): 步骤2 :(可能要跳过此步骤吗?) 浏览四叉树可能产生的碰撞列表。查看矩形是否在每次可能的碰撞中相交。如果是这样,请继续执行步骤3。 编辑:在下面,肖恩·米德里奇(Sean Middleditch)建议使用扫掠体/胶囊的交点(如果对象是圆形的话)。剩下三个选项:1)完全跳过步骤2。2)按我的方式执行步骤2。3)按肖恩的方式做。肖恩的方法在计算上比我的盒子想法要昂贵,但是它会比我的方法消除更多的误报,从而阻止他们进入最后一步。 任何人都可以根据经验谈谈这三种选择中哪一种是最佳的吗?(我打算将此物理引擎用于其他一些事情,因此我正在寻找一种“一般最佳”的解决方案,该解决方案在各种各样的情况下都能最快地工作,而不仅仅是一个可以轻松衡量哪种解决方案的特定测试用例。是最快的)。 第三步: 使用下面的t =方程,如果判别式(即,平方根下的部分)为负或0,则无碰撞;如果为正,则将t值用作碰撞时间(在此之后,很容易相应地调整位置)。 ..如果两个对象在碰撞后仍继续存在)。方程: t =(-1/2 sqrt((2 a w-2 a x + 2 b y-2 b z-2 c w + 2 c x-2 d y + 2 dz)^ 2-4(w ^ 2- 2 w x …

3
C#和UnityScript在Unity开发中有何不同?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 5年前关闭。 除了明显的语言差异之外,在Unity3D中开发游戏时,UnityScript和C#有何不同? 有明显的性能差异吗? UnityScript代码是否按原样打包?如果是,这是否有助于游戏的可修改性? 是否可以使用针对一种语言开发的库,而同时使用另一种语言开发? 两种语言可以在同一个Unity项目中混合使用吗?在C#中编码某些部分,在UnityScript中编码其他部分?

1
nVidia的CUDA是否适合执行寻路计算?
我想知道在某些情况下是否值得在GPU上执行寻路(使用nVidia的CUDA或同等产品),或者这是否会浪费精力。我想这种情况将是一个无头的多人服务器,负责为机器人寻找路径。 我对使用导航网格物体进行A *寻路特别感兴趣,但是如果有另一种寻路算法可以从GPU执行中受益更多,我很想听听它。

4
SVG是否是基于Web的游戏的可行技术选择?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 4年前关闭。 我已经开始阅读有关可用于仅使用Javascript进行基于Web的游戏的Web技术的信息,但是我没有关于HTML5的SVG的反馈。是一个可行的选择?与Canvas,DOM和CSS Transformation等其他技术相比,它的效果是否良好?
13 performance  web  svg 

3
3D模型预算。重要的是三角形或顶点的数量更多
当我为3D游戏制作模型时,应该在预算多边形(三角形)或顶点中采取什么措施?我用两套40000立方体进行了一个实验,其中一个立方体有8个顶点和12个三角形,另一组有24个顶点和12个三角形。所有这些都是在Unity中完成的,并且两者都是程序生成的。令我惊讶的是,两套乐器的表现几乎相同,两者之间的差别很小。 这是否意味着我不应该担心顶点数而只关注三角形数? 编辑:我做了另一个实验,我创建了一个包含19602个三角形和10000个顶点的平面,以及另一个具有相同数量的三角形但有39204个顶点的平面。我都产生了4000。现在,较少的顶点赢得了14 fps到19 fps的帧。因此,我想一般来说,少即是好,但只有大的差异。

1
最佳纹理大小是多少?
我最近在我的项目中添加了一个纹理打包器,该打包器会将一定数量的纹理打包到单个纹理中,如下所示: 因此,举例来说,这个尺寸为582x1023像素。添加这些压缩纹理的目的显然是为了提高性能,因此我想为OpenGL(使用LWJGL)纹理查找最佳纹理大小。我发现的事情,一个得到广泛支持的最大纹理尺寸似乎是1024×1024,根据此为一例。这让我感到奇怪,因为显然很多纹理本身都比这更大,那么这些发生了什么呢?我很确定大多数显卡都支持更大的纹理。我是否可以合理地期望大多数图形卡能够处理4096x4096纹理(或什至更大)? 第二点(我希望这仍然是一个问题,但本质上可以归结为同一问题):纹理的大小应设置为2的幂(256x256、512x512、1024x1024、2048x2048等),并且应该我将小于其的填充纹理填充到下一个2的幂?根据2011年的这个问题,这不是必须的,但可以提高性能并避免出现小错误,而2012年的这个问题说您绝对应该填充纹理。因此,我意识到这些问题以前曾被问过,但它们的日期合理,答案已经更改,而且它们每个都只能部分回答我的问题。其他项目/如何处理? TL; DR:大多数图形卡可以处理哪种纹理大小?最佳纹理大小是多少(或存在)?我应该将纹理宽度填充到下一个2的幂吗?

6
运行APK时android性能不佳,在浏览器中无法正常运行
我已经使用Phaser引擎在HTML5中创建了一个小型游戏项目(尝试了1.1.5和1.1.6)。然后要将其移植到移动平台,请使用适用于Windows Phone 8,Android和iOS的Phonegap / Cordova。 在我的游戏中,大约有10个元素具有动画效果(从a点移动到b点并同时旋转一些)。在iOS和Windows Phone 8上,我没有遇到任何问题。 但是对于Android,性能是不可接受的。另一方面,如果我通过设备浏览器运行游戏,则游戏运行平稳,没有任何滞后。但是,已编译的APK会非常生涩,并且元素的移动速度非常缓慢且呈闪烁状态。 我已检查清单文件中的android硬件加速标志设置为“ true”。也尝试将其更改为false,但这并未反映出性能的任何变化。 我已经在三星S2设备上的Android 4.2上进行了检查,在性能上更好。但是在Asus Nexus Tab 7(运行Android 4.4)上,它非常生涩,而OS和Device都是最新的。还检查了另一台运行Android 4.3的设备(三星Galaxy Grand Duos),在该设备上的性能也根本不好。 在我的游戏中,尝试了两种WebGL / Canvas渲染(Phaser引擎使用Pixi.js,如果不支持WebGL,则会回退到2d canvas),但是没有任何变化。与easyljs类似。 如果还有其他人遇到类似的问题,并且可以建议采取任何方式获得本机般的性能。我检查了cocoonjs的示例,尽管它们看起来很平滑并且可以接受,但我不能这样做。

1
如何停止Substance的运行时纹理缓存?
如果您关闭缓存,一次修改一个公开的变量,频繁地对其进行修改,甚至只有在尝试对其进行2或3次修改之后,Substance Engine的过程纹理似乎就会非常快速地更新。 但是,我基本上希望相反。例如,单位有一个“血”变量,在受到伤害时会在身上产生不同的血液;还有一个“战役”变量,会产生划痕和凹痕,但在恢复时不会恢复原状。 因此,要强制不缓存变量,我必须将其设置为某个虚拟值,然后恢复为正常值,然后调用RebuildTexturesImmediately。 我该如何告诉Substance在运行时不要缓存变量,所以我可以更改一次并快速重新生成纹理?

1
有关渲染,批处理,图形卡,性能等的信息+ XNA?
我知道标题有点模糊,但是很难描述我真正想要的东西,但是这里有。 当涉及到CPU渲染时,性能通常很容易估计和直接,但是当涉及到GPU时,由于缺乏技术背景信息,我一无所知。我正在使用XNA,所以如果理论可以与之相关将非常好。 所以我真正想知道的是,当您执行特定的绘制动作时,何时何地(CPU / GPU)会发生什么?什么是批次?效果,预测等有什么影响?数据是否保留在图形卡上或是否在每个步骤中传输?当谈论带宽时,您是在谈论图形卡的内部带宽,还是从CPU到GPU的管道? 注意:我实际上并不是在寻找有关绘制过程如何进行的信息,这是GPU的业务,我对在此之前的所有开销都感兴趣。 我想了解执行动作X时发生了什么,以适应我的体系结构和实践。 非常感谢任何文章(可能带有代码示例),信息,链接,教程,它们提供了有关如何编写更好的游戏的更多见解。谢谢 :)

1
预先计算的寻路是否仍然有意义?
语境 老卢卡斯艺术公司(ScummVM时代)使用预先计算的寻路来点击图形冒险游戏。这是该技术的粗略概述。 第1步 每个房间的地板都被划分为所谓的“步行箱”,它们几乎等同于导航网格中的节点,但仅限于梯形形状。例如: ______ _____ _________ _____ \ A | B | C | D \ \_____| | |_______\ |_____| | |_________| 第2步 离线算法(例如Dijkstra或A *)将计算每对节点之间的最短路径,并将路径的第一步存储在2D矩阵中,并在每个维度中由使用的起始节点和结束节点进行索引。例如,使用上面的步行框: ___ ___ ___ ___ | A | B | C | D | <- Start Node ___|___|___|___|___| | A | A | A | …

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.