tsunamayo / Starship-EVO

Welcome to Starship EVO bug tracking repo !
112 stars 17 forks source link

[BUG] Child entities of ships dissapearing after game restart & massive GPU overload. #5695

Closed CoasterBlock closed 3 weeks ago

CoasterBlock commented 3 months ago

Short Description of the issue:

After loading a ship with many child entities, and restaring the game, many child entities will have dissapeared. At the same time, massive amounts of frame-rate lag will also be present when looking in a specific direction in space.

Steps to reproduce the issue:

Build a ship with many child entities Save it as a ship Stop the game Reopen the game and load the world The ship should have lost some of its child entities. The game should also be lagging immensly when looking at the ship, having filled all GPU memory. (Usage went from 30% to 95%)

Respawning the ship does not work. It will still be missing the parts.

Environment

Additional information:

This bug does not concern a particular design, it affects all ships I made, both new and old. The bluerpint itself is also broken, the ship cannot be repaired by respawning it. If you try to respawn the ship, the game will lag incredibly, filling up the entirety of VRAM. The CE's that where missing before, are also missing in the respawned version.

EDIT 1: The only way to recover the ship is by using a backup made before the game was fully restarted or closed. Including, before steam was entirely restarted. I had to load a backup of my ship I made the evening before and that is located on a different drive in a specific directory as a .zip file.

EDIT 2: This seems to affect child entities that involve hinges. In all my blueprints that where damaged, the hinge was either missing completely or, had the the moving part of the hinge deleted.

EDIT 3: The game seems to delete the CE's both in the game-world AND in the files. AFTER the game was restarted. The blueprint in the game folder itself will also be corrupted.

Player Log:

Player.log

Screenshots

In both cases, the blueprint lags incredibly.

20240331153901_1 Missing part of the hinge

20240331153834_1 Entire hinge is deleted.

tsunamayo commented 3 months ago

@CoasterBlock Hi, can you send me your character save and your blueprint? Thanks

CoasterBlock commented 3 months ago

Bug Report, Missing Hinges.zip

@tsunamayo I included a blueprint where I noticed this issue before. I copied out the broken CE's to a smaller ship. I dont have the original character and world-file anymore. I ended up making a new one and verified all my game files. Sorry about that :(

Dolan-online commented 3 months ago

I also have been experiencing this same issue, including the random lag in a specific direction. Usually it occurs after quitting and relaunching a world.

The entities that seem most affected in my case are copy-pasted elevators and other internal features. Turrets, doors and exterior details seem to be less affected.

piotmetans commented 3 months ago

I think I've managed to find a method to reproduce this bug. I've done several tests, some of them are a bit more reliable than others, but they've almost all resulted in disappearing CE's.

I think I've managed to narrow down the reason slightly, I don't think this bug is caused by manually saving the blueprint or by anything related to copy-paste, as I've performed these tests with and without using either and the results were the same. Also of note: many of these tests use a lot of CE's, but I am 100% positive the bug isn't related to the quantity of CE's as I've had a blueprint with only 20-30 mess up before. The large quantities just make it happen more reliably.

Essentially, I've just put a ton of CE's onto a slab in different ways and exited the game right after. It works almost every time. I tested whether the issue was long CE chains by doing both single CE's without any grandchildren and longer chains of 4-5. Also, there was a single test where I manually placed down (without copy-paste) 256 pistons on a 4x4 slab and still had issues. I've tested mostly with both pistons and hinges, and pistons seem to bug out more often. I also considered doing a test with several hundred blueprints with only a few CE's on them, but that's way too time-consuming lol. Anyway, I'll share some tests that can be performed to reliably reproduce this bug. All of the following tests contain 1536 CE's.

Test 1: Chained Pistons, 4mx4m slab

Step 1: Place down a simple slab



Step 2: Place a stack of 5-6 pistons on the slab



