The most basic type of furniture product is also the simplest mesh product that can be made. All that is needed is a mesh, the bit users see, and a skeleton comprising a single node called Root. So long as the two elements, mesh and skeleton, are linked together properly a working product can be exported for IMVU.
Basic Furniture Skeleton
Everything in IMVU has an underlying skeleton to which meshes, the bits visible to the user, are attached. For furniture, the skeleton essentially acts like a magnet that attach to room furniture nodes placed in a room product that allow for decorating the room with furniture.
The most basic skeleton that can be used for furniture is a single master node called Root and sits at the top of the scene hierarchy. It is a single non-mesh object that acts as a reference point for the item so IMVU knows where it is when dropped into a room.
Root - Mesh - [+ nodes]
Root is normally positioned at grid-centre (0, 0, 0 in X, Y, Z world space) and oriented relative to the furniture’s intended use. This is determined by the orientation of the Z-axis of Root and corresponds to the type of furniture item being created; floor, wall or ceiling.
Z axis orientation - Floor = Z upwards - Wall = Z inwards - Ceiling = Z downwards
For more complex furniture the basic single node skeleton can be added to by parenting other nodes to Root. With a set of nodes called Seats you can add places for avatars to sit or stand, pose or animate. As well you can add nodes to animate the furniture itself.
For nodes that are used by avatars there are a set of four nodes, each performing specific functions: a Seat node that defines the avatar location, a Handle node which is the User Interface element clicked on in-game, and Catcher and Pitcher nodes to establish where avatars stand when interacting with each other.
Taking a closer look this set of nodes, the nodes represent either a Sitting or Standing stance by default, or with slight modification, a custom Stance pose or animation. This is determined by a case-sensitive suffix label such as .Sitting, .Standing or a custom stance label (more about this later).
Root - Handle[n] - seat[n].Sitting - Catcher[n].Sitting - Pitcher[n].Sitting
The Handle node is generally positioned above the seat node, but can be repositioned for ease of access. This is useful in instances where too many seats are in close proximity to each other.
The Catcher and Pitcher similarly can be repositioned but should remain the same distance apart to ensure cooperative avatar animations are properly synchronized such as avatar hands touching during a handshake for example.
For animation, additional nodes can be included depending on what and how the item is being animated. A single node, parented to Root for example, can be used to rotate or move something. More nodes can be used to create more complex animations of the furniture product mesh.
In addition animation can be set up to pose and animate the avatar using a custom stance label so long as the hierarchy between the nodes is set up to accommodate this. Like the labels Sitting, Standing, the use of a custom stance label are used to trigger Avatar Actions.
Nodes and more Nodes
Finally, all related nodes such as sets of nodes in Seats (Handle, seat, Catcher, and Pitcher) need to have their names labeled so that IMVU knows how many there are. For furniture (and for Rooms), each of these nodes needs to have a numerical identifier. This is a done using a two digit number appended to the node’s name before the node’s function label suffix of .Sitting, .Standing or a custom stance label.
Root - Handle01 - seat01.Sitting - Catcher01.Sitting - Pitcher01.Sitting - Handle02 - seat02.Sitting - Catcher02.Sitting - Pitcher02.Sitting
And there we have it, as we can see, the combinations of these simple sub-elements means we can build quite complex furniture, the only limitation being the imagination!