Strange physics bug using Body Velocity (Solved)

You can write your topic however you want, but you need to answer these questions:
I want to have my player moving smoothly as he does in this recording:
https://gyazo.com/99928d5d318f18e23dafa220d64bc2e9

however, you can see in the game here and this recording the character has a stutter, most likely from the force applied to the humanoidrootpart:

https://gyazo.com/ae890f85a90eca71d8f587035e01fcdb

https://www.roblox.com/games/5694188897/FPS-Test?refPageId=2e0fd6fd-0d64-44b6-ad74-70e0971843ba

I have tried adding a body gyro which you can see in the script stops rotation on the x and z-axis. I have also tried using another part welded to the humanoidrootpart that instead moved(obviously this didn’t work)

note:
there is no 3rd person in my game because its a first-person game but when you move forward you’ll notice the jitter when you stop.

my movement code if that will help you:

while wait() do
	local isonGround = raycast({Character},(Root.CFrame).p,Vector3.new(0,-4.5,0)) 
	local RX, RY, RZ = Character.HumanoidRootPart.CFrame:toOrientation() --These values are in radians.
	BG.CFrame = CFrame.new(BG.CFrame.p) * CFrame.fromOrientation(0, RY ,0) --So on for the rest of the rotations.
	
	if isonGround ~= nil then
		MovementVect = Vector3.new(0,-Downward,0)
		local spaceHeld = UserInputService:IsKeyDown(Enum.KeyCode.Space)
		if spaceHeld then
			MovementVect = MovementVect + Vector3.new(0,JumpHeight,0)
		end
		if w then
			MovementVect = MovementVect + Root.CFrame.lookVector * Character.Humanoid.WalkSpeed * Pow
		elseif s then
			MovementVect = MovementVect - Root.CFrame.lookVector * Character.Humanoid.WalkSpeed * Pow
		else
			MovementVect = MovementVect
		end
		if d then
			MovementVect = MovementVect + Root.CFrame.RightVector * Character.Humanoid.WalkSpeed * Pow
		elseif a then
			MovementVect = MovementVect - Root.CFrame.RightVector * Character.Humanoid.WalkSpeed * Pow
		else
			MovementVect = MovementVect
		end
	else
		MovementVect = MovementVect +  Vector3.new(0,-Downward,0) -- keeps you moving forwards	
	end
	BV.Velocity = Vector3.new(Lerp2(BV.Velocity.X,MovementVect.X, .2),MovementVect.Y,Lerp2(BV.Velocity.Z,MovementVect.Z, .2))
	
end



It looks like you’re watching a roblox anime. Looks cool, but honestly it could be a Roblox Studio bug i suppose

Yeah, I’m looking into any other ways to do this. Upon closer inspection, it looks like the character is constantly tripping under that ball I used for collision with the ground. If I find any solutions I’ll post them here.

Good news I found a solution! First off I did a more accurate calculation for the body gyro using the camera as the direction(before I used the humanoid root part with look vector offset for some reason). I also made body gyro calculation on renderstepped because it was too slow. Then I added a new variable called friction reduction. Now whenever the player is moving the character lifts off the ground just by a tiny bit. It will take some fine-tuning so he’s not sliding all over the place but it seems to be running smoothly now.

if w then
			MovementVect = MovementVect + Root.CFrame.lookVector * Character.Humanoid.WalkSpeed * Pow
		elseif s then
			MovementVect = MovementVect - Root.CFrame.lookVector * Character.Humanoid.WalkSpeed * Pow
		else
			MovementVect = MovementVect
		end
		if d then
			MovementVect = MovementVect + Root.CFrame.RightVector * Character.Humanoid.WalkSpeed * Pow
		elseif a then
			MovementVect = MovementVect - Root.CFrame.RightVector * Character.Humanoid.WalkSpeed * Pow

		end
		if movement then
			MovementVect = MovementVect + Vector3.new(0,frictionreduction,0)
		end

Run.RenderStepped:Connect(function()
	local LV = Character.HumanoidRootPart.Position + workspace.CurrentCamera.CFrame.lookVector
	BG.CFrame = CFrame.new(Character.HumanoidRootPart.Position,Vector3.new(LV.X,Character.HumanoidRootPart.Position.Y,LV.Z) ) 
end)