Abstract:
An architecture tangibly embodied on a computer readable medium, the architecture for creating a particle system to be used in a physical simulation, including: a plurality of particle generation modules, wherein a particle generation module generates particles in a particle system; a plurality of particle motion modules, wherein a particle motion module produces physical motion of particles in a particle system; a plurality of particle display modules, wherein a particle display module renders particles in a particle system; a plurality of target effect modules, wherein a target effect module modifies particles in a particle system to perform in a certain way when they collide with an object; and a plurality of particle data structures.

Description:
CROSS-REFERENCE TO RELATED APPLICATION 
       [0001]    This application claims the benefit of U.S. Provisional Application No. 60/974,571, filed Sep. 24, 2007, the disclosure of which is incorporated by reference herein in its entirety. 
     
    
     BACKGROUND OF THE INVENTION 
       [0002]    1. Technical Field 
         [0003]    The present invention relates to particle systems, and more particularly, to a particle system architecture for use in creating physical simulations. 
         [0004]    2. Discussion of the Related Art 
         [0005]    Particle systems are used for a variety of purposes in computer applications. Common uses include generating special effects in video games and movies, and simulating physical processes. Though the calculations behind particle systems are common and well understood, programming libraries to produce a particle system are less common. Most often, simulation programmers create the particle system code for a new application by themselves. 
         [0006]    To be useful, a particle system library needs to have links to other systems within the application. As a result, particle system libraries found in game engines include links to features such as graphics, collision detection, and game behaviors, for example. In other applications, such as physical simulation, particle systems are used but are not customizable. For example, a robot painting simulation may use particles to simulate paint covering a surface, however, the user does not have access to the underlying technology or the ability to change the particle system&#39;s effects. 
         [0007]    In most cases, a particle system is created manually by writing custom code in a programming language like C++, for example. The particle system is generally used for a specific application and is not applicable to any other. For example, a smoke simulation can be implemented using a particle system. To do this, the simulation programmer first determines an algorithm for simulating smoke using a particular particle based model. Then, the programmer writes code that encapsulates the equations of the model and applies it to an array-like data structure that represents the particles&#39; state. All programming aspects are the programmer&#39;s responsibility including allocating the memory, keeping track of the particles&#39; state, writing the algorithms for evolving the particles&#39; state over time, and determining what happens when the particles reach other objects in the simulation. There is no module or library structure to the code and any code reuse results from copying and pasting snippets from another source. 
         [0008]    Game engines sometimes include a particle system library, but these are highly variable. A sophisticated game engine may have a customizable particle system library with several modules. However, these particle systems are designed for producing graphical effects and do not have a means for producing simulated physical effects as would be desired in a simulation. For example, a particle system in a game engine might have many display parameters that control how each particle changes color over time and what graphical images to use to display the particles. 
         [0009]    Some custom simulation systems, such as a robot painting may include a particle system as their means of implementation. However, these kinds of particle systems are hardwired into the system and not accessible to a programmer. Their purpose is to perform a specific simulated activity within the context of the application. The amount of customization that the user has over the particle system depends on the specific application. 
         [0010]    Having to write a particle system using custom programming can be difficult and prone to errors. For example, since one is writing the system from scratch and time is limited, it is difficult to add new features or to make the simulations more sophisticated. As a result, hand-written particle systems tend to provide only as many functions as are absolutely needed and may leave out useful features. 
         [0011]    Particle systems in game engines vary greatly in sophistication. Some are simple Newtonian solvers that allow a particle to follow arc-like trajectories. These are not always useful in a physical simulation. Further, since even the better particle system libraries in game engines are directed to creating special effects, the programmer has few options to control the effects of the particles on other objects in the system. The particles are there to look good and provide many display and animation features. In a physical simulation, however, having the particle effect other objects, such as painting a surface, moving a turbine or transferring a liquid, is often more important. 
         [0012]    The particle systems in custom applications can be useful for their intended purpose, but are not a customizable programming system. For example, since a programmer does not have access to the application&#39;s implementation, there is no way to modify the particle simulation to have it do anything else. 
       SUMMARY OF THE INVENTION 
       [0013]    In an exemplary embodiment of the present invention, there is provided an architecture tangibly embodied on a computer readable medium, the architecture for creating a particle system to be used in a physical simulation, comprising: a plurality of particle generation modules, wherein a particle generation module generates particles in a particle system; a plurality of particle motion modules, wherein a particle motion module produces physical motion of particles in a particle system; a plurality of particle display modules, wherein a particle display module renders particles in a particle system; a plurality of target effect modules, wherein a target effect module modifies particles in a particle system to perform in a certain way when they collide with an object; and a plurality of particle data structures, wherein a particle data structure stores and maintains a state of particles in a particle system, wherein a particle system for a physical simulation is created by selecting as many of the modules and data structures needed for the physical simulation and combining the selected modules and data structures into a procedure to be run on a computer. 
         [0014]    A particle data structure includes a first group of particle data that is updated during the physical simulation and a second group of particle data that is held constant during the physical simulation. 
         [0015]    At least two of the particle data structures have different particle data formats, and wherein the particles in the first groups of the at least two particle data structures can be transferred from one of the particle data structures to another. 
         [0016]    The particles in the first groups of the at least two particle data structures are transferred from one of the particle data structures to another via a target effect module or a particle motion module. 
         [0017]    The target effect module or the particle motion module effectuates the transfer of a particle in a first location in the first group of a first one of the at least two particle data structures to a corresponding first location in the first group of a second one of the at least two particle data structures by: deleting a particle in the corresponding first location in the first group of the second one of the at least two particle data structures and replacing it with the particle in the first location in the first group of the first one of the at least two particle data structures. 
         [0018]    The architecture further comprises a means for enabling the creation of new particle generation modules, particle motion modules, particle display modules, target effects modules and particle data structures. 
         [0019]    The plurality of particle generation modules, plurality of particle motion modules, plurality of particle display modules, plurality of target effect modules and plurality of particle data structures are stored in a library on the computer. 
         [0020]    When the procedure is run on the computer, the physical simulation is rendered on a display connected to the computer. 
         [0021]    The physical simulation is a multi-body physics simulation. 
         [0022]    The architecture further comprises a plurality of placer functions, wherein a placer function identifies a location at which a particle is generated. 
         [0023]    The placer functions comprise point placers, shape-based placers, volume placers, sphere placers, and area placers. 
         [0024]    In an exemplary embodiment of the present invention, a method for creating a physical simulation that includes a particle system, comprises: accessing a particle system library to create a particle system to be included in a physical simulation, the particle system library including: a plurality of particle generation modules, wherein a particle generation module generates particles in a particle system; a plurality of particle motion modules, wherein a particle motion module produces physical motion of particles in a particle system; a plurality of particle display modules, wherein a particle display module renders particles in a particle system; a plurality of target effect modules, wherein a target effect module modifies particles in a particle system to perform in a certain way when they collide with an object; and a plurality of particle data structures, wherein a particle data structure stores and maintains a state of particles in a particle system; retrieving modules from the particle system library that are needed to create the particle system in the physical simulation; composing the physical simulation to include the particle system by using the retrieved modules; and executing the physical simulation after it has been composed. 
         [0025]    The method further comprises displaying the composed physical simulation as it is being executed. 
         [0026]    In an exemplary embodiment of the present invention, a system for creating a physical simulation of three-dimensional (3D) graphical objects, comprises: an input that receives user input; a memory that includes a particle system library and program code for physically simulating 3D graphical objects, the particle system library including: a plurality of particle generation modules, wherein a particle generation module generates particles in a particle system; a plurality of particle motion modules, wherein a particle motion module produces physical motion of particles in a particle system; a plurality of particle display modules, wherein a particle display module renders particles in a particle system; a plurality of target effect modules, wherein a target effect module modifies particles in a particle system to perform in a certain way when they collide with an object; and a plurality of particle data structures, wherein a particle data structure stores and maintains a state of particles in a particle system; a processor that executes the program code for physically simulating the 3D objects; and a display that displays the 3D objects as it is being physically simulated. 
         [0027]    The 3D objects comprise a particle system. 
         [0028]    The foregoing features are of representative embodiments and are presented to assist in understanding the invention. It should be understood that they are not intended to be considered limitations on the invention as defined by the claims, or limitations on equivalents to the claims. Therefore, this summary of features should not be considered dispositive in determining equivalents. Additional features of the invention will become apparent in the following description, from the drawings and from the claims. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS  
         [0029]      FIG. 1  is a flow diagram of a method in accordance with an exemplary embodiment of the present invention; 
           [0030]      FIG. 2  is an example particle system; 
           [0031]      FIG. 3  is a set of modules, in accordance with an exemplary embodiment of the present invention, that implements the simulation shown in  FIG. 2 ; 
           [0032]      FIG. 4  is a set of classes, in accordance with an exemplary embodiment of the present invention, by which the modules in  FIG. 3  may be defined; 
           [0033]      FIG. 5  is a set of procedures, in accordance with an exemplary embodiment of the present invention, that can implement a means for satisfying the conditions of a physical simulation; 
           [0034]      FIGS. 6A-6C  show a set of classes, in accordance with an exemplary embodiment of the present invention, that can implement a means of simulating the effects of the example shown in  FIG. 2  with the class definitions in  FIG. 4 ; 
           [0035]      FIG. 7  is an initialization procedure, in accordance with an exemplary embodiment of the present invention, for assembling the modules in  FIG. 3  using the class definitions of  FIGS. 6A-6C ; and 
           [0036]      FIG. 8  is a block diagram of a system in which exemplary embodiments of the present invention may be implemented. 
       
    
    
     DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTS 
       [0037]    An exemplary embodiment of the present invention is directed to an architecture for creating a particle system that can be used in a physical simulation such as multi-body physics. The present invention provides a general library of particle generators, motion solvers, displays, and effects that can be composed for a given application. 
         [0038]    The architecture divides the particle system into four modular components. In principle, it is possible to exchange modules of the same type but with different functions to produce different particle behavior. The modules are: particle generation, particle motion, particle display, and target effect. Modules are implemented using object-oriented programming style. Each module is an object with data and methods. Key methods are inherited from a base class and must be implemented, but the modules can have individual methods and data that are specific to the kinds of tasks they perform. 
         [0039]    A description of core aspects of the architecture will now be provided. 
         [0040]    Particle Data Format 
         [0041]    To accommodate the different module implementations, particles are given a common data format that is passed between modules as different tasks need to be accomplished. At minimum, the particle data must include a 3D position but additional, independent data can be included to address the concerns of a given module. For example, if the particle moves in a ballistic trajectory, the motion module needs each particle to have a velocity vector. If the particle is moving to follow a surface (such as running fluid), then the motion module needs a velocity and it also needs to know the model of the surface being followed and the surface normal at each particle&#39;s current position. The particle data is created as header information and an array of particle state. The header information contains the size of the particle data as well as the order and type of each data field entry. Modules use the header information to determine the offsets into the particle data for each field that it needs to perform computation. The maximum number of particles for a given set of modules is determined by the size of the array. The total size of the array as well as the number of particles currently active is maintained in the particle data as well. The size of the array can be kept constant or can be dynamically adjusted to accommodate different numbers of particles. 
         [0042]    Particle data is broken into two groups. The first group is updated during simulation and the other is held constant for display purposes. In a simulation environment, the calculations performed for the simulated behavior can occur at a different rate than the display is refreshed. For example, the simulated behavior might be updated at a rate of 5 ms per step to keep up with an external process like a controller. A typical display refresh rate can be 20 frames per second that computes to 50 ms per frame and thus can be ten times longer than the simulation step. The behavior of the particles is part of the simulation so they must be updated at the simulation&#39;s update rate so whenever the display is about to be updated, the simulation process is suspended and the particle data is copied over into the second array that only contains information that the particle display requires. After copying is complete, the simulation is resumed and proceeds at its own pace. 
         [0043]    A transferred particle may have a different data format and behavior. This is so because a first particle data structure (where it originates) and a second particle data structure (where it ends up) can possess a different set of data elements with different data types and behaviors. 
         [0044]    Particle Generation Module 
         [0045]    Particle generation is concerned with how particles are produced and inserted into the system. The simulation system calls the particle generation modules every time step telling the generators the current simulation time. In a typical situation, particles are added to the system at some rate like a fixed number of particles per second. The particle generation module allows any criteria to be used to determine how many particles to add. A new particle is added to the system by storing its initial state in the next free position in the particle array. Particles in the array are kept contiguous for the benefit of other modules. Particles will typically have a limited duration so that the particle array does not overflow. 
         [0046]    Though particle generation modules are specifically concerned with creating particles, other modules are allowed to add and remove particles from the particle data. For example, when a target effect module is used, it can remove a particle from the data to act as though the particle was absorbed by an object. 
         [0047]    Shape-Based Placer Function 
         [0048]    Generated particles are created with a starting location. The particles might emanate from a single point, but it is also possible that the simulation calls for particles to form along a line, surface, or within a volume. To assist the simulation programmer, the invention provides shape-based placer functions. The geometry of space where particles form is provided to the shape placer. The placer will automatically divide the geometry into a set of points, lines, triangles or tetrahedrons to convert the geometry into simpler shapes. For example, a circular area is converted into a set of triangles whereas a spherical volume is segmented into tetrahedrons. The simulation programmer assigns the shape placer with a particle generation module that will then generate points within that shape&#39;s geometry. 
         [0049]    The shape-based placer may be an area placer, a sphere placer or a volume placer, for example. 
         [0050]    Particle Motion Module 
         [0051]    Particle motion modules produce the physical motion behavior of each particle. The simulation system calls the motion modules every time step. Motion modules use the rules of physics to compute particle positions over time. Motion modules can also apply other rules needed by the application. For example, a ballistic motion module will update each particle to follow a falling path dictated by the particle&#39;s current velocity and gravity. A misting motion module can have particles move about in random directions like a cloud. A more complex motion module can have particles follow a surface such as water drops running over the side of a container. The motion module is responsible for creating and maintaining meta-data for the particles&#39; positions. For example, the simulation&#39;s collision detection algorithm will normally need to know bounding box information to compute collisions effectively. 
         [0052]    Target-Effect Module 
         [0053]    The target effect module is different from the other two simulation based modules in that it is not called directly in the simulation step but instead is called indirectly when there are collisions. The simulation system is responsible for determining when objects come into contact via its collision detection system. Collision detection for particles is computed in aggregate to reduce computation costs. Groups of particles are treated as a single aggregate object and collision detection occurs between the aggregate&#39;s bounding region and other objects in the system. When a collision is detected between a group of particles and another object, the system refines its analysis by computing whether each individual particle in the aggregate collides with the other object. When a particle is determined to collide with an object, the object&#39;s shape description is checked for target effect modules. The system calls the target effect module for each collision. To reduce computation costs, it is also possible to record when several particles collide with corresponding objects at the same time and call the target effect modules once per collided object or once per simulation step. 
         [0054]    The role of the target effect modules is to modify the particle or perform another simulation behavior when particles collide with things. For example, a target effect can cause the collided object to impinge a force on the collision object like wind striking a propeller. Another effect would be to have the particle bounce off of the object. Still another effect would be to have the object change the color of the location of the collision. This would simulate the effect of spraying paint on the object. The target effect could also record the collision with or without taking actions. 
         [0055]    Target effect modules can be complex. For example, the paint spraying function mentioned above requires a method for recording where particles have struck the object over the object&#39;s lifetime. This can be implemented as a texture map that is effectively a set of bitmaps that are positioned in 3D space relative to the surfaces of the 3D object. The bitmaps are dynamically allocated for the object and modified during simulation. A second bitmap is stored for rendering the object because rendering and simulation can occur at different rates. 
         [0056]    Particle Display Module 
         [0057]    The particle display module is executed by the rendering part of the simulation application and not during the simulation step. The display module&#39;s role is to use the drawing functions provided by the simulation application to render the particles in some way. A particle array can be rendered as individual points, or a module can compute a figure or graph from the particles and draw something more complicated. For example, the module might compute the bounding region or density of the particles and render a cloud-like haze where particles are located. 
         [0058]    An example of the above-described particle system architecture as it is applied to the creation of a physical simulation, will now be described. 
         [0059]    In creating a physical simulation, the simulation programmer can provide as many different modules as is demanded by the application. The architecture is designed to allow combinations of modules to be applied to as many sets of particle data as needed. For example, the programmer can combine a ballistic motion module with a painting target effect and a bouncing reflection target effect. This would cause particles to bounce off an object but leave a mark wherever they hit. The programmer might combine a bitmap display module with a tail display module to render particles as icons with a trailing path following behind like streamers. 
         [0060]    A method for creating a physical simulation in accordance with an exemplary embodiment of the present invention is illustrated in  FIG. 1 . As shown in  FIG. 1 , a simulation programmer first conceptualizes a simulation that they want to generate ( 110 ). For example, the simulation programmer may decide to generate the simulation shown in  FIG. 2 . 
         [0061]    In the simulation shown in  FIG. 2 , a particle system is used to simulate a liquid falling and striking a surface. The liquid flows on the surface until it reaches the edge where it falls off again. To build this scenario, the programmer accesses a particle system library, which includes, for example, all the above-described modules, and retrieves the modules to create the simulation ( 120 ). The programmer then composes the simulation with the retrieved modules ( 130 ). 
         [0062]    For example, as shown in  FIG. 3 , the programmer uses two particle data arrays, one for falling particles  305  and the other for particles running on the surface  310 . The falling particles  305  use a ballistic motion module  315  and the running particles  310  use a surface-following module  320 . A point-based particle generator  325  creates new particles above the surface and puts them into the falling particles array  305  so that they will start falling. A condensing target effect  330  occurs whenever any of the ballistic particles collide with the surface of the object as determined by a collision detection system  335 . The target effect  330  removes the colliding particles from the falling particles array  305  and adds a new particle to the surface particles array  310 . The position property of the new particle is set to match the location of the removed ballistic particle exactly. The condense effect  330  also records the model parameters of the surface such as its normal vector so that the surface motion module  320  can compute properly. The surface motion module  320  moves its particles along the surface but it can also detect when a particle falls off. For example, the particle can drop when the surface normal angle points downward instead of up. At that point, the surface motion module  320  transfers the particle back to the falling particles array  305 . It does this by adding the particle to the falling particles array  305  and deleting the particle from the surface particles array  310  at the same location. The application shown in  FIG. 3  also has display modules  340   a  and  340   b  for rendering the particles. In this case, the display modules  340   a  and  340   b  can render the particles as a set of points. The application shown in  FIG. 3  further includes a point placer  345  (i.e., a shape-based placer) that is a starting location for the particles. 
         [0063]    The composed simulation is then executed ( 140 ). For example, a computer runs the simulation and it is displayed on a screen thereof. 
         [0064]    A description of pseudocode that can implement the simulation in  FIG. 2  is now presented. 
         [0065]    The entire implementation of the simulation system is not shown, however, elements of the simulation system that interact with the particle system are described. The simulation system uses two processes: 1) the main process that computes the state of the simulation objects including the particle system—this process also computes collision detection of the particle objects with other objects in the system such as a surface; and 2) a second process that displays the results of the simulation system. 
         [0066]    A set a possible object-oriented class definitions for the particle system is shown in  FIG. 4 . The “particle_system” class is provided for particle data array representation. The “generate_module,” “move_module,” “effect_module,” and “display_module” classes are used to define the generate, move, effect, and display modules respectively of the particle system. The programmer would define new sub-classes inheriting from these definitions as needed to create modules with new capabilities and implementations. The “geometry_handler” class is used to define a shape-placer function. 
         [0067]    The procedures listed in  FIG. 5  show implementations of elements of a simulation system. Normally, these procedures would be internal to the system. The “simulation_time_step” procedure implements the system&#39;s calculation during a single simulation time step. It shows how the system will call the particle system&#39;s motion and generation modules. The “simulation_collision” procedure implements the system&#39;s response to collision detection. The simulation system uses a method to determine when the regions of simulated objects collide and calls the procedure for each pair of colliding objects. The implementation of the simulation_collision procedure shows how it will call the target effect modules of the particle system. The “display_draw” procedure implements the simulation system&#39;s graphical display. The simulation system would call the display_draw procedure every time the contents of the graphical display is to be refreshed. The display_draw procedure shows that the simulation system calls the particle system&#39;s display modules. 
         [0068]    The sub-classes shown in  FIGS. 6A-6C  are used to implement modules for the particle system. The sub-class “point_geom” in  FIG. 6A  inherits the geometry_handler class and is used to specify a single point geometry. When invoked, the point_geom sub-class returns a single point. More complex geometry handler implementations can return points within a line, in a plane, or in a volume. The sub-class “fixed_rate” in  FIG. 6A  inherits the generate_module class. The fixed_rate sub-class implements a point generator for the particle system. The fixed_rate implementation creates new points at a fixed rate over a period of time. The fixed_rate sub-class uses a geometry handler to determine where the points are placed in the particle system. The sub-class “ballistic” in  FIG. 6A  inherits the move_module class. The ballistic sub-class implements a falling motion method that updates the position of particles based on Newtonian motion under a constant gravitational force. The sub-class “follow_surface” in  FIG. 6B  inherits the move_module class. The follow_surface sub-class implements a different way to move particles than the ballistic sub-class. The follow_surface sub-class updates the position of particles so that they track the position of a modeled surface. The sub-class uses the object with which the particle collides to determine the orientation of the surface at the position of the particle and moves the particle to follow the surface. It also detects when the particle moves off the edge of the surface and transfers any particles that fall off the edge to a different particle data array. The sub-class “condense” in  FIG. 6C  inherits the effect_module class. The condense sub-class implements a target effect that transfers particles that collide with a surface to another particle data array. The sub-class “draw_dots” in  FIG. 6C  inherits the display_module class. The draw_dots sub-class is used to draw particles as dots in a two-dimensional graphical display. 
         [0069]    The “set_up_simulation” procedure in  FIG. 7  represents a programmer-supplied procedure that the simulation system calls to initialize the configuration of the simulation. The set_up_simulation procedure is creating objects that correspond to the objects depicted in  FIG. 3  and configuring each object to reference the others in the same manner as  FIG. 3 . By creating objects that represent the actions of falling and following a surface and the other associated modules, the programmer creates a particle simulation that exhibits the behavior shown in  FIG. 2 . The procedure creates each object in turn by instantiating the corresponding sub-classes. The instances are then connected to one another by storing references to instances to the appropriate objects. Other data such as floating point numbers and vectors are also configured to conform to the desired properties of the particle simulation. 
         [0070]    A system in which exemplary embodiments of the present invention may be implemented will now be described with reference to  FIG. 8 . 
         [0071]    As shown in  FIG. 8 , a 3D physical simulation system  800  includes a processor  804  coupled to a display  802  and a memory  806 . The memory  806  may contain a particle system library, which includes the modules of the above-described particle system architecture, for example. The memory  806  may further include a program with program code for simulation of 3D graphical objects. The program may provide a 3D graphical editor as well as an underlying physics engine for producing the simulation. The processor  804  executes the program code and displays the output on the display  802 . 
         [0072]    It is to be understood that although particle systems, in general, are not new, our architecture for specifying a particle system within a physical simulation environment is new. Existing particle system libraries such as those found in game engines are missing features that are necessary for simulation. Likewise current particle simulations that use a particle system do so through custom implementation and not by using a modular library. 
         [0073]    Since the simulation of the particle&#39;s state can occur at a different rate than the display of particles to the user, our system needs to cache the particle data. Both having a cache for the particle state array as well as the texture map data for simulating painting, which are needed for our simulation, are not available in current systems. 
         [0074]    Our system architecture is divided into the four types of modules for generating particles, moving particles, drawing particles, and handling targets effects. Other systems are concerned mostly with moving and drawing particles. Outside of simulation, particle creation and target handling generally not considered, since in pure graphical animations, the particles are created for the purposes of display and perform no lasting modifications on other objects. 
         [0075]    Being able to mix and match modules as described for the present invention is a new feature for simulation particle effects. Normally, the simulation programmer creates the particle system from custom code. Within our module system, however, it is possible to create useful behaviors by combining existing modules as well as by writing ones own modules for the system. 
         [0076]    It is to be understood that the architecture described herein is generally designed for specifying a particle system. However, our architecture may be applicable to other kinds of simulations that are similar to those for particle systems. For example, in a finite-element analysis (FEA), the elements in the analysis can be considered particles. By using the invented architecture, the FEA could include more dynamic behaviors such as adding and removing objects from the simulation and having more options for displaying the results of the simulation. 
         [0077]    It is to be understood that the present invention may be implemented in various forms of hardware, software, firmware, special purpose processors, or a combination thereof. In one embodiment, the present invention may be implemented in software as an application program tangibly embodied on a program storage device (e.g., magnetic floppy disk, RAM, CD ROM, DVD, ROM, and flash memory). The application program may be uploaded to, and executed by, a machine comprising any suitable architecture. 
         [0078]    It should also be understood that because some of the constituent system components and method steps depicted in the accompanying figures may be implemented in software, the actual connections between the system components (or the process steps) may differ depending on the manner in which the present invention is programmed. Given the teachings of the present invention provided herein, one of ordinary skill in the art will be able to contemplate these and similar implementations or configurations of the present invention. 
         [0079]    It is to be further understood that the above description is only representative of illustrative embodiments. For convenience of the reader, the above description has focused on a representative sample of possible embodiments, a sample that is illustrative of the principles of the invention. The description has not attempted to exhaustively enumerate all possible variations. That alternative embodiments may not have been presented for a specific portion of the invention, or that further undescribed alternatives may be available for a portion, is not to be considered a disclaimer of those alternate embodiments. Other applications and embodiments can be implemented without departing from the spirit and scope of the present invention. 
         [0080]    It is therefore intended, that the invention not be limited to the specifically described embodiments, because numerous permutations and combinations of the above and implementations involving non-inventive substitutions for the above can be created, but the invention is to be defined in accordance with the claims that follow. It can be appreciated that many of those undescribed embodiments are within the literal scope of the following claims, and that others are equivalent.