• 2D
  • [Answered] Tips to improve memory usage

Hi there !

I am currently prototyping a 2D strategy game, like "Age of Empire", with isometric hexagonal tiles, and I am facing some memory usage issue, even if the game is far from being fully featured "...

I would be really grateful if you could help me to find out the cause of it :) !

I will try to describe as much as possible of my prototype, without being boring.

Here is the structure of the Map

Map (Node2D)
  |
  +---> YSort (YSort) // Just for a display correctness purpose
        |
        +-----> Hexagon1 (Area2D) // <--- (a PackedScene instance)
        |               |
        |               +-----> CollisionPolygon2D
        |               +-----> Sprite
        |
        +-----> Hexagon2
        +-----> Hexagon3
        +-----> Hexagon4
        .
        .
        .
        +----->HexagonN

As I needed each type of tile (buildings, forest, land, etc...) to handle its custom logic I wasn't able to use the built-in Tilemap, so I decided to build my own by playing with the scene system.

Each type of tiles is defined as a Scene, where I set: 1. its sprite 2. its collision shape 3. a dedicated script to handle the custom logic.

To be able to have a good image quality when zooming on the tiles, the original sprite size is (900 x 810) pixels, and I set a default scale of (0.1 x 0.1). The different sprite elements are stored in a single texture (size ~4Mo).

So, if you followed me, a map of size (10 x 10) is basically made of 100 scene instance.

With a (10 x 10) sized map, I never encountered any memory/cpu usage problems, but my goal is to have larger map, like (10 000 x 10 000)...

But I encounter memory usage issue with only a map of size (30 30) ! :sweat: The debugger tells me that a (30 30) sized map corresponds to approximately 4500 Objects, with a memory usage of approximately 350Mo... That means each object weighs ~77Ko :dizzy:

I really doubt that Godot Engine is not able to handle 4500 objects without blowing out my memory, so I am convinced that the problem is on my side.

Again, I would be really grateful if you could help me to find out the cause this memory usage issue !

If you need any further information, do not hesitate to ask, I may not have been very clear ! :blush:

Thanks a lot in advance :smile:

Ocre

5 days later

The over memory usage issue was caused by the presence of CollisionShape node in the instances.

You could find good information on the corresponding topic on Reddit. https://www.reddit.com/r/godot/comments/66pvpx/2d_tips_to_improve_memory_usage/

TL;DR: When creating a Tilemap, don't put your logic in each tile, and especially not the collision shape.

If you are playing with hexagonal grid, you could solve your issue by reading this article of Amit Patel: http://www.redblobgames.com/grids/hexagons/