Since roblox doesn’t really have a built in culling system unlike other game engines (yes streaming enabled is a thing but it doesn’t really cull anything it just puts them to nil when players are far).
Tags are a better choice for stuff like this, so you don’t have to get the descendants of the workspace and finding :IsA(“Part”) or mesh,etc.
A basic system I just made using CollectionService (tags), Coroutine.wrap functions, and camera.LookVector.Unit and then parented to replicated storage under the “Parented” folder (I might do remote events/unreliable remote events, so It will be server storage (avoid any exploits from getting the parts).
(you can adjust the culling amount on how fast it is and doesn’t really affect the clients performance)
video stuff: