Tilemap Object limitations and surprising performance issues

Get help using Construct 2

Post » Mon Jan 04, 2016 1:26 pm

Ashley wrote: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.


@Ashley
As I said upthread, I was hoping to get feedback on what potential issues could be causing it so I could fully test/tweak as much as possible before reporting it as a bug .

Since I'm loading a TMX at runtime, which C2 doesn't support, I'm using a 3rd-party plugin to bring in the files - though there's no reason it should impact the performance in this case since it's not active after loading the file, and hasn't previously affected performance. The performance issues can be traced directly to how much of a tilemap is on-screen combined with how many tilemaps are on-screen at the same time with nothing else going on other than loading the TMX and setting the tiles on the appropriate tilemap objects. Performance is also affected by what portions of a tilemap are on-screen, and when portions of the tilemaps are visible that don't have a lot of repeating areas of a single tile, there's a hit to the framerate. Using tilemaps versus not using tilemaps is the only variable in the scenario I've described in above posts, with tilemaps affecting performance vs. no tilemaps not affecting performance.

EDIT: All that said, I'll see if I can find a way to accurately reproduce the issue. I've probably been up way too long trying to optimize layers of tiles and I might be feeling a bit cranky :).
Last edited by digitalsoapbox on Mon Jan 04, 2016 1:37 pm, edited 1 time in total.
B
61
S
36
G
18
Posts: 488
Reputation: 16,375

Post » Mon Jan 04, 2016 1:35 pm

digitalsoapbox wrote:
Ashley wrote: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.


@Ashley
As I said upthread, I was hoping to get feedback on what potential issues could be causing it so I could fully test/tweak as much as possible before reporting it as a bug .

Since I'm loading a TMX at runtime, which C2 doesn't support, I'm using a 3rd-party plugin to bring in the files - though there's no reason it should impact the performance in this case since it's not active after loading the file, and hasn't previously affected performance. The performance issues can be traced directly to how much of a tilemap is on-screen combined with how many tilemaps are on-screen at the same time with nothing else going on other than loading the TMX and setting the tiles on the appropriate tilemap objects. Performance is also affected by what portions of a tilemap are on-screen, and when portions of the tilemaps are visible that don't have a lot of repeating areas of a single tile, there's a hit to the framerate. Using tilemaps versus not using tilemaps is the only variable in the scenario I've described in above posts, with tilemaps affecting performance vs. no tilemaps not affecting performance.


And still, a capx is worth a thousand words..
Sharing a capx isn't the same as filing a bug-report..
Can you recreate this framerate drop in another capx?

Maybe you could import the tilemap from tmx and then export asjson, so in a new layout you can load the tilemap from asjson to see if the problem persists..
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 1:44 pm

LittleStain wrote:
digitalsoapbox wrote:
Ashley wrote: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.


@Ashley
As I said upthread, I was hoping to get feedback on what potential issues could be causing it so I could fully test/tweak as much as possible before reporting it as a bug .

Since I'm loading a TMX at runtime, which C2 doesn't support, I'm using a 3rd-party plugin to bring in the files - though there's no reason it should impact the performance in this case since it's not active after loading the file, and hasn't previously affected performance. The performance issues can be traced directly to how much of a tilemap is on-screen combined with how many tilemaps are on-screen at the same time with nothing else going on other than loading the TMX and setting the tiles on the appropriate tilemap objects. Performance is also affected by what portions of a tilemap are on-screen, and when portions of the tilemaps are visible that don't have a lot of repeating areas of a single tile, there's a hit to the framerate. Using tilemaps versus not using tilemaps is the only variable in the scenario I've described in above posts, with tilemaps affecting performance vs. no tilemaps not affecting performance.


And still, a capx is worth a thousand words..
Sharing a capx isn't the same as filing a bug-report..
Can you recreate this framerate drop in another capx?

Maybe you could import the tilemap from tmx and then export asjson, so in a new layout you can load the tilemap from asjson to see if the problem persists..


Thanks for the suggestion. I thought about that, but I think it might be a roundabout way to present something I can show in a simpler fashion. Looking at the manual on tilemap objects, it looks like I can import layers one at a time from an existing tmx into the tilemap object, which might be the simplest way to show what happens when there's 8 or 9 layers of tilemaps...but I probably need a nap first.

***EDIT: I'm getting an error when trying to import the TMX into C2: "Error parsing TMX file. Check the file is a valid Tiled TMX file." Which, obviously it is. I'm saving in CSV format, so compression shouldn't be the issue either. Is there a preferred version of Tiled to use to create & save maps for C2? I'm currently using Tiled 12.3.
B
61
S
36
G
18
Posts: 488
Reputation: 16,375

Post » Tue Jan 05, 2016 11:27 am

digitalsoapbox wrote:@Ashley
As I said upthread, I was hoping to get feedback on what potential issues could be causing it so I could fully test/tweak as much as possible before reporting it as a bug .

When talking about performance, measurements are *everything*. Still, if you're looking for guesses, check the parts of Performance tips about tilemaps.
Scirra Founder
B
378
S
220
G
84
Posts: 23,868
Reputation: 188,111

