Discovered something interesting / crazy in Unity yesterday.
For awhile I've been noticing in the shaders I write that sometimes incoming data is unexpectedly already in world space. If I do the usual model transform, it doubles it, placing it doubly far away from the origin with double the rotation. Then oddly later I'd find something rendering at the origin because I took the model transform out.
Turns out they bake the overall transform of the game object into the root node of a skinned mesh. That means if you are doing a skinned shader, when you do the weighted skin transforms you go directly from model space to world space, skipping the "skin space" you'd usually have.
If you want to use the same shaders for static and skinned, you have to check for bones, then send an identity matrix for the model matrix.
The really crazy thing though, I'm not really sure why they do this baking, or if it always happens. Since skinned stuff is so built in and they never anticipated anyone messing directly with bones, there's very little info out there on this. The only related thing I've found is the mecanim stuff (which I haven't touched yet) apparently uses animation to translate the game object. So they might be baking the root bone to support this.
I've been on one project where we tried that (animation driven movement) and it was a total disaster that we ended up abandoning. Apparently it is a common practice these days so I guess they have worked out all the issues.