Articles of 记忆

gpu上的浮点内存使用情况

我的问题很简单:一个浮点值需要多less内存? 我想这是4个字节,但我不确定。 所以例如vec4,其中包含4个浮点数,每个4个字节总共需要16个字节。 我知道这是非常基本的,也许我错过了一些观点。 谢谢你的建议。

为什么Unity会以APK和IPA的位图格式保存纹理?

为什么Unity会以位图格式(width * height * bpp)将graphics资源保存在Android apks和iOS ipas中? 我想保存我的资源在一个小apk中,而不是1MB的图像Unity存储单个图像11MB。

使用不可变string的animationtypes内存使用

现在我正在编写一个具有典型的20世纪80年代和90年代角色扮演游戏的animation打字效果的游戏。 在这里可以看到一个例子。 input效果是通过获取目标string并在每一帧中渲染它的子string来生成的。 子串的长度最初为零,但每隔几百毫秒增加一次。 这给人的印象是string正在输出 。 伪代码或多或less看起来像: var message = "This is some dialogue."; var substringLength = 0; if (someTimeHasPassed) { render(message.substring(0, substringLength); substringLength++; } 这很好,但我使用垃圾收集语言与不可变的string。 每隔几毫秒,我在堆上创建一个新的子string。 垃圾收集变得非常频繁,我在移动设备上收到内存警告。 有没有一种方法来产生这种打字效果,而不会在内存中创建大量的string?

运行相同的场景时Unity不一致的内存分析

我正在制作一个2D轮廓风格的游戏,我基本上是在尝试2个设置: 一个只包含精灵的地方, 一个由精灵和网格组成的无纹理的组合 。 现在,我正在试验这两个,因为我希望场景占用最less的内存。 我有这些奇怪的结果: SPRITE设置: 共280 MB,纹理155.5 MB,网格1.7 MB 共249 MB,纹理151 MB,网格4.1 MB 共279 MB,纹理151.0 MB,网格10.8 MB SPRITE&MESH设置: 共334.4 MB,纹理188.2 MB,网格1.8 MB 总计241 MB,纹理148,0 MB,网格2,3 MB 共253.1 MB,纹理157.7 MB,网格4.2 MB 总计301.8 MB,纹理157.7 MB,网格8.4 MB 共234.8 MB,纹理145.3 MB,网格1.9 MB 现在,我发现这些结果很奇怪,因为: 在相同的场景中检查(网格设置有相同数量的对象,只是交换了网格的精灵),数据不一致,这意味着相同的网格场景之间大约有100MB的差异 一个主要与零纹理网格的场景使用更多,或至less不less于纹理比只有精灵的场景? 通过看一下上面的数据,我会要求有经验的人来指导我完成这个任务。 我应该继续使用这些网格还是继续使用精灵? 这个数据真的在哪里呢?

体素游戏 – 高内存和CPU使用率

我目前正在开发一个体素游戏,最近我注意到,从初创时的游戏是在2GB左右的内存。 目前我正在渲染14 x 14块如下所示: 我在游戏上做了一个configuration文件,我注意到函数调用glfwSwapBuffers(…)需要运行9,964米/秒(76.4%),随着程序的使用寿命持续增长。 下一个函数是glDrawElements(),运行速度为849米/秒(8.49%)。 我不确定是什么造成了瓶颈。 回到高内存使用问题有两件事似乎造成高内存。 正如这里的线程所解释的: 体素游戏 – 相机在地形内部的滞后我生成一次地形,并且自从发布该问题以来,我为由可见顶点组成的每个块创建一个网格。 之后,我将每个块实体发送到我的渲染器,并从这两个代码块中抽取。 for(Chunk[] chunks1D: chunks) { for(Chunk chunk: chunks1D) { //Model matrix Matrix4f modelViewMatrix = transformation.getModelViewMatrix(chunk.getEntity(), viewMatrix); shader.setUniform("modelViewMatrix", modelViewMatrix); //Render mesh shader.setMaterialUniform(chunk.getEntity().getMesh().getMaterial()); chunk.getEntity().render(); } } 这称之为 public Matrix4f getModelViewMatrix(Entity entity, Matrix4f viewMatrix) { Vector3f rotation = entity.getRotation(); Vector3f position = entity.getPosition(); float scale = […]

RTS单元的高效UI

我想知道如何在RTS中select不同types的单元时,如何处理游戏UI上的运行时变化。 例如,在“星际争霸”中,每种单位types都有自己的用户界面中显示的肖像,属性,爱好者和命令卡。 select另一个单位将更新所有这些。 我可以看到两个可能的解决scheme 每种单位types都有自己的用户界面面板(在内存中),select其他单元会禁用当前的用户界面面板并启用新面板。 只有一个UI面板,并select一个单元dynamic填充肖像,属性,命令卡等。 这两个解决scheme似乎效率低 第一个可能会消耗太多的内存,第二个根本就不会caching。 也许走的路是中间的,或者完全不同的。 我正在与Unity合作,但是我认为讨论应该保持相当高的水平。

查找引用在脚本对象统一资产的场景中显示不正确的结果

我试图找出为什么我的游戏正在加载一个我认为不应该的大型精灵图集。 探查器的快照视图显示地图集已加载。 参考窗格显示它是通过可脚本化的资产对象加载的。 这个对象的确在引用地图集中的精灵 – 但是我不认为这个对象是在这个场景中引用的。 游戏启动到这个场景,所以地图集不应该加载。 我已经在编辑器和android上复制了这个分析,所以它不是编辑器。 当我在项目视图中右键单击可编写脚本的对象时,游戏正在运行,并在“场景中查找引用”中显示几个游戏对象。 这些对象似乎都没有引用可编写脚本的对象。 这种types的脚本对象甚至没有任何领域的 monobehaviours。 一些是新的UIbutton对象,只有Canvas Renderer,Image和Button脚本。 没有哪个可以引用这个脚本对象。 有没有人见过这种行为? 这是怎么回事?

如何加载许多图像,而不使用太多的内存

在写游戏的时候,我意识到图片占用了很多空间。 如果有一个大型的graphics游戏,他们不想要记忆的问题,或给玩家的消息“去购买更好的计算机来运行这个游戏”。 但是,每次加载图像需要一个图像,并丢弃它是非常缓慢的。 所以如果一个程序员有一个大型的graphics游戏,他们如何画出许多图像而不牺牲性能/内存?

把我所有的游戏艺术都放在一个静态的课程中,浪费内存吗?

当我做游戏的时候,我通常会创建一个名为Art的静态类,它有静态字段来跟踪游戏中的所有内容。 例如 public static class Art { public static SpriteFont defaultFont; public static Texture2D playerSprite; public static void LoadContent(ContentManager content) { defaultFont = content.Load<SpriteFont>("Fonts/DefaultFont"); playerSprite = content.Load<PlayerSprite>("Sprites/PlayerSprite"); } } 我的问题是,我的艺术课的这些东西是否会在游戏的一生中占据记忆? 这个阶级的重点是只需在游戏中加载一次我的艺术作品,并且可以轻松访问我的项目中的任何地方的资产,但费用是多less?

Spritesheet文件大小在编译后会变得很大

我有一个14×2的Spritesheet,在原始PNG中有125 Kb。 但是,只要我编译到.xnb,它突变为4 MB。 所以我的问题是:为什么呢? 我该如何解决这个问题?