Despite how it may seem a Room product is actually one of the simplest mesh product that can be made, much like a Furniture product. All that is needed is a mesh, the bit users see, and a skeleton comprising a single node called skeleton.Root. So long as the two elements, mesh and skeleton, are linked together properly a working product can be exported for IMVU.
Basic Room Skeleton
Everything in IMVU has an underlying skeleton. A Room Skeleton has attached to it several things including meshes, in this case the room shell mesh or meshes (the bits visible to the user), Furniture nodes (to which furniture products are attached when a room is decorated) and avatar Seat nodes.
The most basic skeleton that can be used for a room is a single master node called skeleton.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 entire IMVU scene.
skeleton.Root - Mesh - [+ nodes]
skeleton.Root is normally positioned at grid-centre (0, 0, 0 in X, Y, Z world space) and oriented with Z-axis upward.
Furniture Nodes are special nodes within a room which are designed to accept the placement of furniture products when decorating a room. The are specially named and oriented relative to the furniture’s intended use. This is determined by the orientation of the Z-axis of node and corresponds to the type of furniture item being placed; floor, wall or ceiling.
skeleton.Root - furniture.Floor.[n] - furniture.Wall.[n] - furniture.Ceiling.[n]
Floor Nodes have their Z Axis pointing upward into the Room
Wall Nodes have their Z Axis pointing inwards towards the center of the Room
Ceiling Nodes have their Z Axis pointing downwards into the Room.
Avatar Seat Nodes
For more complex room the basic single node skeleton can be added to by parenting other nodes to skeleton.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 meshes in room 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).
skeleton.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 room 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 Furniture or 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 rooms (and for Furniture), 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.
skeleton.Root - furniture.Floor.01 - furniture.Floor.02 - Handle01 - seat01.Sitting - Catcher01.Sitting - Pitcher01.Sitting - Handle02 - seat02.Sitting - Catcher02.Sitting - Pitcher02.Sitting
Lights in rooms are represented by nodes also. Named typically Omni and Spot, they are often parented to a node called node.Room. Like Seats, if there are more than one of each they are numbered sequentially with a two digit suffix.
Parented to skeleton.Root are the Camera Nodes, named camera.01.01 and camera.01.01.Target which control where the scene camera is located and the direction it is facing when a room is loaded by IMVU. Unlike lights there can be only one camera.
And there we have it, as we can see, the combinations of these simple sub-elements means we can build quite complex rooms, the only limitation being the imagination!