tag:blogger.com,1999:blog-5683237053150646122.post4728232258542959148..comments2020-04-13T19:07:32.712+03:00Comments on What your mother never told you about graphics development: Particle rendering revisitedArseny Kapoulkinehttp://www.blogger.com/profile/18310595345818946666noreply@blogger.comBlogger11125tag:blogger.com,1999:blog-5683237053150646122.post-42028473189593180802011-05-05T07:41:25.363+04:002011-05-05T07:41:25.363+04:00it'a a Stateless particle system?
what about s...it'a a Stateless particle system?<br />what about state-preserving particle system, you need to store last fame particle's property(position, velocity, life...etc) to calculate this frame.<br />in dx9, need to store the particle's property into render target, and double buffer render target. i still not figure out how to pass the particle's uv with the render target.do you have any idea?<br /><br />link:http://wiki.gamedev.net/index.php/D3DBook:Dynamic_Particle_Systems#GPU_Based_Particle_Systems_.28D3D9.29yanghttps://www.blogger.com/profile/05806287294219987616noreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-61820669275663559962010-08-02T15:06:45.316+04:002010-08-02T15:06:45.316+04:00They are just world-space camera basis vectors: ca...They are just world-space camera basis vectors: camera_x_axis is the camera right vector, camera_y_axis is the camera up vector.<br /><br />Usually up vector and camera direction are set when you construct a lookat matrix for camera, and right vector can be reconstructed with a cross product from them.Arseny Kapoulkinehttps://www.blogger.com/profile/18310595345818946666noreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-6392460813643413832010-08-02T14:33:41.418+04:002010-08-02T14:33:41.418+04:00How would you retrieve the Camera_X_Axis and Y_Axi...How would you retrieve the Camera_X_Axis and Y_Axis in that first, "less trivial" method que talked about earlier of deriving the positions based on the corners' UVs?Kryzonhttps://www.blogger.com/profile/09639095293826150003noreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-36316067852002643762009-07-14T19:43:49.631+04:002009-07-14T19:43:49.631+04:000,1,2 2,3,0 is the correct set for
1 2
0 3
0,1,2...0,1,2 2,3,0 is the correct set for<br /><br />1 2<br />0 3<br /><br />0,1,2 2,1,3 is the correct set for<br /><br />0 1<br />2 3<br /><br />Basically, it depends on the way you generate your vertex positions.<br /><br />As for position declspec, I've used TEXCOORD for compatibility reasons (there's no POSITION1 on PS3), however I don't see why POSITION1 should not work.Arseny Kapoulkinehttps://www.blogger.com/profile/18310595345818946666noreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-76525941988139744292009-07-14T18:23:11.633+04:002009-07-14T18:23:11.633+04:00Shouldn't the "6 indices describing a qua...Shouldn't the "6 indices describing a quad" be (0, 1, 2, 2, 3, 0) instead of (0, 1, 2, 2, 1, 3)?<br /><br />Also, what is the correct way to specify the particle position in the vertex declaration? Is D3DDECLUSAGE_POSITION (stream 1) ok, or should one better use TEXCOORD?jarhttp://science.untergrund.netnoreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-41180878346191768772009-03-27T01:59:00.000+03:002009-03-27T01:59:00.000+03:00It is not uncommon at all to have particle texture...It is not uncommon at all to have particle textures with animation frames. It's worth mentioning as well that in those cases you might also want to do linear interpolation to get a smooth transition between frames.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-63963040803943872302008-04-17T20:17:00.000+04:002008-04-17T20:17:00.000+04:00arseny. You're right. But in my case (fixed target...arseny. You're right. But in my case (fixed target platform: nVidia 8800 + OpenGL) it seems to be working quite well. Great article, by the way!Unknownhttps://www.blogger.com/profile/13243543994809875975noreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-81235716471213969082008-04-17T20:03:00.000+04:002008-04-17T20:03:00.000+04:00david:1. You'll need vertex texture fetch, which i...david:<BR/><BR/>1. You'll need vertex texture fetch, which is not available on some SM3.0 cards (ATi), and which is not quite fast either - the latency is not hidden very well.<BR/><BR/>2. Partial texture updates may or may not be implemented on the target platform; there's some weird stuff going on there in D3D9 drivers, I'm not sure exactly though.<BR/><BR/>3. For most of effects I've implemented, keeping track of particles is actually harder than pretending that you render a completely new set. If you have particle sorting, their order changes constantly. If your particles die, or are temporarly not drawn (for example, because some SW clipping occured, or because particle is technically visible, but you discarded it because it was the farthest one, and the active particle count was beyond set limit, etc.).<BR/><BR/>In short, I don't think this is worth the trouble - I actually see no benefits at all.Arseny Kapoulkinehttps://www.blogger.com/profile/18310595345818946666noreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-2142046800395709192008-04-14T13:04:00.000+04:002008-04-14T13:04:00.000+04:00What about storing your data in a fp texture, some...What about storing your data in a fp texture, something like row1: position.x + alpha, row2: pos.y + uv0.x, row3 uv1.xy + uv0.x + temperature( for Thermal Camera), etc. Then you can have a static quad buffer in the GPU where the magnitude of the vertex is the particle number for looking up values in the data texture. The sign of the vertice is the position of the vertex on the quad ( ++, +-, --, -+) so you can calculate your billboards on the GPU. This way you should only update one texture per-frame, and only for the particles that have changed position/orientation/alpha/etc...Unknownhttps://www.blogger.com/profile/13243543994809875975noreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-13264993031098254462008-03-28T10:25:00.000+03:002008-03-28T10:25:00.000+03:00Nice. You'd probably won't pass a quaternion as th...Nice. You'd probably won't pass a quaternion as those aren't very vertex shader friendly - maybe a normal and tangent. I've implemented particle systems with arbitrary orientations and they can look great (i.e a gas planet with swirling particles with their normal facing the same direction as the surface)Nelsonhttps://www.blogger.com/profile/17812504893295150272noreply@blogger.comtag:blogger.com,1999:blog-5683237053150646122.post-64005030223559673742007-10-11T17:33:00.000+04:002007-10-11T17:33:00.000+04:00Hello Arseny, I am enjoying your blog so far.. kee...Hello Arseny, I am enjoying your blog so far.. keep up the good work.Anonymousnoreply@blogger.com