3 - Building a Better System
This page contains suggestions about building a better TP system.
Rename your TP
Better to name it something distinct and relevant to what it is doing:
e.g. "TP Building Destr", "TP Solar System", "TP Magic", "TP Ocean", etc.
Also, use this MXS command to update the TP material name to be the same name as the TP itself (to avoid possible material name conflicts):
$.material.name = $.name
Use ONE Dynset and Group to contain your system
When building a complex system, create a single top-level group to contain all sub-groups. Put any Data Channels (DC) on that top-level group, so all kids can have the same DC indicies.
Create a top-level dynset for the rules of the system.
These two habits will make your systems more modular, portable, and easier to insert into other systems.
Organization is a BIG deal when dealing with complex systems.
Use as few groups as possible
Keep the number of groups (and rules) to a minimum and the whole system will be easier to manage.
Instead of creating a new group anytime you want specific control over a group, consider adding a "tag" to the particle, preferably with both a Memory and Data Channel.
Then for any rule where you want to affect a specific set of particles you can test their tag.
Storing the tag in both Memory and DC means you can access the tag via either method, and the DC tag value will be recorded over time into the cache for post-cache access.
Apply values at birth when possible
Apply all possible values at birth – anything that does not have to change (shape, size, scale).
This lightens the load on the system by only applying values once instead of every sample.
Note: assigning the mesh every sample will not inflate the cache size, unless the mesh is animated or changing over time (including vertex color changes). This will lead to a much larger cache file size.
Apply simple shapes post-cache
Particle shapes like raindrops, gravel or other non-collision geo should be applied post-cache as this will save considerable space (e.g. 40Gb→8Gb).
Obviously this is not always possible, especially if the particle is involved in an SC sim.
Limit Use of PSearch and PPassAB
PSearch and PPassAB can require large amounts of processing power and time. Use them sparingly and control their On values to fire only at specific times.
Avoid using the "All" option in PPassAB since this compares each and every ParticleA against each and every ParticleB. Better to use the Distance limit when possible.
Also consider firing them every X frames by using a Counter set to Loop.