Interoperable metaverse pets built on the IMO Standard.
While technically any GLB model will work as a pet, there are a few guidelines that creators should follow:
- Use real-world scale in meters.
- Treat origin as the ground reference point.
- Treat negative z-axis as the forward direction (blender coordinate system)
In addition to this, each GLB should include:
- An
idle
animation that will be used when the pet is idle, eg standing and looking around - A
move
animation that will be used when the pet is moving, eg walking, running or flying - A
stay
animation that will be used when the pet has no objectives or has been ordered to stay, eg sitting or lying down - A mesh that includes
_hitbox
in its name, used to approximate the shape of the pet for interaction and determine its size (use a fully transparent material for proper interoperability)
The ability to define custom UGC assets such as 3D models for a pet introduces a universal issue of performance.
It is fair to say that no platform (or engine) is able to support an infinite amount of compute, so it seems like it is in our best interest to introduce object restrictions.
Some platforms may choose to ignore some or all of these but creators should strive to meet the specs outlined here in order for their pets to be compatible across a larger number of platforms.
Name | Limit |
---|---|
File Size | 3 MB |
Bounds | 3m x 3m x 3m |
Triangles | 16,000 |
Textures | 2048 x 2048 (Total) |
Draw Calls | 1 |
Each pet must include metadata that provides additional information for platforms to use:
{
"type": "pet",
"version": "1.0.0",
"name": "Wolf",
"description": "A little blue wolf",
"speed": 3,
"emotes": [
{
"name": "Bark",
"animation": "bark",
"audio": "bark.mp3"
},
{
"name": "Flip",
"animation": "flip",
"audio": "flip.mp3"
}
]
}
The IMO type. In this case it is a pet
A semver version of the IMO pet standard being used.
A short name for the pet, eg Wolf
.
Each platform may use this in different ways. For example, in UI or as nametags above the pet, etc.
A description of the pet.
Each platform may use this differently. For example, when inspecting a pet.
The speed of the move
animation in meters per second. The actual movement speed of the pet is determined by the platform.
Emotes are optional but provide extra personality for a pet.
Each platform may execute emotes however they like, eg on a timer or when interacting with the pet.
Each emote includes:
- (required) The
name
of the emote for use in UI - (required) The
animation
to play. The animation is played just once. - (optional) The
audio
clip to play. Must be.mp3
.
Each platform has the freedom to choose how pets will work in their engine. Some platforms may choose to have roaming pets with pathfinding, be powered by AI or use much simpler mechanics.
Here is a simple idea of how the attributes can work together to form a pet behavior:
- The pet spawns in front of its owner looking at them, using the
idle
animation - The hitbox bounds of the pet is used to ensure it stands next to the player and not on top of the player
- If the owner moves away from the pet, the pet will follow at the same speed, using the
move
animation andspeed
value to modulate the timescale of the animation - When the owner or someone else interacts with the pet, a random
emote
is chosen and executed - When the owner commands the pet to
stay
, the pet no longer follows its owner
We created an open source tool for creating and editing IMO Pet GLBs:
The source code can be found here in this repo.