Questions tagged «performance»

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

9
为什么过早优化如此糟糕?
在对优化进行了一点研究之后,我发现(几乎在所有地方)过早优化游戏似乎是普遍公认的罪过。 我真的不明白这一点,在最后改变游戏的某些核心结构,而不是在第一次考虑性能的情况下开发它们,是否会变得异常困难? 我得到等待,直到游戏结束,它会告诉您是否甚至需要优化,但是您还是不应该这样做,毕竟,它可以扩大游戏可以运行的设备的种类,从而增加潜在的数量玩家。 有人可以向我解释为什么过早优化是一个坏主意吗?

3
如何清除玩家创建的过多碎石?
在我制作的最新游戏中,您可以任意切片2D对象,如以下gif所示: 您可以将其连续切成数百或数千个碎片。这不会造成很大的延迟,因为它们始终处于休眠的物理状态,但是当您使它们移动时会出现问题。 我不太确定如何处理它,因此切碎不会有太多碎石。我真的不想在一段时间后删除它们;我不喜欢这样,如果您过了一会儿又将其切碎,它会随机消失。 如何清除玩家创建的过多碎石?
92 unity  2d  performance 

8
我应该有多少个线程,目的是什么?
我应该为渲染和逻辑设置单独的线程,还是更多? 我知道由于数据同步(更不用说任何互斥锁)导致的巨大性能下降。 我一直在考虑将其发挥到极致,并为每个可以想到的子系统做线程。但是我担心这也会减慢速度。(例如,将输入线程与渲染或游戏逻辑线程分开是明智的做法吗?)所需的数据同步是否会使它毫无意义甚至变得更慢?

6
子弹在视频游戏中如何工作?
我在用C#设计视频游戏时遇到了这个问题。 如果我们考虑《战地风云》或《使命召唤》之类的游戏,那么数百枚甚至数千枚子弹会同时飞行。事件是不断触发的,据我所知,这会吸收很多处理能力……或者是吗?我想知道各种游戏开发人员如何管理(2D和3D)项目符号,以及每种方法最有效的方法是什么。 我读了一个问题:如何在视频游戏中模拟子弹?但是从程序设计的角度来看,它没有涉及项目符号的工作方式。 我有几个主意,但每个都有缺点: 我想到的最有效的方法(用于2D游戏): 假设我要创建一个名为Bullet的类,并且用户长时间按住按钮,将每0.01秒创建一个Bullet对象。本项目符号有: 1速度 2从其拍摄的起始位置 3精灵纹理 4命中效果 由于项目符号是其自己的类,因此它可以管理绘图,移动和动作侦听器本身。 在处理器上处理成千上万的实例化实例然后销毁(触发击中效果时)会不会很困难?RAM空间? 3D游戏的有效方法-我的另一个想法是: 可以说我创建了一个武器类。该武器具有多种功能,其中一些功能: 1检测武器瞄准的位置,并确定它是否在瞄准目标 2触发枪声的动画 3有一个doDamage()方法,该方法指示从枪支指向的内容中减去生命值 4按下按钮时通知项目符号动画类 然后,我可以创建一个静态类,例如BulletAnimation,它可以从触发它的枪支所在的位置,该枪支指向的位置(用于子弹目的地)获取通知,以及有关用于子弹的适当精灵和速度的信息。然后,此类根据位置和所需的精灵绘制精灵(在新线程上,可能是idk),以模拟从枪支发射的子弹。 后者似乎更难编写代码,并且要不断地调用静态函数一次执行成千上万的子弹,是否需要大量处理能力?获取开始位置和结束位置的持续更新也很困难。 我的问题是,游戏创作者最有效的方法是什么?这种方法会从2D游戏变为3D游戏吗?

6
什么时候是考虑性能的最佳时间?
我来自软件开发背景。在软件开发周期中,我们通常专注于功能和工作产品。在开发结束时,我们开始优化代码并提高性能。 现在的问题是,我们是否需要考虑游戏开发中每行代码的性能? 这样做我觉得我们错过了设计模式和简洁的代码。我想知道游戏开发行业是否有最佳实践方法?


5
我应该使用大小不为2的幂的纹理吗?
在OpenGL和DirectX的早期,纹理大小要求是2的幂。这意味着浮点值的内插可以非常快地使用移位等方法完成。 从OpenGL 2.0开始(以及之前的扩展,通过扩展),已支持非二次幂纹理尺寸。 二次幂纹理在现代集成和离散GPU上是否具有性能优势?非二次方纹理有什么优势? 是否有大量台式机拥有支持非二次幂纹理的卡?

