Note: These are things like the mobile gardens, cars, those Disc 4 gateways. No towns in here. They are distinct from the models in world.fs's chara.one, which use the field model format.
These exist identically in both wmset.obj and wmsetus.obj. They appear to be solid meshes without skeletons. There are a total of 33 models.
In wmsetus.obj, the models are at 0x3BB4, and the texture section is at 0x64AD0. Both sections start with pointers to their entries. Each model corresponds to a texture in the texture section. That is, the first model loads the first texture in the texture section, the second model loads the second texture, and so on. I think that's only into whatever is used for FF8's VRAM though. Texture page and CLUT IDs are part of the model data, and must match up with the TIM.
struct
{
u16 triangle_count;
u16 quad_count;
u16 texture_page;
u16 vertex_count;
triangle triangleData[triangle_count];
quad quadData[quad_count];
vertex verticeData[vertex_count];
}model
struct
{
u8 vertexIndices[3];
u8 semitransp; //Sets semitransparency if bit 0x01 is set
u8 texcoords1[2];
u8 texcoords2[2];
u8 texcoords3[2];
u16 CLUT_ID;
} triangle
struct
{
u8 vertexIndices[4];
u8 texcoords1[2];
u8 texcoords2[2];
u8 texcoords3[2];
u8 texcoords4[2];
u16 CLUT_ID;
u8 semitransp;//Sets semitransparency if bit 0x01 is set
u8 unknown
} quad
struct
{
s16 coordinates[3];
u16 unknown;
}vertex
I'm not sure what order I should list for the coordinate axes. When importing into Blender, using XYZ produces models lying on their sides.