Step 3: Copy-paste (or place individually if you're feeling spicy) the stack onto the rest of the slab



Step 4: Exit to desktop and restart the game. There should be several missing or bugged pistons. If not, try restarting the game several times, and it should work.



Not sure if it's necessary, but here's the player log of this exact test: Player.log

Funnily enough, doing an additional restart will exacerbate the problem:

Test 2: Single Pistons, 12mx8m slab

This test was the same as the previous, except I removed all CE chains and placed all pistons on the main entity. I won't go through the process again, but here are the results:

Test 3: Chained Hinges, 4x4 slab

Interestingly, I found hinges to be a bit more agreeable than pistons, counter to what CoasterBlock said. I often had to do several restarts before the bug showed up.

Test 4: Single Hinges, 12x8 slab

~~

I performed some of these tests with rails and rotators too, and found that they are similarly affected.

Final note: the blueprint is completely overwritten without any input from the player, at least in regard to these CE's. Despawning and respawning the same blueprint will cause it to spawn in with the bugged CE's instead of the original blueprint, even if it hasn't been saved in the bugged state.

asanagisae commented 3 months ago

Hi, I gave the repro steps a try on the default branch, 24w15a.

The first time, with a 10x10x5 cube of pistons (2m blocks), the entities were all present after a restart.

Thinking that perhaps it's a quantity issue, I tried again with a 16x16x16 cube of pistons (1m blocks). After a restart, a few of the pistons started disappearing:

image

And after every restart thereafter, another piston goes missing. Interestingly enough, the original box of 10x10x5 never loses a piston. Perhaps it's a limit per ship?

Actually, it gets even more confusing. Many restarts later, it's actually a different combination of pistons that go missing, and some of the missing ones come back:

image

Here's the world save for convenience:

Bug Testing.zip

And maybe the log?

Player.log

tsunamayo commented 3 months ago

I also have been experiencing this same issue, including the random lag in a specific direction. Usually it occurs after quitting and relaunching a world.

The entities that seem most affected in my case are copy-pasted elevators and other internal features. Turrets, doors and exterior details seem to be less affected.

Hi, so the lag was a different issue and was fixed already (patch is live). Thanks

tsunamayo commented 2 months ago

@Dolan-online @CoasterBlock @asanagisae Hi, I am not sure on why this happens, but I was planning on updating the way CE are stored in the blueprint definition. It is a bigger dev though so you will have to wait a bit (as I need to convert existing blueprint format to a newer one)!

asanagisae commented 1 month ago

I just wanted to follow up on this issue. I understand that changing the way blueprints work is complex and takes a significant amount of time, both in designing it and testing it. Has there been any movement on this front?


I ran into this issue again in 24w20b, but on a smaller ship. One of the strengths of Starship EVO over the leading competitor is the way the game handles child entities, specifically the ability to support large numbers of them on a single ship without significant performance drops. The opportunities are boundless when using this technique to the fullest, but conversely it's a serious issue if the game randomly deletes a hinge or rotor without warning.

This limitation is understandable on complex ships with hundreds of hinges and rotors. However, the ship I was building is under 30m long, with only 61 child entities in total (and many more still in the plans). One of the main VTOLs disappeared on world load. Sometimes the rotor and all CE's are gone, sometimes the rotor base is there but the CE's aren't (pictured).

image

image

The rotor that was deleted was 3rd in the hierarchy. At this point in this chain, none of the CE's have siblings (except ones directly attached to the ship's root). All 4 VTOLs have the same setup, but only 1 was deleted by the bug. Parent > hinge > hinge > rotor (the one that disappeared) > hinge > ....

I was able to load and fix this BP in another world. In this other world, the ship does not exhibit the disappearing CE issue. The fixed BP, spawned back in the original world, no longer exhibits the issue.

As more players become comfortable with the game, I could see them reaching and surpassing this level of complexity rather quickly. It'll become a growing concern, causing many to go on indefinite breaks from the game.

asanagisae commented 1 month ago

I found some reproduction steps. I don't know if this is related, but it seems moderately repeatable (2 of 2 attempts). This will make a child entity disappear during a play session. The entity will return after restarting the game (2 of 2 times).

https://github.com/tsunamayo/Starship-EVO/assets/10069469/bd081e32-781e-4df3-9286-050e7666249d

Perhaps you could try the same in your development environment, while using a debugger or watching some variables?

The disappearing CE issue discussed in this thread is sometimes session-dependent: that is, on some sessions some CE's will be gone, but in other sessions a different combination of CE's will be gone. That behavior seems similar to this, in that disappearing CE's can return.

Regnion commented 1 month ago