Post » Wed Jan 06, 2016 12:02 am

Ashley wrote:
digitalsoapbox wrote:@Ashley
As I said upthread, I was hoping to get feedback on what potential issues could be causing it so I could fully test/tweak as much as possible before reporting it as a bug .

When talking about performance, measurements are *everything*. Still, if you're looking for guesses, check the parts of Performance tips about tilemaps.


@Ashley
Yep, and I've run it through every measurement tool that I can get my hands on that works with C2 - this isn't my first rodeo on optimization, just my first with C2 :).

I had started putting together an example of what seemed to be causing the issue, but to be honest it started to seem like it'd be just as much work as making the game itself. Through a few of the tests I tried it seems to be due to a combination of using WebGL shaders with the Tilemap object, as with no WebGL shaders (Wave, Tint, etc. - the effects shaders) there wasn't really much of a performance hit, but as soon as any shaders showed up then performance would degrade drastically with the addition of more shaders and/or Tilemap objects.

There were fps drops/collision increases compared to not using Tilemaps if any objects in the layout were colliding, like the player standing on a platform, even though no tileMaps should have been testing for collision. The expected behavior would be collisions being the same as when not using Tilemaps.

Because the player objects use both WebGL to tint various pieces of the character and needed to collide with platforms, this obviously presents a problem.

I also tried a test based on the suggestion @shinkan made about exporting the json files C2 creates when a .tmx is imported: I compared the Tilemap object data between the json C2 creates in the editor when you import a .tmx file to what was happening when the TMX Importer by @rexrainbow imported the .tmx file at runtime: the json tile data matched exactly, so the same optimization is being done, which I also thought could be the culprit: however, it doesn't seem to be, seeing as how the results of the 1st and 3rd party importers matched.

I'm pulling in a lot of data from the .tmx files outside of just the tilemap - object variables, where to put spawn points, collision types, what in-game layers to spawn tilemaps/objects on, etc. I completely lack the desire to write my own in-game stage editor when Tiled already has all the features I need and works just fine (even though there's no evidence the 3rd-party TMX plugin is the issue), so I guess I'm just going to have to deal with load times between stages. Even if the memory requirements are 4x as much, I'm at a rock-solid 60fps on pretty much any system with enough GPU memory to handle it (more than 1GB), and there's more optimizations I know I can make there than I've been able to figure out with the Tilemap object. I don't think I can pinpoint the root cause to make a bug report with any accuracy unless I rebuild the game step by step and that's just too much.

***EDIT: I had a thought that maybe because C2 treats optimized sections of Tilemaps as different draw calls that the increased draw calls over using giant textures on Paster objects (big, but one call) is causing issue with the F2B rendering because it has more objects to draw when layers with WebGL effects on them behind the Tilemap layers is causing too great an overhead. This seems somewhat unlikely on the card I'm testing on (as mentioned above, a 980Ti), but it's another shot in the dark. The fps slowdown happens regardless of the size of C2's window - as in, fullscreen at 2560x1440 experiences the same amount of slowdown as 640x360 - so who knows. I also see that C2 has divded the tilemaps up into a LOT of collision checks, even though no Tilemaps should have collisions enabled. There's just so many variables involved, but Tilemap objects are still seeming to be the root cause to the issues I'm having with performance. Issues with, again, only occur when Tilemap objects are in use and large portions of them are available on-screen at the same time. Quite possibly still not a bug, and maybe the optimizations applied to the way Tilemaps render, which works just fine in other scenarios, is simply not the right approach for the game I'm making.
B
61
S
36
G
18
Posts: 488
Reputation: 16,375

Post » Sat May 07, 2016 9:44 pm

Same here, tiled map causing performance issues... No matter how simple or complex testing, tilemap cause poor performance :(
B
6
S
2
Posts: 16
Reputation: 482

Post » Sun May 08, 2016 3:32 pm

Have you guy tried splitting the debugger menu from the actual game window. I've notice that If i am debugging with both the game and the menu on one window It tend to fuck up but if i manage to split it up it runs like a charm. such as debugger in one stand alone window and the game in the other window.

The problem may just be the debugger itself that is taking a toll on the engine. and is not calculating properly and perhaps that there is a frame-rate math that is causing itself to loop infinity times over. but that just a guess on my part.
B
51
S
24
G
6
Posts: 391
Reputation: 7,820

Post » Sun May 08, 2016 5:04 pm

Gearworkdragon wrote:Have you guy tried splitting the debugger menu from the actual game window. I've notice that If i am debugging with both the game and the menu on one window It tend to fuck up but if i manage to split it up it runs like a charm. such as debugger in one stand alone window and the game in the other window.

The problem may just be the debugger itself that is taking a toll on the engine. and is not calculating properly and perhaps that there is a frame-rate math that is causing itself to loop infinity times over. but that just a guess on my part.


It's not the debugger, the same performance issues occur without it enabled :).
B
61
S
36
G
18
Posts: 488
Reputation: 16,375

Previous

Return to How do I....?

Who is online

Users browsing this forum: Compiler, LaurenceBedford and 7 guests