Clients never see BaseParts within a model that has been reparented to ReplicatedStorage on server start

Models that have been reparented to ReplicatedStorage from workspace immediately when the server starts show up as empty for clients.

This behavior happens only with StreamingEnabled turned on. Tested this exact case with it disabled and does not occur.

I have these two models that get reparented:

In this video I show the same hierarchy both on the server and client. You can see the client has every object the server does, excluding all of the BaseParts within the model.
https://cdn.discordapp.com/attachments/284152163322691586/743964954327121950/hevQT5i8l1.mp4

These are my streaming settings.
image

The place that I spawn in-game is out of streaming range from where these models are. Spawning next to where they are doesn’t seem to have any impact on this issue either.

When these models do get reparented, they never stream in as well. There is never any cloning of these models.

The only solution I have found to this is clone the model on the server before parenting to ReplicatedStorage and then it will load just fine.

5 Likes

The specific timing of when the models move around may be important to reproducing this issue. If I add a trivial script in Workspace like so:

game.ReplicatedStorage.Model.Parent = workspace

then the issue doesn’t reproduce when I try locally. Can you please either post a link to a published place id where this happens (it can be closed to the public), or try to make a repro-place that just uses the relevant scripts to copy the model on start?

2 Likes

I managed to get a simple repro.

I set the baseplate to be 2048x2048 and put two models at opposing corners of the map. Then I put a spawn location at the other end of the map across from those models. Set streaming settings to be 100 studs max distance. There is a script in ServerScriptService that parents the model 3 seconds after starting, and then reparents to workspace. Every time I have tested under these circumstances the models are empty.

empty_model_streaming_repro.rbxl (416.5 KB)

1 Like

Thanks for the repro file, we’ll investigate.

1 Like

I haven’t been able to reproduce a situation where the parts never stream in. We stream in the models immediately because models don’t have position information, but they BaseParts are streamed in when the player gets close enough. I see the empty models when the player joins, but if I walk close enough to the two models then their constituent parts are streamed in.

Are you seeing a situation where when you get close enough they never appear?

This seems to have come back up.

In Robloxian High School, we reparent models from the server to ReplicatedStorage on server start and then reparent them again locally when the client is nearby. Only caveat here is we destroy and clone these interior models before reparenting to ReplicatedStorage (disabling this logic does not fix the issue though). This was never an issue for us until around sometime last week.

In this screenshot, my “Interior” model is completely empty of any parts when using iPhone 7 emulator in Studio.

In this screenshot, I have not changed any code, only have removed the emulated device. You’ll see that parts have been downloaded as normal.

This is happening in our live game on populated servers on both my desktop and phone. Does not happen in any private server.

3 Likes

I’m getting similar issues to @Usering. Some BaseParts in ReplicatedStorage don’t get loaded in on client start.

Edit: Also have Streaming Enabled, enabled.

Edit #2: Joined my game with a beefy computer and all BaseParts can be found server-sided but running code on the client for the same BaseParts don’t show up. I believe this is to do this this recent update Return of Changes to Non-ReplicatedFirst Loading Order - Updates / Announcements - DevForum | Roblox Since I only started to gain these unusual issues since this release

1 Like

Is anyone able to share a repro place and steps to reproduce?

Note that the behavior of stream-out and locally created parts was changed last year:

Note that if you clone something from ReplicatedStorage into the client workspace it will be considered a local part, but if you reparent from ReplicatedStorage into the client workspace it will be treated like a remote part and possibly streamed out.

Was able to repro this in the mobile emulator.

On server start it will reparent the house to ReplicatedStorage. The client waits for the house model, and then waits 5 more seconds before reparenting it locally. In this scenario the house is not within streaming range when the player loads in. You can see the house model remains empty even when nearby.


Repro file (45.7 KB)

  1. Enter mobile emulator for iPhone 7 (what I was using in the video)
  2. Play solo
  3. The house should reparent at the opposite corner of the baseplate
  4. Walk over to it, never loads
2 Likes

What is happening is that the house is loading, then getting streamed out. This is because it is considered a remote part since it is reparented from replicated storage. You can avoid this by changing:

house.Parent = workspace

to something like:

local copy = house:Clone()
copy.Parent = workspace

As I mentioned in my comment yesterday parts that are reparented from ReplicatedStorage into workspace are considered remote parts and subject to stream out.

1 Like