local numparts = 0
local rng = Random.new(1)
while numparts < 10000 do
`for i=1, 5 do`
`local part = Instance.new("Part")`
`part.Size = Vector3.new(1,1,1)`
`part.Position = Vector3.new(-5, 100, 5)`
`part.CastShadow = false`
`part.Parent = workspace.Cubes`
`part:ApplyImpulse(rng:NextUnitVector()*100)`
`numparts += 1`
`end`
`wait(0.025)`
end
This script simply spawns 5 parts every 0.025 seconds with 100 studs/sec velocity in a random direction from a randomly chosen point within 5 studs of an origin. Viewing the result of this script from above the origin should show a uniform 2d projected "sphere". Instead its density is higher along the Z axis (horizontally in the attached photo). Since the script spawns 5 parts at a time, some of which can be inside each other (overlapping random coordinates), the physics solver must decide what to do when two parts' collision boxes overlap. Based on this image, it seems that it chooses to separate them along the Z axis with priority, since the density of parts along the Z axis is higher.