Why does Normal rotate my models in weird ways?

Have you tried debugging the vectors that are being obtained in order to get the RightVector and the UpVector of the model?

I advise debugging your furniture system by creating a part that represents the UpVector, RightVector, and LookVector.

This is what it should look like although it’s quite odd that the blue vector is facing towards the part in the image just image it’s reversed and it represents the floor normal as the new relative Y Axis.

Once you do, you will be able to easily visualize what is wrong with your CFrame methods and answer most CFrame problems you come across:

  1. Would I need to rotate the furniture around the Y axis 90 degrees?

  2. Is the position of the CFrame incorrect? Do I need to add an offset relative to the floor normal?

  3. What exactly does this piece of code do to give me the RightVector? Is the right vector giving incorrect? Do I need to rotate it somehow to make it correct? Why did I choose (0, 0, -1) as vector.

local arbritaryLookVector = Vector3.new(0, 0, -1)
-- Remember the right-hand rule
local rightVector = NewRay.Normal:Cross(arbritaryLookVector)

Once you are able to visualize the CFrame you will be able to do some really cool stuff like this using new CFrame methods like CFrame.fromAxis()

Also, look at this tutorial furniture placement it’s where I got the image from and is basically what I’m trying to do with the example code I gave of finding a CFrame on the surface using the cross product properties.