I do not know the math behind this but there are some differences in how applications convert and store obj, obviously
An example is shown in the attached picture:
Astronaut obj model in Meshlab - from left to right:
L: Original simply opened in Meshlab
M: Original opened in Poseray and exported as new obj. No modifications whatsoever
R: Obj from Poseray optimized in Meshlab (delete duplicate points etc...)
Filesizes:
L = 2.95 MB
M = 3.72 MB
R = 3.02 MB
A few thoughts...
Obj`s are text files so they are already very un-optimized.
If you open the Astronaut after export from Poseray there are two new text blocks in the file which already take up 500 KB alone.
And that is a file which is only 2.59 MB originally.
The original file only has 1 line of descriptive text as a header.
Vertices and Faces count are the same (according to Meshlab) but the structure looks completely different.
Look at the *.mtl files of the original and the Poseray export. A lot more information (aka text) in there.
Maybe Poseray stores more information on the vertices on export (if that is possible with obj`s).
My conclusion would be to try to be as efficient as possible when building the file in your modeling app,
run it through Poseray nad afterwards run it again through Meshlab, which has tons of functions
to clean, repair, re-do virtually anything on the file.
I guess also that if you do the Poseray process in any other application you get varying file sizes after exporting again.
The algorithms differ quite a lot from soft to soft.
CHeers, Klaus