Re: render particle
Dave Astle <[email protected]> Tue, 07 Mar 2006 17:39:24 -0800
| Newsgroups | gmane.games.devel.opengl |
|---|---|
| Organization | Fat City Network Services, San Diego, California |
| Message-ID | <[email protected]> |
Other than distance-based attenuation, there isn't a way to change the point size within a single draw call in the fixed function pipeline*, but with a vertex shader, you can easily use one of the generic attributes to set an arbitrary per-point size value. With a shader, you should be able to easily render a large number of particles in a single call. (* - in desktop GL, anyway. OpenGL ES includes a fixed-function extension that does exactly this). Dave Astle ------------------------------------------------------------------------- Staff Engineer, ATI Research Executive Producer, GameDev.net, LLC: http://www.gamedev.net/ Four-time author, Course Technology PTR ------------------------------------------------------------------------- Balogh Péter wrote: > My main concern is the state changes, if I have to use n sizes for the > system. Because what if I have 100 particles, all with different sizes. > As far as I know, I can't render 100 particles with different sizes > unless for every particle I call > > glPointParameterfARB( GL_POINT_SIZE_MAX_ARB, fAdSize); > glBegin(GL_POINTS); > glColor4fv((float *)&ptmp->color); > glVertex3fv((float *)&ptmp->pos); > glEnd(); > > wich seems pretty expensive, considering the alternative that I could > precalculate the 100 particles to 400 vertices, while rendering huge > meshes(while the card is rendering), and after the meshes I simlpy > render the 400 vertices as a vertexarray. > > Does the POINT_SPRITE method stalls the gpu? Is there a way, to batch > the different size/color attributes with positions, and render with a > small number of render calls like huge triangle meshes? I don't really > have bus or fillrate or cpu limitation yet (lack of final concept of > visual requirements). I'm trying to find and implement the overall > cheapest particle system for few 1000 particles. > > All help appreciated! > > Peter Balogh > > Kent Quirk wrote: > >> Andras has good advice. >> >> But if you're reluctant to use OpenGL sprites because you want to use >> OpenGL 1.1, then you could also consider rendering each particle as a >> single billboarded (always facing the camera) triangle. >> >> You can render them with alpha on and use a texture with a circular >> gradient (solid in the middle, transparent at the edges). If you use >> the "Flyweight" pattern you can treat all the particles in one as >> having common attributes and minimize state changes. >> >> It's old technology, but it's been proven in many games. And if your >> target is that low, you probably want to consider it. >> >> Kent >> >> >> >> >> Andras Balogh wrote: >> >>> First, you'll probably be limited by fillrate way before you'll be >>> limited by vertex transforms. But even if not, next you'll be >>> limited by bus bandwidth, and points need 4 times less bandwidth >>> than quads. Finally, the only time you might want to micro-optimize >>> like this, is when you're competing with johnc, but then you >>> probably wouldn't need our advice ;) >>> >>> Trust me, getting rid of camera transformation is not an >>> optimization. There's so much more going on that this won't make the >>> slightest difference! I'm sure you've heard this before: "Premature >>> optimization is the root of all evil". Always go with the simplest >>> solution, and then optimize the bottleneck. It makes no sense to >>> optimize something that is not even the bottleneck! You'll end up >>> with more complicated, less flexible and probably slower code. >>> >>> Of course, sprites have their problems, like HW dependent size limit >>> (most cards max out at 64x64 pixels), but that's not a speed issue, >>> but a feature issue. >>> >>> >>> Andras >> >> >> >> >> ----- FAQ and OpenGL Resources at: >> http://www.geocities.com/SiliconValley/Hills/9956/OpenGL >> > ----- FAQ and OpenGL Resources at: > http://www.geocities.com/SiliconValley/Hills/9956/OpenGL > ----- FAQ and OpenGL Resources at: http://www.geocities.com/SiliconValley/Hills/9956/OpenGL -- Author: Dave Astle INET: [email protected] Fat City Hosting, San Diego, California -- http://www.fatcity.com --------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: [email protected] (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB OPENGL-GAMEDEV-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing).