And a surprising lack of UV coordinates as well.
For reference, total number of texels across the entire mesh is 66,501,632, which is equivalent to a 8155px by 8155px texture (assuming the texture was perfectly packed with no wasted space.)
This is ptex, of course. The implementation isn't complete, but here's what working for now:
* Per-face ptex resolution. Each face gets a U resolution and a V resolution based on its area (relative to other faces) and how stretched it is (i.e. a thin tall face should have a lower U resolution and a higher V resolution.)
* Automatic generation of ptexes. This step is somewhat analogous to unwrapping your mesh, except instead of choosing UV coordinates, it's setting the default ptex resolution for each face. There's a UI control for texel density.
* "Vertex" painting. That's a bit of a misnomer now, of course, but you can paint more or less normally. (Naturally I've broken some vpaint features like Blur in the process, but it'll all be restored.)
Note: ptex is designed mainly to work on quads. Triangles and other faces are split up into quads in the same manor as Catmull-Clark. I've coded it so that both quads and tris work (although there are some mapping issues with vpaint still), however quads are the "fast case"; for this reason I've applied one level of subsurf to Suzanne in this example.
A partial TODO list:
* Add UI for setting individual faces' resolutions
* Integrate the open source ptex library for loading and saving ptex files
* Add upsampling/downsampling so that changes aren't lost when changing ptex resolution
* Change default ptex to a flat color. The random noise is just for testing, of course :)