I also encountered this issue. I have nothing more to contribute. I can only express that this is crippling for people doing large builds. @tsunamayo Is there a fix in the works for this, have you been able to recreate it?

asanagisae commented 4 weeks ago

image

@tsunamayo I ran into the issue again, this time on the mech preview branch. The mech on the left should look like the mech on the right - the monowheel is missing. It remained missing after a restart of the game. When I spawn the mech from a fresh starter block, the monowheel is still missing. The monowheel was present and functioning when I saved the blueprint last, and there was no indication that it would be missing now. This build only has 19 child entities (plus the 2 that were deleted by the bug).

The missing mechanisms were rotors at 1/4 scale.

Ships with at least 19 mechanisms are rather common, with the average mechanisms-per-ship count increasing as players build more mechs. Highly destructive bugs such as this that can affect a large percentage of the user base really should be prioritized much higher.

I will attach the blueprint, which should be from the session before with the monowheel present.

Blur.zip

Was the video I posted earlier (on June 3) able to help identify when a particular entity disappears while the game is running?

Worth noting: In my bug test world (a few messages higher in this issue), I had noticed that the pattern of missing pistons would usually be the same set as the last session, plus possibly one or two more. On a very infrequent basis (maybe one in 8-10 restarts?) the set of missing pistons was entirely different from previous sessions. Perhaps with sufficient restarts and a sufficient number of attempts, the blueprint may be able to render the missing monowheel.

ProPeach commented 4 weeks ago

This happened to me the other day too, I lost a hinge on an 150m ship with 200ish CEs. It's kinda scary it can happen to any ship without warning, and with no way of rolling it back!

asanagisae commented 3 weeks ago

I had a thought. The mechanisms that disappeared in my builds were flush with other blocks. Perhaps, due to rounding errors, blocks were being pushed into nearby blocks and causing them to not render due to collisions.

A new test of 16x16x16 1m pistons, split 1m apart from each other: 20240619224952_1

The session immediately after: image

So it appears that it was not the case. The blocks around the mechanism do not affect whether it disappears, and it's not related to collisions.

asanagisae commented 3 weeks ago

The orange box in the previous screenshots (500 pistons) seemed to never lose any CE's during all of my testing. I thought it odd, then realized that I had linked every piston to a switch.

So I spawned in a copy of the orange box and removed the switch (right). I also started on a new box (yellow and violet, 1024 pistons), linking every piston by hand to a switch. The orange boxes and the new yellow/violet box are all 2m scale, which is also different from the previous boxes (which were 1m scale).

Here is the resulting session after reloading the game:

image

Even the original, untouchable orange box has started losing CE's. The copied orange box lost CE's. The new yellow violet box lost CE's.

So it appears that the scale of the mechanisms is not a factor, and having them linked to some logic element is not a workaround.

The CE lost in the new box is actually fairly far down - it's not just losing the piston head.

image

asanagisae commented 3 weeks ago

@ProPeach had an interesting idea. Perhaps the blueprints from before and after the lost CE's may differ.

The saved blueprint immediately after building, during the first session while all blocks were visible:

image

Saving the blueprint from the ship again in a later session, after many of the pistons had gone missing:

image

This latest version of the black and white box had lost quite a few pistons:

image

25 columns out of 256 had lost pistons. That's 10% of the build affected by the bug in just 3 play sessions....

If the .sevo file is compressed by some algorithm, then it is possible that less original data may result in a bigger file if the compression is less efficient. I'm not sure if any conclusions can be drawn from this observation.

asanagisae commented 3 weeks ago

I tried to respawn the original blueprint for comparison (taken before any corruption).

The .sevobu of the original (bottom) ends up with a completely different set of missing pistons compared to the .sevo of the original (left):

image

The original and backup files are in the blueprint zip:

Pistons - BW.zip

This could be a file read issue, as the missing pistons in the backup are now present in the current copy of the blueprint.

Are the .sevo and .sevobu files copied directly from the files in the world's PlayerEntity folder?

tsunamayo commented 3 weeks ago

@Regnion @ProPeach @asanagisae @CoasterBlock Issue fixed for 24w26a. Sorry I just didnt saw the ping and update, when there is something really blocking / urgent you want me to see and fix asap it is better to book a new case!

Cheers