Wednesday, October 17, 2007

BVH + OBJ

Well I've been doing some research into yet another content creation method, trying to better understand the interaction between the bvh and obj formats.

For those of you who aren't huge nerds with no life like me, 3D game characters usually are created with a several different components to them. The model, the texture, a skeleton, and some animations. And these usually take the form of seperate files with different file extensions. (Which is why Collada is interesting to me, because like FBX, they seem to represent lots of different types of data with ONE file type... Is that right? Time will tell, stay tuned!)
Yes, I go on tangents and ramble. Anyway...

OBJ is a format that describes a 3D model. It's really just a text file that's formatted in a certain way, with a header and a list of coodinates that make up the vertices of the model. There is some more info HERE. Any self respecting 3D DCC package can spit out an .obj. It's as standard as 3D gets. The spec is HERE


BVH is a format that describes animation. Not only that, but it describes the character's skeleton to use for the animation. It's also just a text file that's formatted in a certain way. The beginning of the file describes a skeleton and its degrees of freedom, and the rest of the file is a list of keyframes, one per line, for the skeleton to interpolate between. You can read the spec HERE . So far so good.

So what?

Second life uses those bvh files to animate their avatars. Ogoglio and openCroquet use the same formats, although these two newer platforms allow you to use your own custom obj files for avatar shape, where SL doesn't. Second life avatars are based on a basic Poser model, and a female one at that. To make the male model they just smooth down the boobs a bit... I kid you not...

More to come in part two, where i try to figure out the dark voodoo that these programs hide from you. How does the skeleton from one file know where to fit into the mesh from another file? What about skin weighting, and why should we care?!?!?

No comments: