Quaternion can be transported as a Normal3f (W value is calculated on the receiving side). The Angle type seems like overkill; you could define floors and ceilings for every numeric value you send in theory but there are diminishing returns to doing it at the protocol level.
I'm interested to see the results of this work. Do you have to break the Protocol Buffers spec to add support for fixed length arrays? Sending UUIDs and hashes will be a critical part of any virtual world system.
Also... this same conversation is happening on the MMOX list (https://www.ietf.org/mailman/listinfo/mmox). It would be great if you could send a note to the list talking about your reasons for choosing Protocol Buffers, tradeoffs it has compared to systems like Apache Thrift, and how you are working around the limitations. --Jhurliman 03:07, 21 February 2009 (UTC)
John, you only need to break the spec to allow everybody to use fixed length arrays. If we only use them internally in our types, then its not an issue. Personally I think this is a pretty major omission in Protocol Buffers, possibly worth breaking spec for. That being said, it doesn't require breaking the wire format in anyway. In fact, the whole idea is to have the existing implementation do all the real heavy lifting. Basically what we'd like to provide is a friendlier interface and larger variety of basic data types, which boils down to appropriately massaging the IDL and wrapping the output of Protocol Buffers. --ewencp