PreloadAsync is utterly useless

Hello, I’ve been running into issues with PreloadAsync. I need 2 meshes loaded in before my game’s intro cinematic starts playing. The meshes always pop into existence mid-cinematic.

Here is my preload code:

local function checkFailed(contentId, Status)
	if Status == Enum.AssetFetchStatus.Failure then
		print("Failed:", contentId)
	else
		print("Success: "..contentId)
	end
end
	
local PreloadTable = {
	workspace:WaitForChild("Map"):WaitForChild("LobbyDisplay"):WaitForChild("SpecialEffects"):WaitForChild("Backdrop"):WaitForChild("WhiteBackdrop"),
	workspace:WaitForChild("Map"):WaitForChild("LobbyDisplay"):WaitForChild("SpecialEffects"):WaitForChild("PyramidTween1"):WaitForChild("TweenObject"),
}
game:GetService("ContentProvider"):PreloadAsync(PreloadTable, checkFailed)
		

Here are the measures I’ve taken to try and fix this:
-PreloadAsync with prints when the asset is “successfully preloaded”
image

-Viewportframe with the camera pointed at the assets to try and force them to load in. In the video below, the assets are loaded fine in the Viewportframe, but the same assets are not loaded in when the cinematic begins.

-Set camera CFrame to force the player to look directly at the assets when the player just joins the game.

This is all done in ReplicatedFirst and takes place long before the cinematic starts.

Here is the result of my efforts. As you can see, I have achieved absolutely nothing and the pyramid and the background still just pop into existence at the end of this video. They are supposed to be visible throughout the entire thing.

In the top left corner is the viewport with the same 2 meshes that just pop into existence.

Is there any way to fix this?

After you call PreloadAsync, how long is it before they are used?

The viewportframe containing the assets is created right after PreloadAsync.

The beginning of the cinematic(the point they’re actually used in the workspace) takes place about 10-20 seconds after PreloadAsync.

I’m pretty sure that’s your Issue, ReplicatedFirst is used for Objects you want to Replicate before anything else for the Client, so you should probably wait for everything to load in, and then Preload.

However, this just could defeat the purpose of PreloadAsync

Also ran tests where I preload after the character spawns in, outside of ReplicatedFirst. The issue persists.

Possibly related: