So, I have made a raycast pistol. I use tweening to move the bullet along the ray. Although I have encountered a problem, when I set the bullets to move along quickly (as they should) they do not visualize at the correct place, being several studs off. I tried tinkering with the trail in the block which is being moved along, but realized it's in the script, if I lower it to lower speeds the bullets visualize great, and are not off. Is there any way to fix this or is this just due to the roblox engine and is out of my control?

Gyazo GIF of normal (fast speed) bullets: https://gyazo.com/b693caffa5c605839ef9d5f52e9e4d89

Gyazo GIF of slowed down bullets: https://gyazo.com/24b701898a1c559bcf28b1654d218b44

Script, I've highlighted the bullet visualization part between 2 lines so it's easier to find:

local Present = true
local RS = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
	local tab = {workspace.IgnoreModel}
	local first = true
local Hole
local Part,Position,Normal
script.Parent.BulletEvent.OnServerEvent:Connect(function(Player, FromP, ToP, BulletPos)
if script.Parent.AbleToShoot.Value == true then
	if first == true then
	table.insert(tab, Player.Character)
	first = false
	end
 local RayCast = Ray.new(FromP,(ToP-FromP).unit*500)
 Part,Position,Normal = game.Workspace:FindPartOnRayWithIgnoreList(RayCast,tab,false,true)
 local Dist = (ToP-FromP).magnitude
 if not Dist then Dist = 300 end
 Hole = game.ReplicatedStorage:FindFirstChild("GlockBulletHole"):Clone()
-------------------------------------------------------------------
local projectile = script.Parent.Bullet.Projectile:Clone()
projectile.Parent = game.Workspace
projectile.CFrame = CFrame.new(BulletPos, ToP)
projectile.Tracer.Enabled = true

local Info = TweenInfo.new(
	(ToP-script.Parent.Parts.BE.Position).magnitude/457,
	Enum.EasingStyle.Sine,
	Enum.EasingDirection.Out,
	0,
	false,
	0
)


local Goals  =
{
	Position = ToP
}

local BulletTween = TweenService:Create(projectile, Info, Goals)
BulletTween:Play()

if (ToP-script.Parent.Parts.BE.Position).magnitude <= 1000 then
game.Debris:AddItem(projectile, (ToP-script.Parent.Parts.BE.Position).magnitude/457)
elseif (ToP-script.Parent.Parts.BE.Position).magnitude > 1000 then
game.Debris:AddItem(projectile, 2.2)
end
end
-------------------------------------------------------------------
wait((ToP-script.Parent.Parts.BE.Position).magnitude/457)
if Part ~= nil then
 Hole.Parent = Part
 Hole.Position = Position
 Hole.Material = Part.Material
 Hole.Color = Part.Color
 Hole.CFrame = CFrame.new(Hole.Position, Hole.Position+Normal)
table.insert(tab, Hole)
local breakoffParts = {Instance.new("Part", workspace),Instance.new("Part", workspace),Instance.new("Part", workspace),Instance.new("Part", workspace)}
for i, v in pairs(breakoffParts) do
	v.Position = Hole.Position
	v.Orientation = Vector3.new(math.random(0,360),math.random(0,360),math.random(0,360))
	local mesh = Instance.new("SpecialMesh", v)
	mesh.MeshType = Enum.MeshType.Wedge
	v.Size = Vector3.new(0.05,0.05,0.05)
	v.Material = Part.Material
	v.Color = Part.Color
	v.Transparency = Part.Transparency
	v.Reflectance = Part.Reflectance
	v.Velocity = Vector3.new(math.random(-5,5),math.random(-5,5),math.random(-5,5))
	table.insert(tab, v)
	game.Debris:AddItem(v, 2)
end

 if Part.Material == Enum.Material.Slate or Part.Material == Enum.Material.Sand or Part.Material == Enum.Material.Pebble or Part.Material == Enum.Material.Brick or Part.Material == Enum.Material.Concrete or Part.Material == Enum.Material.Cobblestone or Part.Material == Enum.Material.Granite or Part.Material == Enum.Material.Marble or Part.Material == Enum.Material.Wood or Part.Material == Enum.Material.WoodPlanks or Part.Material == Enum.Material.Plastic or Part.Material == Enum.Material.SmoothPlastic then
 Hole.Dust.Enabled = true
 end
if Part.Material == Enum.Material.Wood or Part.Material == Enum.Material.WoodPlanks then
	Hole.Splinter.Enabled = true
end

if Part.Material == Enum.Material.Glass then
	if Part.CanCollide == true then
		Part.CanCollide = false
	local BreakSound = script.Parent.Glass:Clone()
	BreakSound.Parent = Part
	BreakSound:Play()
	game.Debris:AddItem(BreakSound, BreakSound.TimeLength)
	Part.CanCollide = false
	if Part:FindFirstChild("Shatter") == nil then
	local eft = script.Parent.Shatter:Clone()
	eft.Parent = Part
	eft.Enabled = true
	eft.Color = ColorSequence.new(Part.Color)
	eft.Transparency = NumberSequence.new(Part.Transparency)
	Hole.H1.Transparency = 1
	Hole.H2.Transparency = 1
	end
			else
		Hole.H1.Transparency = 1
		Hole.H2.Transparency = 1
	end
	end
	
	if Part.Material == Enum.Material.Slate or Part.Material == Enum.Material.Pebble or Part.Material == Enum.Material.Brick or Part.Material == Enum.Material.Concrete or Part.Material == Enum.Material.Cobblestone or Part.Material == Enum.Material.Granite or Part.Material == Enum.Material.Marble then
		Hole.Rock.Enabled = true
		Hole.Rock.Color = ColorSequence.new(Part.Color)
	end
	
	if Part.Material == Enum.Material.ForceField then
		Hole.Energy.Enabled = true
			Hole.H1.Transparency = 1
	Hole.H2.Transparency = 1
	end
	
	if Part.Material == Enum.Material.Plastic or Part.Material == Enum.Material.SmoothPlastic or Part.Material == Enum.Material.Foil then
		Hole.Plastic.Enabled = true
		Hole.Plastic.Color = ColorSequence.new(Part.Color)
	end
	
	if Part.Material == Enum.Material.Metal or Part.Material == Enum.Material.DiamondPlate or Part.Material == Enum.Material.CorrodedMetal then
 Hole.Sparks.Enabled = true
end

if Part.Material == Enum.Material.Grass then
	Hole.Grass.Enabled = true
			Hole.Grass.Color = ColorSequence.new(Part.Color)
end
	
	if Part.Material == Enum.Material.Fabric then
	Hole.Fabric.Enabled = true
			Hole.Fabric.Color = ColorSequence.new(Part.Color)
			Hole.TornFabric.Enabled = true
			Hole.TornFabric.Color = ColorSequence.new(Part.Color)
end

Hole.H1.Color3 = Part.Color
Hole.H2.Color3 = Part.Color

 local Weld = Instance.new("Weld")
 Weld.Part0 = Part
 Weld.Part1 = Hole
 Weld.C0 = Part.CFrame:Inverse()
 Weld.C1 = Hole.CFrame:Inverse()
 Weld.Parent = Hole
 if Part and Part.Parent:FindFirstChild("Humanoid") ~= nil then
	for i, v in pairs(breakoffParts) do
		v:Destroy()
	end
	local bleed = script.Parent.Bleeding:Clone()
	bleed.Parent = Part.Parent:FindFirstChild("Humanoid")
	bleed.Value = true
	local damage = 10
	if Part.Name == "Head" then
		damage = math.random(50,70)
		bleed.BleedDamage.Value = 42
	end
		if Part.Name == "Torso" or Part.Name == "HumanoidRootPart" then
			damage = math.random(20,22.5)
			bleed.BleedDamage.Value = 50
		end
		
		if Part.Parent:IsA("Accessory") then
			if (Part.Position-Part.Parent.Parent.Head.Position).magnitude > (Part.Position-Part.Parent.Parent.Torso.Position).magnitude then
				damage = math.random(20,25)
				bleed.BleedDamage.Value = 50
				elseif (Part.Position-Part.Parent.Parent.Head.Position).magnitude < (Part.Position-Part.Parent.Parent.Torso.Position).magnitude then
					damage = math.random(50,70)
		bleed.BleedDamage.Value = 42
			end
		end
  Part.Parent.Humanoid:TakeDamage(damage)
	Hole.BloodCloud.Enabled = true
	Hole.Bleed.Enabled = true
	Hole.Blood.Enabled = true
	Hole.Dust.Enabled = false
	Hole.Splinter.Enabled = false
	Hole.Rock.Enabled = false
	Hole.Plastic.Enabled = false
	Hole.Grass.Enabled = false
	Hole.Fabric.Enabled = false
		Hole.H1.Transparency = 1
	Hole.H2.Transparency = 1
	Hole.B1.Transparency = 0.4
	Hole.B2.Transparency = 0.4
else if Part.Parent.Parent:FindFirstChild("Humanoid") and Part ~= nil then
			for i, v in pairs(breakoffParts) do
		v:Destroy()
	end
		local bleed = script.Parent.Bleeding:Clone()
	bleed.Parent = Part.Parent:FindFirstChild("Humanoid")
	bleed.Value = true
	
	local damage = 10
	if Part.Name == "Head" then
		damage = math.random(50,70)
		bleed.BleedDamage.Value = 42
	end
	if Part.Name == "Torso" or Part.Name == "HumanoidRootPart" then
		damage = math.random(20,25)
		bleed.BleedDamage.Value = 50
	end
		  Part.Parent.Parent:FindFirstChild("Humanoid"):TakeDamage(damage)
		Hole.BloodCloud.Enabled = true
		Hole.Bleed.Enabled = true
	Hole.Blood.Enabled = true
	Hole.Dust.Enabled = false
	Hole.Splinter.Enabled = false
	Hole.Rock.Enabled = false
	Hole.Grass.Enabled = false
	Hole.Plastic.Enabled = false
	Hole.Fabric.Enabled = false
	Hole.H1.Transparency = 1
	Hole.H2.Transparency = 1
		Hole.B1.Transparency = 0.4
	Hole.B2.Transparency = 0.4
	end
	end
	 Hole.Dust.Color = ColorSequence.new(Part.Color)
end
if Part then
	if Part.Parent ~= nil then
 game.Debris:AddItem(Hole,15)
end
end
end)