The intermediate object model (GeometryContent, VertexContent, etc) always has a separate vertex collection per GeometryContent.
I'm curious: is all your vertex data identical between the different sets of faces, or do you also have other vertex data like texture coordinates and colors that is not the same from one material to the next?
If your vertex data is literally identical (ie. you are drawing the exact same geometry more than once, just with a different material each time) would suggest only creating a single geometry instance, and then just toggling the material (perhaps using different effect techniques) when you draw this at runtime.
If you have other vertex channels that are not identical, so that you do need truly different vertex output data per geometry, and are just wanting to merge these into a larger vertex buffer to avoid changing VB so often, you can do that after you convert from the intermediate object model into VertexBufferContent format. VertexBufferContent has some helper methods that make it easy to concatenate several different blocks of data into one.
If you need some more complex mapping than either of the above, that's not supported by default, but you should be able to roll your own fairly easy by implementing your own version of the built in VertexContent.CreateVertexBuffer. That's a pretty thin wrapper that basically just calls VertexBufferContent.Write for each channel of vertex data. The vertex data channels are all individually exposed as .NET collections, and Write can insert any collection of data you like with any stride value you like, which makes it pretty easy to stitch vertex data together however you need it.
--
XNA Framework Developer
blog -
homepage