From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

User Interface

Details

Particle systems get their place in Blender in the form of a new object type "Point Cloud". It acts as the main container for particles, just like a mesh is the container of vertices, edges and faces, a curve is the container for control points and so on.

As the main method of configuration particles will use node trees. For this purpose a new node tree type for particles is added (see Animation for details). On selecting the point cloud object the node editor displays the particle node tree.

Data Management

Details

Buffers

Particle buffers need to handle large amounts of individual particles and often also create and destroy a large amount of them in each frame step. Therefore the particle buffers must be designed for scalability as well as extensibility. This is somewhat different to mesh buffers, which have a lot more internal structure (edges and faces) and usually do not change in size all the time!

Particle Attributes

Particles by default have minimal set of properties, namely location and velocity. All other properties are optional attributes and only enabled if some simulation modules require it. New particle attributes can be defined to enable advanced simulation or rendering capabilities.

Display

Details


to do
 Should display and rendering use node trees too? Or would a simpler interface be sufficient?

Drawing

Realtime drawing must display particles in a way that the information they carry (attributes) is conveyed and obvious to the user. At the same time, the display of large amount of particles should still be possible in realtime without loss of performance, so the particle representation should be kept simple.

An important feature is the OpenGL display of debugging data for particles. This includes the visualization of

  1. Particle attributes
  2. Temporary simulation values, such as forces
  3. Intermediate simulation results to aid node tree designers in debugging

Rendering

Rendering also allows different modes, depending on the complexity of particle attributes. Just like render modes, more render modes can be added by implenting a simple interface.

As a general display feature, child particles can be used to drastically increase the particle density without overhead on simulation times. These can be generated on-the-fly when drawing and rendering, so they don't need to be stored in memory all together. This means that especially rendering can make use of much more particles than would fit into memory if they were stored.


to do
 Child particles could possibly be implemented without special handling in the core system. Then this last point could also be excluded from this design and be left for a separate project.

Animation

Details

Simulation

Simulation of physical effects, boids (swarm behaviour), etc. will be possible by using a node tree. While the actual implementation of the various simulations commonly used in particle effects and their individual components is out of the scope of this design, it aims at providing a base system to start from. With just a few new features (see the details page) the node tree should be flexible enough to provide all possible effects on a modular basis, i.e. by adding new node types to the system without having to modify the base code. Interaction between different simulations is then automatically possible by using the node interface.

Keyframes

Keyframe animation is an important part of particle effects. In order to accurately define keyframes for a particle system, the edit mode tools can be used to create and move particles to the desired locations. Keyframe animation can be implemented by a node in the node tree too. That way it becomes possible to flexibly combine the animation curves with other animation components and interpolate results as required.

Caching

Caching is an integral part of the system. After calculating animation results for a specific frame in the timeline, the result is stored in a disk- or memory cache. The buffer state from this frame can then be reloaded to make realtime playback possible without having to re-calculate a simulation.