Tilemap Object limitations and surprising performance issues

Get help using Construct 2

Post » Mon Jan 04, 2016 12:00 am

Hopefully this is the right forum to post this in. If not, @Kyatric, please move it to the right place.

Backstory:
Up until now, I've been importing TMX files at runtime using the TMXImporterV2 by @rexrainbow and pasting sprites as tiles into a Paster object. While this works just fine, pasting a few thousand tiles requires the use of a longer loading screen than I'd like, and since we now have the Tilemap Object (which didn't exist when I implemented the previous method) and based on @Ashley saying they're pretty well optimized, I thought I'd try switching over to that to create faster/more efficient stage loading. However, I'm running into some surprising limitations and performance issues I haven't seen mentioned elsewhere on the forum, so I thought I'd try to get some clarification before reporting the issue as a bug.

[SOLVED: Typo in TMX File, totally my fault] ***First Issue: Can't create more than 3 Tilemap Objects on a Layout at runtime.***

***Second Issue: Tilemap Object performance seems to be kind of terrible when there's a lot of tiles on-screen.***
While @Ashley mentions in his blog post on the Tilemap Object that they're well-optimized in terms of draw calls ( https://www.scirra.com/blog/ashley/3/te ... ap-tidbits ) that doesn't really seem to be the case if there's a lot of tiles on screen. The camera in my game zooms in and out a lot, and when it reaches it's outer zoom bounds, showing the full tilemap on-screen, I get a performance hit of 15-30fps - on an EVGA 980Ti with watercooling, which seems like a bit of a heavy impact for what amounts to a 2D platformer. Again, this issues does not occur when using large Paster objects to accomplish the same goal (though with significantly higher memory requirements), so the performance issues are surprising - especially since they're occurring with only 3 Tilemap Objects on screen versus up to 15 Paster objects with very high resolution textures on some stages.

Please note that no Tilemap Objects, at any point, should be triggering any kind of collision checks - invisible objects are used for that functionality, and while I can see/set in the Debugger for the Tilemap Objects to not use collision, sadly there seems to be no way to set collision to false in the C2 IDE or through actions, so I'm assuming the engine doesn't really check for collisions unless explicitly told to do so - though again, that is an assumption:
Image

Performance when zoomed in:
Image

Performance when zoomed out:
Image

For comparison, here's the stats when using multiple high-res Paster objects to build the stage tilemap, zoomed out all the way, with the framerate pinned at 60fps. Far higher memory requirements, but also a far better framerate:
Image

Interestingly, the draw calls are slightly higher when using the Paster objects, making the performance issues related to the built-in Tilemap Object even more confusing:
Image

So, while it says in the blog post made by @Ashley that the additional draw calls of the Tilemap Object shouldn't be causing any framerate issues, even on a mobile device, they're managing to drag down a top of the line GPU, which is confusing to say the least. Using Tilemap Objects instead of high-resolution Paster Objects is the only code change I've made from the previous build of the game, which had no trouble sticking to 60fps at all times on GPUs with much, much less horsepower.

Why I think it may be a C2 issue:
It seems like for the time being I'm going to have to go back to using multiple Paster objects to load in my stages which, while drastically increasing load time because of the unique high-resolution texture each instance uses, seems to somehow perform better during gameplay than a native object type designed specifically for the kind of Tilemaps I'm using to create stages. Unless I've missed something? This looks like a pretty severe issue, so @Ashley, if you have the time, I'd love some insight on what could potentially be going on here with the Tilemap Objects that are causing such a huge performance hit compared to using giant textures created at runtime with the Paster object.
Last edited by digitalsoapbox on Mon Jan 04, 2016 6:25 am, edited 9 times in total.
B
62
S
36
G
19
Posts: 494
Reputation: 16,914

Post » Mon Jan 04, 2016 12:38 am

Not sure about the rest of your questions, but if I use a system repeat 10 times create tilemap, I get 10 tilemaps..
If I create a tilemap every tick, the count rises by 1 every tick, so there doesn't seem any limitation on the amount of tilemaps..
I told my dentist I had trouble with my teeth and asked her to fix it without looking in my mouth..
B
54
S
16
G
8
Posts: 6,160
Reputation: 19,775

Post » Mon Jan 04, 2016 12:45 am

LittleStain wrote:Not sure about the rest of your questions, but if I use a system repeat 10 times create tilemap, I get 10 tilemaps..
If I create a tilemap every tick, the count rises by 1 every tick, so there doesn't seem any limitation on the amount of tilemaps..


Thanks for responding! I'll look to see if there's another efficient way for me to create the tilemaps. That just leaves the performance issue, which is probably the bigger concern.

***EDIT: Issue Solved. This just leaves the performance concerns, which get worse & worse with the addition of each Tilemap Object:
Image
Last edited by digitalsoapbox on Mon Jan 04, 2016 3:11 am, edited 1 time in total.
B
62
S
36
G
19
Posts: 494
Reputation: 16,914

Post » Mon Jan 04, 2016 1:27 am

There must be some kind of issue on your side or some other weird thing going on. I have a projects with dozens of tilemaps on different layers (some share same texture, some are instances of same tilemap, different sizes etc - basically all combination you could think of) and never had any problems with them, even on mobiles.
I didn't check how they works in new 219 beta cause don't have time for that currently. but in 217 (i believe) never had any problems with objects or performance.
ImageImageImageImage
B
155
S
63
G
41
Posts: 2,588
Reputation: 34,466

Post » Mon Jan 04, 2016 1:46 am

shinkan wrote:There must be some kind of issue on your side or some other weird thing going on. I have a projects with dozens of tilemaps on different layers (some share same texture, some are instances of same tilemap, different sizes etc - basically all combination you could think of) and never had any problems with them, even on mobiles.
I didn't check how they works in new 219 beta cause don't have time for that currently. but in 217 (i believe) never had any problems with objects or performance.


I'm using r216, which I've had no performance issues with in the past, because of issues with the debugger not working in r219, though when I tried the project in 219 there weren't any performance differences. The framerate drops the more tilemaps there are on-screen and even more when the camera zooms out to show the full tilemap, which is why I think the performance issues are related to tilemaps - nothing else has changed at all and the object count is being reported as more or less the same. All the code that creates the tilemap objects and places the tile is deactivated after they're created, so there shouldn't be any overheard there that didn't exist before when I was using Paster objects.

I'm also using fairly large tiles - 64x64 - so maybe it could be due to that?
Last edited by digitalsoapbox on Mon Jan 04, 2016 4:04 am, edited 1 time in total.
B
62
S
36
G
19
Posts: 494
Reputation: 16,914

Post » Mon Jan 04, 2016 2:46 am

I was also using 64x64 tiles on 900x900 tile grid and bigger (depending on current game level) Could you reproduce that in brand new project? if so you could upload it as a bug for Ashley to investigate, cause it really sound very strange from your descriptions,
ImageImageImageImage
B
155
S
63
G
41
Posts: 2,588
Reputation: 34,466

Post » Mon Jan 04, 2016 3:03 am

shinkan wrote:I was also using 64x64 tiles on 900x900 tile grid and bigger (depending on current game level) Could you reproduce that in brand new project? if so you could upload it as a bug for Ashley to investigate, cause it really sound very strange from your descriptions,


That's definitely a larger grid than mine, which is only a tilemap grid of 80x47 (right now, 11 of them in total) tiles that are each 64x64. I'm not entirely sure it's a bug in C2 yet, even if it seems like it is. Maybe the tilemap is unable to optimize because the tiles in the tilemap are being set at runtime and not in the editor? That seems unlikely but I'm grasping at what it could be at this point, but the performance drop is similar to creating a few thousand objects to represent the tiles and not pasting them into a Paster object & then deleting them (what I was doing before).

I suspect because I'm loading in the TMX using a third-party plugin, even a new project stripped of everything else would violate the bug report rules @Ashley has set :(.
B
62
S
36
G
19
Posts: 494
Reputation: 16,914

Post » Mon Jan 04, 2016 3:21 am

My "Main Map" in the game (and all neccesary tiles for that map) is in the layout from the start. but every sub levels/maps are loaded from external json files at runtime.

But then i never used TMX, ever. I've created my own level editor in C2 to create all maps for my game - so maybe that continuality in saved/loaded files have something to do. maybe there is an issue with TMX->C2.
ImageImageImageImage
B
155
S
63
G
41
Posts: 2,588
Reputation: 34,466

Post » Mon Jan 04, 2016 3:28 am

shinkan wrote:My "Main Map" in the game (and all neccesary tiles for that map) is in the layout from the start. but every sub levels/maps are loaded from external json files at runtime.


That's the same thing I'm doing, just loading .tmx files instead of json files.

shinkan wrote:But then i never used TMX, ever. I've created my own level editor in C2 to create all maps for my game - so maybe that continuality in saved/loaded files have something to do. maybe there is an issue with TMX->C2.


There's no continual save/load, it loads the TMX once, parses it, creates the necessary tilemaps on the proper layers, then sets the tiles - probably no different than you're doing with json files.

In your stages, how many tiles would you say you have on-screen at once? I see a small hit when the camera is zoomed in, which increases with each Tilemap object I have on-screen, but it's when there's a lot of tiles visible that I see the worst performance hit.
B
62
S
36
G
19
Posts: 494
Reputation: 16,914

Post » Mon Jan 04, 2016 12:05 pm

A .capx is worth 1000 posts. If you have a performance problem, reproduce it in a minimal .capx and share that. Then I can profile it and get some actual data on what is going on, rather than just aimlessly speculating. You should also not use any third party plugins in such .capx files (as per bug reports). If the performance problem is caused by a third-party plugin, it's not our problem at all.
Scirra Founder
B
382
S
223
G
86
Posts: 24,005
Reputation: 189,847

Next

Return to How do I....?

Who is online

Users browsing this forum: Soulmachine and 13 guests