Hi, On Sat, Dec 4, 2010 at 1:21 PM, Christopher Night <[email protected]>wrote:
> Hi, I'm working on a standalone OBJ loader based on the well-known one on > the pygame wiki: > http://www.pygame.org/wiki/OBJFileLoader > > My goal is to speed up load times by making the model objects picklable, so > the OBJ file doesn't have to be read every time you start up. Here's my > current version: > http://christophernight.net/stuff/fasterobj-0.tgz > > It still needs some cleaning up, but it's got almost all the functionality > I wanted. In addition to making things picklable, it has a small > optimization by combining triangles and quads when possible to reduce the > number of GL calls. > > There are three classes: OBJ (using fixed function), OBJ_array (using > vertex arrays), and OBJ_vbo (using vertex buffer objects). Additionally, any > of these can be used with or without a display list. Here's the results of > my test on some model I had lying around: > > type list? parse save load render > 1. fixed False 146 13 14 0.03fps > 2. fixed True 124 10 950 117.80fps > 3. array False 179 8 9 1.26fps > 4. array True 174 7 30 121.08fps > 5. vbo False 143 7 8 16.06fps > 6. vbo True 142 8 12 112.98fps > > #2 is the method in the original OBJ loader. The times listed under parse, > save, and load are times in milliseconds to read from the OBJ file and do > some preprocessing, pickle to a file, and unpickle from a file. The load > step also includes generating the display list, if necessary. Obviously > methods #1 and #3 render far too slow; they're just there for comparison. > > So anyway, it looks pretty good. I think that #4 or #6 would do fine for my > purposes. However, I know that people don't like to put vertex arrays and > VBOs inside display lists, so I want to know if there's some problem with > this method. I understand that putting a VBO in a display list defeats the > whole purpose of having a VBO, since you can't update it, but I imagine > you're probably not going to be doing that with OBJ models anyway. Also, > when I asked about this a few months ago, someone said that method #5 should > outperform methods #1-4, and that doesn't seem to be the case. So I might be > misusing the VBOs. > I completely would have expected the results in 1-4. However, I'm quite surprised at the vbo method 5. It should run in speed between 2 and 4. I also would have expected 4 and 6 to be much closer. How many VBOs are you using? If you switch buffer bindings a lot for each draw (like your object has 10 different parts, each with a vertex, normal, and texcoord VBO) then you *might* get results like that . . . > Any other comments welcome too! If you have any OBJ files you want me to > test, just let me know. > This is great, actually. I imagine pickling could make things much faster. Wonder why it took longer to load on 2? > -Christopher > Ian