7
如何提高Voxel / Minecraft类型游戏的渲染速度?
我正在编写自己的Minecraft副本(也用Java编写)。现在效果很好。在40米的可视距离下,我可以轻松地在MacBook Pro 8,1上达到60 FPS。(英特尔i5 +英特尔高清显卡3000)。但是,如果将可视距离设为70米,则只能达到15-25 FPS。在真实的《我的世界》中,我可以毫无问题地将视距扩大到256m。所以我的问题是我应该怎么做才能使我的游戏变得更好? 我实现的优化: 仅将本地块保留在内存中(取决于玩家的观看距离) 视锥剔除(首先在块上,然后在块上) 只画出真正可见的方块面 对包含可见块的每个块使用列表。可见的块将自己添加到此列表中。如果它们不可见,则会自动从此列表中删除。通过构建或销毁相邻的块,块变得(不可见)。 每个包含更新块的块使用列表。与可见阻止列表相同的机制。 new在游戏循环内几乎不使用任何语句。(我的游戏运行大约20秒钟,直到调用了垃圾回收器) 我目前正在使用OpenGL呼叫列表。(glNewList(),glEndList(),glCallList())一类块的每个侧面。 目前,我什至没有使用任何照明系统。我已经听说过VBO。但是我不知道到底是什么。但是,我将对其进行一些研究。他们会提高性能吗?在实施VBO之前,我想尝试使用glCallLists()并传递呼叫清单列表。而是使用了千次glCallList()。(我想尝试一下,因为我认为真正的MineCraft不使用VBO。对吗?) 还有其他提高性能的技巧吗? VisualVM配置文件向我展示了这一点(仅33帧配置文件,可视距离为70米): 用40米(246帧)进行分析: 注意:我正在同步许多方法和代码块,因为我正在另一个线程中生成块。我认为在游戏循环中进行大量操作时,获取对象的锁是性能问题(当然,我所说的是只有游戏循环而没有新块生成的时间)。这是正确的吗? 编辑:删除一些synchronised块和其他一些小的改进之后。性能已经好得多了。这是我对70米的新分析结果: 我认为这很明显selectVisibleBlocks是这里的问题。 提前致谢! 马丁 更新资料:经过一些额外的改进(例如,使用for循环代替每个循环,在循环外缓冲变量,等等...),我现在可以很好地查看距离60。 我想我将尽快实施VBO。 PS:所有源代码都可以在GitHub上找到:https: //github.com/mcourteaux/CraftMania

12
当目的地无法通行时,如何使A *更快完成?
我正在制作一个简单的基于图块的2D游戏,该游戏使用A *(“ A星”)寻路算法。我一切正常,但是搜索存在性能问题。简而言之,当我单击不可逾越的图块时,该算法显然会遍历整个地图以找到通往不可逾越的图块的路线-即使我站在它旁边。 我该如何规避?我想我可以减少对屏幕区域的寻路,但是也许我在这里遗漏了一些明显的东西?

3
如何在MMO游戏中处理大量拾音器
Minecraft之类的游戏或任何带有拾音器的MMO游戏如何处理它们? 假设您每次挖掘地形时都会产生3滴“污垢”。假设每个项目都有每帧计算的旋转动画。如果全世界的取件数量非常高,那么对于给定服务器中的客户端而言,这将是无用的大量帧开销,因为很可能其中许多取件项距离您仅光年。 所以我认为您只需要在接近本地玩家的拾音器上“做东西”,但这仍然意味着我必须检查每一帧是否有其他拾音器项目足够近以至于必须开始动画。 我的实际问题是:其他MMO如何解决此问题?

7
Microsoft是否建议使用适用于游戏开发的C#属性?
我知道有时您需要一些属性,例如: public int[] Transitions { get; set; } 要么: [SerializeField] private int[] m_Transitions; public int[] Transitions { get { return m_Transitions; } set { m_Transitions = value; } } 但是我的印象是,在游戏开发中,除非您有其他理由,否则一切都应尽可能快。从我读过的书中给我的印象是Unity 3D不确定通过属性内联访问,因此使用属性会导致额外的函数调用。 我是否经常不理会Visual Studio不使用公共字段的建议?(请注意,我们会int Foo { get; private set; }在显示预期用法的地方使用优势。) 我知道过早的优化是不好的,但是正如我所说,在游戏开发中,只要有类似的努力就可以使它更快,但事情不会变慢。

3
团队如何防止覆盖源文件中的工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖? 假设开发者一在工作,Audio.cpp而开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

2
如何减少渲染树的性能影响?
我正在制作一款低聚风格的游戏。我的地形上有一些水,我想要很多树木。目前,我已经放置了10,000棵树。每棵树包含不超过200个三角形,因此它们不太费力。 主要问题是有湖泊,而且湖泊很大。您实际上看不到湖另一侧的任何树木,这看起来真的很糟糕,尤其是当您走到那里而突然出现树木时。 要解决此问题,我必须增加树的距离,以便您可以在湖的另一侧看到相当多的树,但这会降低性能至40-50fps,并且游戏中几乎没有其他内容。我正在使用GTX 1080,如果可以的话。 我怎样做才能使游戏在更多树木下运行得更快?

3
使用100%CPU的游戏正常吗?
我刚刚在游戏引擎中实现了多线程输入处理,其中轮询操作系统以从中收集输入信息并对其打上时间戳的代码位于单独的线程中,而主线程中的每一帧我都将收集到的输入吃掉逻辑游戏时间。一切正常,但是此设置使用了100%的CPU。我有两个核心,并且在运行我的游戏时会达到100%。 我已经与其他游戏进行了核对,以查看它们是否也这样做。例如,Skyrim和Doom 3看起来不错,CPU刚好超过60%。 使用多线程输入消耗100%CPU的游戏是否可以接受?如果没有,这种游戏通过输入线程降低cpu使用率的一些技巧是什么?

6
如何优化距离功能?
在开发一款相当简单的类似RTS的游戏时,我注意到我的距离计算正在影响性能。 在任何时候,都会进行距离检查,以了解一个单位是否在其目标范围内,射弹是否已达到其目标,玩家是否跑过了皮卡,常规碰撞等。列表继续进行,并检查两点之间的距离经常使用。 我的问题就是这个。我想知道除了常规的sqrt(x * x + y * y)方法以外,游戏开发人员还有哪些替代方法可以检查距离,如果我们每帧执行数千次,这将非常耗时。 我想指出的是,我了解了曼哈顿的距离和平方的距离比较(通过跳过sqrt瓶颈)。还要别的吗?

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.