From Blue Mars Developer Guidebook
Back to Tutorials
Furniture are items uploaded from furniture editor with the purpose of being placed in a residence.
Objects are the interior of a residence OR furniture other than the specific furniture item you are moving
Furniture attach to Objects.
Objects do not move.
Surface type (mat_ar_floor, mat_ar_wall, mat_ar_ceiling, mat_ar_blank) is applied to Objects and describes what Furniture can attach to an Object.
Attachment type is applied to Furniture and describes how the Furniture will attach to Objects.
Walls, Floors, Ceilings in your interior MUST have a surface_type described above to be considered Objects.
Furniture MUST have an Attachment type to be considered Furniture.
Furniture MAY have a surface_type described above to be considered and Object.
Suppose you want to make a rug that you can place a chair on. You make the rug in the furniture editor, assign it an attachment type of Floor. This creates a furniture that will rest on the floor. Now to allow other floor items to rest on it you want to assign a mat_ar_floor surface type to the material of the proxy for this rug.
If you want to create a refrigerator that allows players to place they're kid's drawings on it, create a the refrigerator in the furniture editor with an attachment type of Floor so it rests on the floor. Now to allow wall items to rest on it you want to assign mat_ar_wall surface type to the material of the proxy for the refrigerator.
Any furniture item can accept any surface type so you can make ceiling furniture that accept floor furniture, wall furniture that accept ceiling furniture etc...
Issues to consider
Floor items will always be displayed right side up (local +z), attached at their pivot point. So if you make a rug with an attach of ceiling and a surface type of floor you'll end up with a rug on the ceiling (I don't know why but just for an example). Now if you took a chair furniture that had an attachment of type floor, you could theoretically put it on that rug on the ceiling. 2 things will likely happen though. First the chair is like a meter tall so it's going to be colliding with everything up to 1 meter above that rug, which likely means it's going to collide with the ceiling and therefore not allow you to place it. Second you won't be able to see the chair because it's going to be above the ceiling.
Wall furniture will always be attached to the wall at their pivot point facing their local +y away from the wall. So you want to place the pivot point of the wall furniture pretty much where you would put the nail, on the back where it will be flush with or a little away from the wall.
Ceiling furniture will always be attached to the ceiling right side up (local +z) with the pivot point placed where a nail would be. So you want your pivot on the top.
Right now there is a limitation that only accepts 1 surface type. So if you have 2 proxy materials it will only recognize the second one. So if you have vanity you will be able to place objects on EITHER the desk OR the mirror, not both. I hope to fix this soon so if you're planning to create any items like this you might want to hold off a bit.
Movement is based on attachment so items MUST be attached to something, much like the real world. HOWEVER, I have left you some leeway here, for example if you want to create a floating chair, all you have to do is put the pivot point below the bottom of the model. That pivot point will attach to the floor and you'll have a chair suspended in space. When we've finished animated and scripted furniture this limitation will shrink even more.