POV-Ray : Newsgroups : povray.advanced-users : Yet another particle system... : Yet another particle system... Server Time
29 Jul 2024 10:19:29 EDT (-0400)
  Yet another particle system...  
From: Raphael Quinet
Date: 6 Jun 2002 12:50:31
Message: <pan.2002.06.06.16.50.29.747353.12771@gamers.org>
Hi everybody!

I have been working on a POV particle system some time ago.
Unfortunately, my main hard disk crashed last month and I could not
recover these include files from my backups.  So I spent some time
re-writing it from scratch and it starts being usable again.  It uses
several features from POV-Ray 3.5 beta, so it will not work with 3.1
or with MegaPov (although it could work with MegaPov if some macros
are adapted).

Now the system is almost ready for beta-testing.  If you want to be a
beta-tester, I give you the opportunity to play with my particle
system but I expect something back from you: bug reports, comments,
suggestions for improvements, nice example scenes, and so on.  I do
not know how much time I will be able to spend on this (I also have a
life) so I make no promises about what will work or when it will work.
But if this is OK for you and you are serious about beta-testing this
stuff, then please send me an e-mail and I will tell you how to get
the file (currently, everything is in one include file).  Some parts
of the API may change during the testing period, so you should
probably not expect to create anything really serious with this file.

If everything works, I will soon post a first animation that I created
with this system in the group povray.binaries.animations.

Here is a list of features:
- Free for commercial or non-commercial use, including distribution of
  modified versions.  No credits required in scenes using this file.
- Very flexible physics system using a procedural API similar to the
  "Particle System API" described on http://www.cs.unc.edu/~davemc/Particle/
  although this one is entirely based on the POV SDL and supports additional
  features such as springs between particles, orientation/spin, etc.
- Variable time step allowing a greater precision or faster speed; automatic
  adjustment during animation to match the timing of the frames.  The number
  of iterations is decoupled from the number of frames, so it is possible to
  generate a preview animation with less frames.
- Can be used for still images, animations and cyclic animations.
- For testing or for special effects, it is possible for all particles to
  leave a visible trace of their path (using cylinders or a sphere_sweep).
- The particles can be generated by different types of sources: simple shapes
  such as disc, box and others, or inside any solid POV object, or on the
  surface of any POV object.
- Any transformation can be applied to the sources, so they can move freely.
- For an animation, the particles are generated from the source(s) at a
  specified rate even if the time step or number of frames changes.
- The particles can bounce or glide on the surface of any object.
- A simple model of contact forces on the surface of an object allows to
  create some effects such as dripping water (water drops under an object).
- It is possible to have several particle systems in one animation.  A
  particle from one system can become a source for another system or can
  trigger a new source when it hits something.  This can be used to create
  a splash in the water after an impact from a particle or to have smoke
  trails following several moving particles.
- Many forces and actions can be applied to all particles or only to the
  particles that are in a specified region of space.  For example, particles
  falling into the water will be subject to different conditions (viscous
  drag) than the ones that are moving in the air.
- Because everything is based on a procedural API, it is possible to change
  almost anything in the scene during the simulation: add or remove sources,
  change the gravity, wind or other forces, freeze or slow down the system...
- The procedural API could easily be integrated into POV-Ray itself: most SDL
  macros could be re-written as internal functions for greater speed.  The
  syntax could even be the same as the current one.

Things that are still missing:
- I still have to add some macros for simulating complex behaviours: following
  some particles, trying to increase or decrease the average distance between
  the particles in a given neighbourhood, etc.  I am planning to implement
  some of the "boids" behaviours.
- The current system uses a very simple integrator (Euler's method).  This is
  fine for most simple cases but it does not work well if very stiff springs
  are used (the system becomes unstable).  I should use a better integrator
  (Heuns, Midpoint, 4th order Runge-Kutta, ...) but re-evaluating the forces
  and velocities at several points in time is not easy in a system based on a
  loop that calls several macros.  Maybe I should merge pps_move() into
  pps_iterate() and then tell the user that the time may go back and forth
  during the iterations.  Suggestions are welcome...
- I have to add some example scenes.  I need more examples of materials that
  can be used for the particles in order to simulate fire, smoke, etc.
- The only documentation available for the moment is in the include file
  itself (lots of comments).  I should write a separate documentation file.

Note that due to the hard disk crash that I experienced, I am
currently not able to update my web site (as listed in my signature)
so you will not find any POV-Ray stuff there, yet.


--
http://www.gamers.org/~quinet/


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.