ThinkingParticles 6.6
Welcome
Blade: Trinity image courtesy of Digital Dimension ©2004 New Line Cinema - All rights reserved.
Thank you for purchasing thinkingParticles 6 for 3ds Max. thinkingParticles 6 is
the ultimate rule based particle system for 3ds max, offering unparalleled power
to the user. thinkingParticles 6 is a completely new class of rule-based particle
systems for 3ds Max. When this type of particle system is compared to an eventbased particle system, (which works on triggers and time dependent events)
you'll find many unique advantages within thinkingParticles 6's rule-based logic,
which is free from normal time-based constraints and instead applies simple
behaviors. These behaviors govern all aspects of a particle's motion, life, death,
and collisions in a true non-linear fashion. We hope you find that by using
thinkingParticles 6, you can create all the incredible effects you were hoping for,
but have been limited previously by existing technologies.
thinkingParticles is under constant development and we need your help to
improve it. We love to hear from our customers and will always answer your
email. It doesn't matter if it's a new idea, a bug, or you just want to give us your
opinion. Tell us what you think and what you would like to see in upcoming
releases.
thinkingParticles 6 may seem a bit daunting to new users as the particle system
is radically different from other ones available. However, this difference is the
source of its greatest benefit - thinkingParticles 6 lets you build your particle
systems so they are not event-based - rather, they are based on rules and
conditions and not tied to other time-based factors. So it is highly recommended
that you go through the Introduction, work through the tutorials and watch the
training videos so that the ideas behind thinkingParticles 6's design and use
become clearer to you. Be aware that thinkingParticles 6 is an exceptionally
powerful tool that offers many new concepts that you might not have seen
before. Stick with this manual and try to work through it in easy stages - don't
make the mistake of trying to learn everything at once. The more you experiment
with thinkingParticles 6, the more obvious its operation will become.
This reference guide is organized mainly by functional areas:
For new users of thinkingParticles 6, the best place to begin is the
Introduction. Here you'll get a good background look at how this
sophisticated particle system works and the thought processes you must go
through when working with this complex plug-in. It is divided into multiple
sections to accommodate all of the various important aspects of the
thinkingParticles 6 particle system. It is strongly recommended that you go
through these sections prior to doing the main tutorials.
For specific information about thinkingParticles 6's various controls,
operators and settings, you should go to the Reference Section. This
section will give you detailed explanations of what each component within
the thinkingParticles 6 user interface does, and how each one relates to each
other and the entire system.
Finally, within this document is a complete set of Tutorials, sample files
and video training material.
And for those users looking for quick links within this document, here is a list of
common topics you will regularly reference when using thinkingParticles 6.
Several of the more common plug-in components that make up thinkingParticles
6 can be accessed in the following locations:
The thinkingParticles 6 Interface
Particle Group Tree View
DynamicSet Tree View
Wire Setup View
Create Rollout
Parameter Rollouts
Dynamic Simulation Concepts
Initiators
Keyboard Shortcuts
©2017, cebas Visual Technology Inc.
Important Note
If you are in the middle of a project or an ongoing production that is running
smoothly, you should NOT install an update or Major Release until after the
project is finished. After the project is finished you can then upgrade to the latest
Service Pack or Major Release. It is unlikely that dramatic changes will happen
between the releases of Service Packs or Major Releases, however, it is best not
to switch versions in mid-stream.
cebas VISUAL TECHNOLOGY Inc. cannot guarantee 100% rendering or
simulation compatibility between different Service Packs or major Releases.
Program fixes or enhancements in this Service Pack or Major Release might
correct rendering mistakes that went unnoticed within your project, so update
and install at your own risk.
IT IS YOUR RESPONSIBILITY TO BACKUP PREVIOUS VERSIONS OF
thinkingParticles to GUARANTEE IDENTICAL RENDERING RESULTS
WHEN RENDERING OLDER PROJECTS. IF YOU LOSE YOUR BACKUP
COPIES YOU MAY GET PREVIOUS BUILDS OF thinkingParticles
DIRECTLY FROM CEBAS, AN ADDITIONAL RECOVERY CHARGE MAY
APPLY FOR OUTDATED BUILDS.
ThinkingParticles 6.6
Installation
thinkingParticles is installed with the help of the Microsoft Installation System
that comes as standard with every newer Windows release. Windows XP, Vista
and Win 7 is using this installation system to handle patches and installations of
Windows applications.
The thinkingParticles installer is available in several versions every 3ds
Max/Design has its dedicated installer either as a 32-Bit installer, only or as 64bit installer ! Multiple parallel installs are supported,
thinkingParticles may use the NVIDIA PhysX Dynamics Engine, the system
drivers for this dynamics engine have to be installed separately; before
thinkingParticles may be used with it. The tested and approved thinkingParticles
6 NVIDIA System Drivers come with the thinkingParticles installer or are
already installed by 3ds Max.
Important note for 3ds Max 2013 and Later
From 3ds Max 2013 onwards, thinkingParticles 6 will be installed through cebas'
Autoupdate software delivery system. cebas Product Manager is an online
software installation system that automatically keeps track of new builds and
automatically archives all versions it downloads and installs. Check the windows
help that comes as part of cebas Product Manager to learn more about it.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
License Agreement
cebas VISUAL TECHNOLOGY Inc. End User License Agreement (EULA) for
thinkingParticles 6
IMPORTANT -- READ CAREFULLY:
This CEBAS End User License Agreement ("License Agreement") is a legal
agreement between you (either an individual or an entity) and cebas VISUAL
TECHNOLOGY Inc. a company under Canadian law with residence in
Victoria,BC Canada. These terms also apply to any cebas Visual Technology Inc.
. updates,
. Internet-based services, and
. support services
for this software.
BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO
NOT ACCEPT THEM, DO NOT USE THE SOFTWARE. INSTEAD,
RETURN IT TO THE RETAILER FOR A REFUND OR CREDIT.
ACTIVATED AND REGISTERED SOFTWARE WILL NOT BE REFUNDED.
AS DESCRIBED BELOW, USING THE SOFTWARE ALSO OPERATES AS
YOUR CONSENT TO THE TRANSMISSION OF CERTAIN COMPUTER
INFORMATION DURING ACTIVATION, VALIDATION AND FOR
INTERNET-BASED SERVICES. IF YOU COMPLY WITH THESE LICENSE
TERMS, YOU HAVE THE RIGHTS BELOW FOR EACH LICENSE YOU
ACQUIRE.
***************************************************************************
NOTE, THIS PRODUCT MUST BE REGISTERED AND ACTIVATED
BEFORE YOU CAN USE THE SOFTWARE
***************************************************************************
1. General
This is a license agreement and NOT an agreement for sale. Under this contract
cebas VISUAL TECHNOLOGY Inc. grants to you a non-exclusive license to
use thinkingParticles 6 as long as you are in good standing with the subscription
payments, which is software and documentation. thinkingParticles 6 itself as
well as the copy of thinkingParticles 6 or any other copy you are authorized to
make under this contract remain the property of cebas Visual Technology Inc. at
all times.
2. Use of thinkingParticles 6
(1) cebas VISUAL TECHNOLOGY Inc. grants you a nonexclusive,
nontransferable license to use thinkingParticles 6 and its manual and
other accompanying printed material and "online" or electronic
documentation with equipment owned by you or under your control,
according to the terms and conditions of this Agreement. This
Agreement permits a single user to install and use thinkingParticles 6 on
only one computer at one location at any one time, as long as the user is
in good standing with subscription payments.
(2) If thinkingParticles 6 is identified as a demonstration, evaluation, or
NFR version, you may use it only for the purpose of commercial
evaluation and demonstration. Such licenses are generated for a specific
fixed time period. After a NFR license has been expired, all related
documentation and data must be destroyed or sent back to cebas
VISUAL TECHNOLOGY Inc. or the dealer who handled the NFR
version. You may not use it for commercial, professional, or for-profit
purposes.
(3)Automatic Update. thinkingParticles 6 may periodically check with
cebas Visual Technology Inc. for updates and service packs. If found,
these updates and service packs might be automatically downloaded and
installed on your licensed system. To use this service you must be
connected to the Internet and be fully registered with http://cebas.com.
This service is offered free of charge by cebas Visual Technology Inc,
however client side Internet access and service costs may apply.
Because of the free nature of this service, there is no guarantee
whatsoever related to its availability, functionality and features. This
Automatic update internet service is offered "AS IS" and it is your sole
responsibility to backup and maintain copies of thinkingParticles 6.
(4) If moskitoRender is identified as EDU, Personal or Not for
Commercial Use version, you may only use it for the purpose of
learning the software - or in any other form of educational means or
environment. In no way does this license permit you, or the entity who
bought this license, to use this software to gain any profit from
(5) If thinkingParticles 6 is identified as a subscription version, you may
use thinkingParticles 6 according to the rules outlined in this document
as long as you are
a) in good standing (paid subscription fee for one year)
b) legally own an original (initial) subscription license
3. Multiple use and network operation
If this Software is a Network Version, you may use it only over an
internal local area network environment with the cebas VISUAL
TECHNOLOGY Inc. Floating License Tool, and you may install and
operate thinkingParticles 6 on a single server computer in a single
location which may be accessed by other computers, or on an individual
computer, as a multiple-user installation with either:
(1) The maximum number of concurrent users being one (1), so that
multiple individuals may access or use thinkingParticles 6, but that only
one person at a time may do so, or
(2) The maximum number of concurrent users being more than one (1),
in which case you must purchase single seat licenses for each additional
concurrent user.
The use of software or any device that reduces the number of
computers/devices which access thinkingParticles 6's licensing tool
when used in a Server configuration may interfere or damage the
licensing tool or prevent thinkingParticles 6 from running properly. In
no case will such a device "reduce" or prevent you from buying the
number of single seat licenses required.
4. Transfer
(1) You may not rent, lease, sublicense or lend finalToon or
documentation. thinkingParticles 6 is a Download Software, only and so
this license does not allow the transfer to any other person or entity.
Once registered, the license will be binding for the person or institution
that initially bought or registered it.
You may use the licensed and registered product (thinkingParticles 6) as
long as
(a) your natural life time ends
(b) the company legally exists, if the product was bought for a company
5. You May Not:
(1) Copy or use thinkingParticles 6 or Documentation except as
permitted by this Agreement.
(2) Reverse engineer, decompile, or disassemble thinkingParticles 6
except to the extent permitted by law where this is indispensable to
obtain the information necessary to achieve interoperability of an
independently created program with thinkingParticles 6 or with another
program and such information is not readily available from cebas or
elsewhere.
(3) Install or use thinkingParticles 6 on the Internet or over a wide area
network, including, without limitation, use in connection with a Web
based render farm or similar service.
(4) Remove, alter, or obscure any proprietary notices, labels, or marks
from thinkingParticles 6 or documentation.
(5) Utilize any equipment, device, software, or other means designed to
circumvent or remove any form of copy protection used by cebas
VISUAL TECHNOLOGY Inc. in connection with thinkingParticles 6,
or use thinkingParticles 6 together with any authorization code, serial
number, or other copy protection device not supplied by cebas VISUAL
TECHNOLOGY Inc. directly or through an authorized reseller.
6. Limited warranty
(1) SPECIAL EFFECTS AND RENDERING PLUG-INS ARE TOOLS
INTENDED TO BE USED BY TRAINED PROFESSIONALS ONLY.
CEBAS VISUAL TECHNOLOGY Inc. WARRANTS THAT
thinkingParticles 6 WILL PERFORM IN ACCORDANCE WITH THE
DOCUMENTATION. cebas VISUAL TECHNOLOGY Inc. CAN NOT
WARRANT THAT thinkingParticles 6 WILL WORK TOGETHER
WITH OTHER SOFTWARE AND PLUG-INS FROM OTHER 3RD
PARTY DEVELOPERS, BECAUSE OF THE COMPLEXITY OF
SUCH INTERACTIONS BETWEEN DIFFERENT OPERATING
SYSTEMS OR SOFTWARE PACKAGES. THE USER MAY
HOWEVER IMMEDIATELY REPORT SUCH INCOMPATIBILITIES
FOR FURTHER INSPECTION BY cebas VISUAL TECHNOLOGY
Inc. SUCH A REPORT HAS TO BE DONE IN WRITING.
7. Warranty Disclaimer
THE INFORMATION IS PROVIDED "AS IS" WITHOUT
WARRANTY OF ANY KIND. cebas VISUAL TECHNOLOGY Inc
DISCLAIMS ALL WARRANTIES, EITHER EXPRESSED OR
IMPLIED, INCLUDING THE WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. IN NO EVENT SHALL cebas VISUAL TECHNOLOGY
Inc. OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES
WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL,
CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL
DAMAGES, EVEN IF cebas VISUAL TECHNOLOGY Inc. HAVE
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
SOME STATES DO NOT ALLOW THE EXCLUSION OR
LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR
INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION
MAY NOT APPLY.
8. Confidentially
All Licensing information, including license files, descriptions of code
activation and written instructions of any kind created by cebas
VISUAL TECHNOLOGY Inc. are only intended for the licensed user of
thinkingParticles 6 and no one else. Such information may not be spread
or distributed in any form to other users.
9. Mandatory Activation
Activation associates the use of thinkingParticles 6 with a specific
license server (IP-Clamp) on a specific device. During activation, the
software will send information about the software and the device to
cebas Visual Technology Inc. This information includes the version, the
license version, and product serial number also called license number)
of the software, the Internet protocol address of the device. BY USING
THE SOFTWARE, YOU CONSENT TO THE TRANSMISSION OF
THIS INFORMATION. UNLESS THE SOFTWARE IS ACTIVATED,
YOU HAVE NO RIGHT TO USE THE SOFTWARE. YOU ARE NOT
PERMITTED TO BYPASS OR CIRCUMVENT ACTIVATION. You
can activate the software by Internet or email. If you do so, Internet and
telephone service charges may apply. Some changes to your computer
components or the software may require you to reactivate the software.
For the purpose of customer registration and control of proper use of the
programs cebas VISUAL TECHNOLOGY Inc. will store personal data
of the users in accordance with Canadian law on Personal Privacy and
Data Protection. This data may only be used for the above-mentioned
purposes and will not be accessible to third parties.
10. Other
If any provision of this Agreement is found to be invalid or otherwise
unenforceable, the further conditions of this Agreement will remain
fully effective and the parties will be bound by obligations which
approximate, as closely as possible, the effect of the provision found
invalid or unenforceable, without being themselves invalid or
unenforceable.
BY INSTALLING AND AUTHORIZING THIS SOFTWARE, YOU
HEREBY AGREE TO THE TERMS AND CONDITIONS
PRESENTED ABOVE.
3ds max is a registered trademark of Autodesk Inc. thinkingParticles 6 is a
trademark of cebas VISUAL TECHNOLOGY Inc. deeZoo, ProOpticSuite,
LumaObject are trademarks of cebas Visual Technology Inc.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
thinkingParticles Subscription Drop 6
Subscription Drop 6 brings important bug fixes and a few more features. Find
below the list of changes as compared to Drop 5.
New Features and Fixes in Drop 6
A major new addition, to the already powerful tool set of thinkingParticles, is the
introduction of the All Purpose Fields (short APF) operators in Drop 6 of
thinkingParticles. APF operators introduce a powerful new way to art direct and
affect particle motions through custom created and fully procedural grid based
force fields.
APFields are powerful volumetric operators allowing you to create and
manipulate forces in 3D space that can affect particles in multiple ways, as they
move through such fields. While creating these new set of operators, our main
focus was to offer easy to use tools to create and manipulate vector fields right
within thinkingParticles. However, as those operators deal with 3D space and
specifically vector fields, a basic understanding of vectors and the related math
is expected.
This new set of field operators can be found in the Operators -->APField menu.
The following new operators are available:
APFAccumulate - is an operator used to fill cells (voxels) in a 3D field with
data. This operator allows for a fully procedural approach to create volumetric
fields that can be sued ot manipulate particles in space. To learn more click
HERE
APFData - like so many other Data Operators you can find in thinkingParticles,
this data operator allows you to gather information for further processing All
Purpose Field structures in a fully procedural way. To learn more click HERE
APFInitiator - this operator is one of the easiest and straight forward operators
to create a volume voxel field. It is easy to use and helps in setting up the most
common field types with just a few clicks and adjustments! To learn more click
HERE
APFInputFrom - offers one of the most unique ways to create and fill fields
with data from actual particles in the scene. There is just no easier methods to
feed cell (voxel) data into a field. To learn more click HERE
APFInterpolate - this operator is used to read the field data at a specific
position and return the interpolated result. It is a simple, yet powerful way to
handle volumetric data in a fully procedural way. To learn more click HERE
APFOutputTo - assigning field values to particles is performed with the
APFOutputTo operator. The volumetric field data is automatically interpolated
and applied to the selected particle group. There is no simpler way to procedural
manipulation of particle motion through complex 3D volume fields. To learn
more click HERE
APField - is an advanced "satellite" like operator that can be used across
multiple dynamic sets. Other APF operators depend on this operator. The
philosophy to apply this new APF operator is similar to the one found in the new
physics or flow solvers. This container holds all the data and core settings while
other operators feed to it - or from it. To learn more click HERE
thinkingParticles allows you to cache volumetric field data, stored in an APField, to hard disk for faster process or network wide access. The file format
used to store and manage 3D volume data within thinkingParticles is based on
the industry standard Open VDB.
OpenVDB is an Academy Award-winning open-source C++ library comprising a
novel hierarchical data structure and a suite of tools for the efficient storage and
manipulation of sparse volumetric data discretized on three-dimensional grids. It
is developed and maintained by DreamWorks Animation for use in volumetric
applications typically encountered in feature film production.
Sum Helper - an new math helper node has been added, the Sum Helper allows
you to create a summation of multiple values of the same type.
InitialState - this new operator acts as a particle generator which allows you to
"freeze" any particle simulation state at a specific time. All particle data at that
specific time can be written to the disk drive for later continuation of a
simulation or any particle effect. To learn more click HERE
Workflow and Operator Enhancements
Offline Help - thinkingParticles, now uses by default an online help file that is
accessed through the internet and your selected web browser in windows. If no
internet access is possible or available an option to use the installed help file can
be chosen. To learn more click HERE
Math Helper - when created, the Math Helper Node now automatically renames
itself according to the mathematical operation it performs.
Counter Helper - this helper node has a new Input that enables you to reset it's
value for each sub-frame sample step. To learn more click HERE
GeomPoint Helper - a new Input and output connection has been added to this
helper node. Radial Alignment on a specified "Up" vector can now be easily
calculated around a given surface point. To learn more click HERE
GeomParticle Helper - a new Position input connection has been added to
acquire the closest geometry information in relation to this exact position. To
learn more click HERE
Object Helper - a new output has been added to this helper node. NumObjects
outputs the total amount of objects in the list.
GeomObject Helper - a new output has been added to this helper node.
NumObjects outputs the total amount of objects in the list.
Shape Helper - new inputs and outputs have been added to this helper. New:
NumShapes and NumVertex . The same is true for Shape Instance.
Math Helper - new mathematical functions have been added to the Math helper
node. The following functions are num supported: Deg2Rad, Rad2Deg and for
vector operations Collide and CollideDeflection has been added. For
Vector/Float operations a RollMatrix operation has been added.
Shape Helper - a new Position input has been added to this helper node which
allows to gather information about nearest points. To learn more click HERE
AlembicExport - A new export option has been added, objects can now be
exported by material. This new option is to avoid any issues resulting in
reordering material IDs when combining multiple objects in a particle system.
To learn more click HERE
Fluid and Rigid Body Enhancements
Fluid and rigid body interactions have been enhanced a lot. Rigid bodies do now
show much better buoyancy and interaction with fluid simulations. Transfer of
momentum between fluid particles and rigid bodies is resolved much faster and
more accurate. Objects engulfed within a fluid will start to rise or sink depending
on their specific physical properties.
Other Enhancements
Broad support of vertex velocities has been added throughout thinkingParticles
operators. Now, object space modifications (deformations) and modifiers on
objects are properly tracked by ObjToParticle, LayerToParticle, Bullet
Softbodies, ImplicitShape and many more!
Exported Alembic meshes do also support vertex velocities, now.
When using standard 3ds Max force fields (space warps), it is no longer
necessary to bind the spacewarp to the thinkingParticles helper object. All
standard forces in the 3D scene will automatically show up in the list of
available forces when using the StdForce or StdCollision Helper.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Working with thinkingParticles
A Quick Overview
thinkingParticles offers its advanced particle system functionality through a
programmatic approach. As an artist, the word programming conjures up
images of code creation and advanced college degrees, however, you should not
be afraid of this powerful tool. thinkingParticles provides artists with an easy-touse visual Wire Setup View to procedurally build the rules and conditions that
control the particle behavior.
Through this interface and control, artists become the ultimate masters of all
particle mayhem within their scenes.
Final Destination 2 image courtesy of Digital Dimension New Line Cinema
Event-driven systems vs. Rule-Based systems
To start, it is critical that we differentiate between these two types of particle
systems as they are often mistakenly considered the same.
The difference between Event-Driven particles (such as Particle Flow) and
Rule-Based particles (like thinkingParticles) can be summed up quite simply:
An Event-Driven particle system is based on "triggers" or events that must
happen to activate a specific particle effect, while a Rule-Based system works
outside of time and relies on rules and conditions to govern particle behavior.
A simple example of this kind of event system would be having particles spawn
when one object collides with another. One object must collide with another in
order to create particles. This kind of system implies some kind of keyframe
related effects.
Conversely, thinkingParticles is totally independent of time and keyframe
constraints and offers true Non-Linear Animation capabilities. Rules and
conditions control the particle effects. A particle system created with
thinkingParticles will work regardless of the timing or number of frames that
change within an animation. Imagine the freedom you have when working with
this kind of rule-based system.
Here's an example:
Imagine that you are tasked with creating a vast space scene including an
animated spaceship trying to navigate through an asteroid field. This field
contains enormous meteors as well as smaller pieces of debris floating
around randomly. Now imagine that your client tells you that the spaceship
should avoid the bigger meteors, but that the smaller rocks and debris can
collide and bounce off the hull.
An Event-Driven particle system would fail to handle this kind of situation
effectively because you would first need to define a path through the asteroid
field for the spaceship, then you would need to look for the exact keyframes
where collisions should happen. But what happens if, after setting up all of the
animation, you needed to change the path of the spaceship, or the amount of
debris, or the balance between the big and small meteors and debris? It would
most likely require that you start from the beginning and rework much of the
scene.
thinkingParticles on the other hand is designed specifically to handle this kind of
situation. First and foremost, it can take your spaceship model and treat it as a
single particle. And because of this fact, by applying two rules to the spaceship,
you can solve all of your meteor and debris collision and avoidance issues.
Conceptually, the rules you'd apply to your new spaceship particle would look
something like this:
1. If SPACESHIP GETS NEAR (VALUE) A ROCK
2. CHECK IF
3. BIG (VALUE) ROCK THEN AVOID IT (move around)
4. SMALL (VALUE) ROCK IGNORE AND DO COLLISION
5. END
Of course, the text above is not the real code fragment. In thinkingParticles you
do not need to type in any code at all. This is only the high-level logic you would
use to help build the rules and conditions for your scene. What is unique in this
logic flow is that, as you can see, there is no time-related variable in it, so this
will always work, regardless of how you animate the spaceship's path or adjust
the length of the animation. Whenever the spaceship gets near a meteor, it will
evaluate all of the rules associated with it, and this in turn control's the
spaceship's behavior accordingly.
How thinkingParticles handles Animation
thinkingParticles uses the same basic animation controls and features just like
most other 3ds Max plug-ins do. Not surprisingly, the easiest way to animate a
parameter within thinkingParticles is by using the Animate button and the frame
slider. Every change will be recorded per frame and the values will be
interpolated automatically. Be aware that thinkingParticles also exposes all
animatable parameters to TrackView so that you can use any expression or
controller to animate a specific parameter.
This means that Object and Inverse Kinematic animations are also supported
when nodes are used a particles. For example, the Geom Instance operator
allows you to select Character Studio Bipeds, which can then be used as particles
within the system.
How thinkingParticles handles Materials
Materials and material animation are also supported by thinkingParticles , but
there are a few things to consider.
The way you can assign materials to your particle systems can become a very
complicated situation to keep track of. In theory, each individual particle can
have its own material, and in some situations each particle could also have more
than one material assigned to it. You must also understand that 3ds Max handles
all of the particles within each particle system as one mesh object, and add to
that the fact that 3ds Max is only able to assign one material per object. To get
more than one material per object, you must use Material IDs and Multi/SubObject materials.
Imagine modeling 3 different spaceships - each with roughly twenty materials
assigned to them through the use of Material IDs and Multi/Sub-Object
materials. Let's say that you want to use these craft as particles to create a
massive space battle. It would be practically impossible to handle all of these
object-based particles with multiple materials manually, so thinkingParticles has
an automated system that does the job for you. It reads in the materials applied to
the original objects, then updates every time it is needed or forced to do so
within the system (through operators like Material Time - which handles
animated materials).
This automatic material update process
also gives some insight as to why you
can't change any of the thinkingParticles
materials. Any manual change of a submaterial from within thinkingParticles
will be useless since it will be recreated
from scratch every time you change or
reinitialize the particle system or object
that is attached to it.
Please note that it is legal to change
and animate any material outside of
thinkingParticles, but keep in mind
what an immense chain reaction you
might activate when you change a
sub-material of a sub-material of a
sub-material, and so on.
Where to go Next?
Now that you've had some brief exposure to the concepts surrounding
thinkingParticles, it's time to dive into the specifics of how you create all of the
cool particle animations you've dreamed of over the years. This means getting
familiar with how you access thinkingParticles, navigating it's controls and the
logic that will be required for your particle work.
While it is highly recommended that you go through the Introduction material in
order, if you prefer you can click on any of the topics that interest you.
The thinkingParticles Interface
Particle Group Tree View
DynamicSet Tree View
Wire Setup View
Create Rollout
Parameter Rollouts
Dynamic Simulation Concepts
Initiators
Keyboard Shortcuts
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
The thinkingParticles User Interface
You'll soon learn that thinkingParticles is a plug-in that will challenge your brain
daily. One reason for all of the brainwork is that the ultimate power of this
particle system comes from its total freedom when it comes to command
handling. thinkingParticles gets its power from a large number of simple
operators and conditions that can be freely connected and arranged in infinite
combinations. These smaller building blocks are easy to manage, yet give you a
wide range of flexibility not available with other tools. This is similar to the
concept behind 3ds Max itself - the real power of the software comes from its
wealth of plug-ins and the ability users have to customize their toolset, and not
from a limited number of built-in features.
Of course, before you start learning how to build your own amazing particle
animations, you must learn a bit more about the thinkingParticles interface. The
old adage "you must learn to crawl before you can walk" was never more true.
The Interface
thinkingParticles is fully controlled through a modeless user interface as shown
above. While it may look confusing, it is actually very logically laid out, and
we'll discuss that in a few moments. But a more important question at this point
is: How do I get to this interface?
To access the thinkingParticles interface, you must create a thinkingParticles 3
helper node in the 3ds Max viewports first. Like all standard 3ds Max particle
systems, thinkingParticles is Located within the Create command panel under
Particles Systems:
When you click on the Thinking button and then click in any of the viewports,
you'll get a helper node that looks like a small yellow X that has the letters TP
next to it as shown below.
From this tiny and rather plain looking Helper object, you'll eventually create
some mind boggling particle animations!
Once the TP helper created, you can now get access to the thinkingParticles
interface via two methods:
1. With the TP helper selected, click on the Properties button within the
Modify tab.
2. Use the shortcut keys: Alt+Shift+P.
That will bring up the thinkingParticles dialog.
So now that you have access to the interface, what does it all mean? Simply put,
the main user interface is divided into 5 main functional areas.
The various functional areas within the thinkingParticles 2 dialog
1. Particle Group Tree View - This is where you set up different Groups to
contain your particles.
2. DynamicSet Tree View - This is where you organize your collections of
nodes and operators.
3. Main Wire Setup View - This is the schematic area where you wire
together your nodes and operators.
4. Create Rollout Panels - This is the area where you choose the various
nodes and operators to add to your Wire Setup View area.
5. Parameter Rollout Menus - This is where you modify the parameters
associated with a particular node or operator.
Several of these areas, including the Wire Setup View, the Create Rollout Panels
and the Parameter Rollouts will change depending on what is selected within the
thinkingParticles interface.
Depending on what DynamicSet you have selected, the Wire Setup will
change to show the nodes and operators that are contained within it.
Depending on what operator or node is selected within the Wire Setup
View, the Parameter Rollouts will change to reflect the controls available
for the selected node.
Depending on which group of operators or nodes you want to select in the
Create Rollouts, the rollouts will change to show you the currently selected
group of options for those tools.
There are more connections and changes that will be discussed throughout this
manual, but you should get the idea. This 'change on the fly' functionality is no
different than 3ds Max itself as the software updates as you work to show you
the tools needed for a selected object or node in your scene, so be aware that this
is also the case within thinkingParticles .
Beyond the areas mentioned above it is also worth noting that thinkingParticles
also takes advantage of the small space within the Title Bar as well (as shown
above). The cebas team has placed particle information in this area so you can
keep track of how many particles your system is dealing with at any point in
time. It will update as more particles are born, moved and selected.
Where to go Next?
Now that you've know how to get to the thinkingParticles interface and where
the various information is created and stored, it's time to look at the components
of the User Interface more closely.
While it is highly recommended that you go onto the Particle Group Tree View,
if you prefer you can click on any of the topics that interest you.
Particle Group Tree View
DynamicSet Tree View
Wire Setup View
Create Rollout
Parameter Rollouts
Dynamic Simulation Concepts
Initiators
Keyboard Shortcuts
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Particle Group Tree View
thinkingParticles offers many powerful features that are generally new to 3ds
Max users. One new feature is the use of Hierarchies to arrange animation
events and objects in your 3D scenes. The Particle Group Tree View is the place
within thinkingParticles where you set up these new hierarchies and enables you
to freely arrange how particles are grouped together.
The Particle Group Tree View
So what are these hierarchies, and how do they work?
Nearly all of the advanced effects that you can create within the system are
based on the fact that thinkingParticles is able to store particles in separate
Groups. Those Groups are like containers that encapsulate the particles placed
within them. These containers can also contain other smaller containers and so
on. By creating and using these groups, and placing them into a single hierarchy
you can create particle animations where only certain particles (those within a
specific Group) get affected by a set of conditions or rules while other groups of
particles aren't affected at all. What's more is that particles that reside in one
Group are not permanently locked or associated with that group. Particles can be
passed from one Group to another within the system at any time, based on any
set of rules or conditions you set up.
Now by default, thinkingParticles uses the ALL Group as the base container to
store particles when no other groups are available. The ALL Group is a
permanent, base Group and can't be deleted or moved by the user. It also acts as
the Root of any hierarchy and branches you create. This gives you the ability to
access all of the particles in your particle system regardless of the hierarchy simply select the All Group and make your changes here.
A practical example for using groups and hierarchies can be explained as
follows:
Imagine you were given the complex 3D scene to animate described in the
Introduction where you need to animate a spaceship taking off, flying through a
meteor shower, and then getting hit by some meteors. When the meteors collide
with the ship, they are supposed to create debris and cause damage to the
spaceship's hull.
How would you handle this kind of complex scene with standard 3ds Max
particle functionality?
More than likely, you would have to create several particle systems to handle the
various tasks such as the rocket smoke for takeoff, the meteors, the collision
meteors, debris, etc. Then you would have the task of trying to coordinate
everything so that the particle animations are synced up with the rocket and
meteor motion and believable.
thinkingParticles however, allows you to build a single particle system that
handles all aspects of the particle animation required. This is an important
concept: thinkingParticles only needs ONE particle system to create multiple
particle animations. This is due to the nature of the Particle Groups and
hierarchies. You can build one Group of particles that will represent the meteors,
another to represent the rocket exhaust, another to represent the debris, and so
on. Each group in the hierarchy can also have sub-groups, so for instance, the
debris group could have a sub-group called dust that would represent the small
particulate matter that flies off of the debris chunks as they spiral away after the
collision. There is no limit to how you can create your hierarchies.
Now while you may think that this one system approach may make the setup
more complicated, in fact, it offers you not only a single centralized control point
to tweak all of your particles, but also removes the need to "time" everything so
it is in sync. Since thinkingParticles is rule-based, if the client wanted to later
change the timing of one of your particle animations (perhaps the rocket was to
fly through slower or faster), it would not be necessary to re-work the new
sections; the rules would automatically account for the changes and react
accordingly.
Creating and Working with Particle Groups
There are several things you need to consider when you want to make heavy use
of particle groups. First thing you should do before you start creating groups is
to do some planning and think about the how you'd like to set up your Groups
and hierarchies. Try to determine the different kinds of particles you want in
your scene (based on behavior, interaction, etc.) and break them down
accordingly. The more planning that you do prior to diving into your animation,
the fewer surprises you will have once you get into it. Of course,
thinkingParticles does allow for the creation and manipulation of Particle Groups
at any time, so if you don't anticipate everything at the beginning, you won't
have to start from scratch.
You must be careful when you do
this, as deleting or removing Groups
can result in unexpected particle
behavior if you've got a system
already wired up. Imagine that you
have a particle animation wired with
several operators accessing a group
of particles and then you start
modifying the group layout. The
whole particle system might fail if
you change or delete a group of
particles that is critical to the
animation. If you remove a particle
group, how should an operator store
or access particles that would usually
go into or come from that particle
group?
To create new Particle Groups, simply click on the Create button beneath the
Tree View. Once you've got a new Group created it will be named Group by
default. As this name is not terribly descriptive and is given to all groups you
create, when you generate a new group you are strongly encouraged to rename it
immediately to something more recognizable.
To rename a created Particle Group you should take your mouse and perform a
slow left-click over the name. This process is identical to renaming a file using
standard Windows controls. You'll click once to select the group (it will
highlight), then do the slow left-click to open up the naming dialog.
Once you have several groups, you might decide that you want to re-order them
or make one group a sub-group of another group. To do simple re-ordering of
the various groups, you can use the UP and DOWN buttons beneath the Tree
View. You also have the ability to drag-and-drop one Group onto another in
order to make it a sub-group of that group. This process is sometimes called
nesting, and it is discussed in more detail below. You can even drag and drop
groups onto the All Group to effectively bring them back up to the main branch
level.
Be aware that when you create a
Sub-Group of another Particle
Group, all effects that you apply to
the master group get automatically
passed to its sub-groups as well.
Creating and Manipulating Groups
As it is really essential for you to understand how the Groups and Hierarchies
work together and inter-relate, let's look at a more complicated setup. Check out
the sample particle Groups in the illustration below.
In the illustration above you can see that there are 3 main particle Groups (All,
New Particles and BurnOutSmoke) along with 5 nested particle groups
(SpaceshipFragments, CarFragments, Bullets, Gunsmoke and LeftWheel) and
each particle group can be individually accessed by its name simply by clicking
on it. Whenever you create a Sub-Group of particles, any rules that affect the
upper group in the hierarchy will affect the particles in the sub-group. So if you
apply a set of rules to the Bullets group, the same rules will apply to Gunsmoke
sub-group as well.
One more important bit of information regarding Groups. When you create them
in the Particle Group Tree View window, they are also automatically created in
the Groups Create Rollout (shown below). This is done so that you can use
these groups within the Wire Setup View. Moreover, the Group nodes created
will share the same naming conventions as within the Particle View Tree View.
In the image below you can see that all of the groups from the example above
also exist within the Create rollouts with the same names.
Color Group Change: Fast Access
Left Click onto the Tree-view Icon to bring up a color gradient dialog. Choose
any particle group color to visualize the particle group in the viewport.
Context Sensitive Right Click Menu
New Particle Group Right Click Menu Option:
Right-Clicking on any particle group name brings
up an new context sensitive menu.
For each particle group name clicked; a list of
operators using or referencing this particle group is
listed. Clicking any of the Operator names will
automatically bring up and select the DynamicSet in
question.
This feature is great for debugging complex
DynamicSet setups containing hundreds of nodes.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
DynamicSet Tree View
The DynamicSet Tree View is one of the most important areas inside of
thinkingParticles. It is here that you set up your control systems and process
ordering for your particle animation. Nearly all of the advanced effects that you
can create within the system are based on the fact that thinkingParticles is able to
store its rules and operators in separate DynamicSets and have them evaluated
based on other rules and conditions.
What is a DynamicSet?
DynamicSets are another key to the power of thinkingParticles. A DynamicSet
can be seen as another type of hierarchical container that holds one or more
instructions (operators, helpers and conditions) telling the created Particle
Groups what to do. Like Particle Groups, DynamicSets can also hold other
enclosed (or nested) containers within them with even more instructions. By
creating and using these DynamicSets, and placing them into a single hierarchy
you can create particle animations where only certain particles (those within a
specific Group) get affected by a set of conditions or rules in one DynamicSet,
while other groups of particles aren't affected at all, or are affected by rules and
conditions in a completely different DynamicSet.
Now by default, thinkingParticles uses the Master Dynamic DynamicSet as the
root of the hierarchy. The Master Dynamic is a permanent part of the interface,
and can't be deleted or moved by the user. It is here that you turn the entire
thinkingParticles particle system on or off and set up how your particle system is
displayed in the 3ds Max viewports and the user interface for thinkingParticles.
When you create DynamicSets, they will all reside beneath this Master Dynamic
root.
Any number of instructions (operators) may be stored in one DynamicSet and a
DynamicSet can store any number of other sub-DynamicSets. It is recommended
that you use multiple DynamicSets to create a particle system. Now, it may be
tempting to just add all of your operators to a single DynamicSet - and in the
end, you might get the effect you want. However, from an organizational
standpoint, doing this with complex effects would be bad practice. Just as in life,
you wouldn't put all of your clothes (socks, shirts, belts, etc.) into one drawer for
keeping since it would be difficult, if not impossible to find anything in the
future, the same holds true for thinkingParticles. Putting all operators in a single
event will make diagnosing problems within the particle animation much more
difficult, and it will also make it far harder to modify or re-purpose the elements
within the animation. Think about what you are going to do and then break the
task up into manageable chunks by using multiple DynamicSets.
Creating and Manipulating DynamicSets
To create new DynamicSets, simply click on the Create button beneath the Tree
View. Once you've got a new DynamicSet created it will be named DynamicSet
by default. As this name is not terribly descriptive and is given to all
DynamicSets you create, when you generate a new DynamicSet you are strongly
encouraged to rename it immediately to something more recognizable.
To rename a created DynamicSet you should take your mouse and perform a
slow left-click over the name. This process is identical to renaming a file using
standard Windows controls. You'll click once to select the DynamicSet (it will
highlight), then do the slow left-click to open up the naming dialog.
Once you have several DynamicSets, you might decide that you want to re-order
them or make one DynamicSet a sub-set of another DynamicSet. To do simple
re-ordering of the various sets, you can use the UP and DOWN buttons beneath
the Tree View. You also have the ability to drag-and-drop one DynamicSet or
the operators they contain onto another DynamicSet in order to make it a sub-set
of that DynamicSet. This process is sometimes called nesting.You can even drag
and drop DynamicSets onto the Master DynamicSet to effectively bring them
back up to the main branch level.
DynamicSets can be re-ordered in various ways, the Drag Icon will indicate the
task that will be performed when the mouse button is released. Arrow symbols
will show where the DynamicSet will land in the hierarchy. Keep in mind that
there are several "hot" areas in the DynamicSet Tree-View to drop an Icon on.
You can drag and drop a DynamicSet on :
1. the name of the DynamicSet; this will move the DynamicSet UP/Down in
the Hierarchy
2. the Icon of the DynamicSet; this will move it "inside" a DynamicSet
Shift + Dragging a DynamicSet will copy the complete DynamicSet or operator
to its new position.
One other important feature of DynamicSets is the fact that you can disable
them quickly from the DynamicSet Tree View. If you right-click upon the
DynamicSet, it will turn a light grey, indicating that is has been removed from
processing by thinkingParticles.
DynamicSet Caching
When an icon is right clicked in the DynamicSet Tree-View, a special
DynamicSet related menu is opened. Every DynamicSet may be recorded to hard
disk individually. Controls to set or create cache files along with statistical data,
is displayed in that right click menu as well.
Important Restrictions
DynamicSet caching is a powerful tool to speed up and enhance particle
animation work flow within a network. Caching particle effects removes the
calculation overhead usually introduced by "serial" processing of particle effects.
Particle effects rendered in a network are always calculated from start to the
current frame to be rendered; so with an increasing amount of frames the
rendering time also increases a lot when particles are involved. Caching particles
helps there a lot, because every position of the particle is already calculated,
every PC in the network can access the frame data immediately.
DynamicSet caching is a great tool, however as everything on this planet comes
with a price tag there are some restrictions or things to consider.
Recorded particles can not be modified in any way (they are recorded!);
however, the shape of a particle may be changed
All DynamicSets to be recorded must be "self contained" and complete,
DynamicSets without a generator in it will not be recorded. A forces or
movement only DynamicSet will not be recorded at all.
Cached DynamicSets maybe "stacked" or "nested" as long as they are
complete and self contained
Deactivated DynamicSets will not play back their caches or create any
particles at all
Cache Stop - choose this option to disable a cache playback
Cache Play Backward - when selected, the cache is played back in reverse
Cache Record - starts the cache recording to the hard disk
Cache Unset - removes the assigned cache file
Statistics - displays the statistics about the cache file
Rule Processing in thinkingParticles
thinkingParticles uses a real-time interpreter to analyze the logical setup of the
particle system. Based on a top to bottom order, the tree and its branches are
analyzed in real-time and worked through one after another. This means that you
need to examine your DynamicSets' order to determine how the particle
animation will flow. As you add operators and rules to DynamicSets, they are
added in so that they go one beneath the other - each one appearing in the
DynamicSet Tree View at the bottom of the selected DynamicSet. Keep this in
mind as you build up your particle animations.
You can add the operators to a DynamicSet in any order, but should be aware of
how they are positioned in the stack relative to each other as your particle
animation grows in complexity. Many conditions are dependent on the results
that other conditions create. As was shown above, you can change the relative
order of the DynamicSets and the operators within them from the DynamicSet
Tree View.
A good question to ask yourself is: When do I get the results an operator
needs?
Remember that one condition will generally create a rule or condition (such as a
collision) that another condition will subsequently want to make use of and act
upon the particles. For instance, if you have an event that creates a collision and
another that modifies the direction the particle travels, would you want the
directional change to occur before or after the collision takes place? It's this kind
of thinking that you must apply when you run into trouble with your particle
animations.
Example:
Below is an example where the order of rules within the DynamicSet Tree View
can provide problems for the final outcome of the particle animation. While the
order of the hierarchy doesn't always cause problems for a particular effect, there
are situations where the top-down, left to right ordering of the operators is
critical for the correct results. Just remember that all operators, conditions and
Dynamic sets are evaluated in a top down left to right manner.
Before we proceed ahead, here is a description for each of the DynamicSets and
visible operators in the example.
Create Particles DynamicSet: In this DynamicSet, 2 particles are created.
Crash DynamicSet : Within this DynamicSet, the collision between
particles is handled.
Shape DynamicSet : This subset to the Crash DynamicSet assign a shape to
the particles.
Repulsion Bounce Operator : This operator exchanges impulses when
colliding
Fragment Operator : This operator creates fragments on collision
PPassAB Operator : This special operator (called an Initiator) handles
collision detection and determines when the other operators are evaluated
Motion DynamicSet : This DynamicSet provides the initial speed of the
two particles.
Spin Fragments DynamicSet : This DynamicSet spin the fragment
particles.
If you were to try and "read" this particle system, it would read as follows:
1. thinkingParticles will start by evaluating the Create Particles DynamicSet
first by going through all of the operators and conditions within it.
2. Next, the Crash DynamicSet is evaluated. As can be seen, it contains other
Sub-DynamicSets and several operators. So the next step is that the Shape
DynamicSet is evaluated along with its internal operators and conditions.
3. After this is complete, the operators Repulsion Bounce, Fragment and
PPassAB are evaluated in that order (once the PPassAB Initiator is
evaluated).
4. Once the operators are evaluated, the Motion DynamicSet and finally the
Spin Fragments DynamicSets are processed
While this order of rules is still not completely understood at this point (since we
do not know what operators and rules will drive the various DynamicSets), we
do understand the order in which they will be processed.
Analyzing the logic
When you begin to look at the logic behind the order of rules as shown above,
you should be able to spot some errors just by the naming of the Operators and
DynamicSets.
First and foremost, it does not make much sense to first test for a collision
(Crash DynamicSet and the PPassAB operator) and then move the particles
(Motion DynamicSet). The Motion DynamicSet is evaluated after the PPassAB
collision operator, it's not critical in this case because when the objects don't
move they can not collide. The result of the above DynamicSets is shown below.
After a crash of the two particles, fragments are created.
False Thinking!
In this example we will assume that the user who did the setup does not care
about hierarchies or the order of DynamicSets and operators. The scene/situation
is exactly like the one described in the previous chapter but with one little
exception. In the case shown below the Shape DynamicSet is placed after
PPassAB. By consequence, this means that the shape assignment for the
particles is done after the collision and fragmentation has been performed. This
is absolutely wrong! As we will assign a shape to particles that do not exist at the
time we have performed the fragmentation. The fragment particles will not
become "fragments" they will become spheres or whatever shape is assigned in
the Shape DynamicSet.
As shown in the previous chapter, the setup is nearly the same, only the Shape
DynamicSet is differently placed in the order of rules.
The result out of the processing of the DynamicSets shown above is the
following:
as you can see, when the shape is applied to the particles the result is not the
expected one.
Where to go Next?
Now that you know what DynamicSets are and how vital they are to working
with thinkingParticles, it's time to look at how the nodes and operators that will
reside inside of these DynamicSets are created and connected together to
produce amazing results.
While it is highly recommended that you learn how to build particle animations
within your DynamicSets next through the Wire Setup View, if you prefer you
can click on any of the topics that interest you.
Wire Setup View
The thinkingParticles Interface
Particle Group Tree View
Create Rollout
Parameter Rollouts
Dynamics Simulation Concepts
Initiators
Shortcuts
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Wire Setup View
The Wire Setup View is the area within thinkingParticles where you will connect
all of the various operators and conditions together in order to create a particle
animation.
This view will show the currently selected DynamicSets container, so that you
can enter operators and conditions within it. As you add operators from the
Create rollouts to a DynamicSets, they will also appear within the DynamicSet
Tree View as well. Be aware that the order in which you add the operators will
affect the final particle animation. For more information on how to read the
DynamicSet Tree View, go HERE.
As the number of operators increases, you'll find that thinkingParticles provides
you with more visual feedback on what kinds of nodes you are working with. All
Operators have an O: at the beginning of their name while Conditions can be
identified by a C: at the beginning of their name. Logically, the helper objects
start with an H: as a prefix of their name. Finally, BlackBoxes will show up with
a D: as they are identified as saved DynamicSetss that are being reused. For
more information on BlackBoxes, go HERE.
Once you've added operators and conditions to your DynamicSetss, you will
then use the Input and Output Data Streams to tell thinkingParticles how the
various operators and conditions inter-relate to one another.
DynamicSets with 5 operators wired together
Input and Output Data Streams
As you add operators, conditions, helpers or groups to your DynamicSets in the
Wire Setup View, you will notice that they will have several Input and/or Output
data streams.
Typical Operator in thinkingParticles
The Input Data Streams on all operators within thinkingParticles are found
along the left-side of the operator, under the light blue box. These streams
represent the values that can be sent (or "piped") into the operator. Many times,
values that can be set from within the Parameter Rollouts can be overridden by
data that is generated from other parts of your particle animation and piped in
through these ports.
Likewise, Output Data Streams are found along the right-hand side of the
operator, under the darker blue box. These streams represent the values (or data)
that can be sent out to other operators and conditions to use. In most cases, the
Output Data Streams will carry information about a particular event, condition,
rule or object to another set of rules to further act upon.
NOTE: Be aware that not all operators within thinkingParticles have Output
Data Streams. Some operators have only inputs.
By default, operators and conditions come into the Wire Setup View show only
the most commonly used Input and Output Data Streams. Be aware that simply
because additional streams are not visible, it does not mean that they are not
available. If you find yourself in need of a particular data stream that is not
immediately visible, you can do several things to show them.
1. You can right-click on the small Input and Output boxes at the top of the
operator. This will result in a list pop-up that displays the currently
available as shown below:
All Input Data Streams that are currently visible will show up with a small
checkmark next to them, and the others are simply listed (as shown above). If a
data stream is already connected to another operator, the name will also show a
greater than symbol ('>') to indicate that it is in use. All you have to do to make
an additional data stream visible is click on it within this list. So for the example
above, clicking on the Radius 1 Stream will result in the operator looking like
this:
You now have easy access to the new Input Data Stream.
1. Another way to get access to ALL of the Input and Output Data Streams is
to right-click on the name of the operator in the Wire Setup View. This will
bring up a node control panel, and from it, you can choose Visible All.
This has the result of making all of the various Input and Output Data Streams
visible at once. For someone who is new to thinkingParticles, this is an easy way
to check what an operator offers. Of course, you have to be careful when using
this feature. Some operators have a LOT of data streams and you will have to
wade through them all after you've done this. A good rule of thumb is to make
use of this manual first. The reference section for each operator shows you all of
the Input and Output Data Streams, so this is also a good way to become familiar
with the various connection ports you have available.
Connecting Operators
Connecting the various Input and Output Data Streams between operators is a
very simple process.
You can simply click on the Output Data Stream name and left-click drag with
your mouse. A rubber band line will appear and can then be placed over another
input port. When you release the left-mouse button, a connection will be made.
To remove a connection between nodes, you can simply hold down the Shift-key
and left-click on the Input or Output data stream, and the connection will be
immediately removed.
Data Types
When it comes to connecting Input and Output Data Streams, the first thing to
understand is that each individual Input Data Stream within an operator will
require a specific type of Output data to connect to it. In order to connect the
data streams, you need to match up like inputs and outputs. For example, you
can feed a Particle output into a Particle input, but you can't feed a Rotation
output into a Position input. While some conversion can be done, such as
converting a Vector output to a Position input, you must be careful as to what
you connect. In an effort to help you, thinkingParticles provides visual feedback
for you in two ways.
First, if you hover your cursor over an Input or Output data stream, you will be
shown the data stream type within a small pop-up window.
In the example above, by hovering the mouse over the Birth Type Input Data
Stream, you can see that the data type it can have piped into it is an Integer
(shown in brackets). Each Input and Output Data Stream will provide you with
this valuable information.
Second, as you drag wires between nodes, valid connection points will become
highlighted as shown below.
Input Data Streams show which are compatible with a Float Helper
As you can see, any acceptable connections will highlight to let you know that
you can take one data type and connect it to another operator. So in the example
above, both the On and Size Input Data Streams can take the Float Helper's
Value Output Data Stream. Illegal or impossible connections will be rejected
automatically by thinkingParticles so you don't have to worry about odd
connections with mismatched data types.
Important:
In many situations Data types will be converted automatically so that a
connection makes sense in the matter of an evaluation for thinkingParticles.
However, connecting a Color to a Particle Input is not making much sense from
a logic standpoint.
DynamicSets Validity
When you first create a new DynamicSets, within the Wire Setup View you will
see that there is a large red button at the top of the view that says Invalid on it.
What this means is that currently, this DynamicSets either has a problem with
the operators contained within it, or that it contains no operators at all.
Invaid DynamicSets
In order to be evaluated by thinkingParticles, every DynamicSets must be
checked and validated before it can be interpreted. Since a DynamicSets is
nothing more than a collection of rules and operators, like any other
programming language thinkingParticles needs to collect and access all of its
data before the interpreter starts analyzing it. This means, you must supply every
bit of data that an operator or a condition needs in order to function properly.
Now some operators have required inputs. In these cases, the Input Data Streams
will automatically highlight in yellow when they are created. If you do NOT
connect an appropriate Output Data Stream to the highlighted Input Data Stream,
the DynamicSets will remain Invalid and will not be processed when the particle
animation is generated. This can lead to unexpected results.
An operator with a missing but required Input Data Stream
As can be seen above, the Group Operator contains a required Input Data Stream
called Particle. Without this particle data stream the particle Group Operator
cannot function. Without it, thinkingParticles has no way of knowing how to
work with this set of rules, and as a result, the DynamicSets that contains it will
become Invalid until it is connected.
Once the Particle Input Data Stream receives the data type it requires, the entire
DynamicSets becomes Valid. Valid DynamicSetss are able to be interpreted by
thinkingParticles and used to create particle animation within your scene.
Where to go Next?
Now that you have a bit of an understanding of how to the Wire Setup View
functions, it's time to move onto the Create Rollouts. It is here that you select
the various Groups, Conditions, Operators and Helpers that will be used to create
your particle animation.
While it is highly recommended that you go through the Introduction material in
order, if you prefer you can click on any of the topics that interest you.
Create Rollout
The thinkingParticles Interface
Particle Group Tree View
DynamicSet Tree View
Parameter Rollouts
Dynamics Simulation Concepts
Initiators
Keyboard Shortcuts
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Create Rollout
Once you've created a DynamicSets, a new set of options will become available
to you. This Create Panel houses all of the Operators, Conditions, Groups,
Helpers and Black Boxes you could want to create your particle animations.
You'll also notice that this panel uses a similar layout to 3ds Max's own
Command Panel.
Along the top of the Create rollout is a row of icons that give you access to the
various nodes that can be created in the Wire Setup View. Also, beneath the top
row of icons is a standard dropdown list that gives you access to even more
tools, organized in categories.
- Groups: Every time you create a Particle Group within the Particle Group
Tree View, you automatically create new Group operators within the Create
Rollouts. The two entities are inexorably linked together, and you can select your
Particle Groups from either the Particle Group Tree View or from within the
Wire Setup View.
- Conditions: Conditions can be thought of in the terms of "IF some
condition is met, THEN do something else". This classic IF-THEN situation is
well known among programmers, and can now be used by artists as well to test
their particles to see if something happens. All of the Conditions have a boolean
data stream that sends a value of true or false depending on what is being tested
(time, distance, collision, threshold, etc.). This output can be used as a trigger for
other operators to be turned on, or sent to other tests to further refine your
particle behavior.
- Operators: Operators are the heart and soul of thinkingParticles and are
the main building blocks for the creation of your particle animations. There are a
total of 46 different operators divided into seven different categories of tools.
You will spend most of your time within this section of the thinkingParticles
interface.
- Helpers: Helpers in thinkingParticles act as additional nodes that can help
you perform binary arithmetic in your particle animations, pipe specific values
into other operators and define positional data for your scene objects and
particles. A Helper node does what it's name suggests: it helps the user perform
specific refinements for a rule or set of conditions.
- Black Box: The simplest definition of a Black Box is that it is nothing
more than a standard DynamicSets saved to your hard disk so it can be re-used.
More specifically, Black Boxes (at least good ones that you want to share with
others or re-purpose) exist as collections of scene independent conditions and
operators. These saved DynamicSetss can then be used in other scenes without
any further adjustments and become drag-and-drop in the same way you do with
the other thinkingParticles operators.
Adding operators to the Wire Setup View
In order to add any of the Groups, Operators, Conditions, etc. to your Wire Setup
View, you must simply click on the node type that you would like to add so that
it becomes active within the Rollout, then left click within the DynamicSets as
shown below. At that point, the new operator will be added to the DynamicSets
you've clicked within.
NOTE: At the same time, the operator will also be added to the DynamicSet
Tree View in the order it was created.
Where to go Next?
Next on the tour of thinkingParticles's user interface is the Parameter Rollouts.
These will help refine the individual nodes that you place within the Wire Setup
View.
While it is highly recommended that you go through the Introduction material in
order, if you prefer you can click on any of the topics that interest you.
Parameter Rollouts
The thinkingParticles Interface
Particle Group Tree View
DynamicSet Tree View
Wire Setup View
Dynamics Simulation Concepts
Initiators
Keyboard Shortcuts
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Parameter Rollouts
When you add a new operator to the Wire Setup View, all of its controls are
displayed in one or more rollouts within the lower right-hand side of the
thinkingParticles dialog window. These Parameter Rollouts contain the various
settings that can be used to manipulate your particles.
A portion of the Geom Instance Parameter Rollout
The Parameter Rollouts behave exactly like other 3ds Max rollouts. They are
context-sensitive menus that change based on the selection of an Operator or
other node within the Wire Setup View or DynamicSet Tree View. If this menu
seems to be cut off at the bottom of the thinkingParticles dialog window, scroll
the menu up/down by using any of the standard mouse scroll options.
Be aware that many, if not all, of the
parameters you set within these
rollouts can also be overridden by
piping in values from other
operators, rules or conditions. Check
the Reference Guide for the Operator
in question to see what parts can take
Input Data Streams to dynamically
control one or most aspects of it.
Where to go Next?
This section was fairly simple to grasp in the broad scope that is
thinkingParticles. Next you'll be introduced to one of the newest features (and
most powerful) within the entire product - the new Rigid Body Dynamics and
Simulation system.
While it is highly recommended that you go through the Introduction material in
order, if you prefer you can click on any of the topics that interest you.
Dynamics Simulation Concepts
The thinkingParticles Interface
Particle Group Tree View
DynamicSet Tree View
Wire Setup View
Create Rollout
Initiators
Keyboard Shortcuts
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Dynamics Simulation Concepts
In addition to standard particle collisions, thinkingParticles now sports a new
rigid-body dynamics system to help you create even more impressive effects. In
order to get the most out of both of these dynamics systems, it is absolutely
essential that you understand the basic concepts behind each of them.
thinkingParticles offers two methods to handle collisions between objects.
An idealized particle-based collision detection
A more accurate face-to-face collision detection
Both systems are based on real world physics and use an underlying impulsebased system to handle energy conservation issues when objects interact with
one another. At the base level, thinkingParticles's dynamics system follows the
real world paradigm that energy can not be destroyed. As in the real world, the
relative speed and mass differences between objects are very important for
determining the final outcome of the animation. Therefore, for realistic
simulations, you will need to input realistic parameters, otherwise the whole
system can break down or explode.
It is important to consider proper
dimensions and modeling when
physical accuracy in the simulation
is needed.
Particle Based Collision Detection
thinkingParticles's most optimized and efficient physics simulation method is its
Particle-Based system. All impulse calculations and energy transfer calculations
are done within incredible accuracy when you choose this method. The only
restriction lies in the assumption that every particle is spherical in shape and has
a uniform radius. This method is usually not an issue for traditional particle
animations such as rain hitting a window, or sparks flying off a grinder, etc. In
these cases, the particles are small enough that the collision detection won't
create any sort of problem.
The idea behind this dynamics model is purely based on speed - using a
spherical shape for collision detection is optimized and lets the physics engine to
test for a radius only. This kind of collision detection is efficient even with
thousands and thousands of particles. So whenever possible, this pure particle
dynamic model should be used. The Dynamics Operator StdCollision is used to
help with these kinds of effects.
Face to Face Collision Detection
When creating complex particle animations for your scenes, it is not always
possible to get away with spherical collision detection. There are many situations
when accurate face to face collision detection is necessary. For example, if you
were to drop a vase from a height, and have it crack into multiple pieces, if you
base the particle collisions off of the radius of the particle, portions of the
fragmented geometry will pass through the floor and will destroy the illusion
that you are trying to achieve.
As a result, the face collision detection engine within thinkingParticles uses a far
more advanced physics engine to detect exact collision points on surfaces. It was
designed specifically to handle cases like the vase example above, and was used
extensively by Digital Dimension on the New Line Cinema motion picture
Blade: Trinity while being developed to handle the vampire "ashing" sequences
where the bones would crumble and collapse to the floor.
thinkingParticles provides you with a special operator to access this engine; the
ShapeCollision Operator is used to create dynamic simulations with particles
between other particles and an optional floor object. The particles and floor
objects can be in any shape or form and the collision detection will accurately
detect the shape of the particle fragments and provide an accurate result.
A final note - all collision detection
performed within thinkingParticles is
done only between non-penetrating
rigid bodies. If you have two objects
that overlap or interpenetrate at the
beginning of your simulation, they
will not behave correctly.
Dynamics Sampling
As has been stated earlier, thinkingParticles uses an impulse-based approach
when it calculates object collisions and interaction. The main driving force for
this approach (and other physical simulation systems like reactor) is the
sampling that is used to determine collisions. Most systems, including
thinkingParticles, allow you to control this sampling rate at the Frame and SubFrame range. What this means is that within a fixed time frame (the sampling
range - once each frame or several times per frame), the collision detection
system will try to detect any object collisions. The larger the time step, the less
accurate the simulation will be.
If you'd like more information on
how rigid body dynamics function,
you might do well to read through
the reactor introduction in the 3ds
Max Reference Manual. This should
give a good overview and basic
understanding of the terms and
features a dynamic system can have.
These same ideas and principles
apply to thinkingParticles.
In the example below, we'll use a simple scene of a box object (Object1) falling
toward a ground plane (Floor) to illustrate some of the problems you can
encounter when simulating real-world scenes.
In the above example, the box is falling at such a rate of speed that from frame 1
to frame 2, it has passed through the ground plane. If a Per Frame simulation
sampling is used for collision detection, the Floor object will be missed
completely by the physics engine as it had no chance to detect the collision.
However, if a Per Half Frame sampling is chosen, the physics engine would be
able to detect an object collision as shown below.
As you can see, at frame 1.5 an object collision occurs and can be detected. Once
detected, the physics engine can then correct the behavior of Object1 to
represent a real world result. It is important to understand that the sampling rate
is one of the main controls that will influence the result and quality within the
thinkingParticles dynamics engine.
Controlling Sampling
Frame Sampling controls for all of your particle based effects in
thinkingParticles is done through the Master DynamicSet global controls.
There, you will find the Viewport Sub-Sampling parameters. Sub-Frame
Sampling can be set independently for the interactive Viewport display and the
final render.
For complex face-to-face collision detection, you should set a Sub-Frame
sampling rate of 80-120 samples per second to ensure an acceptable result for
your collision detection.
This also brings up a good point - the velocity of the objects that are to be tested
for collisions will factor into the equation. Slower moving particles may not
need a massive amount of Sub-Frame sampling, while faster moving particles
may require more to achieve acceptable results. Of course, the higher the SubFrame Sampling rate, the longer it will take your computer to calculate the
collisions and final result. Therefore, you may want to adjust the sampling until
you get the dynamics animation you want.
Where to go Next?
Understanding Dynamics and how you can control them is another cornerstone
in getting amazing results from thinkingParticles. Continuing with the theme of
introducing you to the newest concepts within thinkingParticles, we'll explain
how the Initiator class of Operators will improve your animations AND save
you time and effort.
While it is highly recommended that you go through the Introduction material in
order, if you prefer you can click on any of the topics that interest you.
Initiators
The thinkingParticles Interface
Particle Group Tree View
DynamicSet Tree View
Wire Setup View
Create Rollout
Parameter Rollouts
Keyboard Shortcuts
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
What are Initiators?
thinkingParticles offers an advanced concept for rule processing of its wire
setups. It works through a new type of operator called an Initiator.
Initiators provide a different rule processing behavior and enhance the speed and
flexibility of thinkingParticles' real-time particle playback when burdened with a
complex set of rules and conditions.
There are 3 Initiator Operators that you can use within your DynamicSets.
PPass
PPassAB
PSelection
The main idea behind an Initiator is control. An Initiator behaves differently
from other operators. All connected conditions or operators are evaluated only as
soon as the Initiator is evaluated. This type of behavior offers much more control
for the processing of rules than with any other type of operator.
In the example above, within the Crash DynamicSet there is a Repulsion
Bounce Operator and a Fragment Operator connected to the PPassAB Initiator.
This is shown within the DynamicSet Wire Setup View (see below).
Now even though the DynamicSet Tree View indicates that the Repulsion
Bounce and Fragment operators should be processed before the PPassAB
operator, they will not be processed in the order as they appear. Since they are
connected to the PPassAB Initiator, only when the PPassAB is processed will
the connected operators be evaluated in the order as they appear in the
DynamicSet Tree View (Repulsion Bounce first, then the Fragment operator).
This behavior applies to operators
connected to the Initiator only.
Where to go Next?
At this stage, you should have a pretty solid idea of how Initiators inside of
Thinking Particles work. Beyond that, if you've gone through the rest of the
introduction, you should also have a fairly good grasp on how the various
components within thinkingParticles are connected. Now might be a good time
to review this information be revisiting the Introductory materials, or proceeding
ahead to the Tutorials to get some hands-on experience. The more time you
invest in learning thinkingParticles, the more significant the rewards and the
look of your particle animations will be.
The thinkingParticles Interface
Particle Group Tree View
DynamicSet Tree View
Wire Setup View
Create Rollout
Parameter Rollouts
Dynamics Simulation Concepts
Keyboard Shortcuts
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
What is an Element?
Extract from the 3ds Max definition:
"An element is one of two or more individual mesh objects (that is, groups
of contiguous faces) grouped together into one larger object. For example,
if you attach one box to another, you create one mesh object from the two
boxes. Each box is now an element of the object. Any function you perform
on that object affects all its elements. However, you can manipulate the
elements independently at the Element sub-object level."
In the case of thinkingParticles "Elements" should be in fact split down to a
proper object with a water tight surface not showing any holes in it. Clean
modeling, right from the beginning of the project, is the only way to guarantee
proper physics simulations at a later stage. Bad models will later result in funny
or unrealistic physics simulations - keep this in mind when handling complex
projects were the origin of the 3D models is unclear.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Keyboard Shortcuts
thinkingParticles uses a number of keyboard shortcuts to accelerate the overall
workflow within the plug-in.
Shift+Alt+P = When the thinkingParticles icon is selected in the viewport,
clicking on this combination of keys will open up the thinkingParticles user
interface.
Shift+Alt+O = This set of keys acts as a toggle to turn the entire particle system
on or off in the viewports. This has the same effect as if you went to the Master
Dynamic DynamicSet controls and turned the particles off.
Shift+Alt+D = Turns debug mode ON/Off
Shift+Alt+A = Brings up the thinkingParticles Analyzer
To learn more about the Right-Click mouse menu options and to learn how to
copy and paste nodes within the UI of thinkingParticles CLICK HERE
The following abbreviations are used:
LMB - Left Mouse Button Press
LMB + CTRL - Press Left Mouse Button and Control Key at the same time
RMB - Right Mouse Button Press
MMB - Middle Mouse Button Press
Main thinkingParticles Wire Setup View UI
LMB
Rubber Band selection
CTRL + LMB
Add to the selection of nodes
CTRL+ LMB
Click In Gray Background: Navigate the Wire Setup View
(Hand symbol)
RMB
Popup Menu (Remove, Cut, Copy, Paste)
CTRL+ RMB
Rollout Pop Up Menu
MMB
Panning in all directions of the Dynamic Set
SHIFT + LMB
Panning in all directions of the Dynamic Set
ALT+Mouse
UP/DOWN
Zooming in and out of the Dynamic Set
Tip:
To move multiple Nodes, use the
CTR+LMB and Move multiple
nodes with the mouse
Make Dynamic Set
The user interface of thinkingParticles offers a new workflow enhancement
function: Make Dynamic Set is a right click menu entry inside of any
DynamicSet (click on the background).
With the operators already selected right click into the DynamicSet; then choose
Make Dynamic Set this will collect all selected operators and place them into
one new DynamicSet missing connections will be automatically re-connected.
Drag Rubberband over any operators in a Dynamic Set and then press the
SHIFT key on mouse button release a new DynamicSet with the selected
operators is created automatically. Missing connections will be automatically reconnected.
Keyboard Shortcut Override Toggle
thinkingParticles supports the Keyboard Shortcut Override Toggle feature of 3ds
Max. Please make sure to turn it on when working with thinkingParticles, it will
allow to capture the standard keyboard shortcuts many users are so used to.
It is also important to note that the mouse cursor must be placed inside the
DynamicSet work space (grid) to operate the shortcuts on specific Nodes.
Possible keyboard shortcuts are:
CTRL+X : this will cut one or more selected Nodes to the windows clip board
CTRL+C : this will copy one or more selected Nodes to the windows clip board
CTRL+V : this will paste one ore more Nodes from the windows clip board into
the active (mouse pointer over grid) DynamicSet.
F2 : will rename a thinkingParticles Node in the tree view without any selected
nodes. When node is selected the selected node can be reneamed within the
DynamicSet
DELETE : will remove the selected Nodes from the active DynamicSet.
D : will toggle the Debug Window On or Off
A : will toggle the Analyzer window
M : toggles the Master Dynamic Set On and Off, this is good for adjusting global
tP settings
CTRL+D : when pressed, a new DynamicSet is created
CTRL+G : when pressed, a new Particle Group is created
Node Creation Accelerator
A new keyboard shortcut method has been added offering full access to all
available thinkingParticles Nodes. By pressing any of the keys listed below a
selector box will pop up and present the available nodes to choose from. The
nodes available are organized in by their main categories.
In general, pressing the Return key will use and create the selected node from
the drop down list. A single left click onto any Node in this list or by using the
arrow keys - along with the Return key will create the selected thinkingParticles
Node.
G : when pressed in a DynamicSet the NCA (Node Creation Accelerator) box
for Group nodes will show up.
C : when pressed in a DynamicSet the NCA (Node Creation Accelerator) box for
Condition nodes will show up.
O : when pressed in a DynamicSet the NCA (Node Creation Accelerator) box
for Operator nodes will show up.
H : when pressed in a DynamicSet the NCA (Node Creation Accelerator) box
for Helper nodes will show up.
B : when pressed in a DynamicSet the NCA (Node Creation Accelerator) box
for BlackBox nodes will show up.
DynamicSet Navigation
CTRL+ ARROW UP : moves in the DynamicSet tree view up for every key
press
CTRL+ ARROW DOWN : moves in the DynamicSet tree view down for every
key press
CTRL+ ARROW LEFT : moves within the DynamicSet tree view to the left of
the hierarchy
CTRL+ARROW RIGHT: moves within the DynamicSet tree view to the right of
the hierarchy
Node Operations
LMB
Click on Title bar selects a node
LMB + Move Moves the node
LMB Dbl.
Click
Title bar double click, collapse/unfolds the connected ports
LMB
On Input and Output square enables additional ports
LMB + Drag
On Port draws a wire
Shift + LMB
On Port, deletes a connection, NO questions asked.
RMB
On Titlebar brings up Operator Poup Menu
RMB
On Port brings up Port Pop Up Menu (Invisible, Rename,
Remove,Debug)
RMB+ALT
Deletes the selected node from the DynamicSet (without
asking)
SHIFT+LMB On Node Center or Title : Copies the Node(s)
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ThinkingParticles Subscription Drop 5
Subscription Drop 5 brings important bug fixes and a few more features. Find
below the list of changes as compared to Drop 4.
New Features and Fixes in Drop 5
FlowEmitter operator is a particle generator meant to be used for fluid
simulations. However, it is flexible enough to serve as a all purpose particle
generator as well.
FlowEmitter solves a key issue many SPH particle fluid simulations suffer
from; visible banding or layering when particles are emitted at different or
changing rates. Achieving a constant flow of particles while keeping the distance
between each particle the same, even when the rate of particles generated drops,
is a challenging task for the software. To learn more click HERE
PLight - lights play an important role in any animation or visual effects setup.
Controlling lights is key to awesome shots and creating depth and character in
visuals.
thinkingParticles allows many ways to control lights in a 3d scene however, the
PLight operator turns any particle into a real Omni light type along with proper
shadow casting. To learn more click HERE
ColorGradient - the ColorGradient Helper allows you to set or modify a color
gradient through operator nodes. This is a useful node to control lights and
materials through procedural setups. To learn more HERE
Alpha Gradient - the AlphaGradient Helper allows you to set or modify a
color gradient through operator nodes. This is a useful node to control several
MatterWaves inputs. To learn more HERE
ShapeNoise - this operator offers the option to add a deformation to any particle
shape in a procedural way. This operator offers a many features to control and
modify how a particle shape (mesh) can be displaced or changed in a way that
enhances the look of volume broken mesh debris. While the main function of
this operator is to work in conjunction with the volumeBreake operator it may
also be used with any type of particle mesh including fluids or instanced
geometry. To learn more click HERE
volumeBreaker Enhancements - fragments created by the VolumeBreak
operator can now be arranged into clusters to make them appear more natural or
have specific patterns. The introduction of a breakable map allows for more
creativity in deciding which areas should undergo a destruction. Procedurally
created volumeBreaker cells can now be merged with an existing raster to get a
more homogenous look of the fragments.
Fragment activation either controlled by particles (group) or helper objects is
controlled by threshold which is now multiplied with the particle size or object
size which allows for more control granular control of activation distances. A 2D
(surface) breaking mode has been added to volumeBreak as well. To learn more
click HERE
NodeAttribute - this new operator offers a powerful method to setup a complex
Visual Effects scene and let users modify it without touching the
thinkingParticles user interface at all. It offers a new way for a thinkingParticles
FX artists to integrate the modeling and animation team into the process of
creating visual effects. To learn moire click HERE
Fluid and Rigid Body Enhancements
Fluid and rigid body interactions have been enhanced a lot. Rigid bodies do now
show much better buoyancy and interaction with fluid simulations. Transfer of
momentum between fluid particles and rigid bodies is resolved much faster and
more accurate. Objects engulfed within a fluid will start to rise or sink depending
on their specific physical properties.
Other Enhancements
GeomContact has been enhanced and now supports Material ID as a filter to
restrict the output generation of GeomContact. Only when faces have the same
material ID GeomContact will operate. To learn more click HERE
The GeomPoint helper has been enhanced and now offers Barycentric face
coordinates as an additional output .
ObjToParticle offers a new right click menu to enhance the object selection
when multiple objects are used.
Fragment operator has been redesigned and the user interface is much cleaner
and more organized now. A new option to use either particles or objects as
helpers to define fragmentation.
LayerToParticle's PGroup option can now accessed by MaxScript.
HydroField comes now with a new impact behavior for splashes. Splashes can
now be used to create Hydrofield surface interactions and splash particles can be
used to add volume to a Hydrofield. To learn more click HERE
ObjToPartData operator offers global access to objects created by the
ObjToParticle operator.
Bullet Physics has proper support for Rolling Friction for Bullet Rigid Body and
Floor objects.
The user interface of thinkingParticles offers a new workflow enhancement
function: Make Dynamic Set is a right click menu entry inside of any
DynamicSet (click on the background). With operators selected; Make Dynamic
Set collects all selected operators and places them into one new DynamicSet and
wires needed connections if necessary. To learn more click HERE
Bug-Fixes in Drop 5
Bullet Margin did not work under all situations. This issue has been isolated and
fixed.
The Roughness feature in the volumeBreak operator is obsolete. Starting with
version 6.5 it will be phased out. Old scenes will still load and will show the
interface. New scenes created with thinkingParticles will not show this interface
anymore. Use the newly introduced ShapeNoise operator as a replacement.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ThinkingParticles Subscription Drop 4 Service Pack 1
Service Pack 1 of Subscription Drop 4 brings an important hot fix and a few
more features as well. Find below the list of changes as compared to Drop 3.
New Features and Fixes in Drop 4 SP1
EggTimer - offers a new feature ReachedHold is a new output staying active
after reaching the event. This is in contrast to the Reached output that fires only
once. To see an explanation of EggTimer check HERE
SnapShot - combining 2 particle shapes into one is now a breeze ! The
SnapShot operator now supports a Particle A and B input which allows to
combine individual particle shapes into one.
Object - The Object Helper operator adds new ParticleA and ParticleB inputs to
evaluate or process pairs of particles in an object list to allow for a GeomContact
AB test.
Bug-Fixes in Drop4 SP1
- Intersect operator could fail on possible self-intersections, this has been
improved for many situations
- The auto-backup feature of 3ds Max was interfering with the student edition
"save" dialog. Now, this dialog will only show one time per max session.
- Alembic Export Materia ID Fix when using Per Object per Particle
- StdEmitter, random positions stop after 4000 points this has been fixed.
- VolumeBreaker, when you used more cells as set in max chunks the
fragmentation was not done at all; this is fixed now.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ThinkingParticles Subscription Drop 4
thinkingParticles Subscription Drop 4 brings important bug fixes and a few more
features. Find below the list of changes as compared to Drop 3.
New Features and Fixes in Drop 4
Fluid Solver SPH VE (6.4) - a dedicated viscoelastic solver that is mainly used
to simulate highly viscous fluids. This spring based SPH solver allows to create
fluid simulations that can range from liquid honey to goo like fluids like dough,
for example. Even though, this solver is purely SPH based, fluids can become as
rigid as soft rubber; if simulation parameters are chosen right. thinkingParticles,
through its fully procedural effects approach, allows to control viscoelasticity of
a fluid based on an unlimited amount of procedural rules or functions. Fluids can
'harden' over time, they can become liquid again on proximity to a heat source or
any other procedural event you might think of. To learn more click HERE
ImplicitShape - The Implicit surface 6.3 algorithm has added functionality;
Materials and Mapping can now be assigned to the generated ISO surface.
Material and UV mapping is properly blended between different sets. Captured
or free air bubbles can be simulated/created with this new ImplicitShape
operator update. With a simple button click, round air bubbles are automatically
created inside of the ISO surface (an actual boolean ISO surface operation). This
option is great to simulate air or foam bubbles flowing within a fluid. To learn
more click HERE
VolumePos - A new reset mode has been added to the VolumePosition Helper. It
is now possible to refill a volume based on several conditions. To learn more
about this new feature click HERE
Flow Boundary - Setting a different adhesion value per boundary, is now
possible with the introduction of an adhesion multiplier inside of the boundary
operator. To learn more click HERE
EggTimer - A new feature has been added to the EggTimer node; the boolean
flag 'Reached' is kept active after reaching the timer's end. This easily allows to
create complex oscillator setups like the one shown below.
In this setup the egg timer, once started, will loop (set to loop) for 20 Frames and
then every 20 frames new particles will be created at a constant rate.
Object Helper Node - A new feature has been added to the Objects output
channel. When connected to an integer input of any kind, the total amount of
objects in the object list is output. This allows for fully procedural and automatic
count adjustments based on objects picked. A sample setup can be found below.
As shown in this setup, the Objects Helper node has its Objects connected to
the Count To input of the Counter Node. This will give the counter node the
amount of objects in the list as a value to count to. This setup allows to pick
more objects anytime later, without breaking the fully procedural approach of
the effects setup.
MatterWaves - A new option has been added: FLOW. This option allows to
create steady particle flows with a well defined fixed spacing. In addition to the
Flow option a new texture mapping feature has been added as well; the W
coordinate of the UV mapping is automatically animated over time. Every new
particle created gets a new continuous timestamp in the W component. This
allows for mapping of ISO surfaces along stream of emission. To learn more
about it click HERE
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ThinkingParticles Subscription Drop 3
New Features in Drop 3
Direct Alembic Import: thinkingParticles now supports direct file import of
Alembic *.abc files. Alembic is an open source format widely used by large and
medium sized studios around the world. Alembic is slowly becoming a standard
file exchange format between different applications. To learn more about the
ImportFile operator click HERE
thinkingParticles handles pure Alembic particle files as well as mesh based
Alembic files.
Direct Alembic Export: AlembicExport is a new export node offering *.abc file
export functionality. Many of the Alembic file format features are directly
supported by this node. Particles as well as meshes can be exported in one go.
Alembic export can be done either in one single file including many particle
groups or in multiple files containing individual particle groups.
The exported files can contain either a particle system (particle points, no
meshes), an object per particle group or each particle is stored as one individual
object (mesh).
For particle system export the AlembicExport node allows to select specific data
channels to be exported (e.g. velocity, spin, age ...). To learn more click HERE
New Particle Group Right Click Menu Option:
Right-Clicking on any particle group name brings
up an new context sensitive menu.
For each particle group name clicked; a list of
operators using or referencing this particle group is
listed. Clicking any of the Operator names will
automatically bring up and select the DynamicSet in
question.
This feature is great for debugging complex
DynamicSet setups containing hundreds of nodes.
Render Resets Simulation - this new feature allows for quick and easy
rendering adjustments of materials and lights. Instead of re-simulating the whole
particle system over and over again when rendering a single frame;
thinkingParticles can now take the information as seen in the modeling viewport
from that exact frame as set with the frame slider in 3ds Max.
New Caching Options and Methods with dramatic speedup:
Subscription Drop 3 is all about enhancing the particle cache workflow and
structures. A new frame based particle cache file system has been developed
allowing to store a cache file per frame step. This is in contrast to the already
existing single file particle cache system.
Cache write and read times haven been dramatically improved in Subscription
Drop 3 for all file cache operations. Writing a cache file is now up to 10 times
faster than before; this means the disk transfer functions have been optimized a
lot.
The following enhancements, explained in detail, are listed below:
Per Frame Caching option thanks to the new *.tpc format; with
enhanced sub-sampling option for output to learn more click HERE
Selective Cache Channels; each particle cache file can be adjusted
individually for its data to be output. To learn more Click HERE
Hierarchy particle cache manager; adjust and control cache stacking in
an easy and efficient way. To learn more click HERE
New Implicit Surfacing Options
Now, there are two highly advanced algorithm options to create an ISO
surface. Surface (6.3) brings a new method to thinkingParticles allowing
to create flat surfaces out of point clouds. It's the perfect tool for
creating surfaces for liquids with a smooth and even surface. To learn
more click HERE
New Fluid Solver Options
thinkingParticles SPH based fluid solver has been enhanced in Subscription
Drop 3. A new algorithm option has been added to the rollout menu; the new
SPH2 method offers a much more improved and stable method to create fluids
under larger pressure and bigger sub frame steps. While the first generation of
fluid solver is still available to choose from and it offers the same great features
as before; the new solver algorithm adds just more punch to the arsenal of fluid
simulation effects available within thinkingParticles. It is suggested to use the
newer incarnation of the fluid solver from now on, the previous method is
mainly kept for compatibility reasons. To learn more click HERE
New Drag and Drop Option for Particle Goups
Any particle group may be dragged inside a DynamicSet to automatically create
a particle PPAss operator. This is a handy shortcut to access the particles in a
DynamicSet for further processing.
Enhancements and Fixes in Drop 3
Besides adding new methods to the Implicit surface operator, some work has
gone into enhancing the overall processing time and stability of the surface
operator.
The PositionBorn operator received some love and got an enhanced random
particle distribution when emit distance is used.
Bullet Physics has been updated as well; Bullet Rope; BulletRopeData;
BulletRopeImport was missing the Margin parameter; this is fixed now.
Another area that saw enhancements is the VolumeBreaker operator; helper
object are now animatable and they are updated correctly.
The LayerToParticle operator got an overhaul which results in a general speed
improvement.
To accommodate for the new particle caching features in thinkingParticles the
Max Scripting functions have been extended to cover more file caching related
stuff.
A small issue has been found in the PPassAB operator; Particle Shape used the
wrong size; this has been fixed
The Math operator had an issue as well; the Matrix Composition function did not
work; this is fixed, now.
A new enhancement to the fluids : they now properly work with the Freeze
operator. Fluids can be frozen in time and released as well.
The Bullet vehicle operator now works properly with path follow even without a
particle input.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ThinkingParticles Subscription Drop 3 Service Pack 1
Service Pack 1 of Subscription Drop 3 brings an important hot fix and a few
more features as well. Find below the list of changes as compared to Drop 3.
New Features and Fixes in Drop 3 SP1
Motion Blur support for Soft-Bodies and Implict-Surfaces has been added.
Advanced professional rendering solutions like finalRender as well as many of
the other renderers on the market can support now direct motion blur with
thinkingParticles. Every 3ds Max SDK compatible renderer should be able to
access proper motion blur data within the mesh created by thinkingParticles.
In addition to deforming surfaces; rotational motion blur generated by spinning
rigid bodies has been added as well for compatible renderers.
The new 6.3 SPH2 fluid solver, introduced with Subscription DROP 3, comes
with a few new remarkable features. Visco-Elastic properties within a fluid are
much easier to achieve, now. Adding extra stringiness to a dissolving fluid
surface (also called sheets) is also much more controllable now. The new String
Viscosity parameter controls how much a fluid sheet should stay in a web like or
string like structure.
Visco-Elastic proeprties of a fluid are now controlled by two new parameters:
Spacer Push and Spacer Pull those new parameters allow to control a 'spring
back' force as well as a 'push away' force. Slimy thick dripping fluids forming
elongated tear off drops can be simulated, now.
For more information about the new controls click HERE
Bugfixes
Objects created in thinkingParticles which have a change of center of mass
(fragmentation) created the wrong motion blur information in the particle cache
resulting in position jittering when playing back from cache and rendering. This
issue has been fixed in this release however, caches have to be recreated again to
get proper results.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ThinkingParticles Subscription Drop 2 Service Pack 1
Welcome to thinkingParticles 6.0. In our ongoing desire to serve the needs and
expectations of our customers, cebas VISUAL TECHNOLOGY Inc. will
periodically release new Major Versions of its software for thinkingParticles to
enhance its features and stability for your production usage. It is strongly
recommended that you always keep your software up to date.
First time users upgrading to tP6 should note this important: = 4 &&
typeof(BSPSPopupOnMouseOver) == 'function')
BSPSPopupOnMouseOver(event);" title="Important Note"
onclick="BSSCPopup('important_note.htm',400,300);return false;"
href="javascript:void(0);" >Information
Find below a list of changes and additions made to thinkingParticles 6.0
New features found in thinkingParticles 6 Subscription Drop 2 SP1
thinkingParticles Subscription Drop 2 SP1 is a stability and enhancement
release. One new feature has been added as well. Bullet Softbody objects can
tear now based on a texture map or painted vertex channel information. A plain
white color inidcates areas that will tear while black areas in a bitmap will not
tear.
Find below a list of new features in this release
Enhancements and Fixes
An issue has been isolated and resolved that caused playback and caching issues
when a negative pre-roll time was used with thinkingParticles.
Position Born created in some situations the wrong position for new born
particles.
Bullet Physics would not create any physics interactions at all in rare situations.
3ds Max modeling operations performed outside of thinkingParticles (for
example cloning an object) could be unresponsive some times or lagging.
thinkingParticles was responding in such situations on endless message calls
form 3ds Max' interface.
Layer to Particle could sometimes behave in unexpected ways when using rigid
body dynamics.
PositionBorn operator did not respect 3ds Max Unit Setup settings it always used
generic units.
Softbody Texture Map based tearing
BTSoftbody offers now 2 new options to control tearing (auto-breaking). A
standard texture map can be used to control tearing or a vertex paint channel can
be used to define the areas of tearing.
Check out the new options here: BTSoftbody
Collision Map Operator has new options
CollisionMap has been enhanced and shows great speed improvements with
many particles and it even works now with points alone. It is now very easy to
create wet-maps for example.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ThinkingParticles Subscription Drop 2
Welcome to thinkingParticles 6.0. In our ongoing desire to serve the needs and
expectations of our customers, cebas VISUAL TECHNOLOGY Inc. will
periodically release new Major Versions of its software for thinkingParticles to
enhance its features and stability for your production usage. It is strongly
recommended that you always keep your software up to date.
First time users upgrading to tP6 should note this important: = 4 &&
typeof(BSPSPopupOnMouseOver) == 'function')
BSPSPopupOnMouseOver(event);" title="Important Note"
onclick="BSSCPopup('important_note.htm',400,300);return false;"
href="javascript:void(0);" >Information
Find below a list of changes and additions made to thinkingParticles 6.0
New features found in thinkingParticles 6 Subscription Drop 2
thinkingParticles Subscription Drop 2 comes packed with new advanced features
to expand the ever growing effects possibilities of thinkingParticles; FX artists
can now explore new ways of handling compressible fluid effects like smoke
and gas. In addition to simulate gas flows in an efficient and realistic way,
thinkingParticles 6.2 also adds the feature to render such gaseous effects like
smoke, clouds and fire.
This release is not only about new features; many bug-fixes and workflow
enhancements have been added as well. Subscription users can fully enjoy the
benefit of continuous upgrades and new features that will show up as they
become realized.
Find below a list of new features in this release
New Smoke Operators
A whole new category was added to the Operator drop down menu/section:
Smoke.
SmokeBoundary - this new operator is dedicated to handle smoke fluid and
rigid body interactions.
SmokeGroup - this is the main smoke fluid operator used to adjust and control
the smoke fluid simulation.
SmokeData - like any other fluid type in thinkingParticles; the smoke fluid
comes with a full set of simulation controls. SmokeData is used to access and
modify those settings on a per particle basis.
SmokeSolver - let there be smoke! Every fluid system needs a solver in its core,
this operator represents the actual smoke fluid solver.
SmokeRender - what good is smoke if you can't smell it ? Or in this case - see it
? This unique render node controls the rendering of the smoke fluid effect. For
the first time; thinkingParticles offers a fully procedural operator node to control
a rendering effect right form within thinkingParticles!.
SmokeTRanges - rendering complex smoke fluids like fire, gas and burning
stuff in general presents many challenges. Finding and adjusting the proper color
to represent the burn rate of the gas matter is a childs play with this new operator
node.
New Initiator Operator
The Initiator menu section has a new operator
PPassString - with this latest release of thinkingParticles; a new particle group
access workflow has been introduced. Particle groups can be accessed now
across hierarchy trees just by their name or parts of their name. This new
operator alone, opens up more powerful and efficient setups than it would have
been possible ever before.
New Generator Operators
LayerToParticle - a brand new operator for thinkingParticles offering the ability
to automatically "import" objects from the 3ds Max scene into a
thinkingParticles simulation. Working with the standard 3ds Max layer system,
one or multiple layers can be dedicated as an import to thinkingParticles layer.
Now, whenever a new object is created or moved to this layer - it will be
automatically added to thinkingParticles
LayerToParticleData - to support the functionality of the new LayerToParticle
operator a specialized LayerToParticleData operator has been introduced.
Enhancements
The Camera Map operator has new features and allows to do soem really
amazing magic tricks.
CameraMap - a new feature has been added to the CameraMap operator to
allow it to "freeze" or memorize UV-coordinates at a specific time. Those UVtexture coordinates are then applied to a selected group of particles, to simulate
the same UV camera mapping throughout the animation based on a specific
frame or time in the simulation.
Special Render Elements
thinkingParticles atmospheric renderer offers multiple render elements that can
be used to enhance the look of smoke and fire effects in a post processing stage.
Find below the list of supported render elements.
1.
2.
3.
4.
5.
6.
7.
TP_SmokeCombustibleRenderElement
TP_SmokeFlameRenderElement
TP_SmokeSmokeRenderElement
TP_SmokeVelocityRenderElement
TP_ZDepthRenderElement
TP_TransparencyRenderElement
TP_NormalRenderElement
Direct Particle Rendering
thinkingParticles 6.2 is the first version to offer true direct volumetric particle
point rendering. The SmokeRender operator does not only work with the newly
introduced smoke fluid system, it is able to render all particles without a mesh
(points in space). This is a very powerful feature and opens up new creative
possibilities. All of this point rendering functionality stays fully procedural
within the thinkingParticles context.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ThinkingParticles Subscription Drop 1
Welcome to thinkingParticles 6.0. In our ongoing desire to serve the needs and
expectations of our customers, cebas VISUAL TECHNOLOGY Inc. will
periodically release new Major Versions of its software for thinkingParticles to
enhance its features and stability for your production usage. It is strongly
recommended that you always keep your software up to date.
First time users upgrading to tP6 should note this important: = 4 &&
typeof(BSPSPopupOnMouseOver) == 'function')
BSPSPopupOnMouseOver(event);" title="Important Note"
onclick="BSSCPopup('important_note.htm',400,300);return false;"
href="javascript:void(0);" >Information
Find below a list of changes and additions made to thinkingParticles 6.0
New features found in thinkingParticles 6 Subscription Drop 1
New functions and enhancements have been added to thinkingParticles, with the
introduction of Subscription Drop 1; artists can enjoy more powerful spline
generation methods, better volumeBreaker features and enhanced functionality.
Find below a list of new features in this release
New Helpers and New Section
A new category was added to the Helpers drop down menu/section, Curve
/Shape .
Curve2D : is a new Helper object allowing to define a curve to control an output
value. There are 2 methods to use this new Helper Node. It can be used directly,
by wiring it to other Nodes; or it can also be used in 'Satellite' mode were
another Operator Node picks it form a list of available Curve2D helpers. One
example of such a satellite Node would be the SplinePool operator. A Curve2D
Helper Node is used in SplinePool to control the thickness of the spline shape.
Curve2D** - used to access and duplicate (instance) the parameters of any
Curve2D Helper in a DynamicSet. Keep in mind that this Helper Node does not
work on its own it needs an original Curve2D Helper Node to attach to.
ValueToValue - Use this Node to define a curve to control an output value. This
helper allows detailed control of it's input and output range which are mapped to
the curve.
Shape -This Helper Node allows you to query a Shape (spline) object. For any
given length, for example, the 3D position, on a spline, can be output.
Shape** - A Helper Node used to access and duplicate (instance) the parameters
of any Shape Helper in a DynamicSet.
ParticleData - a new output, AgeRelative, has been added to this Node to
enable the artists to control other nodes based on the particles' lifetime as it is
seen between birth (0) and death (1).
PPass - new output, AgeRelative, has been added to this Node to enable the
artists to control other nodes based on the particles' lifetime as it is seen between
birth (0) and death (1).
New Features and Additions
SplinePool - allows now to use user defined Shapes to create a mesh for a spline
in addition; the thickness of the spline mesh can now be controlled by user
defined curves.
SplineData - this operator has also been updated to allow detailed control for
custom shapes and the use of the thickness curve function
SplineKnot - Splines can now have their own specific UVW-coordinates. New
Inputs and outputs have been added to allow for better UVW control.
volumeBreak - a new functionality has been added to the volumeBreak Node to
allow for the creation of more realistic and natural looking fragments. A highly
optimized area aware displacement method has been developed to allow detailed
control of the effect.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
What's new in thinkingParticles 6
Welcome to thinkingParticles 6.0. In our ongoing desire to serve the needs and
expectations of our customers, cebas VISUAL TECHNOLOGY Inc. will
periodically release new Major Versions of its software for thinkingParticles to
enhance its features and stability for your production usage. It is strongly
recommended that you always keep your software up to date.
First time users upgrading to tP6 should note this important: = 4 &&
typeof(BSPSPopupOnMouseOver) == 'function')
BSPSPopupOnMouseOver(event);" title="Important Note"
onclick="BSSCPopup('important_note.htm',400,300);return false;"
href="javascript:void(0);" >Information
Find below a list of changes and additions made to thinkingParticles 6.0
New features found in thinkingParticles 6
As with every new major release, new functions and enhancements have been
added to thinkingParticles, with the introduction of Release 6 a new upgrade of
its physics solver has been added with the intention of becoming the multiphysics solution as the driving force behind all future versions of
thinkingParticles. Release 6 also offers, for the first time, a dedicated fluid
simulation system that will allow to simulate a wide range of fluid effects.
Find below a list of new features in this release
New Shape Operator Node
ImplicitShape : is a new Shape Operator node generating an isosurface
representation of a volume created by a particle cloud. It is best used to create a
surface for fluid effects; however it can also be used to create any kind of surface
that is based on particles.
New Multi-Physics Fluid Solver
thinkingParticles 6, offers a multi physics fluid dynamics system to simulate
water or other incompressible flowing substances. The basis of the fluid solver is
a Smoothed Particle Hydro dynamics (short:SPH) method.
thinkingParticles uses it's own flavour of a SPH solver that is specifically
developed to perform with larger time steps (sub-frame samples) and perfectly
integrates into the fully procedural workflow thinkingParticles is famous for.
Flow Group : this node is used to create particle based fluids within
thinkingParticles.
FlowBoundary : a node to handle rigid body-fluid interactions
FlowSolver : this node represents the core fluid solver used by thinkingParticles
6; this solver is full multi-threaded and supports as many cores as there are
available
HydroBoat : a node to simulate water based vehicles interacting with the
HydroField
HydroField : use this node to create shallow water type simulations. This isused
to simulate pools or even large scale ocean surfaces.
Analyzer Tool
Simulation networks can grow over time and become pretty complex.
Optimization and finding bottlenecks were near impossible to do in previous
thinkingParticles versions. With the introduction of the real-time Analyzer tool it
is now possible to get in depth details about any DynamicSet wire setup.
Analyzer : a new real-time DynamicSet wire network analyzing tool. It shows
each single node used and how much time it eats up along with the particles it
created or processed.
New Generator Nodes
The Generator section got upgraded as well in this release! It is now possible to
procedurally create a mesh snapshot of any amount of particles and turn them
into one single particle representing the mesh at the time of snapshot.
SnapShot : used to procedurally bake a particle mesh into one single particle. A
perfect usage scenario would be a fragmented pile of rubble that was created out
of 10,000 particles that is at rest now and is turned into one single particle and
mesh that still is part of a rigid body simulation. This allows also for clever
stacking animations.
TrailBorn : is similar to a PositionBorn or Born operator, however the particles
created by this operator use by default an unlimited live time, a size of 1 and
mass of 1. The key feature of this operator is to use it for procedural modelling
with particles. As usual thanks to the flexibility of thinkingParticles core this
operator might be even used to cook coffee or bake bread!
New Utilities
Joints are a powerful feature in thinkingParticles; to promote their use and
amazing potential a new utility has been created.
tP Contact Points : use this tool to automatically create joints between objects.
Any number of meshes can be selected and joints can be placed automatically at
all closest contact points.
New Geometry Helper
thinkingParticles 6 comes with a fully procedural approach to automatically
create joints between particles. This node works in a similar way to the tP
Contact Points Utility.
GeomContact : this node can be used to procedurally create joints or other types
of particles at closest contact points between two objects.
KeyBoard Short Cuts
thinkingParticles 6 offers many enhancements regarding workflow and efficient
processing. New keyboard short cuts help in streaming lining the workflow even
further. To learn more: See here
New Settings/Options in MasterDynamic Set
New optiosn can be found in the MasterDynamic Set rollout menu. To learn
more Click HERE
New Bullet Physiscs simulation parameters !
By introducing a new level of multi-physics solvers the methods of assigning
simulation parameters to particles have changed as well. The old style of adding
and handling simulation parameters through the particle group is obsolete, now.
You can learn more about it at : Bullet_Physics_Rollout
New Bullet Operators
thinkingParticles 6 comes with a bunch of new Bullet Physics nodes to enable
and enhance physics simulations. True soft-body simulations are now a part of
the multi-physics engine.
BTParticle : this operator is used to get particles (points) into a physics
simulation and interact with rigid and softbodies. Use this operator, for example,
to spray away rigid objects with simple particles.
BTParticleData : this node is used to procedurally set or adjust simulation
parameters for a particle.
BTRigidBody : replaces the old particle group based rigid body simulation
parameters setup method.
BTRigidBodyData : Use this node to procedurally set or adjust rigid body
simulation parameters of an individual particle.
BTSoftBody : Use this operator to create soft-body objects for physics
simulations. This operator turns any particle (with a mesh) into a soft-body. This
operator is useful to simulate cloth, paper, jelly or rubber type materials.
Particles may interact with soft-bodies as well as rigid bodies.
BTSoftBodyData : used to control, set and modify soft-body physics simulation
parameters. Every particle can have different parameters; so it is important to
supply the proper particle input stream. Keep in mind; this operator can be used
to set a physics simulation value or to read its current value.
BTRopeImport : is meant to replace the old particle group based method of
attaching/creating physics simulation parameters assigned to a particle. In
previous versions of thinkingParticles the Object2Particle operator took care of
creating automatically a rope object/particle when a spline was picked. This
older method is obsolete now and should no longer be used. Instead, use this
new operator to create a rope out of any spline.
Procedural Spline Physics and Spline Modeling
thinkingParticles was the first tool ever on 3ds Max to introduce a fully
procedural approach to particle effects and 3d modelling with particles. With the
introduction of thinkingParticles 6 procedural modelling in 3ds Max has been
lifted to new heights!
The following new nodes enable procedural spline modelling in 3ds Max:
SplinePool: acts as a central spline collector and is able to control multiple
splines in a simulation at once. All splines referencing the same SplinePool
operator will have the same settings and parameters, to add multiple independent
splines in a simulation; multiple SplinePool operators are needed.
SplineCreate:This operator can be used to procedurally create splines. Its output
allows to easily add spline knots and even sort the knot order within the spline.
SplineInit : used to create procedural splines based on particles. Each particle
becomes a spline knot and a spline is drawn between them; connecting each
particle to form the final spline object. The SplineInit operator works in
conjunction with SplinePool to actually create a visible fully procedural spline
object in a scene. Procedural thinkingParticles splines can easily used in physics
simulations or other special effects loaded tasks.
SplineImport : is used to turn a standard 3ds Max spline object into multiple
particles and a fully procedural spline.
SplineData : used to acquire information about procedural spline data. This
data can be used to change or react to the creation or animation of splines.
Without any input, the selected SplinePool data is used. All splines in the
SplinePool are evaluated (incl. spline branches).
IsSpline : used to gather information about a particle in connection of being a
spline or not and what its function may be.
SplinePhysics : use this operator node to create spline based physics
simulations. Splines can act like springs or ropes.
SplineKnot : allows you to handle and process the knots of any spline object.
The SplineKnot operator is also useful to handle branching of splines;
branches can only exists on knots.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.5
Stay in Contact
thinkingParticles undergoes constant development and we need your help to
improve it. If you think of features you'd like to see within thinkingParticles,
please let us know. We'd love to hear from you and we will always answer your
emails. It doesn't matter if you just want to write in to give us your opinion. Tell
us what you think and what you would like to see in upcoming releases.
The easiest way to contact us is by email.
Our contact information is as follows:
cebas VISUAL TECHNOLOGY Inc.
2202A - 4464 Markham Street
Victoria, BC V8Z 7X8
Canada
USA: +1 323 774 1799
Canada: +1 250.590.2913
email: info@cebas.com
Copyright Notice
The copyright of thinkingParticles and the manual is owned by cebas Visual
Technology Inc. Reproduction of the software or associated digital information
of this manual is forbidden, unless confirmed and signed in writing by cebas
Visual Technology Inc. All Rights are Reserved.
thinkingParticles © cebas 2002-2014
This software is designed to work as a plug-in for 3ds Max, only.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.5
Technical Support Information
General Technical Support
If you are having any difficulties with your cebas Plug-in products, then feel free
to contact our support team at :
support@cebas.com
Please be sure to include as much specific information as possible when
reporting errors including the following:
cebas Plug-in tool that is giving you trouble along with your product Serial
Number (without your serial number, cebas will NOT be able to assist you)
Hardware configuration (single / dual motherboard, amount of RAM, etc.)
Operating System (including language and Service Packs) Version of 3ds Max
you are using Step-by-step description to reproduce the problem - the more
detail you can provide, the better Other miscellaneous notes, plug-ins present
and observations A *.max file that shows the problem A daytime phone and
return email address (if different from the one sent in on).
When sending files for diagnosis, please be sure to compress them with a
Windows utility like 7Zip or WinAce. This will make transfer a much faster, and
simpler process.
FAQs
Within the cebas website are FAQs for all of the cebas Plug-ins, including
thinkingParticles. Check here for answers to common questions. As problems
are reported and solved, answers to these issues will also be added to this FAQ
area, so check back often.
Installation & Authorization Support
If you're having difficulty installing or authorizing your new cebas Plug-in tools,
then you may also choose to call our technical support staff directly so that we
can get you up and running quickly. If you decide to call, be sure that you have
your Product Serial Number available. If you do not have it, our staff won't be
able to assist you.
Phone: +1 250.590.2913
Please understand this phone line is for Installation support only, and all other
technical and usage support questions will be referred to email or to our support
forums for assistance.
Other Options
cebas Visual Technology Inc. will continue to enhance thinkingParticles. When
there are new releases or updates to the product, you will be informed by your
authorized reseller and through direct contact from cebas. To best keep you
informed about new releases and free updates you must be a registered user on
our web system and subscribe to the news letters you are interested in at:
www.cebas.com.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ThinkingParticles Analyzer Tool
thinkingParticles offers various tools to help you debug a simulation or setup.
With its latest release thinkingParticles introduces a new tool called TP
Analyzer, this tool is meant to find and visualize the bottlenecks in a simulation
and setup. When a simulation runs the TP Analyzer can be invoked by pressing
the 'A' key when the thinkingParticles dialog is open or by pressing Shift+Alt+A
when Max is active.
Every single operator in a running simulation will be evaluated and measured
down to a fraction of a millisecond. The profiling happens in real time and the
timings are constantly updated. The results and parameters to be analyzed can be
easily set by a simple right click menu.
As shown in the right click menu above, multiple parameters can be shown in
the Analyzer window. Most of the parameters are obvious and self-explanatory;
Parameter names with a preceding B indicate the timing specific to a branch or
Hierarchy of a Dynamic Set. All the timings are added up within a branch. While
the "non-B" parameters display the raw values created by one operator in a
Dynamic Set.
The select menu dialog offers the option to automatically select the node or
branch that uses up the most time (Delta) in a simulation or the operator with the
most time or highest particle count.
Besides showing all nodes and closing all branches, the results can be Saved and
later loaded in for later review.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Dynamic Set Rollout Menu
The DynamicSet Rollout menu offers all important parameters to control a
DynamicSet. Make sure to read about how to create your own TD-Tools also
check out the section about how to work with simulation files in the chapter:
How to Work with Sim files.
Time Offset - sets the play offset of the recorded cache
file. This can be used to start at a certain frame when
playing back the particle system.
Position X,Y,Z - sets the position, in World Units, where
the cache playback should happen.
Rotation X,Y,Z - rotates the particle cache playback
along each of the individual axis, around its center point
Scale - defines a scale factor for the particle cache
playback.
Link to Object - instead of specifying discreet X,Y,Z
values as explained above, you may also use any object to
position the particle cache playback in the scene. Even
another particle system may be used to position and place
particle cache playbacks!
Out of Range Hold Particle - the following options
define the playback behavior of the cached particles. Outof-range playback can behave in the following ways
Off - cached particles outside of "their" recorded time will
not be visible at all on playback
< - will show the first frame of recorded particles when
the cached particles are outside of "their" recorded time
<<>> - shows and holds the particles from their first
cached frame from beginning of playback and at end of playback, the last cached
frame of particles is kept visible.
>> - at end of playback the last cached frame is kept visible
Group - this control defines the particle group that should be stored along with
the DynamicSet when saved as a black box. (setting this option is no longer
needed! This is an option for compatibility with old scenes, only)
Emitter - defines the Emitter type to be used for "easy click" particle systems.
When an emitter type is chosen, a set of parameters is automatically added as
DynamicSet Inputs (see image above). A rectangle emitter was chosen in the
example above, along with X, Y, Z ports, to specify the dimensions that have
been automatically added to the DynamicSet input ports. Those ports
automatically appear in the None Tree-View section of the Rollups list.
Name - specifies a particle name that will be used when an emitter is created.
This option is only valid when an emitter type is chosen.
Rollups List Box - displays all available rollup menus for this DynamicSet.
Standard windows Drag and Drop mouse operations allow you to sort or reorganize the appearance of the menu sections or parameters.
Add Roll. - when pressed a new Rollout-Menu will be added to the list of
menus. A single long click will allow you to rename the newly created menu.
AddPort - adds an input port to the selected menu section. Several different
input ports are available from the list and every port may also be renamed, with a
single long click on its name.
Remove - removes the selected port or menu entry.
From - sets the minimum value that the port can have.
To - sets the maximum value a port should be able to get.
Percent - turns the value into a percentage instead of a plain number value.
Control - is a context sensitive drop down menu that shows the available UI
options for a given port. Depending on the type of port, there may be several
user interface options to choose form. An integer, for example, may be a simple
single value or a multiple value check box or list box .
Tip
The starting value of a UI element can be easily set when the UI interface is
displayed in the rollout. The value set there will be used whenever this interface
is created for the first time.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Groups Overview
Every time you create a Particle Group within the Particle Group Tree View, you
automatically create new Group operators within the Create Rollouts. The two
entities are inexorably linked together, and you can select your Particle Groups
from either the Particle Group Tree View or from within the Wire Setup View.
If you're Particle Group Tree View looks like this:
Then you'll see the following in the Create -> Groups Rollout:
As you can see, there is a direct one-to-one relationship for all of the groups in
that they not only exist in a hierarchical tree view on the left side of the
interface, but they also exist as operators that can be used to wire up parameters
on the right side of the interface.
Now when you click on the Group within the Group Tree View, you will be
presented with a number of rollouts on the right-hand side of the user interface.
These rollouts let you set how the particles look in the 3ds Max viewports, as
well as add Data Channels to each group for use within your Wire Setup View.
These Data Channels can be very useful for advanced effects and give you an
extra amount of flexibility when building your particle animations. Keep reading
to learn more about these Data Channels.
Remember that the look and display
for your individual particle groups
will show up as you set them in the
Groups Rollouts, unless you turn on
the Force this Setting checkbox
within the Master Dynamic rollout
from within the DynamicSet Tree
View.
What is a Data Channel?
Data Channels is a technology used
in thinkingParticles since R1. With
the release of thinkingParticles
Version 3.0 the Data Channel
concept should no longer be used to
transfer data between particles.
Instead the newly introduced
memory operator should be used
whenever possible. However,
because of compatibility, this feature
is still implemented and fully
functional and for complex
BlackBoxes data channels might be
still a good choice!
One concept is the ability to attach any kind of value to a particle. Data
Channels are a very flexible way of adding features to a particle that are not
necessarily known to the system beforehand. What this means is that you can
define new Output Data Streams for your Group Operators that represent data it
would not normally be aware of. These output data streams can be based on their
own rules and conditions.
As you can see from the screen shot above, every particle Group has a basic
parameter set with various controls. One control is the viewport display or color
assigned to the particles in that group. Another standard option in the particle
group is the Data Channels list. Several value types can be added to a particle
group.
The options are:
Float
Int
Point3
Alignment
Color
Next, we'll discuss how you can utilize these various Data Channel types to your
advantage.
How do Data Channels work?
There are situations where your particle animation might need one or more
special values that are usually not part of a standard thinkingParticles particle
data stream. A particle data stream handles all of the information that is needed
to control and modify the particle behavior. Particle Size, Age, Alignment, Mass
and many more are common parameters that are needed by many of the
operators.
The concept surrounding a Data Channel may take a bit of getting used to, but it
can be a VERY powerful tool for you when needed. Since the data that comes
from this channel can be driven by other rules and conditions, you can build very
complicated data streams which can refine your particle animation.
There are several steps needed in order to create a new Data Channel.
1. Within the Group itself, you must add a new Data Channel Type.
2. Select a value type (Float) from the dropdown list.
3. In the text edit field above, type in a descriptive name for this value
4. Press the Add button to add the parameter to the particle Group
5. Next, you need to create the Data Channel by creating a Data Channel
Operator in your Wire Setup View.
6. Once you have a Data Channel Operator, you must Initialize it.
1A) You connect the Particle Group (the one that has the channel from Step #1)
to it so that it uses these particles as its source.
2A) Next, you feed in a data stream value that represents the data type you want
it to represent.
This may sound confusing, so let's walk through a quick example.
Lets say that a data stream is needed to represent the Heat value for a particle.
How would this be done? A particle data stream doesn't provide this kind of
information natively, but by using a Data Channel, it should be possible to
construct one.
The first thing the user would do is select their Particle Group in the Particle
Group Tree View. Next, they would consider which kind of data value they
would expect from this custom Output Data Stream. In this example, let's
assume they want it as a Float value. So you choose a name and select the Float
data type and hit ADD as shown below.
Once you have created a new channel, you need to define it. So you go to your
DynamicSet and add a new Data Channel operator into your Wire Setup View,
along with the Group that has the new data channel. You connect them so that
the Data Channel is using the modified Group as the source.
As you can see above, there is a particle Group called HotParts that contains the
new data channel called Heat Index. This is the Float data stream that was set
up previously within the HotParts Group. Next, you need to feed in a Float value
to the Data Channel operator to initialize it.
This is where the fun really starts. You can really get as in-depth here as you
like, since you don't have to pipe a static value into this Data Channel. For
instance, perhaps to determine the Heat Index value, you could create a set of
rules (maybe as a Black Box) that calculates the number and force of the
collisions each particle has had, in a specified amount of time. A particle with
more collisions would appear to be much "hotter" and get a higher Heat Index
value. Those particles that exceed the Heat Index value might then be passed to
another Group to further refine their motion - such as increasing their speed to
indicate an "excited state".
In the example above a Black Box called Heat Index Test has been added to the
DynamicSet and pipes its Output Data Stream into the Data Channel.
So what happens next? Now that the new Data Channel is set up and has a value
being fed into it, it can be used from within the particle Group just like any other
Output Data Stream. As shown below, a new DynamicSet was created to test the
Heat Index value, and based on a set Threshold Condition, particles exceeding
that value are placed into a new Group Operator called Group.
One more thing worth noting is, that since you are not limited to a single Data
Channel within your particle Groups, you must take care to keep them all in
order. To do this, the Data Channel Operator contains a single spinner within it,
where you will set it's Index Value. It is important that you NOT give two
separate Data Channels the same Index Value, since this number determines
which Data Channel is affected within your particle animation.
As demonstrated with this little example, thinkingParticles offers unlimited
flexibility and lets you create and control particle effects in ways no other system
can provide.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Group Rollout
The Group Rollout is where you set parameters for the Particle Groups that you
have created and generate extra Data Channels for your Group operators.
Be aware that as you name each of
your Particle Groups, this topmost
rollout's name will change to reflect
the Group you're working with. In
the example below, the root Particle
Group ALL was chosen, so the
topmost rollout name shows All. If
the Particle Group BlueParts was
selected in the Particle Group Tree
View, then this top rollout would be
named BlueParts instead.
Color - This color swatch sets the color of the Particle Group's particles when
displayed in the 3ds Max view ports.
Display Dropdown - This drop down list provides options for how you want to
view your particles within the 3ds Max view ports.
Besides the standard particle viewport display styles, thinkingParticles offers a
display option that shows the Particle ID for each particle. This ID can be used
in conjunction with the PSelection Operator to delete specific particles for
example.
A Particle ID is only valid as long as
the particle exists. When it dies, this
number can be recycled for other
particles. Test for a specific particle
ID should be performed within an
appropriate time frame.
Show Mesh - Activate this checkbox to display the particle mesh in addition to
the particle display option, for the selected Particle Group.
Renderable - when checked, the particles in this group will be rendered. Note,
this is not a value that is passed on below the hierarchy.
Data Channels - This window contains a list of all extra Data Channels that
have been created for use with a particular group. thinkingParticles offers many
advanced concepts to control or handle particles. One new concept is the option
to attach any kind of data value to a particle through what are called Data
Channels. Data Channels are a very flexible way of adding features to a particle
that are not known to the system beforehand. To learn more about how Data
Channels function, go HERE.
Name space - Just above the Channel Type drop down list is a blank space. This
text field allows you to type in a descriptive name that is to be associated with a
newly created Data Channel. While this may seem like a common sense move,
please be sure to type in a name in this field BEFORE you hit the ADD button to
create the new Data Channel.
Channel Type - This drop down menu provides you with a list of Data Channel
value types that you can use to create new Data Channel output data streams for
your Particle Groups.
REM. - Click on the Remove button to remove a selected Data Channel from
the list window.
ADD - Click on the Add button to add a new Data Channel to the list window.
Be SURE you've entered a name in the Name Space prior to clicking ADD so
that you new Data Channel has a recognizable name.
Shape Collision Dynamics
Elasticity - Use this spinner to control the bounce strength between inter-particle
collisions. Higher values will cause the particles to lose less energy per bounce.
Be aware that this spinner can go above a value of 100, and any values higher
than this limit will cause particle collisions to produce extra energy.
Dynamic Friction - This spinner sets the friction (power loss) between particles
when they collide with each other. Be aware that this power loss happens only
on impact.
Static Friction - This spinner defines the friction between particles when they
are in contact (sliding) with one another. Higher Static Friction values will make
the particles slide less.
Delay Frames - This spinner sets a delay value for the dynamic calculation of a
particle. A Delay Frames value of 10 means that 10 frames after the particle is
born, the physics engine kicks in and takes control through the dynamic rules
that are present.
Optimize - Activate this check box to enable the parameters found in the
Collision Optimize rollout menu. When active, the face counts within the
colliding meshes will be automatically reduced. This face reduction is only done
"internally" for the collision objects and not for the rendering mesh. This option
may speed up the dynamic simulation enormously. However, if overdone the
results may be incorrect.
Active - Select this option to make the particles in the selected group respond to
all forces, including dynamic simulations.
Neutron - When this option is active, all particles in this group will be treated as
a passive dynamic object. By passive dynamic, we are referring to how the
particles will react to other particles and objects within your scene. Collisions
between this passive object and other particles will occur, but it will remain
uninfluenced by both the particle collisions and forces in your scene.
Particles in this group will also not
respond to any force fields or space
warps.
Frozen - Activate this radio button to get hybrid particle behavior. In this state,
the particles in the selected Group behaves somewhere between the Active and
Unyielding states. All particles in this group will be born as dynamically
sleeping. In other words, they will not respond to any forces at all except
impulses (such as collisions - only forces like Gravity and Wind will have no
effect when in sleep mode). In the event of an impulse interacting with the
particles in the group, the particles will become dynamically awake and
respond to standard dynamics like other active objects.
Shape Collision Operator
Voxel Grid - This spinner defines the number of cubic subdivisions that are
calculated to wrap the objects outer boundaries. Higher values will produce more
accurate simulation characteristics, however the dynamics calculations will take
longer.
Important when you set Voxel Grid
to 0 (zero) a true box collision is
assumed, when set to 1 (one) the
mesh itself is used to test the
collision to the nearest surface point.
The latter mode is much more
accurate but it also uses more CPU
computing time so it is slower.
Edges Samples - This spinner is used to add extra collision points along edges
of an object. This value should be increased with objects that have long stretched
edges (e.g. a long box object) or sliver triangles. If this value is too low, objects
may penetrate each other along their edges.
Velocity Friction - This spinner's value is based on the relative speed difference
between two particles. The slower particle will force the faster one to slow
down. Higher values will cause the particles to slow down more rapidly. This
can be used to simulate viscous materials such as oil, sludge or molasses.
Frozen First Activation
The following parameters are only valid for the first activation of a Frozen
object. After the object has changed state the parameters are no longer valid or
considered.
Velocity Thresh - sets a Velocity Threshold that should be used to really wake a
particle up.
Rotation Thresh - defines the rotational speed that needs to be there to really
wake the particle up.
Motion Inheri. - sets the motion inheritance multiplier at wake-up time for a
frozen particle
Deformation
Max Depth - sets the maximum penetration depth allowed, for a deforming
particle.
Radius - defines the "compression" radius or area the deformation might occur
within a deforming particle.
Impulse Thresh. - sets the minimum impulse needed, to start a deformation of
a particle object.
PhysX Operator
The following parameters are for the NVIDIA PhysX engine valid, only. Other
dynamic solvers will not be affected by those settings.
Box - sets the particles to a BOX collision mode. All particles will be treated as
highly optimized procedural boxes. This speeds up shape collisions a lot.
Sphere - when checked, the collisions will all be treated as Spherical collisions
regardless of the real shapes the particles might have.
Convex Mesh - check this option, to use the Convex hull of the particle shapes
to calculate shape collisions.
Triangle Mesh - when checked, the real triangle mesh of the particle object will
be used for collision detection between particles.
There is only ONE object allowed in
a scene that has this Triangle Mesh
flag turned on! PhysX does not
support multiple triangle Mesh
collisions in a scene.
Shape Collision Optimize
The controls within this rollout adjust the degree of optimization of objects
involved in collision detection.
Off Under Faces - This spinner sets a numerical face threshold for optimization.
If an object has fewer faces than the specified value, then it will be ignored for
optimization purposes.
Face Thresh - This spinner sets the threshold angle used to determine which
faces are collapsed. Low values produce less optimization and better
approximations of the original shape. Higher values improve optimization, but
are more likely to result in sliver faces that render poorly (see Bias for how to
control this).
Edge Thresh - This spinner sets a different threshold angle for open edges
(those that bound only one face). A low value preserves open edges. At the same
time you can apply a high face threshold to get good optimization.
Bias - This spinner helps eliminate skinny or degenerate triangles that occur
during optimization which can cause rendering artifacts. Higher values keeps
triangles from becoming degenerate. The default of 0.1 is generally enough to
eliminate the skinniest triangles. Range=0.0 to 1.0
A value of 0.0 turns Bias off.
Max Edge Len. - This spinner specifies the maximum length beyond which an
edge cannot be stretched when optimized. When Max Edge Len is set to 0.0, it
has no effect. Any value greater than 0.0 specifies the maximum length of the
edges. When used in concert with the Bias spinner, this control helps you avoid
creating long skinny faces while optimizing.
Preserve Smooth Boundaries - When this check box is active, the optimization
routine only allows faces that share at least one smoothing group to be collapsed.
Bullet Physics Rollout (Obsolete)
With its latest release of thinkingParticles, a new methodology of handling
physics simulation parameters has been introduced. It is no longer recommended
to use the Particle Group approach as it was used in earlier versions of
thinkingParticles. This has been replaced by dedicated operators that will store
and handle physics simulation parameters for each individual particle.
This new method and system will prevent overloading the internal particle
database with unused data. Only when physics are used the data will be
generated and attached to a particle. It is recommended to manually convert old
scenes to the new operator based system and for new scenes the new operator
based method should be used.
Important:
The Bullet physics parameter rollout
will only be visible when a
BulletPhysics node exists in any of
the DynamicSets.
This feature is no longer supported
and should not be used anymore!
To assign Bullet Physics parameters to a particle you should use the following
operators.
BTParticle
BTRigidBody
BTSoftBody
BTRope
RopeImport
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
Master Dynamic Rollout
Within the Master DynamicSet rollouts, you can tell thinkingParticles how you
want it to interpret your particle system's animation. You can also globally turn
the entire particle system on or off, by using the controls within this rollout. The
Master DynamicSet rollout also contains a very important option: the Edit on
the Fly button is accessible from the Master DynamicSet rollout.
To access this rollout menu, the Master DynamicSet must be selected from the
DynamicSet Tree View.
ON - Activate this button to enable thinkingParticles's rule processing and
particle generation. When this button is disabled, no rules will be processed and
no particles will be generated.
Edit on the fly - With the Edit on the Fly option active, you are able to edit
your particles system in real-time, without having to wait for it to update. The
particle animation will update only at the beginning of the cycle, if you have the
animation running. This can provide a much more efficient tweak mode, when
you have a rough animation that you're looking to refine. However, if you are
dealing with simple settings that you want to see in real time, or when you're
adding new rules and conditions to your particle animation, you will want to turn
this option off.
Particle Shape - From this dropdown list, you can choose from several particle
visualization styles to show in the 3ds Max viewports for the selected
DynamicSet.
Besides the standard particle viewport display styles,
thinkingParticles offers a display option that shows the
Particle ID for each particle. This ID can be used in
conjunction with the PSelection Operator to delete
specific particles, for example.
NOTE:
A Particle ID is
only valid as long
as the particle
exists, and when
it dies, this
number can be
recycled for other
particles. A test
for a specific
particle ID should
be performed
within an
appropriate time
frame.
Show Mesh - Activate this checkbox to display the particle mesh, in addition to
the particle display option, for the selected DynamicSet.
Force this Setting - When this checkbox is active, the global settings will be
used for all particle groups regardless of their individual settings. In effect, it
overrides all of the local particle Group settings. This is on by default, so if your
particle groups aren't showing up as you expect, be sure to turn this checkbox
off.
Show Every Nth - defines how many particles are drawn in the view port, a
valuer of 2 will draw every second particle, only.
Render Resets Simulation - by default this option is turned on. For each frame
that is rendered the simulation is re-calculated from start up to the frame that is
rendered. However, for fast material and lighting adjustments this might not be a
desirable effect. Lets assume you want to render frame 167 to check on the
material and light situation for a fluid simulation. Every time the renderer is
invoked the simulation has to start over from the beginning even though the
viewport already shows frame 167. Disable this option to render only the
information available at frame 167 without the need of re-simulating the whole
animation. This is a big time saver when working on specific frames.
Warning!
Do not forget to turn this option back
on. For normal rendering operations
this option must be on at all times. It
is only recommened for adjusting
materials and doing quick render
tests.
Debug
Debug Log Window - check this option to enable the port debugger of
thinkingParticles. When active, individual ports may be enabled to output their
values in a log window.
Analyzer - when checked, the Analyzer window/tool will be opened. The key
board shortcut is "A" form inside a DynamicSet or SHIFT+ALT+A from outside
of tP.
Show InfoTooltip - check this button to query information about any particle in
the 3ds Max modeling viewport by hovering over it. A single left click on any
particle will show a menu selection presenting the possible parameters to display
when hovering over a particle..
As shown in the illustration above, several options are available.
Hovering over any particle created by thinkingParticles will reveal the
information as defined by the selector menu.
Help - click this button to bring up the thinkingParticles Help File. Note: it is
better to use the F1 key on a selected node to jump right into the help section of
that operator.
Offline Help - by default the thinkingParticles help file will be displayed within
the active web browser from our www.cebas.com server. If for any reason you
wish to use the (outdated) offline help file, which was installed with your
product, check this option. Keep in mind that the offline help file will not be
updated and always represents the state of your first installation of any Service
pack or Subscription Drop.
Output
Groups as Objects - Activate this check-box to create invisible objects in 3ds
Max that can be selected and assigned standard 3ds Max Object Properties.
These invisible objects will be created for each particle Group that is generated
in the Particle Group Tree View.
Render Instance - when checked, particles can be treated as real instanced
objects. This is a highly efficient method to handle millions of High-Poly objects
in a scene. Compatible renderers for 3ds Max are able to handle this option.
Max Instances - instancing in 3ds Max is a "static process." This 3ds Max
system architecture prevents any tool or program to add render nodes at render
time. All render nodes must exist before rendering starts, this is why complex
protocols and data structures had to be invented to make this feature possible in
3ds Max. This Parameter lets you define how many objects (particles) will be
instanced at render time. This value must match your amount of created,
instanced particle objects!
Simulation Start
Animation - Select this radio button option when you want thinkingParticles to
evaluate rules and conditions for the particle system, during the entire animation
sequence.
User Defined - Choose this radio button option when you want thinkingParticles
to evaluate rules and conditions for the particle system, starting at the frame
specified in the spinner below.
Frame - This spinner value sets the frame, where you want thinkingParticles to
start the evaluation of its rules and conditions.
Viewport/Rendering SubSampling
All of the settings below apply only to the viewport representation, for the
processing of the thinkingParticles rules and conditions.
Per Frame - Select this radio button option to make all particle dynamic
simulations update per frame. This is a very inaccurate choice for shape-based
collision methods. However, particle-based collisions respond very well to this
setting and will update quickly.
Per Half Frame - When this radio button is selected, the particles and all rules
in thinkingParticles will be updated each half frame. This setting is a good
choice for particles that have a medium speed.
Samples Per Second - Select this radio button option to enable the Samples
Spinner below. This lets you dictate how many samples per second you would
like to have thinkingParticles update. Higher values will be more precise, but
will take longer.
Samples - This spinner defines the number of sub-frame samples taken to
evaluate and update the rules within thinkingParticles. For proper shape-based
collisions (such as those that occur from the Fragment Operator and accurate
physics simulations), a value between 90-120 is recommended as a minimum.
Render SubSampling
All of the settings below apply only to the renderer's representation for the
processing of the thinkingParticles rules and conditions and only if the Check
Box has been checked, or else the Viewport settings will be used!
Per Frame - Select this radio button option to make all particle dynamic
simulations update per frame. This is a very inaccurate choice for shape-based
collision methods. However, particle-based collisions do respond very well to
this setting and will update quickly.
Per Half Frame - When this radio button is selected, the particles and all rules
in thinkingParticles will be updated each half frame. This setting is a good
choice for particles that have a medium speed.
Samples Per Second - Select this radio button option to enable the Samples
Spinner below. This lets you dictate how many samples per second you would
like to have thinkingParticles update. Higher values will be more precise but will
take longer.
Samples - This spinner defines the number of sub-frame samples taken to
evaluate and update the rules within thinkingParticles. For proper shape-based
collisions (such as those that occur from the Fragment Operator and accurate
physics simulations), a value between 90-120 is recommended as a minimum.
Playback Cache
Particle Simulation Caching has been enhanced a lot and
now offers more power than ever. thinkingParticles cache
files can now be easily transported to any other
thinkingParticles program of the same version or higher,
without having to re-create the scene setup. Loading a
cache file into an "empty" thinkingParticles setup is now
supported, including re-timing it in certain boundaries and
with full control of transformation in all axis. DynamicSets
has new input options to support the newly gained freedom
in a fully procedural way, as known from thinkingParticles.
Simulate - when enabled, thinkingParticles will perform in
standard mode, all operators and DynamicSets will be
evaluated and calculations done at play-back or render
time.
Play - activate this option to set thinkingParticles to
playback mode. When this button is active and a valid
playback file is found, all DynamicSets and operators are
no longer evaluated! Keep this in mind, changing values
will not affect the particle system at all, because the
particle movement and shape changes will be read form the
cache file.
Select Record File - when clicked, brings up a standard
Windows file dialog. This lets you define a name for the
cache file or select an already existing cache file.
Statistics - displays the statistics of the cache file. This
might be used as an indication of whether the file is valid
for a scene or not.
Time Offset - sets the play offset of the recorded cache
file. This can be used to start at a certain frame when
playing back the particle system.
Position X,Y,Z - sets the position, in World Units, where the cache playback
should happen.
Rotation X,Y,Z - rotates the particle cache playback along each of the individual
axis, around its center point
Scale - defines a scale factor for the particle cache playback.
Link to Object - instead of specifying discreet X,Y,Z values as explained above,
you may also use any object to position the particle cache playback in the scene.
Even another particle system may be used to position and place particle cache
playbacks!
Out of Range Hold Particle - the following options define the playback
behavior of the cached particles. Out-of-range playback can behave in the
following ways
Off - cached particles outside of "their" recorded time will not be visible
at all on playback
< - will show the first frame of recorded particles when the cached
particles are outside of "their" recorded time
<<>> - shows and holds the particles from their first cached frame from
beginning of playback and at end of playback, the last cached frame of
particles is kept visible.
>> - at end of playback the last cached frame is kept visible
Particle Exclude
Recording particle simulations is a very powerful workflow enhancement and a
great time saver with complex scene setups. In addition to "record and forget,"
thinkingParticles allows the removal of specific particles from the recording,
afterwards. A simple list of Particle IDs defines which particle should be
removed from the particle playback.
DEL - deletes the selected Particle ID form the list view.
PICK - lets you pick a particle within the 3ds Max viewport. The selected
particle will be added automatically to the list of particles that should be
excluded on playback.
ADD - lets you manually add a particle ID to the list view. To specify the
particle ID, use the spinner control right underneath the ADD button. To obtain
the Particle ID of a specific particle, turn on the particle ID visualization method.
Record Cache
thinkingParticles offers a global particle caching system that has been introduced
to the toolset of thinkingParticles. Particle Baking, Recording or Caching
enables the user to store a complete particle simulation to a single file. After
recording a complete particle system to a single file, no more calculations and
evaluations are needed when playing back the result! In fact, all changes in the
DynamicSets will be ignored, when Playback is active.
Viewport - check this option, if you wish to bake the particle simulation, as seen
in the viewport! Some modifiers, for example, have different settings/behaviors
in the viewport, compared to their behavior at render time.
Render - check this option to obtain the exact behavior as you would expect
when rendering the animation with thinkingParticles effects activated.
Record - press this button to start the recording session of the particle animation
that was created by thinkingParticles.
Frame Subsample - defines the amount of frame sub-sampling to use for
exporting the data. A value of 0 means the export will happen per frame;
regardless of the sub-samples set in thinkingParticles. A value of 1 means half
frame; 2 equals 90 sub-frames and so on ...
Important
This option is only relevant with the
new *.tpc single frame cache format.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Master DynamicSet Rollouts
When you click on the Master Dynamic name within the DynamicSet Tree View,
you will be presented with two special rollouts on the right-hand side of the
thinkingParticles User Interface.
The first rollout is the Master DynamicSet rollout. Here you can tell
thinkingParticles how it is to process the DynamicSets you've created for your
animation. To learn more about this rollout, click HERE.
The second rollout is the Schematic View rollout. Within this rollout, you can
set the various color coding options and display options you want to see inside of
the Wire Setup View. To learn more about this rollout, click HERE.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Right Click Menu Options
thinkingParticles uses standard methods to navigate and manipulate the software
and its parameters. All mouse buttons are used in a natural and logical way as
every user should know from any Windows application. In addition to the
standard "point and select" approach, extra functions can be invoked, by using a
keyboard shortcut along with the mouse controls.
Grid View Area
A right click onto the empty grid or DynamicSet view area will bring up the
above context menu. It allows for fast access to all operator creation functions.
Instead of using the Create Rollout Menu section to the right of the main view,
the right click menu represents a much faster method in creating
thinkingParticles' Nodes.
With a thinkingParticles Node selected, before right clicking into the empty
background grid, different options will become active. As shown in the
illustration below, the Cut, Copy or Paste options are available.
Note:
The Cut, Copy and Paste options will be available only, when at least one
thinkingParticles' Node is selected (active!)
Clear Write To Debug - when selected, all ports marked for debugging output
will be removed or cleared from debugging.
Use UI as TD Tool - choose this option to "transfer" the user interface of the
selected node(s) to the TD-Tool section. This will also remove the User interface
from the main TP rollout menu section!
Save - chose this option to save the selected node(s) to the BlackBox folder, or
any other place you prefer.
Node Area
Right Clicking onto any node in the DynamicSet view will bring up the dialog as
shown above. The context sensitive menu will enable or activate Menu options
whenever possible.
Disable - select this menu option to disable a thinkingParticles' Node. Disabled
Nodes will not be evaluated at playback or simulation time.
Connect from Input - use this menu, when connecting ports in expert mode or
high zoom levels.
Connect from Output - use this menu, when connecting ports in expert mode or
high zoom levels.
Disconnect Input - lets you disconnect any Input from a list of ports.
Disconnect Output - lets you disconnect any Output from a list of ports.
Disconnect All - when selected, all ports are disconnected from the node.
Input Visibility - lets you make any Input port visible.
Output Visibility - used to make any Output port visible.
Port Area
Right clicking on any port (click onto the port name) allows you to hide or add
the selected port to the debug output. It is important to understand that every
output can be marked for debugging, however, to remove a port from debugging,
the port needs to be right clicked again, as well.
DynamicSet Tree View
Right clicking onto any element Name will disable the relevant node or the
whole DynamicSet. An indication of a disabled node or DynamicSet will be that
it is grayed out. This is perfect for debugging purposes, or when a DynamicSet is
seen as complete, or when other areas need to be worked on, without the need of
processing the disabled DynamicSet as well.
Right Click on Icon
When an icon is right clicked, a special DynamicSet related menu is opened.
Every DynamicSet may be recorded individually. To learn more about using
cached particle simulations, please read the chapter about Working with tP cache
files.
As shown above, controls to set or create cache files, along with statistical data,
are displayed in the right click menu.
Cache Stop/Play - choose this option to disable or enable a cache playback.
Cache Play Backward - when selected, the cache is played back in reverse.
Cache Record - starts the cache recording to hard disk.
Cache Record Hierarchy - select this option to bring up the file cache
Hierarchy dialog.
This dialog will display the DynamicSet file caching hierarchy as seen from its
selected level (DynamicSet). To visualize all available file caching DynamicSets
within a thinkingParticles system; right click the MasterDynamic icon and
choose Cache Record Hierarchy from there.
In the example above you can see a total of 3 levels with dependent caches. The
top level DynamicSet:Reborn is dependent on the DynamicSet:Shape and this is
dependent on the DynamicSet:SmokeBase. A dark red bar indicates that the
DynamicSet is selected and Invalid (the setup has changed since the cache was
created), a light red indicates an invalid DynamicSet cache file that is not
selected in the tree-view. Shades of green color indicate the file cache is valid
and has not been changed.
In bigger projects cache dependencies can grow and become tough to handle;
this easy to use interface ofefrs you a centralized view of the available cache
files and their status. Chains of particle cache files can be easily rebuild with one
button click.
Active - press this button to rebuild all active cache files
Invalid - press this button to rebuild only the invalid and dependent
cache files.
Selected - press this button to rebuild only the selected cache files.
Cache Write Channels - lets you select the information that will be stored in
the particle cache file. Depending on the particle setup; it may be advantageous
to only save the minimum amount of data to radically reduce the file size of the
cache file. Every set of information is stored per particle and so it easily adds up
to great amounts. In many situation you would only need Position and maybe
velocity.
Cache Read Channels - when loading particle caches the data needed can also
be chosen. This menu will automatically present any available data channels in
the cache file.
Cache Unset - removes the assigned cache file.
Set Cache/File name - sets or displays the current file name of the active cache
file.
Save Material - choose this option to re-save the DynamicSet materials that
usually go along with each cache file. This should be performed after updating
materials in the 3ds Max scene for any objects that are picked in Obj2Particle or
GeomInstance operators. Before using this function, please set the cache to Stop,
then use this function, then set the cache to Play.
Extract Particle Group Hierarchy - when checked, the original particle groups
and hierarchies are re-created in the Particle Group Treeview to represent the
particle groups within the cached DynamicSet.
Statistics - displays the statistics about the cache file.
Particle Group Area
New Particle Group Right Click Menu Option:
Right-Clicking on any particle group name brings
up an new context sensitive menu.
For each particle group name clicked; a list of
operators using or referencing this particle group is
listed. Clicking any of the Operator names will
automatically bring up and select the DynamicSet in
question.
This feature is great for debugging complex
DynamicSet setups containing hundreds of nodes.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Schematic View Rollout
In the Schematic View rollout menu the colors of the main thinkingParticles UI
can be easily adjusted or modified. Be aware that the changes are stored in a
separate Thinking.ini file that is stored within the 3ds Max/PLUGCFG folder.
Colors - Click on the color swatch next to the feature of which you want to
change the color. You will be presented with a standard 3ds Max Color Picker.
Disable Opacity - This spinner sets how opaque a disabled Node is within the
Wire Setup View. Higher values will produce more opaque disabled nodes, while
lower values will make disabled nodes more transparent.
Shadow Opacity - lets you control the shadow opacity of the DynamicSet
nodes.
Text Anti-aliasing - Activate this checkbox to have anti-aliasing applied to the
text within the Wire Setup View. Default is On.
Line Anti-aliasing - Activate this checkbox to have anti-aliasing applied to the
operator wiring lines within the Wire Setup View. Default is On.
Shadow - check this option to create backdrop shadows for nodes in the
DynamicSet view.
Bended Wire - when checked, the connection lines are drawn in a curvy
manner.
Grid - check this option to enable the grid in the DynamicSet View.
Expert Mode - Activate this option to enable a compressed thinkingParticles UI
layout. All nodes will only show one input/ output line with no input or output
data streams visible. In expert mode, connections have to be drawn from the
main Input/Output connectors, so do not use this mode unless you are very
comfortable with wiring the nodes together, and want to conserve your on-screen
real estate.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Nodes Overview
Operators are the heart and soul of thinkingParticles and are the main building
blocks for the creation of your particle animations. There are more than 100
different operators divided into many different categories of tools. You will
spend most of your time within this section of the thinkingParticles interface.
In addition to the Standard Operators shown above, there is a drop down menu
within the Operators panel that gives you access to the seven different types of
controls to build your particle animation with.
Each of these different groups of Operators is used for specific reasons and
described briefly below.
Standard - The Standard group of Operators within thinkingParticles gives you
the most basic building blocks for construction of your particle systems.
Everything from Size and Velocity of particles, to the direction they face and
what they follow can be found within this primary grouping of tools. Be aware
that you also have MAXScript access from within this section as well as the
ability to create unique operators that are based on the animatable parameters of
ANY 3ds Max object.
Dynamics - The Dynamics Operators are responsible for all of the collision
detection. inter-particle interaction and physics simulations within
thinkingParticles. The rigid body dynamics engine that the new version of
thinkingParticles now sports is exceptionally powerful and production proven on
major films like 2012. All of the Motion Inheritance that can be used to create
physically based vortices from fans and propellers, shape-based crashing, and
bouncing of particles can be found within this group.
Generator - thinkingParticles offers many ways to generate particles in your 3D
environments and the Generator Operators are responsible for creating particles
within the system. There are four basic particle generators implemented. Two
particle generators creates particles based on any position you supply. Another
operator lets you draw particles in 3D space. Finally, the most complex one is a
conditional version of our popular MatterWaves product, which gives you
ultimate control over your particles. All particle generators share some of the
same basic features and functionality.
Shape - thinkingParticles handles particle shapes (the look of a particle) in
exactly the same way as 3ds Max does. Particles are usually one dimensional
points in space and they do not offer anything more than X, Y and Z coordinates.
However, Shape operators create and place any predefined parametric mesh
object or instanced geometry at the position of each particle. They can even
create metaball style liquid shapes for your particle animations.
Fragmenter - thinkingParticles is renowned for its rigid body dynamics and
demolition effects, it was one reason why it was chosen for the Roland
Emmerich movie "2012" as the F/X tool.
Material - thinkingParticles provides you with a unique ability to paint with
your particles, and the Material Operator is what you want to use to achieve this
effect. Each impact of a particle on an object's surface will create a color
"splash" or any other material effect you can think up. This can be used to create
impressive bullet impacts, footsteps, rain drops, etc.
Initiator - Initiators are new to thinkingParticles and are designed to give users a
new way of processing rules and operators within DynamicSets. The main idea
behind an initiator is control. An Initiator is different from other operators in that
connected conditions or operators are evaluated ONLY as soon as the initiator is
processed. This type of behavior offers much more control of the rule processing
than with any other type of operator.
Export - The Export Operators are designed to be used to turn particles into
standard 3ds Max objects. You can turn both deforming meshes and nondeforming particles into normal objects using these operators, so that the output
of these new objects can be used within other dynamics simulation systems like
reactor - or exported to other platforms.
Tools - those Nodes are designed to act as a one time tool that might also work
independently from a complex wire network.
Reference - this type of Nodes are used to handle particle references. This
powerful new system, allows to actually connect any number of particles with
each other and influence them based on their referenced values.
Volume Breaker - volumeBreakerT is available as a standalone product and
offers one of a kind performance and features. The thinkingParticles integrated
sibling of volumeBreaker" offers more power through its 100% rule based and
fully procedural approach to demolition F/X. thinkingParticles integrated
volumeBreaker operator is like a standard volumeBreaker on steroids!
Bullet Physics - Bullet Physics is the latest addition to thinkingParticles, it is a
widely used physics engine that offers many advanced features, such as multi
threaded physics solvers as well as soft body rope physics solvers. In contrast to
PhysX from NVIDIA the Bullet physics library is open source and is fully under
our control (the developer). Like PhysX- Bullet is used in game engines, movie
productions and many 3D applications. to learn more about Bullet physics go to :
www.bulletphysics.org
ShapeCollision - welcome to the future - the future of ShapeCollision the well
known and heavily used "old" shape collision operator and set of tools have all
been upgraded to the next level of Rigid Body Dynamics simulation technology.
Import - Data exchange support for various applications was always a strong
part of thinkingParticles, and new file formats are now supported. Real Flow's
"bin" file format as well as Krakatoas prt file format are now fully supported.
Those file types are widely used throughout the industry to create advanced
special effects.
Script - thinkingParticles introduces a powerful new way to extend its
functionality and features by using standard MAXScripting. This easy to learn
and powerful basic like language allows every thinkingParticles user to easily
extend the functionality beyond imagination!
Back to Ref Guide
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Black Boxes Overview
thinkingParticles is a highly complex and advanced particle animation system
that offers many modeling concepts that are completely new.
thinkingParticles is like programming your very own particle system without
having to write a single line of code. Thanks to its advanced graphical user
interface, it's an easy task to wire up even the most complex particle behaviors
in a few moments.
The fact that non-programmers can use thinkingParticles does not mean that
there are no programming-like features at all. Moreover, these programmatic
features should appeal to technical directors who need to design very specific
tasks for the creation of particle effects within their pipeline. That's where Black
Boxes come into play.
What is a Black Box?
The simplest definition of a Black Box is that it is nothing more than a standard
DynamicSet saved to your hard disk so it can be re-used. Not only will they be
reusable for many particle situations, but with them you can achieve better
particle effects in a shorter span of time.
More specifically, Black Boxes (at least good ones that you want to share with
others or re-purpose) exist as collections of scene independent conditions and
operators. These saved DynamicSets can then be used in other scenes without
any further adjustments and become drag-and-drop in the same way you do with
the other thinkingParticles operators. When you create your own Black Boxes
you need to keep in mind that everything should be scene independent as it
doesn't make sense to create Black Boxes that include Particle Group names or
other scene-specific data.
And for non-programmers, using Black Boxes that have been built by technical
directors allows them to get their work done without having to understand
everything that goes on within the operator itself. They can simply wire up the
various input and output data streams provided to see the results without having
to dig into the various Operators, Conditions and Helpers since these nested
DynamicSets are hidden from view.
There are some restrictions that
apply to the Load and Save
operations of DynamicSets when
you create Black Boxes; for example
you can't save a wired particle Group
along with its Operators and
Conditions. Reloading DynamicSets
that use specific particle Groups will
fail. This is because the only particle
group that will be available in all
scenes is the ALL particle group, any
other particle group may not exist in
a scene.
Why would I want to use a BlackBox?
Black Boxes can be used like any other Condition, Operator or Helper. Black
Boxes are pre-wired for a specific kind of particle effect and this is the big
advantage. You do not need to set up operators and conditions each time you
need a specific effect; instead everything can be accessed and applied with a
simple mouse click.
And in many cases, the effects that are set up as Black Boxes are the most
common ones. Think about setting up a system to set the shape or size of a
particle. This task is a must for every particle system, but it makes little sense to
do the wiring each time you create a new effect. By having a Black Box to
handle that task, you can get your work done in a far more efficient manner.
You are strongly urged to make use of the Black Box system that
thinkingParticles has to offer. The more you work with thinkingParticles, the
more power you will get out of it and a growing library of Black Boxes you
create.
How to use a BlackBox
Black Boxes are accessed through the Black Box icon from the right side menu.
When you activate this icon, a set of buttons shows up. Each button represents a
saved DynamicSet (Black Box) along with its file name. The list of buttons will
increase whenever you save a new DynamicSet to a specific folder on your hard
drive.
Example 1: Particle Speed
Nearly every particle system animation needs to have moving particles and so at
some point one must set a speed for the particles. Check out the sample
illustration below:
You can see that it shows a DynamicSet that sets a specific speed for a particle
group. However, one thing within this DynamicSet makes it really special. The
Particle input data stream connectors aren't wired to a specific Group node.
Instead, each of the Particle input data streams are wired to the upper left corner
of the DynamicSet. This is called the DynamicSet Channel Bar (DCB). As is
shown above, the DCB still shows the input data stream for the Particle group
connection in yellow. Normally, this would cause a DynamicSet to become
invalid, but since it's wired to the DCB, it makes it so that this DynamicSet must
rely on another external Group node to activate this set of operations.
Likewise, the DCB in the upper-right corner of the Speed DynamicSet can be
used to send any output data streams back out for other DynamicSets to use.
As you can see, this simple Speed Black Box does nothing complex or
mysterious - it only needs a particle Group input data stream to work properly.
The needed information can be supplied by any DynamicSet from the hierarchy
above.
In the example above, the Speed Black Box has been connected to a particle
Group (called MyParts). The Black Box is added as you would any other
operator (it's highlighted white within the upper DynamicSet and prefaced with a
D: within it's name), and then you connect the scene specific elements to it.
Keep in mind that this DynamicSet
does not have any connection or
reference to an existing Particle
group. This is ideal since it makes
little sense to create Black Boxes
with particle group information,
since these Groups generally change
for every scene. So, when you create
your own Black Boxes, think about
how you could create a setup that
will be of "universal" use.
If you want to create a collision Black Box, for example, do not store the
Distance operator along with the Node helper in the BlackBox. The already
picked Node certainly won't be available in another scene! Instead, you would
drag the Position1 and Position2 connectors to the left-hand DCB. This will
make sure that any other operator or condition is able to supply the needed
position for measuring distances.
In a programming vocabulary, a Black Box is a defined Function that needs a
set of parameters when called to process. The variables passed to such a function
are defined by the input data stream connectors of the conditions or operators.
Any results that these kinds of functions produce are also often used for other
functions or rules within the system.
How To Save a BlackBox
thinkingParticles offers several ways to save a complete Node setup or
individual nodes. BlackBoxes or TD-Tools are nothing else than saved Node
setups. However, there are several things that need to be thought of when saving
complex BlackBoxes or TD-Tools. Usually complex Node setups use
Hierarchies of particle groups, those particle groups might need to be recreated
when loading back a BlackBox or TD-Tool into a thinkingParticles scene setup.
Very often it will be the case that there are already particle groups in a scene
when a BlackBox is added to it. In such a situation it is mandatory to know how
the BlackBox or TD tool should behave on loading.
There are 3 Methods to save a Black Box
1. From within the DynamicSet Tree View; use the M or Save or Load options
2. From within the DynamicSet; next to the On button use the Save button
3. Select operators to be saved and right click into the gray background to
bring up the Save option!
When saving a DynamicSet or a single (selected) operator a dialog will show up,
after choosing the file name, presenting the following options:
Request - choose this option to force the user to decide on loading this
DynamicSet (BlackBox) how particle groups should be handled.
None - when selected, no particle groups will be used at all (all groups will be
deleted)
Use Existing - select this option to re-use an existing particle group in the scene;
if this group is not found (by name; the first one is chosen, only) then the
existing particle group in the DynamicSet (BlackBox) will be deleted and NONE
is chosen!!
Exist/Create - choose this option to make sure when the group exists, it is used
from the scene (first name found). If this particle group does not exist the
particle group hierarchy is created with the original group names as saved in this
BlackBox file. If the group name is found and the hierarchy is not identical the
missing hierarchy particle group will be created
Create New - choose this option to force the re-creation of the particle groups as
they are stored inside the BlackBox regardless if they exist in the scene or not.
When loading a BlackBox back into a thinkingParticles scene, a dialog box will
show up whenever a BlackBox was saved with the Request option. The dialog
shown is similar to the one above but the Request is missing.
Important Notes Startup.thi
When a BlackBox is saved with the following name:startup.thi and it is placed
into the first search path found in the thinking.ini file, it will be automatically
loaded when a fresh TP helper is created in a 3ds Max scene.
Startup.thi allows you to save custom setups for TP like Dynamic Sets and
Groups. For instance if you are always creating a 3 Groups and 4 Dynamics sets
(named as you like with properties you like), then you can simply save out this
setup in the startup.thi and every time you create a TP particle system they will
be created for you.
Conclusion
Black Boxes are a great organizational tool that help save time when creating
complex particle setups. All of the complexity of a Black Box is hidden within
the hierarchy, and usually no-one needs to know about it. One or more data
streams are passed from the top level of the hierarchy into the Black Box, and
that's all that is needed to get things working.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Always True Condition
The Always True Condition is the easiest operator of all. The output it creates is
always true (logical 1) unless controlled by another Helper operator to turn it
from on to off.
Be aware that when you use this
condition in a DynamicSet, all
operators wired to its Output channel
will always get a true signal
whenever the condition is validated
by the thinkingParticles interpreter.
Operator Inputs
ON - (Bool) - This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other Helper operators to this input
channel such as a Bool Helper to activate/deactivate the whole operator.
(Default: ON=True)
Operator Outputs
Output - (Bool) - This output data stream sends the on or off state to other node
input channels.
Example:
Let's imagine that you have wired an Always True Output to a Size or Shape
operator. What this does is set the Size or Shape for every single tick (frame and
sub-frame) of the animation. This will also prevent thinkingParticles from being
able to change the Size or Shape in a later stage of the animation. If you want to
maintain the ability to change the Size or Shape, then you should use the
Particle Age condition instead.
Rollout Menu
No rollout menu created.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Conditions Overview
Conditions in thinkingParticles are used to control the command flow of other
Operators or Helper objects. For instance, a Distance condition may be used to
measure the distance between a particle and an object. Depending on the results
of this distance 'condition', an output signal may be created and this might
control another operator or further condition.
To access the different Conditions, click on the Conditions icon in the Create
rollout for the Dynamic Set you are currently working on.
In many respects, the Conditions can be thought of in the terms of "IF some
condition is met, THEN do something else". This classic IF-THEN situation is
well known among programmers, and can now be used by artists as well to test
their particles to see if something happens.
All of the Conditions have a boolean Output data stream that sends a value of
true or false depending on what is being tested (time, distance, collision,
threshold, etc.). This output can be used as a trigger for other operators to be
turned on, or sent to other tests to further refine your particle behavior.
Example
In this example, a Distance Condition (in orange) is being used to find the
relative positions of two piped in Node Helpers (Node - Sphere 1 and Node Sphere 2, both in purple). Depending on how close they are to each other (set in
the Distance Condition), the Distance Condition is sending it's boolean Output
data stream to the Position Born operator's ON input - effectively turning the
particle flow on and off depending on whether or not the two nodes are close
enough to one another. Further, the Distance output data stream is being piped
into the Position Born's Rate port, so that the flow of particles generated varies
depending on how close the objects are.
Read plainly, this set up says that IF the two objects are within a specific
distance to one another, THEN turn on the particle creation and control the rate
of flow based on the relative distance between the two objects.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Distance Condition
The Distance Condition measures the distance between two particles or objects.
You may choose any two objects you want to measure the distance between,
even standard 3ds Max mesh objects can be piped into this condition and used
for the distance measurement. When you want to use a mesh, an
ObjectToParticle Operator or a Node Helper creates the relevant information to
be used as position inputs. Whenever the distance reaches a certain amount, a
"true" output is generated.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Position 1 - (Position) This input data stream is used to define the first node or
object that is to be used to determine the distance value. Without two nodes, this
condition will not function.
Position 2 - (Position) This input data stream is used to define the second node
or object that is to be used to determine the distance value. Without two nodes,
this condition will not function.
Radius 1 - (Scalar) This input data stream is used to override the Radius 1
spinner setting.
Radius 2 - (Scalar) This input data stream is used to override the Radius 2
spinner setting.
Operator Outputs
Output - (Bool) This output data stream sends a true message if the distance
value is reached, and a false message the distance is not met.
Distance - (Distance) This output data stream sends out the current distance
between the two selected nodes or objects.
Direction - (Direction) This output data stream sends out a normalized XYZ
direction (direction only, no length) that is generated the two selected nodes or
objects. The direction is determined from Position 1 to Position 2.
Rollout Menu
Radius 1 - This spinner sets the minimum radius that is taken into account to
measure the distance between objects. If the distance between the two selected
nodes lies within the range of Radius 1 to Radius 2, the output is set to true
(logical 1).
Radius 2 - This spinner sets the maximum radius that is taken into account to
measure the distance between objects. If the distance between the two selected
nodes lies within the range of Radius 1 to Radius 2, the output is set to true
(logical 1).
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
In Group Condition
The In Group Condition is used to test a particle that is sent to it to check to see
if it is part of a selected particle Group or sub-group. When the particle is part of
the Group, this condition will return a true output.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group. The data stream MUST be connected and will be highlighted yellow if it
is not.
Group - (Group) This input data stream is used to pipe in a particle Group to
check the particle against.
SubTree - (Bool) This input data stream is used to override the SubTree
checkbox state in the In Group rollout.
Invert - (Bool) This input data stream is used to override the Invert checkbox
state in the In Group rollout.
Operator Outputs
Out - (Bool) This output data stream sends a true message if the sent particle is
part of the selected particle Group.
Rollout Menu
In Group - This dropdown menu lets you choose the particle Group that is to be
used as the test group for the particle that comes into the Condition.
SubTree - As you get into complex Group setups with multiple levels of
Groups, you may want to check if the selected particle is part of the group
chosen or any of its sub-groups. By activating this checkbox, the In Group
Condition will check not only the selected Group, but also any sub-Groups that
reside beneath it. When off, only the selected particle Group is tested against.
Invert - This checkbox acts as a negation for the In Group test. If the selected
particle is part of a selected Group, then the In Group condition will send out a
False condition when this checkbox is active.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
In Mesh Condition
InMesh is a powerful condition node that can be used in nearly an unlimited way
of situations. Any legal 3ds Max mesh can act as a Node-Input along with a
particle position to tell if a particle is considered inside a mesh volume or not.
As this is a true volume test function,
the time it takes to get the result
depends on the amount of faces that
need to be tested. The more faces a
mesh has the longer this InMesh test
will take.
Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Node - (Node) Connect any operator or Helper node that offers an output data
stream to this input. All collision space warps (such as deflectors) bound to this
node will be used instead of those bound to the thinkingParticles icon. Be aware
that if this option is used, that the Active and Inactive lists within this operator's
rollout will no longer be used, so you won't be able to turn the various space
warps on or off as you could by binding the space warp directly to the icon.
Position - (Position) is used to define the first node or object that is to be used to
determine the distance value. Without two nodes, this condition will not
function.
SubTree - (Bool) defines if the object Sub-Tree should be used for the InMesh
conditon. A value of 1.0 will enable the use of the Object Sub-Tree while any
value equal or below 0 will deactivate the use of the Object's Sub-Tree.
Particle Shape - instead of supplying a Node connection, a particle group can
also be used to supply a 3D mesh.
Outputs
Output - will be active (True) when the InMesh condition is valid and a particle
position is inside an object.
Rollout Menus
Use SubTree - when checked, the object's Sub-Tree (linked childs) will be used
for the InMesh condition test as well. Uncheck the option to test the Parent
object only.
Example
The example setup shown above creates the output as seen below. Particles are
created and "sprayed" in this setup, whenever a particle is inside the Torus-Knot
object it is moved into a different particle group and the particle's color and
shape changes. Note the "Inverse" test as well, this moves particles out of the
"Inside Particle" group when they are outside of the Torus-Knot object again.
All Particles inside the mesh are changing Group, Shape and Color
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Light Condition
The Light Condition creates a True output whenever a particle gets lit by a light
source in the scene. Be aware that this operator tests the illumination value for a
particle (a single point in space) only. If you need to get accurate surface
illumination effects over an area, you need to choose the MatterWaves operator.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Position - (Position) This input data stream is used to determine the node or
object that is used as the point at which the light illumination is determined. If
the selected object is not illuminated by the selected light source (in the Light
rollout), then the Output condition will be false. Be aware that in order for this
condition to function, you MUST have a node selected and connected to this
input port.
Normal - (Normal) This input data stream is used to calculate the illumination
of the particle based on its normal direction in relation to the light source. In
many cases, the normal is not needed since the normal for a point (particle) is
created by pointing directly at the light source (full illumination).
Threshold - (Scalar) This input data stream is used to override the Threshold
spinner that determines the light intensity needed to generate a true output
condition.
Use Color - (Bool) This input data stream determines whether the color value in
the Light rollout (or piped in through the Color input data stream) is used (Use
Color = on), or if the default while color is used (Use Color = off).
Color - (Color) This input data stream sets a color to be used as a determining
factor to see if it illuminates a particle. This color value will only be used if the
Use Color checkbox is active in the rollout or if a true boolean value is piped
into the Use Color input data stream.
Variation - (Scalar) This input data stream is used to override the RGB Variation
% spinner setting that determines the variation in light color that illuminates a
particle.
Operator Outputs
Output - (Bool) This output data stream sends a true message if light illuminates
a particle, and a false message if light does not illuminate a particle.
Intensity - (Intensity) This output data stream sends the current intensity value
of the light source to other operators. If your light source has an animated
Intensity, then this value can be passed on.
Color - (Color) This output data stream sends the current color value of the light
source to other operators.
Direction - (Direction) This output data stream sends the direction to the light
source from the particle that generates a true condition.
Rollout Menu
REM. - Select any light from the list of lights in the dialog above, then press the
REM. button to remove it from the list.
PICK - Press the PICK button to activate the light selection mode. From within
the 3ds Max scene you can pick any light type that should be taken into account
by this condition.
Threshold - This parameter sets the illumination level at which the operator
should create a "True" output condition. If the light intensity of a particle is
higher than this value the output switches to "true" (logical 1). Be aware that this
spinner value can be animated over time to make particles more or less light
"sensitive".
Color checkbox - The Light condition is also able to react to the light's color.
Activate the Color checkbox and set any color value you may want to use to
control the output of this condition.
RGB Variation % - This parameter only becomes active when the Color
checkbox is turned on. In many situation, it would be exceptionally hard to find
the exact illumination color that will set the output condition to "True", therefore
this value lets you set a variation of the color to react upon.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Particle Age Condition
The Particle Age Condition is used to determine the age of particles within a
system. It will return a True condition when one of the conditions is met:
1. When a particle is born.
2. When a particle dies.
3. At any given relative time frame.
4. At any given absolute time.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other Helper operators to this input
channel such as a Bool Helper to activate/deactivate the whole operator.
(Default: ON=True)
Time - (Time) This input data stream takes time data from another node to feed
the Particle Age condition, effectively limiting the range of time that the operator
is evaluated.
Particle - (Particle) - This input data stream reads in the currently selected
particle group. The data stream MUST be connected and will be highlighted
yellow if it is not.
Type - (Integer) This input data stream takes on an integer value that represents
the type of particle age condition to be tested for. Valid input values are 0
through 4, where:
0 = Born
1 = Die
2 = Enters Group
3 = Relative
4 = Absolute
Time 1 - (Scalar) This input data stream is used to override the Relative Time 1
spinner value.
Time 2 - (Scalar) This input data stream is used to override the Relative Time 2
spinner value.
Absolute Time 1 - (Frame) This input data stream is used to override the
Absolute Time 1 spinner value.
Absolute Time 2 - (Frame) This input data stream is used to override the
Absolute Time 2 spinner value.
Operator Outputs
Out - (Bool) - This output data stream sends the true or false state to other node
input data streams regarding the Particle Age.
Rollout Menu
Born - A Born condition is treated as true whenever a particle is created (born)
and stored in the connected particle group. A born event is also created when a
particle group is transferred or newly created by an operator.
Die - A Die condition is treated as true when a particle dies and is removed from
the connected particle group. Particles may also be killed by operators in many
situations.
Enters Group - An Enters Group condition is treated as true when a particle
enters a connected particle group.
Relative / Absolute - The Relative and Absolute radio buttons are used to help
determine the output condition. Output can be triggered by time based
conditions. When a particle reaches a certain age (life time) an operator may be
activated by the output stream.
Relative means that the particle age is measured "relative" to the lifetime of
the particle. A value of zero (0) means the time when the particle is born
and a value of 100 means the time when a particle dies. You can also think
of this as a representation of the "percentage" of the lifetime for the particle
since the base for this calculation is always the maximum lifetime that was
assigned to the particles.
In contrast, Absolute numbers are calculated in frames or ticks. A value of 0
means frame zero of the animation and a value of 123 means frame 123 of
the animation.
Relative
Time 1 - This parameter sets the start time of the condition relative to the
lifetime of the particle. From this time forward, the output is set to true (logical
1). A value of 0 represents the particle's birth, while a value of 100 represents the
particle's death.
Time 2 - This parameter sets the end time of the condition relative to the lifetime
of the particle. From this time forward, the output is set to false (logical 0).
Absolute
Time 1 - This parameter sets the start time of the condition that matches the
length of the animation. From this time forward, the output is set to true (logical
1). A value of 0 represents frame 0 of an animation, while a value of 123
represents frame 123 of an animation.
Time 2 - This parameter sets the end time of the condition that matches the
length of the animation. From this time forward, the output is set to false (logical
0).
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Std Collision Condition
The Std Collision Condition is used to determine whether or not a collision
occurs between a particle and a standard 3ds Max space warp. A "true" output is
created whenever a standard 3ds Max Space Warp collision is detected.
You can also use an AlwaysTrue
Condition to have collision detection
at all times during an animation, or
even better, you can use a Distance
Condition can be another good way
to trigger the collision event based
on a specific distance.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be used to check for collisions. The data stream MUST be
connected and will be highlighted yellow if it is not.
Node - (Node) Connect any operator or Helper node that offers an output data
stream to this input. All collision space warps (such as deflectors) bound to this
node will be used instead of those bound to the thinkingParticles icon. Be aware
that if this option is used, that the Active and Inactive lists within this operator's
rollout will no longer be used, so you won't be able to turn the various space
warps on or off as you could by binding the space warp directly to the icon.
Operator Outputs
Output - (Bool) This output data stream sends a true message if a collision
occurs and a false message if no collision occurs.
Position - (Position) This output data stream sends out the position of the
particles that collide with the selected node to other operators to act upon.
Velocity - (Velocity) This output data stream sends a out the velocity of the
particle that collides with the selected node to other operators to act upon.
Rollout Menu
thinkingParticles is able to selectively assign Space Warp conditions to certain
particles (groups). You may even freely animate the Space Warp status (On/Off)
of a particle group. Use the Active and Inactive lists to assign a Space Warp or
remove a Space Warp at any time.
Be aware that only collision space warps (i.e. Deflector, UDynaFlect, etc.) will
show up in the Inactive list, and that they will only show up after they have been
bound to the TP node in the 3ds Max viewports.
Inactive List - This section contains a list of inactive space warps that can be
activated for use within the Condition test.
Activate - Highlight any of the space warps within the Inactive list and then
click this button to move them to the Active list below.
Active List - This section contains a list of active space warps that are being
tested against within the Std Collision Condition test.
Deactivate - Highlight any of the space warps within the Active list and then
click this button to move them to the Inactive list above.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Threshold Condition
The Threshold Condition is one of the most versatile conditions in
thinkingParticles. A common use for this operator is to make other rules
dependent on several values that must be reached before the new rules are
analyzed. What's more, nearly any value can be used as an input for this
threshold.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Value - (Scalar) This input data stream is used as the value to be evaluated. If the
value lies within the two Threshold spinners, then the condition will generate a
true output (or outside with the Inside checkbox turned off).
Threshold 1 - (Scalar) This input data stream is used to override the Threshold 1
spinner value.
Threshold 2 - (Scalar) This input data stream is used to override the Threshold 2
spinner value.
Inside - (Bool) This input data stream determines whether or not the threshold is
computed between the two Threshold settings (Inside = on), or if the two
Threshold settings are excluded from the valid range (Inside = off).
Operator Outputs
Out - (Bool) This output data stream sends a true message if the threshold value
is reached, and a false message the threshold is not met.
Rollout Menu
Threshold 1 - This value is used as the low end of the threshold range that is
tested against. Depending on the Inside checkbox, this value will be the point
that must be reached (or avoided) to generate a "true" condition and set the
Output data stream to 1.
Threshold 2 - This value is used as the high end of the threshold range that is
tested against. Depending on the Inside checkbox this value will be the point
that must be reached or avoided to create a "true" condition and set the Output
data stream to 1.
Inside - If this option is checked, the range of values must lay between the
Threshold 1 and Threshold 2 settings to create a true condition. Numbers that
fall outside of this range will be treated as a false condition.
When this option is unchecked, Threshold 1 and Threshold 2 represent a range
of numbers that will be excluded from the condition. For example, let's say that
Threshold1 = 11 and Threshold2 =345. Now, assume that the input data stream
coming into the Threshold Condition has a value of 74 at one point in time so it
creates a false condition. If at a later point, any number below 11 or above 345 is
input, it will create a true condition.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Time Interval Condition
The Time Interval Condition is used to define a range of time in which
something can occur. This is a very useful way of limiting the time span for a
specific test or other set of operators to function. For instance, you could use the
Time Interval Condition to set the start and stop time to emit particles or check
for a collision, etc.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
StartFrame - (Frame) This input data stream is used to override the Start Frame
spinner value.
EndFrame - (Frame) This input data stream is used to override the End Frame
spinner value.
Invert - (Bool) This input data stream determines whether or not the Time
Interval is computed between the Start and Stop Frame settings (Invert = off), or
if the Start and Stop Frame settings are excluded from the valid time range
(Invert = on).
Operator Outputs
Out - (Bool) This output data stream sends a true message if the threshold value
is reached, and a false message the threshold is not met.
Rollout Menu
Start Frame - This spinner is used to set the frame at which the condition is
activated.
End Frame - This spinner is used to set the frame at which the condition is
turned off.
Invert checkbox - If this option is checked, the range of values used for the
Time Interval lay between the Start Frame and End Frame settings to create a
true condition. Numbers that fall outside of this range will be treated as a false
condition.
When this option is unchecked, Start Frame and End Frame represent a range of
numbers that will be excluded from the condition's valid range.
For example, let's say that Start Frame = 11 and End Frame = 40, and that the
Output data stream is being piped into the ON input data stream for particle
creation. When the Invert checkbox is off, particles will be generated between
frames 11 and 40. When the Invert checkbox is on, particles will be generated
from frames 0-10 and again from frame 41 to 100.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Helpers Overview
As a rule-based system, thinkingParticles can be used by artists who have no
programming skills at all. Through simple drag and drop wire operations, a user
can write his or her very own unique particle system that can do the
exceptionally complex things. Beyond just being able to create particles and
have them tested with conditions, there are a number of useful Helper nodes that
can further extend the sophistication of the particle animations.
As such, in some situations you benefit from having a basic understanding of
how binary mathematics works and also some knowledge about vector
operations and how they are represented. As binary arithmetic is the basis for all
PCs in the world, it's a good idea to refresh or start learning binary logic skills.
In addition to the Standard Operators, there is a drop-down menu within the
Helpers panel that gives you access to another set of helper controls to build
your particle system with.
Helpers are split in logical categories, these different groups of helpers can be
used for specific use cases.
Standard - These helpers have a broad range of uses, from providing color
functionality to giving you advanced Non-Linear Animation capabilities that let
you encapsulate blocks of animation and trigger them at any time within your
particle animation.
Math - no 3D special effects without math! thinkingParticles offers a wide range
of math helper nodes that will allow for advanced special effects.
Time - animation is key to thinkingParticles. Even though, thinkingParticles is a
fully procedural animation system dealing with time can not be avoided. This
menu section will show all helpers related to managing animation time.
Position - These helpers give you the ability to read in a selected object's surface
or volume information so that you can place your particle animations in very
specific locations within your scene and have them track and follow accordingly.
Geometry - accessing objects or geometry data is an important task when
creating special effects. The helper nodes in this section help a lot in achieving
all kinds of object or geometry related tasks.
Script - the script section will show any of the scripted helper nodes when
available.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Curve2D** (Instance) Helper
This Helper Node is used to access and duplicate (instance) the parameters of
any Curve2D Helper in a DynamicSet. Keep in mind that this Helper Node does
not work on its own it needs an original Curve2D Helper Node to attach to.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Xvalue - controls the X-Axis of the curve to get a Y-Axis value. This value is
always between 0 and 1.
CurveID - Sets the Curve control to be sued used to get the Y-Axis Value. This
value starts from 0 and then counts up by one for each Curve added to the list
box.
Operator Outputs
Yvalue - outputs the relevant Y-Axis value based on the X-Axis value.
Rollout Menu
Curve2D Drop DownCurve2D Control - this is a standard 3ds Max 2D-Curve control. Please check
the 3ds Max user manual to learn what this control can do and how it is used
inside of 3ds Max. Keep in mind that the row with the 2 float values can be
dragged to the left and right to show more controls.
Popup/Rollout - click this button to bring up a separate window with the curve
control in it for even finer control. You can not have both controls open at the
same time: it is either the Rollout menu or the external window
Curve List Box - lets you add multiple Curve controls to enable different curves
within one Helper Node.
Create - click this button to create a new curve control instance
Remove - when clicked on; the selected curve control will be deleted
form the list.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Curve2D Helper
Use this Node to define a curve to control an output value. There are 2 methods
to use this new Helper Node. It can be used directly, by wiring it to other Nodes;
or it can also be used in 'Satellite' mode were another Operator Node picks it
form a list of available Curve2D helpers. One example of such a satellite Node
would be the SplinePool operator. A Curve2D Helper Node is used in SplinePool
to control the thickness of the spline shape.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Xvalue - controls the X-Axis of the curve to get a Y-Axis value. This value is
always between 0 and 1.
CurveID - Sets the Curve control to be sued used to get the Y-Axis Value. This
value starts from 0 and then counts up by one for each Curve added to the list
box.
Operator Outputs
Yvalue - outputs the relevant Y-Axis value based on the X-Axis value.
Rollout Menu
Curve2D Control - this is a standard 3ds Max 2D-Curve control. Please check
the 3ds Max user manual to learn what this control can do and how it is used
inside of 3ds Max. Keep in mind that the row with the 2 float values can be
dragged to the left and right to show more controls.
Popup/Rollout - click this button to bring up a separate window with the curve
control in it for even finer control. You can not have both controls open at the
same time: it is either the Rollout menu or the external window
Curve List Box - lets you add multiple Curve controls to enable different curves
within one Helper Node.
Create - click this button to create a new curve control instance
Remove - when clicked on; the selected curve control will be deleted
form the list.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
Shape Helper
This Helper Node allows you to query a Shape (spline) object. For any given
length, for example, the 3D position, on a spline, can be output.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
RelativePosition - defines the position on the spline based on a 0-1 normalized
value. A value of 0 means the start of the spline (shape) and a avalue of 1 means
the end of the spline.
NOTE: when multiple shapes (splines) are in the list box (selected), without
specifying a ShapeID input value, all splines (shapes) will be added up for their
total length.
AbsolutePosition - sets the position on the shape (spline) in real length values.
Zero length would be the first vertex of the first shape; from there the absolute
distance from this zero point will be specified.
ShapeID - lets you select a specific shape from the list box; the first object being
ID 0.
Nearest to Position - input any world space position to find nearest features of
this shape.
Vertex (Integer) - specifies the vertex number to get the relevant information
form this Node.
Operator Outputs
WorldPosition - outputs the XYZ coordinates in world space of the point in
space that matches the position on the shape.
ObjectPosition - outputs the XYZ coordinates in object space of the point in
space that matches the position on the shape.
WorldTangent - outputs the direction (vector) along the spline in World
coordinates
ObjectTangent - outputs the direction (vector) along the spline in Object
coordinates
Curve Length - outputs the total length of the shape (spline). If multiple
Shapes are selected and no ShapeID is specified the total length of all Shapes
is output.
Node - outputs the node ID of the Shape that corresponds to the position input.
NearestDistance - outputs the closest distance to the NearestToPosition
NearestDirection - outputs the direction to the NearestToPosition
NearestOrthogonal - outputs the orthogonal direction to the NearestToPosition
NearestNormal -outputs the nearest normal to the NearestToPosition
NRealativeOnShape - outputs the length on the shape (between 0-1) closest to
NearestToPosition
NAbsoluteOnShape - outputs the length on the shape (real world distances)
closest to the NearestToPosition
NumShapes - outputs the total amount of shapes supplied
NumVertex - outputs the total amount of vertices from all shapes supplied
Rollout Menu
Shape List Box - this list box contains all shapes that have been selected in the
3ds Max viewport
Pick Object - click this button to activate a standard 3ds Max; Pick Object
operation. Pick any shape in the 3ds Max modelling view port.
Rem. - when pressed, the selected shape will be removed form the list box.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Shape** (Instance) Helper
This Helper Node is used to access and duplicate (instance) the parameters of
any Shape Helper in a DynamicSet. Keep in mind that this Helper Node does not
work on its own it needs an original Shape Helper Node to attach to.
Attention This Helper Node is an
Instance of a selected Shape Helper
Node. You are modifying all
Instances of this Node.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
RelativePosition - defines the position on the spline based on a 0-1 normalized
value. A value of 0 means the start of the spline (shape) and a avalue of 1 means
the end of the spline.
NOTE: when multiple shapes (splines) are in the list box (selected), without
specifying a ShapeID input value, all splines (shapes) will be added up for their
total length.
AbsolutePosition - sets the position on the shape (spline) in real length values.
Zero length would be the first vertex of the first shape; from there the absolute
distance from this zero point will be specified.
ShapeID - lets you select a specific shape from the list box; the first object being
ID 0.
Operator Outputs
WorldPosition - outputs the XYZ coordinates in world space of the point in
space that matches the position on the shape.
ObjectPosition - outputs the XYZ coordinates in object space of the point in
space that matches the position on the shape.
WorldTangent - outputs the direction (vector) along the spline in World
coordinates
ObjectTangent - outputs the direction (vector) along the spline in Object
coordinates
Curve Length - outputs the total length of the shape (spline). If multiple
Shapes are selected and no ShapeID is specified the total length of all Shapes
is output.
Node - outputs the node ID of the Shape that corresponds to the position input.
Rollout Menu
Shape - this dropdown menu lets you select any Shape Helper Node from any
DynamicSet to instance its parameters.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
GeomContact Helper
This helper node automatically finds the closest point between multiple objects.
Every contact point found, can be used to automatically place another particle or
a joint at the position that is closest between two objects..
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Objects - this port is used to feed one or many Objects into this operator to
generate a object connection one must use the Object helper which offers an
object output type
Object ID - sets the object ID for the object to be used from the list of objects,
connected at the Objects input. Note: If this is not connected, the first object
will be taken, only.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
*Num Contacts - outputs the number of contact points found.
*Contact ID - outputs the unique ID of the contact point this can be used to
manipulate the point in space.
*Object A ID - supplies the unique ID of the first object
*Object B ID - supplies the unique ID of the second object
*Contact Position - outputs the averaged position of the closest point found
between object A and B
Rollout Menu
Samples - sets the amount of random points put in a volume to find the closest
point on a surface. The more samples are created; the more accurate the result
gets.
Distance - all samples found within the search radius that are below or equal to
this value are averaged to form the closest contact point position between two
objects.
Radius - sets the search radius for placed samples in a volume. The larger this
radius the longer processing will take.
Operate On
Material ID - sets the material ID top operate on. An ID of 0 means no material
ID will be used. Both nearby faces need to have this material ID to generate an
output for this operator.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
GeomObject
thinkingParticles introduces a new category of helper nodes; Geometry access
helpers. In many situations, when creating advanced special effects, there is a
need to query about object states and such queries can go even down to the face
or vertex level of an object. The Geometry helper is specifically designed to do
that.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Objects - this port is used to feed one or many Objects into this operator to
generate a object connection one must use the Object helper which offers an
object output type
Object ID - sets the object ID for the object to be used from the list of objects,
connected at the Objects input. Note: If this is not connected, the first object
will be taken, only.
Operator Outputs
Number of Faces - outputs the number of faces from the selected (Object ID)
object from the list of objects fed into the Objects input port.
Number Vertices - outputs the number of faces from the selected (Object ID)
object from the list of objects fed into the Objects input port.
Size - outputs the size of the object. This vector represents the bounding box of
the object in X,Y,Z space.
Surface Area - outputs the total surface area amount of the object.
Node - outputs the 3ds Max Node, if this is 0 then this is a particle
Particle - outputs the particle ID if this object is a Particle
NumObjects - outputs the total amount of objects connected to this operator
Rollout Menu
There is no menu or UI options available.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
GeomPoint
thinkingParticles introduces a new category of helper nodes; Geometry access
helpers. In many situations, when creating advanced special effects, there is a
need to query about object states and such queries can go even down to the face
or vertex level of an object. The Geometry helper is specifically designed to do
that.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Point Data - inputs a Point data type that can be easily created by the
GeometryParticle helper node (closest point etc.).
Mapping Channel - default = 1, lets you specify the Mapping Channel to be
used by this node
RadialAlignmentBaxis (Integer) - sets an axis for a radial alignment calculation
on the surface point
Value 0 - equals to the X-axis
Value 1 - equals to the Y-Axis
Value 2 - equals to the Z-axis
Operator Outputs
Color - outputs the color of the point specified by the Point Data input of this
operator.
Material Index - outputs the material ID of the point specified by the Point Data
input of this operator.
Normal - outputs the surface normal of the point specified by the Point Data
input of this operator.
Position - outputs a vector representing the position in space of the requested
point.
UVW - supplies the mapping coordinates from the selected Mapping Channel (if
not specified by the Input it will be 1) at this point
Node - represents the max node if the point is from an object
Particle - is the particle ID if the point is coming form a particle shape
Velocity - outputs the velocity at this point
Normal - outputs the interpolated world space normal
Position OSpace - outputs the Position in Object Space
Face Normal OSpace - outputs the Face normal in Object Space
Normal OSpace - interpolated surface normal in Object Space
Alignment - outputs the alignment information
Face ID - outputs the face ID based on the point data
Object ID - outputs the Object ID for that point
Face Coordinates - outputs the exact position on the surface of that point. Those
are the Barycentric coordinates.
Radial Alignment (Alignment) - outputs the radial alignment towards this point
Rollout Menu
There is no menu or UI options available.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
GeomRandom
thinkingParticles introduces a new category of helper nodes; Geometry access
helpers. In many situations, when creating advanced special effects, there is a
need to query about object states and such queries can go even down to the face
or vertex level of an object. The Geometry helper is specifically designed to do
that.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Objects - this port is used to feed one or many Objects into this operator to
generate a object connection one must use the Object helper which offers an
object output type
Object ID - sets the object ID for the object to be used from the list of objects,
connected at the Objects input. Note: If this is not connected, the first object
will be taken, only.
Particle - used to connect the particle stream data
Operator Outputs
Surface Point - outputs a random point on the objects surface, selected by the
Object ID input and the Objects input.
Volume Point - outputs a random point inside the volume surrounded by the
object selected by the Object ID input and the Objects input.
Rollout Menu
There is no menu or UI options available.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
GeomVertex
thinkingParticles introduces a new category of helper nodes; Geometry access
helpers. In many situations, when creating advanced special effects, there is a
need to query about object states and such queries can go even down to the face
or vertex level of an object. The Geometry helper is specifically designed to do
that.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Objects - this port is used to feed one or many Objects into this operator to
generate a object connection one must use the Object helper which offers an
object output type
Vertex ID - sets the Vertex ID to query; from the object selected by the list of
objects, connected at the Objects input.
Object ID - sets the object ID for the object to be used from the list of objects,
connected at the Objects input. Note: If this is not connected, the first object will
be taken, only.
Operator Outputs
Normal - outputs the vertex normal from the object, selected by the Object ID
input and the Objects input.
Position - outputs the vertex position from the object selected by the Object ID
input and the Objects input.
Alignment - outputs the alignment information
Velocity - outputs the velocity at this point
Color - outputs the color at that point
Normal - outputs the interpolated world space normal
Normal OSpace - outputs the Face normal in Object Space
Position OSpace - outputs the Position in Object Space
Vertex ID - outputs the Vertex ID for that point
Object ID - outputs the Object ID for that point
User Interface
There is no menu or UI options available.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
GeomParticle
thinkingParticles introduces a new category of helper nodes; Geometry access
helpers. In many situations, when creating advanced special effects, there is a
need to query about object states and such queries can go even down to the face
or vertex level of an object. The Geometry helper is specifically designed to do
that.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Objects - this port is used to feed one or many Objects into this operator to
generate a object connection one must use the Object helper which offers an
object output type
Particle - used to connect the particle stream data
Position - input any world position to get the closest geometry information in
relation to this position.
Operator Outputs
Closest Object by Surface - outputs the object ID of the closest object based on
the closest surface from the list of objects fed into the Objects Input Data stream.
Closest Object by Vertex - outputs the object ID of the closest object based on
the closest vertex from the list of objects fed into the Objects Input Data stream.
Closest Point by Surface - outputs the coordinates of the closest object based
on the closest point on a surface from the list of objects fed into the Objects
Input Data stream.
Closest Point Distance - outputs the distance to the closest object from the list
of objects fed into the Objects Input Data stream.
Closest Vertex - outputs the vertex number of the closest object from the list of
objects fed into the Objects Input Data stream.
Rollout Menu
There is no menu or UI options available.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
GeomFace
thinkingParticles introduces a new category of helper nodes; Geometry access
helpers. In many situations, when creating advanced special effects, there is a
need to query about object states and such queries can go even down to the face
or vertex level of an object. The Geometry helper is specifically designed to do
that.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Objects - this port is used to feed one or many Objects into this operator to
generate a object connection one must use the Object helper which offers an
object output type
Face ID - sets the face ID for the object to be used from the list of objects,
connected at the Objects input. Note: If this is not connected, the first object
will be taken, only.
Object ID - sets the object ID for the object to be used from the list of objects,
connected at the Objects input. Note: If this is not connected, the first object
will be taken, only.
Face Coordinates - sets the face coordinates to get the get the point on the face.
Face coordinates are Barycentric (this means all components added together
should result in 1 to define a point "on" the face).
Mapping Channel - defines the mapping channel to be used by this Helper.
When this is not connected it will be channel 1 by default.
Operator Outputs
Point - outputs point data of the center face point. This point data can be further
processed by the GeomPoint helper.
Vertex ID 1-3 - outputs the 3 vertex ids of the triangle (face). This can be
further processed by the GeomVertex helper.
UVW 1-3 - outputs the selected UVW channel coordinates for each vertex of the
triangle (face).
Rollout Menu
There is no menu or UI options available.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
Object Helper
thinkingParticles introduces a new category of helper nodes; Geometry access
helpers. In many situations, when creating advanced special effects, there is a
need to query about object states and such queries can go even down to the face
or vertex level of an object. The Object helper is specifically designed to supply
object data to other thinkingParticles nodes.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Object ID - sets the object ID for the object to be used from the list of objects,
connected at the Objects input. Note: If this is not connected, the first object
will be taken, only.
Group - used to feed in a complete group of particles (one mesh). All Geometry
operations will then be affected based on one mesh returned by all particles in
that group.
ParticleA - defines a single particle to be added to the object list for further
processing by Geometry Helper nodes
ParticleB - defines a single particle to be added to the object list for further
processing by Geometry Helper nodes
NOTE:
By using those two inputs, particle
pairs can be defined and tested (e.g.
GeomContact).
Operator Outputs
Objects - outputs the list of objects picked.
Object - outputs a single object selected by the Object ID input
NumObjects - outputs the total amount of Objects in the list.
Rollout Menu
Add - when activated, any object in the 3ds Max viewport may be picked to add
it to the list of available objects.
By List - click this button to bring up a standard 3ds Max "Select by Name"
dialog. This will allow for a multi-select of objects.
Remove - when clicked, the selected object will be removed from the list of
objects.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
AddMultiply
The Add&Multiply Helper is a simple binary math operator used to help
combine two piped in Scalar values.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
ValueA - (Scalar) This input data stream reads in the first Scalar value you want
to use for the math operation.
ValueB - (Scalar) This input data stream reads in the second Scalar value you
want to use for the math operation.
Operator Outputs
Value - (Scalar) This output data stream sends out the result of the selected math
operation.
Rollout Menu
A+B - Choose this option to add the two Scalar values together.
A-B - Choose this option to subtract the second Scalar value (ValueB) from the
first Scalar value (ValueA).
A*B - Choose this option to multiply the two Scalar values together.
A/B - Choose this option to divide the first Scalar value (ValueA) by the second
Scalar value (ValueB).
Per Second - allows the binary math process to accelerate over one second. For
example, if the two Scalar values are 3 and 4 respectively, and they are
multiplied (12), that value is reached after one second. Be aware that the timing
of the second used is defined by the FPS setting in 3ds Max.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
AND
The AND Helper allows you to do binary arithmetic between two or more input
data streams. AND is a logic function that generates a True condition (binary =
1) output stream when all inputs are evaluated as True (1). If one input is false
(binary = 0), the Out output data stream will also be false regardless of how
many inputs return a True condition (1).
This is a handy way of checking multiple conditions to see if they are all true.
For instance, you may want to check to see if a particle in a specified group is a
certain age as well as has made a collision with a selected object. Using the
AND Helper, you'd pipe in the Out output data streams from both of the other
rules to check for their validation. When both rules send a true condition, the
AND Helper would output a True condition. This information could be used as a
"test" to trigger another event or rule.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
In - (Bool) This input data stream takes in the Out output data stream condition
from another operator or rule to see if it returns a True condition (Binary = 1), or
a False condition (Binary = 0).
In - (Bool) This input data stream takes in the Out output data stream condition
from another operator or rule to see if it returns a True condition (Binary = 1), or
a False condition (Binary = 0).
All additional In input data streams will read in the same Boolean information to
determine if all of the output streams that are fed in are true.
Operator Outputs
Out - (Bool) This output data stream sends the true or false state to other node
input data streams regarding the results from the AND test. If all In input data
streams return a True condition (Binary = 1), then the AND Helper will send out
a True condition. If any of the In input data streams returns a False condition
(Binary = 0), then the AND Helper will send out a False condition.
Rollout Menu
Num AND - This spinner lets you set the amount of input data stream
connectors that should be created and used to perform the logical AND
operation. Be aware that by default, the spinner value is set to 1, which means,
compare one value with ONE additional value. A spinner value of 3 would yield
a total of 4 In input data streams; 1 value plus 3 more to compare it with.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Bool
The Bool Helper is a very handy operator to have, since it can be used to set
True or False conditions that can be used by other operators. In addition, this
helper can be animated over time, and this can help increase the power of using
it to manage your other rules or conditions. It enables you turn any connected
condition or operator on or off at any given frame.
Be aware that using the Bool Helper
in this way means that you are doing
linear animations without any use of
rules or conditions.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Outputs
On - (Bool) This out data stream sends out the boolean information provided by
the Value checkbox.
Rollout Menu
Value - Activate this checkbox to send a True condition through the On output
data stream connection. When the checkbox is inactive, the On output data
stream sends a False condition. Also be aware that you can animate the
checkbox state from one condition to another.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Expression
The Expression Helper allows you to create Vector and Scalar input and output
data streams that can be defined through mathematical and logical expressions.
By default, there are no input or output data streams, and you create them as you
need them. To learn more about expressions in general, go to your 3ds Max
Reference Guide and do a search for Expression Controller. You will be given
the information needed to be productive with this Helper.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Outputs
No Operator Outputs.
Rollout Menu
In/Out - Click this button to create, modify and remove your input and output
data streams for this operator. By clicking on this button in a fresh Expression
Helper, you'll get the following dropdown list:
Add Input - This flyout menu lets you choose whether you want to create a
Vector or Scalar input data stream. Once created, the data stream will show up
on the operator within the Wire Setup View.
Remove Input - When you have created input data streams, you can remove
them using this flyout menu.
Rename Input - When you have created input data streams, you can rename
them using this flyout menu.
Add Output - This flyout menu lets you choose whether you want to create a
Vector or Scalar output data stream. Once created, the data stream will show up
on the operator within the Wire Setup View.
Remove Output - When you have created output data streams, you can remove
them using this flyout menu.
Rename Output - When you have created output data streams, you can remove
them using this flyout menu.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Float
A Float helper is very handy when you want to set a specific value for an
operator or condition. Also, you may animate this value through standard MAX
animation tools. In addition, this helper offers an option to add or multiply the
numbers supplied through the IDS-Value connector.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Value - (Scalar) This input data stream is used to supply another float value for
performing the math operation specified in the rollout. For example, if the
spinner value within the Float rollout is set to 1.0 and Added is selected as the
math operation, and the Value input data stream receives a value of 5.2, then the
output would be 6.2 (1.0+5.2).
Value1 - (Scalar) This input data stream is used to modify the Value spinner
setting in the operator based on what type of modification has been chosen.
Type - (Integer) This input data stream takes an integer value that represents the
value that will be added to, multiplied by or simply output to another operator or
condition. Valid input values are 0 and 1, where:
0 = Multiply
1 = Added
Per Second - (Bool) This input data stream is used to override the Per Second
checkbox state.
Operator Outputs
Value - (Scalar) This output data stream sends out the float value to other
operators.
Rollout Menu
Value - Any float value you enter into this spinner will be sent to the Value
output data stream. Be aware that you can animate this value via standard 3ds
Max functions like all the parameters in thinkingParticles.
Any float values that are piped into
this helper's input data streams will
modify the float value that is going
out to other operators. If there is no
other operator connected, the value
from the spinner will be used for the
Value output data stream.
Added - If this option is chosen, any value that is piped in through the Value
input data stream is added to the value in the spinner. So if the incoming float
value was 2.5, and the value in the spinner was 6.0, the output integer value
would be 8.5.
Multiply - If this option is chosen, any value that is piped in through the Value
input data stream is multiplied with the value in the spinner. So if the incoming
float value was 2.5, and the value in the spinner was 6.0, the output integer value
would be 15.0.
Per Second - When active, this checkbox means that the Value typed in (added
or multiplied) will be reached in one second. So the value is counted up and not
just added or multiplied without time.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Integer
Sometimes it's really useful to set a specific value at a specific time in an
animation. The Integer Helper gives you the ability to do just that - provide a
simple value for other operators and rules to work with.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Value - (Integer) This input data stream is used to supply another integer value
for performing the math operation specified in the rollout. For example, if the
spinner value within the Integer rollout is set to 1 and Added is selected as the
math operation, and the Value input data stream receives a value of 5, then the
output would be 6 (1+5).
Value1 - (Integer) This input data stream is used to modify the Value spinner
setting in the operator based on what type of modification has been chosen.
Type - (Integer) This input data stream takes an integer value that represents the
value that will be added to, multiplied by or simply output to another operator or
condition. Valid input values are 0 and 1, where:
0 = Multiply
1 = Added
Operator Outputs
Value - (Integer) This output data stream sends out the integer value to other
operators.
Rollout Menu
Value - Any integer value you enter into this spinner will be sent to the Value
output data stream. Be aware that you can animate this value via standard 3ds
Max functions like all the parameters in thinkingParticles.
Any integer values that are piped
into this helper's input data streams
will modify the integer value that is
going out to other operators. If there
is no other operator connected, the
value from the spinner will be used
for the Value output data stream.
Added - If this option is chosen, any value that is piped in through the Value
input data stream is added to the value in the spinner. So if the incoming integer
value was 2, and the value in the spinner was 6, the output integer value would
be 8.
Multiply - If this option is chosen, any value that is piped in through the Value
input data stream is multiplied with the value in the spinner. So if the incoming
integer value was 2, and the value in the spinner was 6, the output integer value
would be 12.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Invert
The Invert Helper operator takes a given boolean input value and reverses it. A
True input condition is sent out as a False output, and vice versa.
Operator Inputs
On - (Bool) This input data stream reads in a boolean (True = 1, False = 0) value
and passes it directly to the output data stream for reversal.
Operator Outputs
On - (Bool) This output data stream sends out the inverse boolean information
provided within the On input data stream, so that a True condition piped into the
Invert operator will send a False condition through the output data stream and
vice versa.
Rollout Menu
No Rollout Menu.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Math Helper
Math allows to operate on 2 input values and present the final result on its output
port. Various mathematical operators can be easily chosen from the drop down
list.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
1: Value - This input data stream reads in the first number value you want to use
for the math operation.
2: Value - This input data stream reads in the second number value you want to
use for the math operation.
Operator Outputs
Value - This output data stream sends out the result of the selected math
operation.
Rollout Menu
Input (first) - defines the data type that will be fed into this port it can either be:
1. Float
2. Integer
3. Vector
4. Matrix
Input (second) - an optional second value may be used as an parameter for the
mathematical calculations.
1. None
2. Float
3. Integer
4. Vector
5. Matrix
Function - select any of the available functions to apply the mathematical
operation based on one or two input values. The math functions are context
sensitive and they do change based on the input types.
Note:
It is beyond the scope of a software
manual to introduce someone into
the field of vector math or algebra.
Check available online resources to
brush up on those topics.
Input 1: Float or Integer; Input 2: None
Input 1: Vector ; Input 2: None
Input 1: Matrix ; Input 2: None
Input 1: Integer or Float ; Input 2: Integer or Float
Input 1: Vector ; Input 2: Float
Input 1: Vector ; Input 2: Vector
Input 1: Vector ; Input 2: Matrix
Input 1: Matrix; Input 2: Matrix
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Matrix Helper
The Matrix Helper allows you to do raw Matrix math operations. Even though
you may wire the output of this matrix into any position or rotation input it may
not be useful without using the Math operator first.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Rotation X - sets the rotation vector X component
Rotation Y - sets the rotation vector Y component
Rotation Z - sets the rotation vector Z component
Translation - sets the translation vector
Operator Outputs
Matrix - outputs the raw matrix components for further processing by the Math
operator.
Rollout Menu
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
OR Helper
The OR Helper allows you to do binary arithmetic between two or more input
data streams. OR is a logic function that generates a True condition (binary = 1)
output stream when one or more input data streams are evaluated as True (1). If
all of the inputs are false (binary = 0), the Out output data stream will also be
false.
This is a handy way of checking multiple conditions to see if any of them are
true. For instance, you may want to check to see if a particle in a specified group
is a certain age or has made a collision with a selected object. Using the OR
Helper, you'd pipe in the Out output data streams from both of the other rules to
check for their validation. If either of the rules send a true condition, the OR
Helper would output a True condition. This information could be used as a "test"
to trigger another event or rule.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
In - (Bool) This input data stream takes in the Out output data stream condition
from another operator or rule to see if it returns a True condition (Binary = 1), or
a False condition (Binary = 0).
In - (Bool) This input data stream takes in the Out output data stream condition
from another operator or rule to see if it returns a True condition (Binary = 1), or
a False condition (Binary = 0).
All additional In input data streams will read in the same Boolean information to
determine if all of the output streams that are fed in are true.
Operator Outputs
Out - (Bool) This output data stream sends the true or false state to other node
input data streams regarding the results from the OR test. If any of the In input
data streams return a True condition (Binary = 1), then the OR Helper will send
out a True condition. If all of the In input data streams return a False condition
(Binary = 0), then the OR Helper will send out a False condition.
Rollout Menu
Num OR - This spinner lets you set the amount of input data stream connectors
that should be created and used to perform the logical OR operation. Be aware
that by default, the spinner value is set to 1, which means, compare one value
with ONE additional value. A spinner value of 3 would yield a total of 4 In input
data streams; 1 value plus 3 more to compare it with.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Point3
The Point3 Helper is used to set 3 values for other operators to use. A Point3
value is very common in the world of computer graphics and means that there
are three values instead of one single value. A vector, for example, is a Point 3
value as you have XYZ axes to define from 0.0 to 1.0. Believe it or not, Velocity
is also a Point 3 value since it also has 3 dimensional characteristics.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Vector - (Vector) This input data stream is used to override all three of the Value
spinners in the Point3 rollout.
X-Value - (Scalar) This input data stream is used to override the X-Value spinner
within the Point3 rollout.
Y-Value - (Scalar) This input data stream is used to override the Y-Value spinner
within the Point3 rollout.
Z-Value - (Scalar) This input data stream is used to override the Z-Value spinner
within the Point3 rollout.
Operator Outputs
Vector - (Vector) This output data stream takes all three axis values and sends
them out for other operators to use.
X-Value - (Scalar) This output data stream sends out the value set within the XValue spinner for other operators to use.
Y-Value - (Scalar) This output data stream sends out the value set within the YValue spinner for other operators to use.
Z-Value - (Scalar) This output data stream sends out the value set within the ZValue spinner for other operators to use.
Rollout Menu
X-Value - This spinner is used to define the X-Axis value. For directional
information, use values from -1.0 to 1.0, and for all other uses, any values can be
utilized.
Y-Value - This spinner is used to define the Y-Axis value. For directional
information, use values from -1.0 to 1.0, and for all other uses, any values can be
utilized.
Z-Value - This spinner is used to define the Z-Axis value. For directional
information, use values from -1.0 to 1.0, and for all other uses, any values can be
utilized.
Added - If this option is chosen, any value that is piped in through the Vector
input data stream is added to the value in the spinner. So if the incoming value
was 2, and the value in the spinner was 6, the output integer value would be 8.
Multiply - If this option is chosen, any value that is piped in through the Value
input data stream is multiplied with the value in the spinner. So if the incoming
integer value was 2, and the value in the spinner was 6, the output integer value
would be 12.
Per Second - When active, this checkbox means that the Value typed in (added
or multiplied) will be reached in one second. So the value is counted up and not
just added or multiplied without time.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Random
The Random Helper generates a random number value for you to use. Having
this kind of ability can be very helpful, and with the Particle input data stream,
the random value can also be unique for each single particle connected to this
input.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream is used to read in a particle Group to
have random data applied to.
Value1 - (Scalar) This input data stream is used to override the Value 1 spinner
in the Random rollout.
Value2 - (Scalar) This input data stream is used to override the Value 2 spinner
in the Random rollout.
New Value Per - (Integer) This input data stream takes an integer value that
represents how the random number is to be generated. Valid input values are 0
through 2, where:
0 = Call
1 = Frame
2 = Animation
Seed - (Random Seed) This input data stream is used to override the Seed
spinner in the Random rollout.
Operator Outputs
Value - (Scalar)
Rollout Menu
Value 1 - This spinner sets the minimum random number that can be created by
this Helper.
Value 2 - This spinner sets the maximum random number that should be created
by this Helper.
Seed - This spinner sets the default seed value used to create the random
number.
The random seed should be changed
when you use more than one random
helper in a DynamicSet. Each
random helper should have a
different random seed.
New Value Per
Call - For every call to this operator a new random value is created. So every
particle will get a different Random value with each call to this operator.
Frame - Select this option when you want to have a different random result at
each single frame of the animation.
Animation - When this option is chosen, a single random value is created and
this value will remain valid for the entire animation. As a result, all particles
have one random value at all times when they receive the value in the output
data stream.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PathPosition
The Path Position helper is the ideal tool to acquire a position on any kind of
path. It allows you to easily place any particle onto a path or around a path. This
path can either be defined by a spline or an edge selection within a mesh.
It is important to understand that this helper node sets a position for any particle
by a brutal and merciless X,Y,Z change of the current particle's position. This
method works for many situations, however it is unusable for motion blur effects
as the positions jump from frame to frame without any change in velocity.
To animate the particle's position along the path, the position value needs to be
animated. This can be done either by keyframe animating the value or by
connecting the position input of this node to any other node that "spits" out
position numbers in the intended way.
Operator Inputs
ON - (Bool) This input data stream determines whether the node is considered
'on' or 'off.' You can connect other nodes to this input channel such as a Bool
Helper to activate/deactivate the whole node.
Time - (Time) This input data stream is used to define the local time for the node
when the user wants to override the default system time.
Path ID - (Integer) selects the path to use for the position calculations. You may
pick multiple paths with this helper to create complex particle effects.
Position - (Scalar) this value is either measured in a relative way (0-1) or in an
absolute world units way. The interpretation of the connected value depends on
the value of "Position Type".
Position Type - (Integer) sets the Input Values to be interpreted as absolute
world unit positions (distance from path start) or relative units (0 being start of
the path and 1 being end of path).
Vertical Axis - (Integer) selects the vertical particle alignment axis in relation to
the path (0= X,1=Y,2=Z)
Invert Vertical Axis - (Bool) inverts or flips the vertical axis of the particle in
relation to the path.
Path Axis - (Integer) selects the path-axis orientation in relation to the particle
(0= X,1=Y,2=Z)
Invert Path Axis - (Bool) inverts or flips the path-axis in relation to the particle.
Rotation - (Scalar) rotates the particle around the specified path axis
Operator Outputs
Position - (Position) outputs the position information that can be fed into any
node using positions as input
Alignment - (Alignment) outputs the alignment information that can be used
with any connected node that can handle alignment information
Rollout Menu
The path position rollout menu gives "manual" access to the aforementioned
Input parameters of this node. Many paths can be easily added or picked. There
are global settings and path specific settings that can be adjusted when the
relevant path is selected from the list control.
Multiple paths can be selected and added to the list of paths. To control the
settings of a specific path object, select it and adjust its parameters. To select a
specific path with node inputs, use the Path ID input.
Up - when clicked, the selected path is moved up in the list
Down - when clicked, the selected path is moved down in the list
Remove - click the button to remove the select path
Pick Object - Click this button, to enable the object Pick mode to select a path
within the 3ds Max modeling viewport.
Hide - will hide the selected path object in the viewport
Position Group of Controls
Units - when checked, the Position value will be treated as real world units
Relative - check this option to treat the Position value as relative values were 0
means the start of the path and 1 will indicate the end of the path.
Position - selects the position on the path; this can either be a relative value or
an absolute value.
Alignment Group of Controls
Vertical Axis - selects the vertical particle alignment axis in relation to the path
Invert Vertical Axis - inverts or flips the vertical axis of the particle in relation
to the path.
Path Axis - selects the path-axis orientation in relation to the particle
Invert Path Axis - inverts or flips the path-axis in relation to the particle.
Rotation - rotates the particle around the specified path axis
TP Path Rollout Menu
This context sensitive rollout menu displays the parameters based on the selected
path. Each path can hold its own set of parameters, which makes it very efficient.
Type and Globals Group of Controls
Path - when selected, the picked object is directly used as a path (e.g. a Spline
Object)
Selected Edges - check this option, when the selected object is not a Spline and
when the mesh holds selected edges. A selected edge loop for example can be
easily used to create particles that follow along an irregular surface
Invert - flips the start and end position of the path
Rotation - rotates the particles around the path axis
Path Group of Controls
Basis Axis - sets the basis of the path axis to either X, Y or Z. This axis should
always be perpendicular to the path, with curved paths you should use the
imagined plane created from the start position towards the end point of the path.
This spanned imagined plane should have an axis perpendicular to this face.
Selected Edges
Ticks per Unit - used to set the "sampling rate" of selected Edges in a mesh.
The higher this value is the more accurate the "following" or position
information will be.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
StdEmitter
The Standard Emitter helper node is used to create positional and rotational
information for particle generators or particles in general. The main use of this
helper node is in conjunction with the TD-Tool to supply a position when an
Emitter is used for a Custom created particle system.
When connected properly, this helper node creates particles in a random manner
on the area or volume as defined in Emitter Type.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Node - (Node) This input data stream is used to get the selected object to pull the
position data from.
Particle - (Particle) This input data stream reads in a selected particle Group that
is to interact or be placed on the surface of the selected node.
Alignment - (Alignment) This input data stream reads in an alignment value
from a particle Group or other operator and uses it's value to interpolate the X, Y
and Z axis direction components for use in other operators.
Position - (Scalar) sets the position of the Emitter
Type - (Integer) sets the Emitter type
X - (Size) sets the X Size of the Emitter
Y - (Size) sets the Y Size of the Emitter
Z - (Size) sets the Z Size of the Emitter
Operator Outputs
World Position - (Position) outputs the positional information from the Emitter
in absolute world space coordinates. For each particle a new world space
position will be created, so that an area (e.g. Rectangle) will emit particles.
World Normal - (Normal) outputs the surface normal data of the Emitter in
world space for each single particle on the surface when it is created. So if the
emitter is moved and rotated, the particle creation will follow accordingly.
Alignment - (Alignment) outputs the alignment of the Emitter for other nodes
and rules to act upon.
Object Position - (Normal) outputs the position of the emitter in object space in
relation to its center or pivot point.
Object Normal - (Normal) outputs data of the Emitter's surface normal
information for use by other nodes. The data supplied is in local object space.
Normalized Position - (Position) outputs the normalized position of the Emitter
the values will be between 0 and 1 and represent the distances to the center of
the emitter.
Rollout Menu
Type - lets you select between 5 different emitter types.
Point - creates a point emitter for particles
Circle - when selected, a Circular particle emission will take place
Rectangle - choose this option to create a rectangular area were
particles emit from this area.
Box - when selected, a BOX volume will be used to emit particles
from
Sphere - choose this option to emit particles from a spherical
volume
X-Size - outputs the Size value of the emitter for the X-Axis
Y-Size - represents the Size value of the emitter for the Y-Axis
Z-Size - outputs the Size value of the emitter for the Z-Axis
Find below a suggested use of the StdEmitter Helper node. The custom particle
system created by the TD-Tool shown below has an emitter option for easy
creation of the particle emitters. All the positional information is fed into the
StdEmitter Helper node.
The above particle system is created form the TD-Tool, the outcome will look
similar the illustration shown below.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SurfacePos Helper
The SurfacePos Helper is designed to read in a selected object's surface data so
that it can be used to place or direct particles in relation to the surface itself. This
can be exceptionally powerful since you can affect particle behavior with objects
even if they are animated themselves. So getting particles to "stick" to the
surface of a deforming piece of geometry is now possible using the SurfacePos
Helper.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Node - (Node) This input data stream is used to pull the position data from the
selected object. This data stream MUST be connected and will be highlighted
yellow if it is not.
Particle - (Particle) This input data stream reads in a selected particle Group that
is to interact or be placed on the surface of the selected node.
Face ID - (Integer) This input data stream reads in an integer value that
represents a single Face ID within the input Node. Be aware that you can use the
Vertex, Edge or Face methods to further control the distribution of particles on
the Node surface.
Face Coordinates - (Vector) This input data stream reads in a positional value
from the UDeflector Operator. This allows you to selectively position particles
like arrows being stuck on the surface, etc.
Alignment - (Alignment) This input data stream reads in an alignment value
from a particle Group or other operator and uses it's value to interpolate the X, Y
and Z axis direction components for use in other operators.
UVW - (Vector) sets the UVW coordinates to be used on the input Node that you
want to use for the position data when the Face option is selected.
Particle Shape - (Particle) can be used instead of the Node input to supply
surface data or shape information by connecting a particle group to this port
Operator Outputs
Position - (Position) This output data stream passes the positional data from the
surface to other operators and rules.
Normal - (Normal) This output data stream sends the selected Node's surface
normal information for use by other operators and rules.
Alignment - (Alignment) This output data stream provides the alignment of the
particles for other operators and rules to act upon.
UVW - (Vector) This output data stream sends out the UVW mapping vector
information from the selected Node to other operators and rules.
Rollout Menu
Vertex - Select the Vertex option to send the vertex positions for the input Node
object.
Edge - Select the Edge option to send the edge positions for the input Node
object. Be aware that this operates on ALL edges, both hidden and visible.
Face - Select the Face option when you want to define specific parts of the input
Node object for the position data.
Mat. ID - This spinner sets the Material ID for the faces of the input Node that
you want to use for position data when the Face option is selected.
Sm. Group - Use this spinner to set the smoothing group for the faces of the
input Node you want to use for position data when the Face option is selected.
UVW Channel - Use this spinner to set the UVW Channel on the input Node
that you want to use for the position data when the Face option is selected.
Position Subsample - check this option to enhance temporal sample of particle
postions. This is usually needed on fast moving emitters.
Random Seed - This spinner sets the default seed value used to create the
random number.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
VolumePos Operator
The VolumePos Helper is designed to read in a selected object's volume (the
area it occupies) so that it can be used to place or direct particles in relation to
the volume itself. This can be exceptionally powerful since you can affect
particle behavior with objects even if they are animated themselves. So getting
particles to remain constrained within the boundaries of a deforming piece of
geometry is now possible using the VolumePos Helper.
Operator Inputs
ON (Bool) - This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time (Time) - This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Node (Node) - This input data stream is used to get the selected object to pull the
volume data from.
Particle (Particle) - This input data stream reads in a selected particle Group that
is to interact or be placed within the volume of the selected node.
Particle Shape (Particle) - instead of using one single node to define the volume
you may feed into this port a standard particle group data stream so that each
single particle becomes a "volume container".
Operator Outputs
Position - (Position) This output data stream passes the particles' positional data
from the operator to other operators and rules.
Normal - (Normal) This output data stream sends the selected Node's surface
normal information for use by other operators and rules.
Alignment - (Alignment) This output data stream provides the alignment of the
particles upon which other operators and rules can interact.
Rollout Menu
Inside / Outside - Choose the option that defines how you want the particles
tagged. Inside refers to particles within the volume of the selected node, while
Outside tells the helper to tag particles outside the volume.
Mat. ID - This spinner is used to select the Material ID that is to be used as a
"shell" to define sections of the volume within which the particles are to be
placed.
Sm. Group - This spinner is used to select the Smoothing Group that is to be
used as a "shell" to define sections of the volume within which the particles are
to be placed.
Thickness - The Thickness spinner is used to define a surface offset that is to be
used to define the volume. A value of 0.0 will place particles within the surface
itself, while values above this will offset the volume for the particles.
Modifier Tracking - If the selected node is animated over time with object
based modifiers like Bend, Taper, etc., turn this checkbox on, so that the particles
will track with changes to the volume.
Position Subsample - check this option to enhance temporal sample of particle
postions. This is usually needed on fast moving emitters.
Random Seed - This spinner sets the default seed value used to create the
random number.
Use Raster - check this option to order the particles in a regular Volumetric
arranged grid
Raster - sets the raster size for the volume placement of these particles
Random % - is the amount of position variation allowed for each particle in the
raster
Reset Mode - a drop down with three reset options to choose from.
1. None - choose this option to stop particle filling the volumeafter it was
once filled
2. PerFrame - start over with particle filling the volume after each frame.
3. RasterFilled -start over filling the voluem when the volume raster is filled.
Mask - accepts any 3D-Texture Map to control the placement of particles in 3D
space. A black color will delete particles and a white color in the map will create
a particle.
Threshold - any particle placed in an area that is below the threshold will be
deleted, if above, the particle will be shown.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Scripted Helper Nodes
With the release of the latest version of thinkingParticles a powerful new method
to extend the functionality of thinkingParticles has been introduced. Standard
MAXScript can be used now to write your very own thinkingParticles operators,
when needed. Those scripted operators "feel" and behave like any other
thinkingParticles Node; they can be as powerful as the built in ones!
It is way beyond the scope of this manual to teach you how to program a 3D
application or how to properly learn the mathematical skills to write your own
thinkingParticles plug-ins. We do assume an in depth knowledge of the 3ds Max
scripting language and concepts. If you have never wrote a MAXScript before,
we do suggest you check out the available training material offered by Autodesk
to learn MAXScripting.
By installing thinkingParticles, sample scripts have been automatically installed
into the default 3ds Max Script folder. Check out the "TP_Startup.ms" script in
the Startup folder of 3ds Max. This script explains the functions and features of
thinkingParticles which are available to MAX Scripters.
A thinkingParticles Plugin Template
A scripted thinkingParticles plugin would at least look like the template shown
below. To learn more about the function calls and features of thinkingParticles
scripting, check out the "TP_Startup.ms" file placed in the Script startup folder
of 3ds Max.
plugin Geometry [plugin ID]
name:"[plugin name]"
category:"Script"
classid:#([your class id])
extends:TP_ScriptBase
invisible:true
replaceui:true
version:1
(
//here is your plugin code it must contain at least those 3 functions:
tp_color_type()
tp_init_inoutputs()
tp_calculate()
)
tp_register [your plugin ID] 1
Grab
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
AlphaGradient
The AlphaGradient Helper allows you to set or modify a color gradient through
operator nodes. This is a useful node to control several MatterWaves inputs.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Value - (Scalar) This input data stream is used to override the Value Component
in the Color swatch value.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
GValue - (Scalar) holds the current alpha for a specific position (value) in the
alpha gradient. Change the value input between 0 and ; the left hand side is 0 and
right hand side of the alpha gradient is 1.
AlphaGradient - this outputs the complete color gradient. Some of
thinkingParticle's smoke operators allow to use this data type.
Rollout Menu
Alpha Gradient - click the color gradient to bring up a standard
thinkingParticles color gradient dialog. In this dialog you can add/remove or
change any color key on the gradient.
Left Value - sets the left hand color key of the gradient (Key 0)
Right Value - sets the right hand color key of the gradient (Key 1)
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ColorGradient
The ColorGradient Helper allows you to set or modify a color gradient through
operator nodes. This is a useful node to control lights and materials through
procedural setups.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Value - (Scalar) This input data stream is used to override the Value Component
in the Color swatch value.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
GColor - (Color) holds the current color for a specific position (value) in the
color gradient. Change the value input between 0 and ; the left hand side is 0 and
right hand side of the color gradient is 1.
ColorGradient - this outputs the complete color gradient. Some of
thinkingParticle's smoke operators allow to use this data type.
Rollout Menu
Color Gradient - click the color gradient to bring up a standard
thinkingParticles color gradient dialog. In this dialog you can add/remove or
change any color key on the gradient.
Left Value - sets the left hand color key of the gradient (Key 0)
Right Value - sets the right hand color key of the gradient (Key 1)
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Color
The Color Helper allows you to set or modify the RGB color value for relevant
conditions or operators.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Color - (Color) This input data stream is used to override the Color swatch
value.
Red - (Scalar) This input data stream is used to override the Red Channel in the
Color swatch value.
Green - (Scalar) This input data stream is used to override the Green Channel in
the Color swatch value.
Blue - (Scalar) This input data stream is used to override the Blue Channel in the
Color swatch value.
Hue - (Scalar) This input data stream is used to override the Hue Component in
the Color swatch value.
Saturation - (Scalar) This input data stream is used to override the Saturation
Component in the Color swatch value.
Value - (Scalar) This input data stream is used to override the Value Component
in the Color swatch value.
Operator Outputs
Color - (Color) This output data stream sends the complete color information
currently set within the swatch or piped in through the Input Data Streams.
Red - (Scalar) This output data stream sends the Red component color value
currently set within the swatch or piped in through the Input Data Stream.
Green - (Scalar) This output data stream sends the Green component color value
currently set within the swatch or piped in through the Input Data Stream.
Blue - (Scalar) This output data stream sends the Blue component color value
currently set within the swatch or piped in through the Input Data Stream.
Hue - (Scalar) This output data stream sends the Hue component value currently
set within the swatch or piped in through the Input Data Stream.
Saturation - (Scalar) This output data stream sends the Saturation component
value currently set within the swatch or piped in through the Input Data Stream.
Value - (Scalar) This output data stream sends the Value component information
currently set within the swatch or piped in through the Input Data Stream.
Rollout Menu
Color - Click onto this color swatch to open a standard 3ds Max color picker
dialog. You may set any color from the available palette of colors.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Comment Helper
The comment helper is a very special case of a thinkingParticles helper. It
actually doesn't do anything to the scene or changes any value in the scene. This
helper just stores a text, that can be used to describe the wire setup or the scene
or anything else important enough to be stored in the DynamicSet.
Rollout Menu
Caption - sets the caption of the text or comment
Text Area - type text in this area
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
Counter
The Counter Helper Node is a great tool to "count" things in a particle setup and
output the "counting" numbers for processing by different nodes in a
DynamicSet.
Be aware that Counter will only count while the On input is true. Once the On
input is false it will stop counting. If you need to activate counting based on a
single starting True value, then we recommend Timer.
Operator Inputs
ON - (Bool) This input data stream determines whether the Node is considered
'on' or 'off.' You can connect other operators to this input channel such as a Bool
Helper to activate/deactivate the whole operator. Each On/Off event will activate
the counter and proceed with the counting as specified in the settings.
Time - (Time) is used to define the local time for the Node when the user wants
to override the default system time.
Per Particle - (Particle) feed a particle output into this port to enable counting
per particle. If a particle input is available, the counter will store the count value
per particle, each individual particle will carry the counting result on its own.
Count From - (Integer) defines the starting number to count from.
Count To- (integer) sets the end number to count to. If you wish to count for an
unlimited number or it is not known what the max result might be, set this
number to a high amount e.g. 999999999999.
Type - (Integer) sets the method of counting. There are 3 options possible:
0=Stop, 1=Loop From Start, 2=Ping Pong
Backward - (Bool) when set to True, the counting will be backwards
Reset - (Bool) set this port to True to reset the counter and start all over again
ResetPerSub - (Bool) set this port to True to reset the counter for each sub
frame step.
Operator Outputs
Count End - (Bool) gets activated (True) when the counter reached the target
(Count To)
Count - (Integer) outputs the count
Count Normalize - (Scalar) outputs the counting in the range from 0-1
Rollout Menu
Count From - sets the start number to count from
Count To - sets the end number to count to. When this number is reached the On
output port will be enabled.
Stop - when checked, the counting is stopped after the Count To number is
reached
Loop From Start - when checked, the counting will restart over again when the
Count To number is reached
Ping Pong - check this option to let the counter count forward and backward
between the ranges
Backward - when activated the counter will count backwards
Reset - when activated, the counter will be reset
Reset Per SubSample - when activated, the counter will be reset for each sub
frame sample
Example
The example Counter setup shown above, uses the counter to count 3 collisions
and then move a particle to a different group. The nested DynamicSet "Counter
Display" changes the particle shape based on the count output. Every collision
event forces the counter to proceed with counting and when the Count To Value
is reached, the Count End output activates the group switching of the particle.
As it is shown above, the Counter node is a very powerful and versatile node that
can be used in many situations.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
GetDirection
The Get Direction Helper is another math operator that can be very handy when
you want to get the directional information associated with the alignment of a
particle Group. It's primary purpose is to give you the ability to extract
directional components out of a single Alignment input data stream.
Operator Inputs
Alignment - (Alignment) This input data stream reads in an alignment value
from a particle Group or other operator and uses it's value to interpolate the X, Y
and Z axis direction components for use in other operators.
Operator Outputs
X/Y/Z Direction - (Direction) These output data streams provide the individual
direction axis information of the alignment value that is piped in.
Rollout Menu
No Rollout Menu.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Group
This Helper node is used to feed a group data stream to another Node mainly the
Geometry Helper nodes. This helper is used to specify the Particle Group.
Operator Inputs
ON - (Bool) This input data stream determines whether the Node is considered
'on' or 'off.' You can connect other operators to this input channel such as a Bool
Helper to activate/deactivate the whole operator. Each On/Off event will activate
the counter and proceed with the counting as specified in the settings.
Time - (Time) is used to define the local time for the Node when the user wants
to override the default system time.
Rollout Menu
Group - specifies the particle group to be used for the output data stream.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Intersect
The intersect Helper Node is used to obtain the next intersection point for a
moving particle in space. This intersection test is performed by shooting rays in
travel direction or into any user adjustable direction vector, if needed. Many uses
can be thought of for this Helper node, one being an effect that creates particles
at a certain impact position on a surface.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Node - (Node) defines the Object that is being intersected by particles, use a
Node Helper node to feed in the data.
Position - (Position) represents the current position of the particle in space.
Direction - (Direction) a direction vector describing the "traveling" direction of
the particle. This is usually connected to the particle Direction Output of a
Particle Group Node.
Speed - (Speed) inputs the speed at which the particle is traveling. Usually this
would be connected to the Speed output of a Particle group Node.
Speed as Ray Length - (Bool) when active (True), the Speed value is treated as
a World Unit Distance value, instead of being a speed value.
Two Sided - (Bool) when this port is active (True), the intersection test will be
done on both sides of a face (front and back). By default, only the front side of a
face is tested for intersection.
SubTree - (Bool) activate this port (True) to use the attached children of the
Object as well as for intersection testing.
Particle Shape - (Particle) lets you input any Particle Group and use the shape
of the particles to do the intersection testing.
UVW Channel - (Integer) same as its UI control counterpart, it lets you define
the UVW channel number to be used to output the UVW data of an intersect
point on a surface.
Operator Outputs
Hit - (Bool) This output data stream sends the true or false state to other node
input data streams regarding the results from the Hit test. A True value will
indicate that a particle has hit a surface for which it was tested.
Position - (Position) outputs the hit position on the surface of the connected
Object. The position is in absolute world space units.
Normal - (Normal) represents the true unmodified face Normal at the Hit-Point.
Geometry Normal - (Normal) outputs the interpolated (smoothed) normal at the
Hit-Point.
Distance - (Distance) outputs the distance to the Hit-Point.
Back Side - (Bool) when this output becomes active (True), the backside of the
face was hit.
Object Position - (Position) outputs the object's position data.
UVW - (Vector) outputs the UVW texture coordinate of the intersect point of the
selected UVW Channel.
Face ID - (Integer) outputs the Face number of the intersected face.
Face Coordinates - (Vector) outputs the Barycentric coordinates of the
intersected face.
Rollout Menu
Speed - sets the speed of the particle manually, this should be used when there is
no Speed connected on the input port.
Speed as Ray Length - when checked, the Speed parameter will act as a fixed
length for intersection testing.
Two Sided - when checked, the Intersection testing will be done on the backside
of the face as well.
Use SubTree - check this option to enable intersection testing with the child
objects as well.
UVW Channel - defines the UVW channel that should be output to the UVW
port of this Node.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Node Helper
The Node Helper is used to define an object in your 3ds Max scene. This Node
object can be any 3D object in a 3ds Max scene including splines, lights, helpers,
etc. Several other operators can work with the output data streams supplied by
this Helper.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Node - (Node) This input data stream is used to override the Pick Node option in
the Node rollout to define the chosen object in your 3ds Max scene.
Operator Outputs
Position - (Position) This output data stream provides the XYZ positional data
for the selected Node to other operators.
Spin- (Spin) This output data stream provides the rotational data for the selected
Node to other operators.
Scale - (Scale) This output data stream provides the Scaling data for the selected
Node to other operators.
Velocity - (Velocity) This output data stream provides the current velocity for the
selected Node to other operators.
Node - (Node) This output data stream passes the entire node object to other
operators for further usage.
Alignment - (Alignment) This output data stream provides the Local Axis
alignment data for the selected Node to other operators. By default, the positive
X-Axis is used to determine which way the selected object is facing and this
information is passed to other operators.
Rollout Menu
Pick Node - Click this button to select any object (including Lights, Cameras,
Helpers, etc.) from the scene. The selected object will then supply all relevant
output data stream information for other operators to use. thinkingParticles will
use the information supplied by the object on a frame-by-frame basis, so you
might want to animate, scale or rotate this object to drive other parameters in
your particle system.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
One To X
The One To X Helper is used as a quick switch for data streams of any type. As
a result, one piped in integer value input can activate multiple outputs.
Be aware that if the X Input value
changes, the associated output data
stream also changes and only ONE
Output can send out a value at a
time. In other words, with 2 Outputs,
if the X Input value starts with a
value of 1, Out 1 gets a value. If the
X Input value then receives a value
of 2, the Out 1 then sends no value
while Out 2 sends out a value.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
X Input - (Integer) This input data stream is used to denote the Out output data
stream that is to receive a value. So, if you have 3 Out output data streams and
the integer value piped into this stream is 2, it means that the second Out output
data stream sends out the value fed into the In port to any other connected
operator.
In - used to feed in any type of value that is to be switched through multiple
output ports.
Operator Outputs
Out - this output data stream sends out the value provided by the Value
checkbox.
Rollout Menu
Num Outputs - This spinner sets the number of output data streams that are
displayed in the schematic view window.
Port Type - sets the type of value connected to the input of this operator, this
will also be the same type of value output by the selected Out ports.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ParticleData
The ParticleData Helper is used to get many aspects of the currently selected
particle Group so that this information can be passed along to other operators
and conditions.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be used for it's data channels. The data stream MUST be
connected and will be highlighted yellow if it is not.
Operator Outputs
Position - (Position) This output data stream provides the position of the
particles for other operators and rules to act upon.
Velocity - (Velocity) This output data stream provides the current velocity of the
particles for other operators and rules to act upon.
Life Span - (Life Span) This output data stream provides the life span of the
particles for other operators and rules to act upon.
Age - (Age) This output data stream provides the current age of the particles for
other operators and rules to act upon.
AgeRelative - (Scalar) outputs the particle age between 0 (birth) and 1 (death).
Size - (Size) This output data stream provides the size of the particles for other
operators and rules to act upon.
Rotation - (Rotation) This output data stream provides the rotation of the
particles for other operators and rules to act upon.
Alignment - (Alignment) This output data stream provides the alignment of the
particles for other operators and rules to act upon.
Mass - (Mass) This output data stream provides the mass of the particles for
other operators and rules to act upon.
Scale - (Scale) This output data stream provides the scale of the particles for
other operators and rules to act upon.
Group - (Group) This output data stream provides the current particle Group the
particles belong to for other operators and rules to act upon.
Shape - (Shape) This output data stream provides the shape information of the
particles for other operators and rules to act upon.
CH: is displayed whenever a data channel is used in the selected particle group
Rollout Menu
Data Channel Group - used to select the particle group containing data
channels
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Path Helper
Paths are either defined by a spline object or a mesh that has an active edge
selection. This Helper is meant to serve as a "path feeder" for operators able to
work with splines.
Rollout Menu
List Box - holds the list of picked objects that serve as a "path"
Up, Down - sorts the position of the selected object
Remove - when clicked, the selected object gets removed from the list
Pick Object - click this button to enter object selection mode. Select any mesh
or spline object in the scene to act as a path.
Hide - when clicked, the object is hidden in the scene.
Path - check this option to define the selected object to be already a path (Spline
objects)
Selected Edges - when checked, the selected object must be a mesh with an
active edge selection. Those selected edges will become the path.
Invert - check this option to reverse the path direction.
Rotation - specify any angle, to freely rotate around the perimeter of the path.
Base Axis X,Y,Z - select either axis to define the main alignment that should be
used for all further particle alignment processing.
Ticks per Unit - defines the maximum resolution of the time samples possible
along the path length. This value is only used when a mesh object, with selected
edges, is chosen as a path provider.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
Sum
The Sum helper node is used to create summations of multiple values of equal
type. This is especially helpful for vector operations when using multiple forces,
for example.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Variable Context Sensitive Inputs - depending on the settings of the Sum node
the input type and the amount can be adjusted.
Operator Outputs
Variable Context Sensitive Output - there is one summed output available.
Rollout Menu
PType - there are several options to create a summation of input values of
different types. The available types are:
Integer - check this option to create a summation of integer values
Scalar - check this option to create a summation of scalar values
Vector - check this option to create a summation of vector values
Velocity - check this option to create a summation of Velocity values
Direction - check this option to create a summation of Direction values
Input Count - lets you specify the amount of values to sum up.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
TexmapColor
One of the advanced helper nodes is the TexmapColor Helper. This helper
works in conjunction with the MatterWaves operator to get the current surface
color of a map. TexmapColor uses the UVW or Position input to determine the
color value at that coordinate. When used In conjunction with pyrocluster, it
allows you to control the volumetrics color based on the surface color of an
object.
Another use of this helper could be to "sort" or specify particles based on the
texture color they are emitted from.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
UVW - (Vector) This input data stream allows any operator condition to be used
to input a UVW coordinate that is to be read.
Surface Position - (Vector) This input data stream can be connected to any
channel that supplies a Point3 (X,Y,Z) value.
Operator Outputs
Color - (Color) This output data stream carries the current color based on the
UVW or Surface Position input value.
Alpha - (Scalar) This output data stream supplies the current Alpha value of the
point based on the UVW or Surface Position input value
Rollout Menu
Preview On - Activate this checkbox to see the mini-map preview window.
Map Blur - Increase this spinner's value to blur the selected map. This is useful
when you want to reduce noise in the map and to even out the results.
Map Slot - Click the button that says "NONE" by default to bring up a standard
Material/Map browser. Select any texture map from the available options as the
source image.
Example:
In the sample setup shown above, a MatterWaves emitter creates particles and
stores them in a group called Particles. All particles created into this group
depend on the further processing from the above shown rules.
The group named Particles has an added DataChannel output data stream #0
(called CH:UVW). From this port the TexmapColor helper gets its UVW
channel. MatterWaves on the other hand, creates particles stored in the group
named Particles along with the extra DataChannel information holding the UVW
coordinates. This UVW "value transfer" is done and prepared in two places of
thinkingParticles, in the Particle Group rollout menu (assigning a Data Channel)
and in the MatterWaves Write to Channel rollout section. From within the
MatterWaves Write to Channel rollout, the UVW Channel and the DataChannel
number of the Particle group may be chosen. In this example Channel #0 is used
for holding UVW data.
What does TexmapColor do?
Based on the UVW channel coordinates, TexmapColor calculates the relevant
shading color based on the selected texture map and UVW coordinate. This color
value may then be used as a trigger to do some modifications to particles or
other objects in the scene. In the sample setup shown above, a Threshold
condition is used to sort particles based on the surface color of a selected object.
A white surface color (threshold 1.0) will assign the particles to the White
Teapot particle group, a black surface color (threshold 0.0) will assign the
particles to the Black Teapot group. The result of the above mentioned
DynamicSet looks like the illustration shown below. Note, the "black" teapots
are blue in this image (for better visibility). The black checker fields emit black
teapots (here they are blue) and the white checker fields create white teapots.
This will even work with an animated map.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ValueToValue Helper
Use this Node to define a curve to control an output value. This helper allows
detailed control of it's input and output range which are mapped to the curve.
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Value - controls the X-Axis of the curve to get a Y-Axis value. This value is
always mapped between 0 and 1 of the curve.
InMin - defines the minimum value to be matched to the 0 X-Axis value of
the curve.
InMax - defines the maximum value to be matched to the 1 X-Axis value of the
curve.
OutMin - this will match the curve 0 Y-axis value to the minimum value and
output its value.
OutMax - this will match the curve 1 Y value to the maximum value and output
its value.
InScale - acts as a multiplier for the curve control to set the amount of
repetitions (e.g. will repeat the curve value 2 times)
InPhase - shifts the curve along the X-Axis. When this is animated the curve
will cycle through.
Out of Range - controls what happens when the curve is reaching its borders
(left or right).
Stop - the last value will be used
Loop - will start at the first value
PingPong - reverses the curve
Increment - adds the last increment found in the curve
Operator Outputs
Value - outputs the matched Y-Axis value of the curve based on the matched XAxis input value.
Rollout Menu
Min - defines the minimum value to be matched to the 0 X-Axis value of the
curve.
Max - defines the minimum value to be matched to the 1 X-Axis value of the
curve.
Scale - acts as a multiplier for the curve control to set the amount of repetitions
(e.g. will repeat the curve value 2 times)
Phase - shifts the curve along the X-Axis. When this is animated the curve will
cycle through.
Out of Range - controls what happens when the curve is reaching its borders
(left or right).
Stop - the last value will be used
Loop - will start at the first value
PingPong - reverses the curve
Increment - adds the last increment found in the curve
Output (y-axis)
Min - this will match the curve Y value to the minimum value and output its
value.
Max - this will match the curve Y value to the maximum value and output its
value.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
X To One
The X To One Helper is used as a quick switch for data streams of any type. As
a result, many input values can easily be switched through to one single output.
Be aware that if the X Input value
changes, the associated input data
stream also changes and only ONE
Input can send out a value at a time.
In other words, with 2 Inputs, if the
X Input value starts with a value of
1, the In 1 value is taken and routed
to the Out port of this operator. If the
X Input value then receives a value
of 2, the In 2 is used to process the
incoming data.
Operator Inputs
ON - (Bool) this input data stream determines whether the operator is considered
'on' or 'off.' You can connect other operators to this input channel such as a Bool
Helper to activate/deactivate the whole operator.
X Input - (Integer) this input data stream is used to denote the In input ports to
be used to get values. So, if you have 3 In input data streams and the integer
value piped into this stream is 2, it means that the second In input data stream
sends out the value to the one Out port of this operator.
In xx - used to feed in any type of value that is to be switched through to the one
output port.
Operator Outputs
Out - this output data stream sends out the value provided by the In port.
Rollout Menu
Num Outputs - This spinner sets the number of output data streams that are
displayed in the schematic view window.
Port Type - sets the type of value connected to the input of this operator, this
will also be the same type of value output by the selected Out ports.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
EggTimer
thinkingParticles offers advanced Non Linear Animation features (NLA) that let
you control time in a completely different way from what you are used to in 3ds
Max. The EggTimer Helper is like an alarm timer that runs for a certain (preset) amount of time and then stops and flags a signal.
A new feature has been added to the EggTimer node; the boolean flag 'Reached'
is kept active after reaching the timer's end. This easily allows to create complex
oscillator setups like the one shown below.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Start - (Bool) This input data stream is used to activate the Timer Helper. The
data stream MUST be connected and will be highlighted yellow if it is not.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be timed with this helper.
Frames - (Frame) This input data stream is used to override the Frames spinner
within the Timer rollout.
Extend - (Bool) This input data stream is used to override the Extend checkbox
state.
Single - (Bool) This input data stream is used to override the Single checkbox
state.
Loop - (Bool) This input data stream is used to override the Loop checkbox
state.
Operator Outputs
Reached - sends the true or false state to other node input data streams when the
time is up.
Running - signals active as long as the EggTimer is still running.
Time - (Time) This output data stream sends out the local timer value. So if the
timer's Value is set to 10, and it's at frame 6 of it's timing - this output data
stream outputs a time of 6.
Time Relative - outputs the time as a normalized value between 0 and 1
Frames - represents the running time for this timer (the UI value)
Reached Hold - in contrast to the 'Reached' output this output will stay active
after the timer has reached its event.
Rollout Menu
Frames - You may set any time in frames with this spinner. As soon as the Start
input data stream receives a True condition, time starts ticking up to the value
you have set.
Extend - When this checkbox is active, the time value is reset for each On/Off
change within the Start input data stream. This option mimics the feature of
"motion sensor lights" you might have on the outside of your house. Whenever
the sensor gets a new detection signal (On/Off), the time starts all over again.
Single - When this checkbox is active, the Timer Helper will stop after it is
initiated and run through the time interval. It will not be restarted regardless of
any On/Off changes within the ON input data stream.
Loop - This checkbox causes the Timer to reset and repeat it's count as long as
the ON input data stream receives a True condition.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Frame
The Frame Helper let's you set a specific frame to use within other operators
and rules. In some cases, you may find it useful to tag specific frames or areas
within your animation for use at other points within your particle animation.
This Helper gives you that ability.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Frame To Add - (Frame) This input data stream is used to add an additional
value to the Frame value. So, if the Frame spinner is set to 10, and a value of 5 is
piped in through this input data stream, the Frame output will be set to 15.
Frame - (Frame) This input data stream is used to override the Frame spinner in
the Frame rollout.
Type - (Integer) This input data stream takes an integer value that represents the
Type of calculation the Helper will use. Valid input values are 0 and 1, where:
0 = Added
1 = Multiply
Operator Outputs
Frame - (Frame) This output data stream sends out the set Frame value for use
by other operators and rules.
Rollout Menu
Frame - This spinner sets the Frame value to be output to other operators.
Added - If this option is chosen, any value that is piped in through the Frame
input data stream is added to the value in the spinner. So if the incoming value
was 2, and the value in the spinner was 6, the output Frame value would be 8.
Multiply - If this option is chosen, any value that is piped in through the Frame
input data stream is multiplied with the value in the spinner. So if the incoming
value was 2, and the value in the spinner was 6, the output Frame value would be
12.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
TimeBase
The TimeBase Helper lets you control what timing should be used to process
animations for the attached conditions and operators.
One of the basic ideas behind Non Linear Animation is that an artist can animate
an object independently of fixed frames or time values. Once the animation is
created, at a later time the animation package will take care of the proper scaling
and blending of the motion.
A good example of this would be a flock of birds. The wings of the birds will
move according to their relative speed. Let's say that a "standard" animated wing
motion cycle takes 30 frames. But what happens if you need to animate birds in
panic? The wings need to move much faster but more or less in the same motion
cycle. The same holds true for a slow moving flock - the wing motion would
slow down.
This is a perfect NLA situation - using thinkingParticles and the TimeBase
Helper, you can scale the timing of this wing move cycle automatically to meet
your action needs.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
In - (Bool) This input data stream is used as a counter. As long as this is helper
is active, the time is added up. As soon as this helper gets a False condition,
Time is no longer added up. When it is active again, then the time is reset or
continued.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have its animation timing altered with this helper.
TimeBase - (Integer) This input data stream takes an integer value that
represents the Type of TimeBase calculations the Helper will use. Valid input
values are 0 through 2, where:
0 = Global
1 = DynSet
2 = Active
Sum - (Bool) This input data stream is used to override the Make checkbox
status within the TimeBase rollout.
TimeFactor - (Scalar) This input data stream is used to override the Time Factor
[%] spinner in the TimeBase rollout.
Variation - (Scalar) This input data stream is used to override the Variation [%]
spinner in the TimeBase rollout.
Operator Outputs
Time - (Time) This output data stream sends out the current time value from
wtihin the TimeBase Helper to other operators and rules.
Rollout Menu
Global - Activate this option to use the 3ds Max time for the attached (wired)
operators and conditions. This means if there is an animated value (any
parameter) the exact key frames and timing from 3ds Max is taken.
DynSet - This option changes the animation time to the DynamicSet time. Each
DynamicSet can be animated (On/Off) and so, whenever the status changes from
Off to On, the Time starts at frame 0. For example, let's say that you activate a
DynamicSet at Frame 40; this makes all animated parameters of the connected
conditions and rules think that the real time is frame 0. This is valid only for the
DynamicSet in which the TimeBase helper is placed.
Active - When checked, each time the ON input data stream receives a True
condition, the time is reset to 0. For each False condition received, the time is
frozen.
Make Sum - Activate this checkbox to add the times whenever the ON input
data stream receives a True condition. Whenever the In input data stream
receives a True condition, the time value continues to add up. When the In input
data stream receives a False condition, the time value remains static.
This is not a sum of time values, it is
just a continuation of time.
Time Factor [%] - Change this spinner to increase or decrease the animation
speed of the attached conditions and operators. A value of 100% equals the
original timing of the animation, while values lower will speed the animation up
and values higher will slow the animation down.
Variation [%] - Increase this value to add some randomness to the animation
time. If you've piped in a Particle data stream, the randomness is added per
particle.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Time Loop
The Time Loop Helper is another Non Linear Animation (NLA) feature that
allows you to control the animation time independently of fixed timing or
keyframes. All attached conditions and operators will loop within the time range
as it is set in this Helper.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Time To Loop - (Time) This input data stream is used to set the time that should
be looped within the helper. This value can be created or received from any other
Time output data stream. For example, if you you create a timer that runs from
frames 1 to 35, then this time range will be used as the loop.
Loop Time - (Frame) This input data stream is used to override the Loop Time
spinner within the rollout.
Type - (Integer) This input data stream takes an integer value that represents the
Type of Looping the Helper will use. Valid input values are 0 and 1, where:
0 = Loop from Start
1 = Ping Pong
Operator Outputs
Time - (Time) This output data stream sends out the looped time value from
within the TimeLoop helper for other operators and rules to use.
Rollout Menu
Loop Time - Use this parameter to set the Loop time of the animation. A value
of 30 means that after 30 frames the animation will start again (cycle).
Loop from Start - Select this option so that the animation loop always starts
from the beginning.
Ping Pong - Activate this option to cause the animation loop to go back and
forth.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Timer1
As is the case with the other timer Helpers, the Timer1 Helper is used to take
existing animation and control it's playback timing in a Non Linear fashion.
Please read through the following example to get a better understanding of how
this helper does that.
Imagine that you have an animated door that needs 31 frames to open (0-30).
The animation has two keyframes, one at frame 0 (door closed) and one at frame
30 (door open). Standard animation packages like 3ds Max understand this linear
animation and so when the Play button is pushed, the door will open over the
course of frames 0 to 30 and that will be it. The Timer1 Helper, however, lets
you extract that 31-frame block of animation, and control it "outside of normal
time". You will be able to trigger it's start and stop times, loop it, and cause it to
pause anywhere you'd like repeatedly and reliably.
To use the Timer1 Helper you must think about the constants in your block of
animation. What are the key points or keyframes that must be used? The only
constants in this example are the two key frames you have set to open the door
(frame 0 and frame 30). Knowing this, you can now set your Timer1 Helper to
trigger your animation as you want.
The Start parameter reflects the first absolute keyframe you want to use from
your block of animation. In this example, that would be frame 0, which
represents the closed door. Frames1 is used to define the time (in frames) it
takes to play back the block of animation (frame 0-30) or a fraction of the "full"
animation. Hold1 represents the last keyframe you want to use from your block
of animation that is played back at the speed set by Frames1. In this example,
that would be frame 30, which represents the opened door.
Ok, now let's review what we know so far - for this door animation, let's say that
Start is set to 0, Frames1 is set to 15 and Hold1 is set to 30. With these settings,
the entire block of animation (frames 0 to 30 - as defined in the Start and Hold1
parameters) will be played back in 15 frames (as defined by the Time1
parameter).
The Time2 sequence is just added after Time1 has finished. It controls how long
the added part of the animation should last. The concepts and functions are the
same as for Time1. Time3 defines the amount of time it takes to reach the "End"
position of the "full" animation. Note, this is not the "end" of the animation
created by Timer1, it's the last frame of the "full" animation. In the case of the
door an End value of 0 would mean that the door swings back to its closed state
(frame 0). To keep the door a little bit open at the end of the animation one
would use frame 5 or 10 as this would reflect a door open status from the "full"
animation (Frame 0-30).
We know that the above sounds like we had a few too many beers, but don't
panic if you did not totally grasp this "time thing" in the first run. Try to read it
through again at a later stage and you might get into NLA more deeply. Please
also check out the door sample file that was installed with the thinkingParticles
software package.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Start - (Bool) This input data stream is used to trigger the animation playback.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be used for the animation block.
Start - (Frame) This input data stream is used to override the Start spinner in the
Timer1 rollout.
Frames1 - (Frame) This input data stream is used to override the Frames1
spinner in the Timer1 rollout.
Hold1 - (Frame) This input data stream is used to override the Hold1 spinner in
the Timer1 rollout.
Frames2 - (Frame) This input data stream is used to override the Frames2
spinner in the Timer1 rollout.
Hold2 - (Frame) This input data stream is used to override the Hold2 spinner in
the Timer1 rollout.
Frames3 - (Frame) This input data stream is used to override the Frames3
spinner in the Timer1 rollout.
End - (Frame) This input data stream is used to override the End spinner in the
Timer1 rollout.
Extend - (Bool) This input data stream is used to override the Extend checkbox
state in the Timer1 rollout.
Single - (Bool) This input data stream is used to override the Single checkbox
state in the Timer1 rollout.
Operator Outputs
Out - (Bool) This output data stream sends the true or false state to other node
input data streams regarding the Timer state.
Time - (Time) This output data stream send out the local Timer1 value. So if the
Timer1's Value is set to 10, and it's at frame 6 of it's animation block timing - this
output data stream outputs a time of 6.
Particle - (Particle) This output data stream sends the particles that are "tagged"
by the Timer1 when it's active.
Rollout Menu
Start - This parameter sets the start frame within the block of animation that is
to be used by Frames1 to play back.
Frames1 - Usually an animation is keyframe dependent which means that the
animation lasts only as long as there are keyframes and animation data placed at
specific points in time. The Frames1 spinner tells the Timer1 Helper to play back
the defined block of animation in this many frames, regardless of how many
frames it would have taken originally. So, an object that originally took 30
frames to complete its animation would play back those 30 frames in 15 frames
by setting the Frames1 value to 15.
Hold1 - This spinner sets the last frame of the animation block that should be
used as the end point within the animation controlled by Frames1. As an
example, let's say that you have Start set to 0, Frames1 set to 30 and Hold1 to
5. This will make the Timer1 Helper only play back frames 0 (Start value)
through 5 (Hold1 value) of the animation block in 30 frames (as set in Frames1).
This results in a slow motion effect as an original 5 frame animation now takes
30 frames.
Frames2 - The Frames2 parameter tells the Timer1 Helper to play back the
animation block (defined as Start to Hold2) in this many frames, regardless of
how many frames it would have taken originally. Frames2 is an animation
sequence added to Frames1. It is played back after the animation of Frames1
has finished.
Hold2 - This spinner sets the last frame of the animation block that should be
used as the end point within the animation controlled by Frames2. As an
example, let's say that you have Start set to 0, Frames2 set to 30 and Hold2 to
5. This will make the Timer1 Helper only play back frames 0 (Start value)
through 5 (Hold2 value) of the animation block in 30 frames (as set in Frames2).
This results in a slow motion effect as an original 5 frame animation now takes
30 frames.
Frames3 - The Frames3 spinner sets the time the Timer1 Helper needs to play
back the animation block until the frame set in the End spinner is reached.
End - This sets the frame that should be used from the animation block to play
back the animation controlled by Frames3. When set to 0, it returns the
animation to its original starting point. In the case of the door example, since the
animation started with the door closed at frame 0, if this value is used in the End
parameter, it will cause the door to close when the animation ends.
Extend - Activate this checkbox to freeze the status of the animation played
until Frames2 as long as the ON input data stream of the Timer1 Helper receives
a True condition. The animation sequence controlled by Frames3 is played back
as soon as this ON input data stream returns a False condition. By turning on this
checkbox, you can effectively cause the Timer1 Helper to play the animation
repeatedly as conditions or rules are met.
Single - Activate this checkbox to play back a complete animation cycle (Time1Time3), as soon as the ON input data stream receives a True Condition. This
event happens one time only, regardless of how many times the True condition is
received after that.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Timer
thinkingParticles offers advanced Non Linear Animation features (NLA) that let
you control time in a completely different way from what you are used to in 3ds
Max. The Timer Helper is like a stopwatch that helps create a window of time
for a set of rules or conditions to occur.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Start - (Bool) This input data stream is used to activate the Timer Helper. The
data stream MUST be connected and will be highlighted yellow if it is not.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be timed with this helper.
Frames - (Frame) This input data stream is used to override the Frames spinner
within the Timer rollout.
Extend - (Bool) This input data stream is used to override the Extend checkbox
state.
Single - (Bool) This input data stream is used to override the Single checkbox
state.
Loop - (Bool) This input data stream is used to override the Loop checkbox
state.
Operator Outputs
Out - (Bool) This output data stream sends the true or false state to other node
input data streams regarding the Timer state.
Time - (Time) This output data stream sends out the local timer value. So if the
timer's Value is set to 10, and it's at frame 6 of it's timing - this output data
stream outputs a time of 6.
Particle - (Particle) This output data stream sends the particles that are "tagged"
by the timer when it's active.
Rollout Menu
Frames - You may set any time in frames with this spinner. As soon as the ON
input data stream receives a True condition, time starts ticking up to the value
you have set.
Extend - When this checkbox is active, the time value is reset for each On/Off
change within the ON input data stream. This option mimics the feature of
"motion sensor lights" you might have on the outside of your house. Whenever
the sensor gets a new detection signal (On/Off), the time starts all over again.
Single - When this checkbox is active, the Timer Helper will stop after it is
initiated and run through the time interval. It will not be restarted regardless of
any On/Off changes within the ON input data stream.
Loop - This checkbox causes the Timer to reset and repeat it's count as long as
the ON input data stream receives a True condition.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ValueToTime
The Value To Time Helper gives you the ability to take any scalar value and
turn it into a time value. Any value piped into the Value input data stream will be
converted into a time value (frames/ticks). This can be very powerful tool;
imagine taking a Distance value and converting it into time so that it could
control the speed of another animated object. For example, lets say you pipe in
the speed of a particle, and the speed is 20. The Value To Time Helper will take
this value and turn it into 20 Frames or Ticks or whatever you have set. So if an
object is animated it will show the animation status at frame 20.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Value - (Scalar) This input data stream is used to define what scalar value (like a
distance or speed) is to be converted into a time value.
The Time output of this helper will
be increased/decreased accordingly
to the amount supplied by the Value
input data stream when Value1 and
Value2 are used.
Value1 - (Scalar) This input data stream is used to override the Value1 spinner
within the ValueToTime rollout.
Time1 - (Frame) This input data stream is used to override the Time1 spinner
within the ValueToTime rollout.
Stop1 - (Bool) This input data stream is used to override the upper Stop
checkbox state within the ValueToTime rollout.
Value2 - (Scalar) This input data stream is used to override the Value2 spinner
within the ValueToTime rollout.
Time2 - (Frame) This input data stream is used to override the Time2 spinner
within the ValueToTime rollout.
Stop2 - (Bool) This input data stream is used to override the lower Stop
checkbox state within the ValueToTime rollout.
Operator Outputs
Time - (Time) This output data stream provides the Time conversion of the input
scalar value for other operators and rules to use.
Rollout Menu
Value1 - This spinner sets the first target value that needs to be reached to create
a time value as it is set in Time1. The value will be passed on to the Time output
data stream.
Time1 - This spinner represents the frame number of the original object
animation that should be reached when Value1 is equal to the amount supplied
through the Value input data stream.
Stop - When this checkbox is active, the time value will be clamped to the value
set in Value1. If this checkbox is not active, the time is increased/decreased by
the same amount that is supplied through the Value input data stream.
Value2 - This spinner sets the first target value that needs to be reached to create
a time value as it is set in Time2. The value will be passed on to the Time output
data stream.
Time2 - This spinner represents the frame number of the original object
animation that should be reached when Value2 is equal to the amount supplied
through the Value input data stream.
Stop - When this checkbox is active, the time value will be clamped to the value
set in Value2. If this checkbox is not active, the time is increased/decreased by
the same amount that is supplied through the Value input data stream.
There is only one VALUE input data
stream, and it is the one used to
compare against the Value1 and
Value2 spinners. If Value is equal to
Value1, then Time 1 is used as the
Time output. The same is true if
Value is equal to Value2, then Time2
is used. If the Value is between the
two other values, then there will be a
linear interpolation between Value1
and Value2. You can even reverse
time to make backwards animation
using this helper.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
What is an APF ?
Welcome to a world full of volumes!
thinkingParticles All Purpose Field operators (short: APF) represent a whole
new class of operator nodes. APF operators act on individual cells (voxels) in 3D
space, organized in a 3D grid structure. Those 3D Grid cell structures are
combined into fields. Each 3D field holds a dynamic amount of grid cells in
which each cell can hold information in relation to its position in space.
The Cell
APF cells are always cubes and can not exists in any other form or shape. Cells
are dynamically created in 3D space when data exists. This implies that cells do
not need to exists in a regular grid form, larger empty spaces may exists between
cells if no data is ever created in such void areas. thinkingParticles handles
empty space very efficiently without the need to spend enormous amount of
memory to store larger fields.
All spatial operation based on cell data is performed on the center of the cell
(voxel), there is no other positional operation on cell data done.
Interpolation of cell data is done with 8 neighbor cells, if a cell is created in an
empty space extra cells are created automatically to allow for proper
interpolation of cell values.
Cells are always axis aligned and can not exist in any distorted or rotated way
The Fields
Multiple cells are organized in fields. There can be any number of fields in
thinkingParticles, as long as there is enough memory available. Each field is an
enclosed entity and does not directly interact or influence other fields. However,
reading data from multiple fields and combining this data, before outputting it
onto particles enables you to combine fields or create interaction between them.
Fields are either static and never update or they can be updated for every subframe or they are updated on simulation start, only. Depending on how fields are
created and cell data is filled, it can be very time consuming to create a 3D field
filled with data. thinkingParticles allows you to cache 3D volume fields to hard
disk for faster access and use. The file format used to store and manage 3D
volume data within thinkingParticles is based on the industry standard called
OpenVDB. Cached field data can be instanced when using particles to position
fields in 3ds Max.
OpenVDB is an Academy Award-winning open-source C++ library comprising a
novel hierarchical data structure and a suite of tools for the efficient storage and
manipulation of sparse volumetric data discretized on three-dimensional grids. It
is developed and maintained by DreamWorks Animation for use in volumetric
applications typically encountered in feature film production.
By implementing the OpenVDB industry standard thinkingParticles allows you
to exchange 3D volume data between a multitude of 3D applications.
Each 3D field consists of one data type, only. Fields may store generic Vectors,
Velocities, Colors and many more other numeric data types.
Fields can be controlled by particles which allows to specify the placement and
lifetime of a field, for example. This flexibility poses a little challenge when
creating and caching multiple fields created by particles. OpenVDB stores each
field in one file, and if this field is changing over time - one file per frame or
sub-frame is stored. Multiple field cache files will use a specific naming
convention to ensure that later the cache file can be used liek any other node in
thinkingParticles..
When storing single fields, one file is created with the following naming
convention : [Name_+Frame four digits frame number].
Example : test_0006.vdb
When caching multiple fields placed by particles, each field will follow this
naming convention: [Name_+Field number+Framefour digits]
Example : cube_apf_P0_0154.vdb
Tip:
When setting up a scene with any type of APF make sure that the APField
operator is the first in the the hierarchy.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
APField
APField is an advanced "satellite" like operator that can be used across multiple
dynamic sets. Other APF operators depend on this operator. The philosophy to
apply this new APF operator is similar to the one found in the new physics or
flow solvers. This container holds all the data and core settings while other
operators feed to it - or from it.
Every 3D voxel field scene setup needs at least one APField operator and one
method of initialization
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
in a group that is to be used to place an AP-Field into the scene. Keep in mind,
the particle alignment is also used to rotate the AP-Field in space.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
InExport (Boolean) - this value is set to True as long as this operator is actively
exporting data via OpenVDB.
Rollout Menu
Type - sets the type of 3D field you want to create/use. There are multiple field
types available:
Velocity - this option represents a standard velocity field (x,y,z)
Color - when selected, the APField stores color (R,G,B) information in
space.
Vector - select this option to store directional vectors in the 3D field.
Scalar - to store floating point values in 3D space, use this option.
Vector 4 - this field type is a special purpose field type that stores a
velocity and an extra length value
Shape Distance- this field type should be used
along when voxelizing objects to act as a boundary
for particle mesh interaction.
Dimension - sets the reference "size" of the voxel space in
world units. This value represents the edge length of the
cube used by the Cells per Dimension value to calculate the
amount of voxels in the field.
Important
APFields created by
thinkingParticles are always
dynamic in size and space. Wherever
a particle exists, the field will be
extended to cover this area of space
with voxels.
Cells Per Dim - sets the amount of voxels based on the
reference size set in Dimension.
Reset - defines the voxel recalculation trigger. Usually
fields are static and "sit" in space and are used to displace
the particle motions. However, other options are available as
well:
None - when selected, the field won't be updated at all and keeps its
values forever
SubSample - the field will be recalculated each time a frame or subframe progress is happening.
Simulation Start - the field will be re-calculated at the start of a
simulation, only.
EORange - sets the action to perform when particles leave the voxel space.
There are several options available:
None - the particles will use whatever information was stored in the last
voxel when leaving the field.
Loop - the voxels will be mirrored at the edges of the field to create a
continuous loop of motion
Kill - particles leaving the field will be killed
APFShow
Debugging particle fields is an important task and helps in finding issues with
fields that could be caused by scaling or alignment issues.
Show None - select this option to have the field information not visible at all.
Bounding Box - check this option to draw the bounding box of the field
in 3D space.
Cell Position - choose this option to visualize the cell position in 3D
space.
Average - this option is best used to visualize the field values as little
vectors. It gives an indication of how the field might affect particles
passing through.
Accumulate - similar to Average, but Accumulate shows the sum of the
field values within a voxel.
ShowScale - sets the scaling factor for the vector display of the field. The higher
this value the bigger the visualized vectors will appear.
Gradient - use this color gradient to define the visualization of the field values
in relation to their actual size.
Left Value - sets the field value to be used for the left hand side of the color
gradient
Right Value - sets the field value to be used for the right hand side of the color
gradient
Cell Reduce - used to reduce the amount of cells displayed in the viewport. This
is useful to speed up viewport display.
APFExport
thinkingParticles allows you to cache AP-Fields to hard disk for faster access
and reduced re-calculation time. The file format used to store and manage 3D
volume data within thinkingParticles is based on the Open VDB industry
standard.
OpenVDB is an Academy Award-winning open-source C++ library comprising a
novel hierarchical data structure and a suite of tools for the efficient storage and
manipulation of sparse volumetric data discretized on three-dimensional grids. It
is developed and maintained by DreamWorks Animation for use in volumetric
applications typically encountered in feature film production.
Select Export File - click this button to bring up a standard
windows save dialog. VDB files can grow pretty large make sure enough space is available.
Mode - several export modes do exist:
Single Viewport Grab - choose this option to
export the result of the field of the current frame.
Active Segment - export multiple files of the field
to a cache file per frame. The active animation
range of 3ds Max will be used.
Range - lets you specify a range opf frames to
export form an animation.
Record In - animation sequences can either be exported in
viewport mode or render mode.
From - sets the start frame to export when Range is selected.
To - sets the end frame to export when Range is selected
Sub Samples - sets the amount of sub samples to use for the export of the field
values. A value of 0 indicates a full frame export. A value of 1 will export the
files in half frames and so on ...
Redraw Views - check this option to redraw the modeling view while exporting.
Set as Import - check this option to automatically set the exported file as your
input file for immediate playback.
Deactivate Import During Export - when set the Import file will be inactive
during export.
APFExport
Field data can be read from a previously cached file in OpenVDB format.
Select Import File - click this button to bring up a standard
windows open file dialog. Select a VDB file and press ok to
load the cache.
Frame Offset - sets a frame offset on import. Setting this to
10 for example will load in cache files from frame 10
onward.
Mode - multiple options are available to handle out of range
situations.
Hold Outside - when selected, the field values of
the last frame are repeated.
Stop Outside - check this to stop any field values
after the last frame has been loaded.
Single Frame - choose this to select only one cache
file and use those field values for all of the
animation.
©2017, cebas Visual T
thinkingParticles 6.6
APFAccumulate
APFAccumulate is used to fill cells (voxels) in a 3D field with data. This
operator allows for a fully procedural approach to create volumetric fields that
can be sued ot manipulate particles in space.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Field - (Particle) This input data stream reads in the currently selected particle in
a group that is to be used to place an AP-Field into the scene.
Position (Position) - inputs a position in world space to get the 8 closest voxels
to set a value which will be interpolated (trilinear)
CIndexPosition (Position) - specifies the exact cell position to allow to set one
value into a specific cell.
Weight - every cell (voxel) value can have a weight attached to it. By default the
weight is 1 (equal) however, any weight value can be used which depends
mainly on the usage scenario.
Velocity - when connected, the Velocity will be stored in the cell (voxel).
Color - when connected, the Color will be stored in the cell (voxel).
Vector - when connected, the Vector will be stored in the cell (voxel).
Scalar - when connected, the Scalar will be stored in the cell (voxel).
BDirection (Direction) - sets the vector to the boundary from the specified
position
BDistance (Distance)- sets the length and direction to the boundary from the
selected position.
BVelocity (Velocity) - sets the velocity of the boundary position
Operator Outputs
There are no outputs for this operator
Rollout Menu
APField - select the APField "satellite" operator that corresponds with these
settings
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
APFInterpolate
The APFInterpolate operator is used to read the field data at a specific position
and return the interpolated result. It is a simple yet powerful method to handle
volumetric data in a fully procedural way.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Field - (Particle) This input data stream reads in the currently selected particle in
a group that is to be used to place an AP-Field into the scene.
WorldPosition (Position) - input for a position in world units
CellINdexPosition (Position) - input for a position for a cell (voxel) in the field
OutputAs (Integer) - this input allows you to select the output type of the cell
content
Operator Outputs
Velocity - when connected, the Velocity stored in the cell (voxel) will be
output.
Color - when connected, the Color stored in the cell (voxel) will be output.
Vector - when connected, the Vector stored in the cell (voxel) will be output.
Scalar - when connected, the Scalar stored in the cell (voxel) will be output.
BDirection - outputs the direction towards the surface point as seen from the
World Position
BDistance - outputs the distance towards the surface point as seen from the
World Position. Positive values indicate that the point is inside the field and
negative means it is outside the field.
BVelocity - outputs the velocity on the surface point as seen from the World
Position
Weight - every cell (voxel) value can have a weight attached to it. By default the
weight is 1 (equal) however, any weight value can be used which depends
mainly on the usage scenario.
Rollout Menu
APField - select the APField "satellite" operator that corresponds with these
settings
Output - there is several output options to choose from:
Average - when selected, the Average cell value is output (default)
Accumulated - select this option to add multiple cell values and output
its result.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
APFInitiator
The APFInitiator is one of the easiest and straight forward operators to create a
volume voxel field. It is easy to setup the most common field types with just a
few clicks and adjustments!
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Field - (Particle) This input data stream reads in the currently selected particle in
a group that is to be used to place an AP-Field into the scene.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
*NumberOfCells (Integer) - outputs the total amount of cells in the field
*CellCounter (Integer) - outputs the current cell number of the field
*BoundingMin (Position) - outputs the minimum position of the field's
bounding box
*BoundingMax (Position) - outputs the maximum position of the field's
bounding box
*CPositionWorld (Position) - outputs the cell position in world coordinates
*CPositionObject (Position) - outputs the cell position in object coordinates
(relative to the creation point)
*CPositionRelative (Position) - outputs the cell position in object coordinates
(relative to the bounding box)
*CIndexPosition (Position) - outputs the cell index number
Rollout Menu
APField - select the APField "satellite" operator that corresponds with these
settings
Type - there are several field volume types available:
Box - select this option to use a box volume to store the field cells
(voxels)
Particle Present - when selected, particles (chosen by PGroup) will be
used to define the field dimensions.
Shape BBox - select this option to use the shape of the particle field
input as the field volume.
Shape Distance- this will use the field input particle shape, to create the
field and it's values. The faces of the shape will be used to create a
signed distance field.
X,Y,Z Size - used to define the dimensions of the field volume in all axis
X,Y,Z Position - used to place the volume field in the scene
Particle Present
PGroup - sets the particle group to be used for the 3d volume
field creation. Each particle position will create a cell in the
field.
Include Sub Groups - check this option to use the particles in
the sub-hierarchy as well.
Shape Boundary Box
Margin - adds an offset to the shape Bounding Box volume
fields by extending or shrinking the size of the field.
Shape Distance
Material ID - when checked, only the faces with this material
ID will be sued for boundary calculations. This is useful in
complex meshes to reduce the amount of faces needed to calculate collisions.
Margin Interior - sets the interior margin in world units.
Margin Exterior - sets the exterior margin in world units.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
APFData
APFData, like so many other Data Operators in tP, allows you to gather data for
further processing or to modify data within another operator.
Operator Inputs
ON (Bool) - This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time (Time) - This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Field (Particle) - This input data stream reads in the currently selected particle
in a group that is to be used to place an AP-Field into the scene.
Reset (Bool) - used to empty the complete field when a True is connected.
Position (Position) - input any position to acquire the Cell information of the
nearest Cell (voxel)
Active Cell (Integer) - used to specify an active cell to acquire information
Operator Outputs
Field Type (Integer) - outputs the field type which can be either
Velocity - this field type outputs a value of 0
Color - this field type outputs a value of 1
Vector - this field type outputs a value of 2
Scalar - this field type outputs a value of 3
Vector 4 - this field type outputs a value of 4
Boundary - this field type outputs a value of 5
Cell Size (Size) - outputs the current cell size in world units.
Num Active Cells (Integer) - outputs the amount of active cells (voxels) in the
field
BoundingMin (Position) - outputs the Minimum boundary position (lower left)
BoundingMax (Position) - outputs the Maximum boundary position (upper
right)
CWorldPosition (Position) - outputs the Cell (voxel) position in world space
CObject Position (Position) - outputs the Cell (voxel) position in object space
CBounding Position (Position) - outputs the Cell (voxel) position in relative
bounding box space
CIndexPosition (Position) - outputs the Cell index position
Rollout Menu
APField - select the APField "satellite" operator that corresponds with these
settings
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
thinkingParticles
APFInputFrom offers one of the most unique ways to create and fill fields with
data from actual particles in the scene. There is just no easier methods to feed
cell (voxel) data into a field.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Field - (Particle) This input data stream reads in the currently selected particle in
a group that is to be used to place an AP-Field into the scene.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
There is no Output form this operator
Rollout Menu
APField - select the APField "satellite" operator that corresponds with these
settings
PGroup - sets the particle group to be affected by the 3d volume field.
Include Sub Groups - check this option to use the particles in the sub-hierarchy
as well.
In From - the field data can be set by many aspects of a particle. The options
are:
Velocity - when selected the particle's speed will be used to fill the cell
(voxel).
Position - when selected the particle's position will be used to fill the
cell (voxel).
Scale - when selected the particle's scale will be used to fill the cell
(voxel).
Size - when selected the particle's size will be used to fill the cell
(voxel).
Mass - when selected the particle's mass will be used to fill the cell
(voxel).
Multiplier - use this multiplier to increase or decrease the value written to
the cell (voxel).
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
APFOutputTo
Assigning field values to particles is performed with this APFOutputTo operator.
The volumetric field data is automatically interpolated and applied to the
selected particle group. There is no simpler way to procedural manipulation of
particle motion through complex 3D volume fields.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Field - (Particle) This input data stream reads in the currently selected particle in
a group that is to be used to place an AP-Field into the scene.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
No outputs available
Rollout Menu
APField - select the APField "satellite" operator that corresponds with this
settings
PGroup - sets the particle group to be affected by the 3d volume field.
Include Sub Groups - check this option to use the particles in the sub-hierarchy
as well.
Out To - offers multiple choices how the field data should affect the particles.
Force - this option will add the field value as a force to the particles.
Every animation step will add the force to the particle.
Velocity - the field value will replace the velocity of the particles. Each
animation step the velocity will be automatically corrected.
Position - this option will use the field value to position the particles.
Scale - use this option to scale the particles with field value
Size - use this option to change the size of the particles with the field
value
Mass - the field value will be used to set the mass of the particles
Repulse/Bounce - this option will use the field value
to create a repulsive force for each particle.
Boundary - to create a voxelized boundary choose
this option. Particles will not go through the field in
those areas.
Multiplier - this parameter is used to multiply the field value
before it is used to modify the particles.
Motion Inheritance - fields can move as well. This motion
can be added onto all field values to simulate an interaction
with the field movement.
Boundary
All boundary methods will use the following parameters
Type - multiple boundary types are available.
Avoid Inside - choose this option to force particles
inside of an object
Avoid Outside - choose this option to force particles
outside of an object
Kill Inside - when selected particles inside of the
field will be killed
Kill Outside - when selected particles outside of the
field will be killed
Rigid Avoid Inside - this option will make sure particles stay inside the
field and impulses will be passed on in case of collisions
Rigid Avoid Outside - this option will make sure particles stay outside
the field and impulses will be passed on in case of collisions
BodyForce - when selected, particles will be forced to occupy the
volume (space) of the shape/object.
SpringForce - same as ShapeForce but the force applied to all particles
is a spring based method. The farther away a particle is form the surface
the stronger the spring force will be to pull it back. The spring strength
is controlled with Force.
Margin - lets you set an offset to the boundary (voxel)
Friction - to add a boundary friction use this value. The higher the value to more
friction will be added to the particles in contact with the boundary
Adhesion - defines a force that pulls particles towards the boundary surface. The
bigger this value the stronger the pull force will be.
Adhesion Bias - this bias value defines the distance to the boundary at which the
adhesion force should influence particles. The bigger this value the farther away
particles will be sucked in to the boundary surface.
Buoyancy - sets the amount of buoyancy for this boundary
Gravity Direction - for boundaries to work the direction of gravity must be
specified.
Exterior Body Force
Force - sets the exterior force in world units for Body and Spring Boundary
settings the higher this value the stronger the particles will be attracted or
repelled towards the surface (depending on the sign of the force).
Gravity - this value should be set to the same value as your gravity, if the same
as the world gravity it will cancel out the gravity. Important: The Gravity
Direction parameter above defines the direction of gravity.
Distance - set in world units, defines the distance of influence for the Exterior
Force.
Important:You must set in APFInitiator the values for Margin Exterior and
Interior to the same or higher value!
Falloff - defines the steepness of the falloff curve. A value of 1 will create a
linear falloff and values greater than will accelerate the falloff curve. Falloff uses
the Distance value to apply a decay of force.
Interior Body Force
Force - sets the interior force in world units for Body and Spring Boundary
settings the higher this value the stronger the particles will be attracted or
repelled towards the surface (depending on the sign of the force).
Gravity - this value should be set to the same value as your gravity, if the same
as the world gravity it will cancel out the gravity. Important: The Gravity
Direction parameter above defines the direction of gravity.
Distance - set in world units, defines the distance of influence for the Exterior
Force.
Important:You must set in APFInitiator the values for Margin Exterior and
Interior to the same or higher value!
Falloff - defines the steepness of the falloff curve. A value of 1 will create a
linear falloff and values greater than will accelerate the falloff curve. Falloff uses
the Distance value to apply a decay of force.
©2017, cebas Visual Technology Inc.
x
ThinkingParticles 6.6
BTParticle Operator
This operator is used to get particles (points) into a physics simulation and
interact with rigid and softbodies. Use this operator, for example, to spray away
rigid objects with simple particles.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
Initial -(Bool) is set True whenever a particle has been just created.
Rollout Menu
Collision - lets you choose from the drop down menu the physics engine solver
to use for the physics simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
Group - sets the particle group to be used to define the collision particles.
Time Scale - use this factor to artificially change the simulation time samples
taken for this type of object. Lowering this value will slow down the physics
timing while increasing this value will speed up physics timing.
Position Iteration - sets the number of sub-steps to be used to estimate the real
collision point of colliding objects. The lower this number, the faster the
simulation will run. However, lower values would also mean less accurate
results. In most situations, you can keep this value between 5-10, while in
exceptionally complex scenes, you can try to set a value as high as 100 to get
more accuracy.
Collision /Contact
Margin - defines a collision offset for the rigid body simulation for this specific
particle. The bigger this value, the earlier collisions will appear. Fast moving
objects might need a bigger offset to prevent them from passing through rigid
bodies.
Friction - specifies the amount of friction (factor) to apply when the object is
sliding.
Hardness - defines the "bounce back" force when a collision occurs.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTParticleData
This node is used to procedurally set or adjust simulation parameters for a
particle.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Group - (Group) sets the particle group to be used to adjust or set collision
simulation parameters per particle.
TimeScale - use this factor to artificially change the simulation time samples
taken for this type of object. Lowering this value will slow down the physics
timing while increasing this value will speed up physics timing.
Position Iteration - sets the number of sub-steps to be used to estimate the real
collision point of colliding objects. The lower this number, the faster the
simulation will run. However, lower values would also mean less accurate
results. In most situations, you can keep this value between 5-10, while in
exceptionally complex scenes, you can try to set a value as high as 100 to get
more accuracy.
CollisionMargin - defines a collision offset for the rigid body simulation for this
specific particle. The bigger this value, the earlier collisions will appear. Fast
moving objects might need a bigger offset to prevent them from passing through
rigid bodies.
CollisionFriction - specifies the amount of friction (factor) to apply when the
object is sliding.
ColissionHardness - defines the "bounce back" force when a collision occurs.
Operator Outputs
Initial -(Bool) is set True whenever a particle has been just created.
TimeScale - outputs the simulation time factor of the selected particle
Position Iteration - outputs the number of sub-steps to be used to estimate the
real collision point of colliding objects for the currently evaluated particle.
CollisionMargin - outputs the collision offset for the rigid body simulation for
this specific particle.
CollisionFriction - outputs the amount of friction (factor) to apply when the
object is sliding.
ColissionHardness - outputs the "bounce back" force when a collision occurs,
for the selected particle
Rollout Menu
Collision - lets you choose from the drop down menu the physics engine solver
to use for the physics simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTRigidBody
This operator is used to "attach" Bullet Physics simulation parameters to a
particle. It is the recommended method from now on to create physics simulation
scenes when using Bullet Physics.
The great advantage of using an operator to assign physics parameters lies in its
flexibility to control simulation parameters per particle.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) defines the input data stream representing the particle o
assign parameters to.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
Initial -(Bool) is set True whenever a particle has been just created.
Rollout Menu
Collision - lets you choose from the drop down menu the physics engine solver
to use for the physics simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
Shape - offers a choice of possible collision shapes. Except "Mesh" all other
options are highly optimized collision bodies.
State - sets the state of the collision object it can either be: Active, Sleeping or
in a Kinematic State or Static.
Active - the default state of a Bullet Physics particle
Sleeping - particle/object is not active and will be
woken by physics events
Kinematic - unlimited mass; can be moved and
will do proper collisions
Static - object/particle is unyielding
Restitution - Use this parameter to control the bounce value between the particle
collisions. Higher values will make the particles lose less energy per bounce. Be
aware that values greater than 100 will create extra energy and the particles will
gain energy with each bounce.
Friction - This spinner defines the friction between particles when they are in
contact (sliding). Higher values will make the particles slide less.
Margin - defines a collision offset for the rigid body simulation for this specific
particle. The bigger this value, the earlier collisions will appear. Fast moving
objects might need a bigger offset to prevent them from passing through rigid
bodies.
Sleep Threshold
Velocity - sets the minimum speed an object needs to fall below to become
treated as frozen or sleeping. Be aware that other objects interacting with a
sleeping one may change this status when the impact creates a velocity higher
than this value.
Rotation - sets the minimum rotational speed and object needs to fall below to
become treated as frozen or sleeping. As is the case with the Velocity Threshold,
be aware that other objects interacting with a sleeping one may change this
status when the impact creates an angular velocity higher than this value.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTRigidBodyData
Use this node to procedurally set or adjust rigid body simulation parameters of
an individual particle.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) defines the input data stream representing the particle to
assign parameters to.
Shape - (Integer) defines the type of collision object to use. See the values
below:
Input Value 0 - sets the collision object to mesh
Input Value 1 - sets the collision object to convex hull
Input Value 2 - sets the collision object to box
Input Value 3 - sets the collision object to Sphere
Input Value 4 - sets the collision object to Cylinder X
Input Value 5 - sets the collision object to Cylinder Y
Input Value 6 - sets the collision object to Cylinder Z
Input Value 7 - sets the collision object to Cylinder X
Input Value 8 - sets the collision object to Cylinder Y
Input Value 9 - sets the collision object to Cylinder Z
State - (Integer) sets the state of the collision object; it can either be: Active,
Sleeping or in a Kinematic State or Static.
Input Value 0 - sets the collision object to Active
Input Value 1 - sets the collision object to Sleeping
Input Value 2 - sets the collision object to Kinematic
Input Value 3 - sets the collision object to Static
Restitution - (Scalar) Use this input to control the bounce value between the
particle collisions. Higher values will make the particles lose less energy per
bounce. Be aware that values greater than 100 will create extra energy and the
particles will gain energy with each bounce.
Friction - (Scalar) this input sets the friction between particles when they are in
contact (sliding). Higher values will make the particles slide less.
Margin - (Scalar) defines a collision offset for the rigid body simulation for this
specific particle. The bigger this value, the earlier collisions will appear. Fast
moving objects might need a bigger offset to prevent them from passing through
rigid bodies.
Velocity - (Scalar) sets the minimum speed an object needs to fall below to
become treated as frozen or sleeping. Be aware that other objects interacting
with a sleeping one may change this status when the impact creates a velocity
higher than this value.
Rotation - (Scalar) sets the minimum rotational speed and object needs to fall
below to become treated as frozen or sleeping. As is the case with the Velocity
Threshold, be aware that other objects interacting with a sleeping one may
change this status when the impact creates an angular velocity higher than this
value.
Operator Outputs
Is Rigid - (Bool) outputs True if the particle has rigid body simulation
parameters.
Initial -(Bool) is set True whenever a particle has been just created.
Shape - (Integer) outputs the type of collision object that is used for this
particle. See the values below:
Output Value 0 - sets the collision object to mesh
Output Value 1 - sets the collision object to convex hull
Output Value 2 - sets the collision object to box
Output Value 3 - sets the collision object to Sphere
Output Value 4 - sets the collision object to Cylinder X
Output Value 5 - sets the collision object to Cylinder Y
Output Value 6 - sets the collision object to Cylinder Z
Output Value 7 - sets the collision object to Cylinder X
Output Value 8 - sets the collision object to Cylinder Y
Output Value 9 - sets the collision object to Cylinder Z
State - (Integer) outputs the currently assigned state of the collision object; it
can either be:
Output Value 0 - sets the collision object to Active
Output Value 1 - sets the collision object to Sleeping
Output Value 2 - sets the collision object to Kinematic
Output Value 3 - sets the collision object to Static
Restitution - (Scalar) use this output to get the bounce value between particle
collisions.
Friction - (Scalar) this output produces the friction value set between particles
when they are in contact (sliding).
Margin - (Scalar) outputs the collision offset for the rigid body simulation for
this specific particle.
Velocity - (Scalar) outputs the value of the minimum speed an object needs to
fall below to become treated as frozen or sleeping.
Rotation - (Scalar) outputs the minimum rotational speed and object needs to
fall below to become treated as frozen or sleeping.
Rollout Menu
Collision - lets you choose from the drop down menu the physics engine solver
to use for the physics simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTRopeImport
This operator is meant to replace the old particle group based method of
attaching/creating physics simulation parameters to a particle. In previous
versions of thinkingParticles the Object2Particle operator took care of creating
automatically a rope object/particle when a spline was picked. This older method
is obsolete now and should no longer be used. Instead, use this new operator to
create a rope out of a spline.
Important
Older scenes, created with
thinkingParticles 5 may still have
particle groups with rope parameters
active. Particle group physics
settings do overwrite the settings
found in this operator! To ensure a
proper workflow delete the old
particle group and re-create it to get
rid of the old data set.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
Born Particle- outputs the currently created rope particle.
Rollout Menu
Group - defines the particle group to be used when ropes are created by this
operator.
Linear Stiffness - sets how "springy" or bouncy the rope will be. Lower
numbers will create an ultra soft rubber while higher numbers will create a
stronger appearing rope. Keep in mind we are talking here soft bodies! The rope
will never become as hard as a strip of steel!
Damping - adds a dampening force to the rope stretching. The higher this value
the more clay like the rope stretching will appear.
Iteration - sets the amount of intermediate steps the solver will take to simulate
the rope system. The higher this value the more accurate the result will be,
however the longer it will take to calculate.
Contact Hardness
Anchor - defines how strong the anchor holds
Rigid - sets the "bounce off" strength for rigid bodies
colliding with the rope spline
Fixed Start - when checked the start of the rope will be
fixed
Fixed End -when checked it will set the
Automatic Breaking
Threshold - sets the maximum force at which the rope
breaks/tears apart
Position - defines the position along the rope were the
breaking should occur. A value of 0.5 means the middle
part of the rope will break, 0 means it will break at a
position were the maximum force occurs.
Zoing - defines the "pre-load" factor for the rope, this
controls the tear off effect. a value of 100% will create a
maximum pre-loaded spring-back effect.
Mesh Hull
None - check this option, to prevent thinkingParticles form
creating a mesh
Radial - when checked, a "round" rope mesh will be
created.
Constriction - sets the amount of constriction for the rope
mesh. A value of 100% will show the maximum
constriction.
Rate - sets the amount of constrictions. The higher this value the more
constrictions will be visible. To see all of the mesh effects a proper amount of
segmentation must be maintained!
Thickness - defines the radius of the rope. The higher this value the thicker the
rope will be.
Rotation - rotates the rope around its center.
Sides - sets the amount of segments circumventing the rope.
Steps - defines the mesh resolution along the length of the rope.
Twist - sets how often the rope is twisted around
Autosmooth - check this option to turn on auto-smoothing of the rope mesh
Threshold - sets the angular threshold when to smooth the surface.
Generate Mapping - when checked, mapping coordinates for the rope mesh
are created.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTSoftBody
Use this operator to create soft-body objects for physics simulations. This
operator turns any particle (with a mesh) into a soft-body. This operator is useful
to simulate cloth, paper, jelly or rubber type materials. Particles may interact
with soft-bodies as well as rigid bodies.
Important
Soft-body objects and simulations
are complex beasts! Due to the
nature of a softer outer hull or shell;
the interactions between different
type of objects can easily result in
madness and chaos if values are
overused or set to extremes.
World Scale plays an important role
as well!
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) defines the input data stream representing the particle o
assign parameters to.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
Initial -(Bool) is set True whenever a particle has been just created.
Rollout Menu
Collision - lets you choose from the drop down menu the physics engine solver
to use for the physics simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
Pull Stiffness - defines the force used to drive the springs back from an impact
force.
Push Stiffness - sets the amount of force the springs use to push back into their
relaxed state.
Damping - sets the amount of friction to be added on each spring interaction
within the soft-body.
Shape Matching - set this amount greater than zero, to
enable Shape Matching. This factor will add an extra force
to keep the objects shape as stable as possible. This extra
force offers the most powerful way to conform an object to
its original shape.
Volume Conserv. - set this amount greater than zero, to
enable Volume Conservation for soft-body objects. This
extra force will distribute and restrict deformations of a softbody based on the total volume it had, alone. This option is
useful to simulate hollow and empty thin skinned objects
(for example: Christmas Inflatables)
Pressure - set this amount greater than zero, to enable
Pressure based effects for a soft-body. The greater this value
the more internal pressure this soft-body will have. This
factor adds an internal pressure force for the soft-body
object. This is the perfect way to simulate a balloon or tire.
Global Friction - adds a global friction factor to all softbody interactions and forces. This includes movement and
rotation as well. If overdone; this force may freeze a softbody in space and time.
Plasticity - sets the hardness against deformation. The
higher this value the softer the material gets.
Plasticity Threshold - defines the minimum deformation
length needed to create a permanent deformation. This
length is specified relative to the bounding box of the softbody. A value of 100 means the deformation has to be the
size of the soft-body object.
Autobreak - sets a force threshold for the springs to break
apart. If this value (force) is reached a connection between
springs is lost/broken and tearing of the soft-body appears.
Mapping Channel - when set to -1 this feature is
deactivated. Channels greater than -1 will use the selected
channel as a tearing map. A plain white vertex color will
break at this vertex while a pure black color will not break at all. Autobreak
defines the threshold in all cases. Without a texture map the vertex color channel
is used.
Mask - uses a standard 3ds Max texture to define when and where a soft-body
should tear or break. As described in the vertex color channels, a plain white
color in the texture map will break a vertex at that position while a pure black
color will make a vertex unbreakable.
On Collision - when checked, auto-break will only act on faces that are
colliding. Other faces that run into the threshold value will be unaffected.
Time Scale - use this factor to artificially change the simulation time samples
taken for this type of object. Lowering this value will slow down the physics
timing while increasing this value will speed up physics timing.
Position Iteration - sets the number of sub-steps to be used to estimate the real
collision point of colliding objects. The lower this number, the faster the
simulation will run. However, lower values would also mean less accurate
results. In most situations, you can keep this value between 5-10, while in
exceptionally complex scenes, you can try to set a value as high as 100 to get
more accuracy.
Bending Constraints
Bending Constraint creates extra springs between two vertices to introduce extra
tension on a soft-body surface. This option is usually prominent and best used
with cloth like simulations. It creates the difference in look between sheets of
paper or leather.
Layer - sets the amount of extra springs created between 2 different vertices to
keep the soft-body from collapsing or wrinkling.
Pull Stiffness - defines the force used to drive the springs back from an impact
force.
Push Stiffness - sets the amount of force the springs use to push back into their
relaxed state.
Cluster
Cluster collisions and cluster deformation handling
offers an optimized way of simulating soft-bodies.
When this option is used, triangles are arranged in
clusters within a soft-body object and physics
interactions are done with the whole set of triangle clusters instead of each
individual triangle. Typically this works best for simple soft-body shapes and
when soft-bodies have a more rigid material property.
Count - when set to PerFace in the cluster option this value defines the amount
of triangle clusters to create. A value of one would create one cluster out of the
whole soft-body object. Finding a good value is dependent on the shape and
polygon count of the object. Softer objects are harder to simulate with clusters as
it tends to show the borders of the clustering on the surface of a soft-body object.
Cluster Iteration - sets the number of sub-steps to be used to estimate the real
collision point of colliding objects. The lower this number, the faster the
simulation will run. However, lower values would also mean less accurate
results. In most situations, you can keep this value between 5-10, while in
exceptionally complex scenes, you can try to set a value as high as 100 to get
more accuracy. Note increasing this value also affects the soft-body behavior.
Collision /Contact
Margin - defines a collision offset for the rigid body simulation for this specific
particle. The bigger this value, the earlier collisions will appear. Fast moving
objects might need a bigger offset to prevent them from passing through rigid
bodies.
Friction - specifies the amount of friction (factor) to apply when the object is
sliding.
Hardness - defines the "bounce back" force when a collision occurs.
Anchor Hardness - sets the rigidity (strength) of an anchor attached to a soft-
body
Self Collision - check this option to enable self collisions
Important
Self Collision must also be turned on
to get collisions between soft-bodies.
This includes particles created with
the BTParticle Operator !
Aero Model
Soft-body simulation involves most of the time cloth type
behavior of objects or softer thin skinned flexible surfaces
that might interact with air resistance forces or wind
forces.
Air resistance and wind effects are commonly used when
simulating paper or light cloth materials as used in a flag
for example. Those extra wind forces are added to all softbody interactions and calculations. It enables wind forces to move soft-body
objects or distort their surfaces.
Various options allow to define how and where a soft-body object gets this extra
force getting applied to.
Those parameters work most efficiently for Paper or Flag type simulations.
Model - several options can be chosen from to apply wind force in the physics
simulation calculations for soft-bodies.
Vertex Two Side - choose this option to apply wind force
onto all vertices in a soft-body. Vertex normals are flipped
to match velocity
Vertex Two Side Lift Drag - set this option to get wind
force applied in both directions (back and forth). Vertex
normals are flipped to match velocity and lift and drag forces are applied
Vertex One Side - set this option to apply wind force to all vertices from one
direction only. Vertex normals are taken as it is.
Face Two Side - choose this option to apply wind force onto all faces in a softbody from all directions. Face normals are flipped to match velocity.
Face Two Side Lift Drag - set this option to get wind force applied to all faces
in both directions (back and forth). Face normals are flipped to match velocity
and lift and drag forces are applied.
Face One Side - set this option to apply wind force to all faces from one
direction only. Face normals are taken as it is
Lift - sets the lift force factor for the soft-body object. It defines the mechanical
force generated by the soft-body moving through air. Lift acts on the whole softbody object and is a force perpendicular to the moving direction of the object
(imagine an airplane). Without air, there is no lift generated by the soft-body.
Keep in mind that lift is generated by the difference in velocity of the soft-body
and the air.
Drag - defines the drag force applied to a soft-body. Drag is created by air
resistance and it acts the opposite direction of movement. It slows down objects
on free fall and it creates a friction on all fast moving surfaces.
Wind Velocity X - defines the wind velocity in X direction. This is in world
units
Wind Velocity Y - defines the wind velocity in Y direction. This is in world
units
Wind Velocity Z - defines the wind velocity in Z direction. This is in world
units
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTSoftBodyData
This operator is used to control, set and modify soft-body physics simulation
parameters. Every particle can have different parameters; so it is important to
supply the proper Particle input stream. Keep in mind; this operator can be used
to set a physics simulation value or to read its current value.
This operator only works for soft-body particles, non soft-body particles are
ignored.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) defines the input data stream representing the particle o
assign parameters to.
Pull Stiffness - defines the force used to drive the springs back from an impact
force.
Push Stiffness - sets the amount of force the springs use to push back into their
relaxed state.
Damping - sets the amount of friction to be added on each spring interaction
within the soft-body.
Shape Matching - set this amount greater than zero, to enable Shape Matching.
This factor will add an extra force to keep the objects shape as stable as possible.
This extra force offers the most powerful way to conform an object to its original
shape.
Volume Conserv. - set this amount greater than zero, to enable Volume
Conservation for soft-body objects. This extra force will distribute and restrict
deformations of a soft-body based on the total volume it had, alone. This option
is useful to simulate hollow and empty thin skinned objects (for example:
Christmas Inflatables)
Pressure - set this amount greater than zero, to enable Pressure based effects for
a soft-body. The greater this value the more internal pressure this soft-body will
have. This factor adds an internal pressure force for the soft-body object. This is
the perfect way to simulate a balloon or tire.
Global Friction - adds a global friction factor to all soft-body interactions and
forces. This includes movement and rotation as well. If overdone; this force may
freeze a soft-body in space and time.
Plasticity - sets the hardness against deformation. The higher this value the
softer the material gets.
Plasticity Threshold - defines the minimum deformation length needed to
create a permanent deformation. This length is specified relative to the bounding
box of the soft-body. A value of 100 means the deformation has to be the size of
the soft-body object.
Autobreak - sets a force threshold for the springs to break apart. If this value
(force) is reached a connection between springs is lost/broken and tearing of the
soft-body appears.
On Collision - when checked, auto-break will only act on faces that are
colliding. Other faces that run into the threshold value will be unaffected.
Time Scale - use this factor to artificially change the simulation time samples
taken for this type of object. Lowering this value will slow down the physics
timing while increasing this value will speed up physics timing.
PositionIteration - sets the number of sub-steps to be used to estimate the real
collision point of colliding objects. The lower this number, the faster the
simulation will run. However, lower values would also mean less accurate
results. In most situations, you can keep this value between 5-10, while in
exceptionally complex scenes, you can try to set a value as high as 100 to get
more accuracy.
BendingLayer - sets the amount of extra springs created between 2 different
vertices to keep the soft-body from collapsing or wrinkling.
BendingPullStiffness - defines the force used to drive the springs back from an
impact force.
BendingPushStiffness - sets the amount of force the springs use to push back
into their relaxed state.
ClusterType - sets the current Cluster type value. Possible values are:
A value of 0 sets the Cluster Type to: None
A value of 1 sets the Cluster Type to: Per Face
A value of 2 sets the Cluster Type to: Count
ClusterCount - when set to PerFace in the cluster option this value defines the
amount of triangle clusters to create. A value of one would create one cluster out
of the whole soft-body object. Finding a good value is dependent on the shape
and polygon count of the object. Softer objects are harder to simulate with
clusters as it tends to show the borders of the clustering on the surface of a softbody object.
ClusterIteration - sets the number of sub-steps to be used to estimate the real
collision point of colliding objects. The lower this number, the faster the
simulation will run. However, lower values would also mean less accurate
results. In most situations, you can keep this value between 5-10, while in
exceptionally complex scenes, you can try to set a value as high as 100 to get
more accuracy. Note increasing this value also affects the soft-body behavior.
CollisionMargin - defines a collision offset for the rigid body simulation for this
specific particle. The bigger this value, the earlier collisions will appear. Fast
moving objects might need a bigger offset to prevent them from passing through
rigid bodies.
CollisionFriction - specifies the amount of friction (factor) to apply when the
object is sliding.
CollisionHardness - defines the "bounce back" force when a collision occurs.
Anchor Hardness - sets the rigidity (strength) of an anchor attached to a softbody
Self Collision - when set to TRUE this option enables self collisions
Model - several options can be chosen from to apply wind force in the physics
simulation calculations for soft-bodies.
Input Value 0 sets the Model to: Vertex Two Side - choose this option
to apply wind force onto all vertices in a soft-body. Vertex normals are
flipped to match velocity
Input Value 1 sets the Model to: Vertex Two Side Lift Drag - set this
option to get wind force applied in both directions (back and forth).
Vertex normals are flipped to match velocity and lift and drag forces are
applied
Input Value 2 sets the Model to: Vertex One Side - set this option to
apply wind force to all vertices from one direction only. Vertex normals
are taken as it is.
Input Value 3 sets the Model to: Face Two Side - choose this option to
apply wind force onto all faces in a soft-body from all directions. Face
normals are flipped to match velocity.
Input Value 4 sets the Model to: Face Two Side Lift Drag - set this
option to get wind force applied to all faces in both directions (back and
forth). Face normals are flipped to match velocity and lift and drag
forces are applied.
Input Value 5 sets the Model to: Face One Side - set this option to
apply wind force to all faces from one direction only. Face normals are
taken as it is
AeroLift - sets the lift force factor for the soft-body object. It defines the
mechanical force generated by the soft-body moving through air. Lift acts on the
whole soft-body object and is a force perpendicular to the moving direction of
the object (imagine an airplane). Without air, there is no lift generated by the
soft-body. Keep in mind that lift is generated by the difference in velocity of the
soft-body and the air.
AeroDrag - defines the drag force applied to a soft-body. Drag is created by air
resistance and it acts the opposite direction of movement. It slows down objects
on free fall and it creates a friction on all fast moving surfaces.
AeroWind - defines the wind vector (direct and speed thew wind blows).
Operator Outputs
Initial -(Bool) is set True whenever a particle has been just created.
Pull Stiffness - outputs the force used to drive the springs back from an impact
force.
Push Stiffness -outputs the amount of force the springs use to push back into
their relaxed state.
Damping - outputs the amount of friction to be added on each spring interaction
within the soft-body.
Shape Matching - outputs the Shape Matching force value. This factor will add
an extra force to keep the objects shape as stable as possible. This extra force
offers the most powerful way to conform an object to its original shape.
Volume Conserv. - outputs the value for Volume Conservation for soft-body
objects. This extra force will distribute and restrict deformations of a soft-body
based on the total volume it had, alone. This option is useful to simulate hollow
and empty thin skinned objects (for example: Christmas Inflatables)
Pressure - outputs the Pressure amount set for a soft-body. The greater this value
the more internal pressure this soft-body will have. This factor adds an internal
pressure force for the soft-body object. This is the perfect way to simulate a
balloon or tire.
Global Friction - outputs the global friction factor used for all soft-body
interactions and forces. This includes movement and rotation as well. If
overdone; this force may freeze a soft-body in space and time.
Plasticity - outputs the hardness value against deformation. The higher this
value the softer the material gets.
Plasticity Threshold - outputs the minimum deformation length needed to
create a permanent deformation. This length is specified relative to the bounding
box of the soft-body. A value of 100 means the deformation has to be the size of
the soft-body object.
Autobreak - outputs the force threshold for the springs to break apart. If this
value (force) is reached a connection between springs is lost/broken and tearing
of the soft-body appears.
On Collision - outputs the status of the On Collision option; when True, autobreak will only act on faces that are colliding. Other faces that run into the
threshold value will be unaffected.
Time Scale - outputs the Time Scale factor used to artificially change the
simulation time samples taken for this type of object. Lowering this value will
slow down the physics timing while increasing this value will speed up physics
timing.
PositionIteration - outputs the number of sub-steps to be used to estimate the
real collision point of colliding objects. The lower this number, the faster the
simulation will run. However, lower values would also mean less accurate
results. In most situations, you can keep this value between 5-10, while in
exceptionally complex scenes, you can try to set a value as high as 100 to get
more accuracy.
BendingLayer - outputs the amount of extra springs created between 2 different
vertices to keep the soft-body from collapsing or wrinkling.
BendingPullStiffness - outputs the force used to drive the springs back from an
impact force.
BendingPushStiffness - outputs the amount of force the springs use to push
back into their relaxed state.
ClusterType - outputs the current Cluster type value. Possible values are:
A value of 0 sets the Cluster Type to: None
A value of 1 sets the Cluster Type to: Per Face
A value of 2 sets the Cluster Type to: Count
ClusterCount - when set to PerFace in the cluster option this output value
defines the amount of triangle clusters to create. A value of one would create one
cluster out of the whole soft-body object. Finding a good value is dependent on
the shape and polygon count of the object. Softer objects are harder to simulate
with clusters as it tends to show the borders of the clustering on the surface of a
soft-body object.
ClusterIteration - outputs the number of sub-steps to be used to estimate the
real collision point of colliding objects. The lower this number, the faster the
simulation will run. However, lower values would also mean less accurate
results. In most situations, you can keep this value between 5-10, while in
exceptionally complex scenes, you can try to set a value as high as 100 to get
more accuracy. Note increasing this value also affects the soft-body behavior.
CollisionMargin - outputs a collision offset for the rigid body simulation for
this specific particle. The bigger this value, the earlier collisions will appear. Fast
moving objects might need a bigger offset to prevent them from passing through
rigid bodies.
CollisionFriction - outputs the amount of friction (factor) to apply when the
object is sliding.
CollisionHardness - outputs the "bounce back" force when a collision occurs.
Anchor Hardness - outputs the rigidity (strength) of an anchor attached to a
soft-body
Self Collision - outputs TRUE when self collisions are enabled
AeroModel - outputs the Aero Model used. Possible options are:
Output Value 0 indicates the Model is set to: Vertex Two Side choose this option to apply wind force onto all vertices in a soft-body.
Vertex normals are flipped to match velocity
Output Value 1 indicates the Model is set to: Vertex Two Side Lift
Drag - set this option to get wind force applied in both directions (back
and forth). Vertex normals are flipped to match velocity and lift and drag
forces are applied
Output Value 2 indicates the Model is set to: Vertex One Side - set
this option to apply wind force to all vertices from one direction only.
Vertex normals are taken as it is.
Output Value 3 indicates the Model is set to: Face Two Side - choose
this option to apply wind force onto all faces in a soft-body from all
directions. Face normals are flipped to match velocity.
Output Value 4 indicates the Model is set to: Face Two Side Lift
Drag - set this option to get wind force applied to all faces in both
directions (back and forth). Face normals are flipped to match velocity
and lift and drag forces are applied.
Output Value 5 indicates the Model is set to: Face One Side - set this
option to apply wind force to all faces from one direction only. Face
normals are taken as it is
AeroLift - outputs the lift force factor for the soft-body object. It defines the
mechanical force generated by the soft-body moving through air. Lift acts on the
whole soft-body object and is a force perpendicular to the moving direction of
the object (imagine an airplane). Without air, there is no lift generated by the
soft-body. Keep in mind that lift is generated by the difference in velocity of the
soft-body and the air.
AeroDrag - outputs the drag force applied to a soft-body. Drag is created by air
resistance and it acts the opposite direction of movement. It slows down objects
on free fall and it creates a friction on all fast moving surfaces.
AeroWind - outputs the wind vector (direct and speed thew wind blows).
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTVehicle Operator
This solver resembles a simple and highly optimized vehicle controller using a
so called Raycast vehicle model. Instead of a complex "real world" simulation of
each wheel and chassis as separate rigid bodies connected by joints, it simply
uses a single rigid body for the chassis. Collision detection for the wheels is
approximated by ray casts, and the tire friction is based on a simple anisotropic
friction model. This approach to vehicle modelling is used in many commercial
and non-commercial driving games an simulations.
The general method is by using the ray's intersection point to calculate the
suspension length and the corresponding suspension force. This force is then
applied to the chassis, keeping it from hitting the ground. Friction force is
calculated for each wheel where the ray intersects with the ground, it's applied as
a sideways and forwards force.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) - This input data stream reads in the currently selected
particle group. The data stream MUST be connected and will be highlighted
yellow if it is not.
Vehicle Index - used to define which of the picked objects in the list are to be
used as the next born vehicle. You may use any integer number to specify the
next vehicle type, the list starts with 0 for the first picked car object.
Follow Path - use this input to specify the path the vehicles should use. You may
specify different paths per vehicle as well.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
Born Particle* - (Particle) This output data stream supplies the current particle
information. Use this to modify specific particle properties.
Born Vehicle ID* - counting from zero, this number indicates the "picked" car
body that is output as a vehicle. Using this parameter, it gives access to the car
body from the pick list.
Rollout Menu
Collision - Gives access to the available solvers. A thinkingParticles
DynamicSet may have multiple solvers in a scene. To make sure that the correct
solver is used, select the one from the drop down list you intend to use.
Pick Object List - shows you the object names that have been picked to act as a
vehicle. Keep in mind that thinkingParticles analyses every object you pick, the
objects you pick are car bodies- meaning every one of those objects has wheels
linked to it. It does not matter if it's 1,2 or more wheels.
Pick Object - click this button to enter pick object mode, you may pick any
object in the 3DS Max scene that should act as a car body. Keep in mind that a
car body is an object that has wheels attached to it.
REM. - when clicked, the selected object will be deleted form the list
Tractor
Drive
Front, Rear, All - select one of the options to define the type of drive layout to
be used with the vehicles.
Speed - sets the speed of the vehicle, this value represents a force. Higher
numbers will result in a higher speed of the vehicle depending on the ground and
friction.
Brake - adds a "breaking force" to the vehicle. The higher this value to stronger
the breaking force will be.
Steer - sets the steering wheel angle from -90 to +90 degrees. The slider, found
right below this control may also be used to steer the vehicle.
Wheel Locked: Front,Rear,All - select one of those options to activate the hand
break. The effect is immediate, unlike the break force which kicks in gradually.
Body - sets the particle group to be used for the vehicle body. It is strongly
recommended to create separate particle groups for the car bodies and wheels.
Note, the vehicle solver does not need this special groups the information what a
particle is, is attached to the particle itself. You may put a wheel particle in a
smoke group or whereever you want it will not affects it "wheel" property at all.
Mass - defines the mass of the car body excluding the wheels. The mass of
objects plays an important role when doing physics simulations, make sure the
masses are properly balanced.
Wheel - sets the particle group to be used for storing the wheel particles. As
explained in the car Body section above, the particles "know" what they are and
where they belong to. It is strongly recommended, as it is with the car body, to
create a separate particle group for the wheels only even though it is not needed
for thinkingParticles and its solvers.
Mass - sets the individual mass of each wheel created.
Friction Slip - sets the coefficient of friction between the tire and the ground.
Should be about 0.8 for realistic cars, but can easily be increased for better
handling. In fact it all depends on the scale of the scene and how the vehicle is
modelled.
Rolling Influence - reduces the rolling torque applied from the wheels that
might cause the vehicle to roll over. It is a bit of a hack, but it's quite effective. A
value of 0.0 means that a roll over will be prevented, 1.0 will act like in the real
world and a vehicle actually can roll over.
Rotation X,Y,Z - sets the wheel rotational axis in object space. Depending on
how the vehicle has been modeled it might be necessary to switch the rotational
axis.
Suspension Axis X,Y,Z - sets the axis along which the shocks will compress.
Length - defines the length of the shocks. Keep in mind, as always, physics
simulations depend heavily on a proper setup of the world.
Stiffness - sets the "stiffness" or overall strength of the shocks. Higher numbers
will make the shocks appear much harder.
Damping - there are two possible dampening forces at work for the shocks. One
force is responsible for counteracting compression of the shocks and one force
would work against tension.
Relaxation - sets the counter-force for the relaxation phase of the
shocks.
Compression - defines the counter-force for the compression phase of
the shocks.
Max Travel - sets the maximum amount the springs can be compressed at
which the shocks will provide their maximum force.
Why does my vehicle sink into the
ground ?
Whenever the suspension cannot
support the weight of the vehicle, the
wheels may start sinking through the
ground. In such cases, increase
Stiffness, Max Travel or
Length. Increasing the length of the
shocks too much might introduce
instability into the simulation. Max
Travels sets the maximum amount
the springs can be compressed at
which the shocks will provide their
maximum force.
Max Force - sets the maximum force that can be applied to the shocks (when
Max Travel is reached).
Trailer
A trailer comes with the same set of parameters of a vehicle, except that one or
more trailers are linked together through a TP-JointBT helper to a tractor
(vehicle). thinkingParticles treats trailers exactly like vehicles things like wheels,
shocks and center of mass do all play a very big role in a simulation.
Body - sets the particle group to be used for the trailer body. It is strongly
recommended to create separate particle groups for the trailer bodies and wheels.
The default group will be the one of the tractor.
Mass - defines the mass of the trailer body excluding the wheels. The mass of
objects plays an important role when doing physics simulations, make sure the
masses are properly balanced between objects.
Wheel - sets the particle group to be used for storing the wheel particles. As
explained in the trailer Body section above, the particles "know" what they are
and where they belong to. It is strongly recommended, as it is with the trailer
body, to create a separate particle group for the wheels, only - even though it is
not needed for thinkingParticles and its solvers.
Mass - sets the individual mass of each wheel created.
Friction Slip - sets the coefficient of friction between the tire and the ground.
Should be about 0.8 for realistic cars, but can easily be increased for better
handling. In fact it all depends on the scale of the scene and how the vehicle is
modelled.
Rolling Influence - reduces the rolling torque applied from the wheels that
might cause the trailer to roll over. It is a bit of a hack, but it's quite effective. A
value of 0.0 means that a roll over will be prevented, 1.0 will act like in the real
world and a vehicle actually can roll over.
Brake - adds a "breaking force" to the trailer. The higher this value the stronger
the breaking force will be. This value is actually "added" on-top of the breaking
force of the vehicle.
Add Tractor Break - when checked, the trailer will get its full breaking force
from the vehicle
Rotation X,Y,Z - sets the wheel rotational axis in object space. Depending on
how the vehicle has been modeled it might be necessary to switch the rotational
axis.
Suspension Axis X,Y,Z - sets the axis along which the shocks will compress.
Length - defines the length of the shocks. Keep in mind, as always, physics
simulations depend heavily on a proper setup of the world.
Stiffness - sets the "stiffness" or overall strength of the shocks. Higher numbers
will make the shocks appear much harder.
Damping - there are two possible dampening forces at work for the shocks. One
force is responsible for counteracting the compression of the shocks and one
force would work against tension.
Relaxation - sets the counter-force for the relaxation phase of the
shocks.
Compression - defines the counter-force for the compression phase of
the shocks.
Max Travel - sets the maximum amount the springs can be compressed at
which the shocks will provide their maximum force.
Max Force - sets the maximum force that can be applied to the shocks (when
Max Travel is reached).
Path Follow
thinkingParticles' vehicle solver supports an advanced path driving feature that
allows to send vehicles along a path. Steering and speed is automatically handled
when using paths which gives the vehicles a natural driving appearance.
To use a path, the Path Follow input needs to supply a proper path for that
particle.
Start - sets the distance to the start of the selected path. This distance is in world
units.
Next Distance - defines the maximum distance between multiple vehicles on the
path
Variation - used to randomize the Next Distance value.
Random Seed - sets a random seed value for this operator only
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTJoint
The BT Joint is used to created BulletPhysics Joints between particles. This can
be done at any time and can be controlled in a variety of ways, most basically
with the On input. The only required inputs are the Particle From and Particle To
which define the two particles involved, where one particle is identified as the
start of the joint (From) and the other as the end of the joint (To).
The joint occupies a single point in space, which can be specified with either the
Position From and Position To, or with the World Position. Position From and
Position To can sometimes be difficult to calculate as the same point in space, so
the World Position input is often preferred. (If you simply use the Particle From
position as the Position From, and the Particle To's position as Position To, the
joint will likely behave erratically and explode because the single point in space
is attempting to exist in two locations at once.)
Calculating the joint World Position can be as simple as averaging the two
particle positions with an Expression operator ((v1+v2)/2). Keep in mind that as
a single point in space the joint would ideally be located somewhere in-between
the two particle meshes. This can require more advanced calculations, such as
using an Intersect calculation from each particle towards the other particle in
order to get a surface position on each particle mesh, then averaging those two
positions. Of course you could also simply calculate one Intersect and use that
one result as the joint location. The options are wide open.
Once the joint is defined you can connect the Joint* output to an
BTJointDataOperator to create additional properties such as velocity and
rotational breaking thresholds, or spring values, or dampening, etc.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle From - sets the "From" particle ID that will be used to create a Joint
Particle To - sets the "To" particle ID that will be used to create a Joint
Position From - defines the joint
position in object space as seen from the
"From" particle where the Joint will be
placed between the two Joint partners.
Position To - defines the joint position
in object space as seen from the "To"
particle where the Joint will be placed
between the two Joint partners.
Important
You must supply both object space
positions when using these inputs.
One input alone will cause an
invalid Joint. This Joint position in
space should be the same point in
world space for each of the
positions you feed into these inputs.
Type - lets you set the type of Joint that will be created between the two
particles. Possible options are:
0 = Point To Point
1 = Hinge
2 = Cone Twist
3 = Slider
4 = D6
5 = D6 Spring
6 = Rope Anchor
7 = Softbody Cluster
World Position - inputs the Joint's position in world space coordinates that
needs to be created between the two particles.
World Alignment - inputs the Joint's alignment in world space coordinates that
needs to be created between the two particles.
Operator Outputs
Joint - outputs the currently created joint ID. The BT Joint is used to created
BulletPhysics Joints between particles.
Rollout Menu
Collision - lets you choose, from the drop down menu, the physics engine solver
to use for the Joint simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
Type - lets you choose a certain type of Joint for the particle pair, connected to
this operator.
0 = Point To Point
1 = Hinge
2 = Cone Twist
3 = Slider
4 = D6
5 = D6 Spring
6 = Rope Anchor
7 = Softbody Cluster
Find below a description of the supported constraint types.
Point to Point Joint
The point to point constraint limits the translation so that the local pivot points of
two rigid bodies match in world space. A chain of rigid bodies can be connected
using this constraint.
Hinge Joint
The hinge constraint, restricts two additional angular degrees of freedom, so the
body can only rotate around one axis, the hinge axis. This can be useful to
represent doors and wheels rotating around one axis. Various limits and the use
of a motor can be specified for this joint type.
Cone Twist Joint
To create ragdolls, for example, the cone twist constraint is very useful for
limbs; like the upper arm. It is a special point to point constraint that adds cone
and twist axis limits. The x-axis serves as a twist axis.
Slider Joint
The slider constraint allows the body to rotate around one axis and translate
along this axis.
D6 Joint
This generic constraint can emulate a variety of standard constraints, by
configuring each of the six degrees of freedom (DOF). The first 3 DOF axis are
linear axis, which represent translation of rigid bodies, and the latter 3 DOF axis
represent the angular motion. Each axis can be either locked, free or limited.
Keep in mind that several combinations that include free and/or limited angular
degrees of freedom are undefined.
D6 Spring
This joint is a modification of the original D6 Joint to support springs. it is
important to note, that this joint type is either a spring or a motor but not both at
the same type.
Rope Anchor
This type of joint is only working with ropes, and its purpose is to link a rope
knot to an object.
Softbody Cluster
Use this option to create a Joint between Rigid Bodies and Softbodies
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTJoint Counter
BT JointCounter operator enables you to get all the available joints that exist
between a pair of particles. Please note, you must specify the BT BulletPhysics
collision operator that has been used for the joints from which you want to
gather data or you will not get any joint information at all.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle 1 - sets the Particle1 particle ID that will be used to acquire the Joint
information
Particle 2 - sets the Particle2 particle ID that will be used to acquire the Joint
information
Which - this input defines the option to choose which Joints to output by this
operator. The options are
0 = From
1 = To
2 = Both
Note that you can simply provide the Particle 1 input and specify "Both" in
order to access all joints associated with that particle.
Operator Outputs
Joint* - outputs all of the joint IDs relevant to the Particle input
Number of Joints* - outputs the number of Joints a particle pair has (Particle 1
and Particle 2)
Rollout Menus
The BT JointCounter operator offers only a few settings to adjust. Possible
options are:
Collision - lets you specify the BulletPhysics collision operator that has been
used to handle the joints. thinkingParticles is able to use multiple BulletPhysics
collision operators in one particle system setup, hence the need to specify the
solver you want to get joint information from.
Which Joints
From - when selected, joints attached to Particle 1, only will be output to the
*Joint connector.
To - when selected, joints attached to Particle 2, only will be output to the *Joint
connector.
Both - check this option to output all joints connected to either Particle 1 or
Particle 2
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTJointData
BT JointData can be used to either set or get information about a joint. It
requires a Joint input which can be accessed from either BTJointOperator or
BTJointCounterOperator. All joints have a specific Joint ID integer and this
integer can actually also be used as the Joint input.
BTJointOperator can only define Particle From/To, Position From/To/World, and
Type, so in order to set additional joint properties BT JointDataOperator is
necessary.
Among the many useful features of this operator are its feature to set a joint's
ability to break, it's breaking velocity & rotation thresholds, to define or redefine
joint types and Particle To/From connections, and to track when a joint has
broken (via the Broken output, which outputs 1 continuously when a joint is
broken).
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Joint - inputs the joint ID of the joint to be changed or reads the data from the
joint.
Type - lets you set the type of Joint that will be created between the two
particles. Possible options are:
<0 = Joint will be deleted
0 = PointToPoint
1 = Hinge
2 = ConeTwist
3 = Slider
4 = D6
5 = D6 Spring
6 = Rope Anchor
7 = Softbody Cluster
Particle From - sets the "From" particle ID that will be used to create a Joint
Position From - defines the joint
position in object space as seen from the
"From" particle where the Joint will be
placed between the two Joint partners.
Alignment From - inputs the Joint's
alignment in object space coordinates
that needs to be created between the two
particles.
Important
You must supply both object space
positions when using these inputs.
One input alone will cause an invalid
Joint. This Joint position in space
should be the same point in world
space for each of positions you feed
into these inputs.
Particle To - sets the "To" particle ID
that will be used to create a Joint
Position To - defines the joint position in object space as seen from the "To"
particle where the Joint will be placed between the two Joint partners.
Alignment To - inputs the Joint's alignment in object space coordinates that
needs to be created between the two particles.
World Position - inputs the Joint's position in world space coordinates that
needs to be created between the two particles.
World Alignment - inputs the Joint's alignment in world space coordinates that
needs to be created between the two particles.
Breakable - sets if a joint is breakable or not. (a value of 1 means breakable)
Break Impulse - sets the maximum velocity allowed before the Joint "breaks
off"
Broken - sets this input to 1 to break the joint immediately
Collision - connect a value of 1 to this input to allow for collision detection
between Joint objects
Operator Outputs
Type - outputs the type of Joint that will be created between the two particles.
Possible options are:
0 = PointToPoint
1 = Hinge
2 = ConeTwist
3 = Slider
4 = D6
5 = D6 Spring
6 = Rope Anchor
7 = Softbody Cluster
Particle From - outputs the "From" particle ID that was used to create a Joint
Position From - outputs the joint position in object space as seen from the
"From" particle where the Joint will be placed between the two Joint partners.
Alignment From - outputs the Joint's alignment in object space coordinates that
needs to be created between the two particles.
Particle To - outputs the "To" particle ID that will be used to create a Joint
Position To - outputs the joint position in object space as seen from the "To"
particle where the Joint will be placed between the two Joint partners.
Alignment To - outputs the Joint's alignment in object space coordinates that
needs to be created between the two particles.
World Position - outputs the Joint's position in world space coordinates that
needs to be created between the two particles.
World Alignment - outputs the Joint's alignment in world space coordinates that
needs to be created between the two particles.
Breakable - outputs the state of a joint, if a joint is breakable or not. (a value of
1 means breakable)
Break Vel. Threshold - outputs the maximum velocity allowed before the Joint
"breaks off"
Break Rot. Threshold - outputs the maximum allowed rotational speed (angle
change per second) before the Joint is broken
Broken - outputs the status of the Joint an output value of 1 indicates a broken
joint.
Collision - outputs a value of 1 when collision detection between Joint objects is
active, 0 when inactive
Rollout Menus
The BT Joint operator offers only a few settings to adjust. Find below the
possible settings:
Collision - lets you choose from the drop down menu the physics engine solver
to use for the Joint simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
Type - Select from the drop down list the joint type you intend to use with this
operator. The thinkingParticles node in the view port will change accordingly.
Only the first set of parameters described above will stay the same, all other will
change based on the type of joint.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTRope
BT Rope is a soft body physics object available within thinkingParticles. The
BulletPhysics solver handles all rope dynamics based on two dimensional
splines in 3D space. There will be no "volume" to it, every simulation will solely
based on the 2D spline deforming and colliding in space. The actual "rope"
mesh, will use much more volume than the spline, so rigid body simulations will
appear sinking into the rope object. The actual simulation setup has to take care
for this side effect (move the object or collide with a dummy slightly bigger).
Compared to all the other operators in thinkingParticles, this operator behaves
differently; it creates an actual mesh in a fully procedural way. This soft body
mesh is based on two points in space were a spline is drawn between those two
points, this object is simulated based on a soft body solver, so it can stretch and
spring back.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
From Particle - sets the "From" particle ID that will be used to create a Rope
object
To Particle - sets the "To" particle ID that will be used to create a Rope object
Important
When you want to create an Achnor
with the "From" or "To" particle;
those particles need to have a shape
and proepr BTRigidBody
parameters.
From Position - defines the rope start position in world space. For every new
position fed into this operator a new rope object will be created.
To Position - defines the rope's end position in world space. For every new
position fed into this operator a new rope object will be created.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
Born Particle- outputs the currently created rope particle.
From Anchor Index - connect a BTJointData to modify or use the joint attached
to this particle
End Anchor Index - connect a BTJointData to modify or use the joint attached
to this particle
Rollout Menu
Before you can see a rope object, you need to supply at least one start point and
one end point. This is usually done by using the operator inputs.
Remember, for every point you feed into the operator a rope will be created
automatically. Use the rope output along with a RopeData to procedurally set
the parameters of this object.
Collision - lets you choose, from the drop down menu, the physics engine solver
to use for the rope simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
Group - defines the particle group to be used when ropes are created by this
operator. Keep in mind - in the case of BT Rope the rope parameters are
automatically created and attached to the particles.
Segmentation - sets the amount of steps (knots) for the spline to be drawn
between start and end point.
Linear Stiffness - sets how "springy" or bouncy the rope will be. Lower
numbers will create an ultra soft rubber while higher numbers will create a
stronger appearing rope. Keep in mind we are talking here soft bodies! The rope
will never become as hard as a strip of steel!
Damping - adds a dampening force to the rope stretching. The higher this value
the more clay like the rope stretching will appear.
Iteration - sets the amount of intermediate steps the solver will take to simulate
the rope system. The higher this value the more accurate the result will be,
however the longer it will take to calculate.
Contact Hardness
Anchor - defines how strong the anchor holds
Rigid - sets the "bounce off" strength for rigid bodies
colliding with the rope spline
Fixed Start - when checked the start of the rope will be
fixed
Fixed End -when checked it will set the
Automatic Breaking
Threshold - sets the maximum force at which the rope
breaks/tears apart
Position - defines the position along the rope were the
breaking should occur. A value of 0.5 means the middle
part of the rope will break, 0 means it will break at a
position were the maximum force occurs.
Zoing - defines the "pre-load" factor for the rope, this
controls the tear off effect. a value of 100% will create a
maximum pre-loaded spring-back effect.
Anchor Particle Input (From/To) - check either option to
specify if an automatic anchor (joint) should be created to
attach the rope to its particle. Without any particle position
input, the object center will be used automatically to attach
the rope to the particle.
Mesh Hull
None - check this option, to prevent thinkingParticles form
creating a mesh
Radial - when checked, a "round" rope mesh will be created.
Constriction - sets the amount of constriction for the rope mesh. A value of
100% will show the maximum constriction.
Rate - sets the amount of constrictions. The higher this value the more
constrictions will be visible. To see all of the mesh effects a proper amount of
segmentation must be maintained!
Thickness - defines the radius of the rope. The higher this value the thicker the
rope will be.
Rotation - rotates the rope around its center.
Sides - sets the amount of segments circumventing the rope.
Steps - defines the mesh resolution along the length of the rope.
Twist - sets how often the rope is twisted around
Autosmooth - check this option to turn on auto-smoothing of the rope mesh
Threshold - sets the angular threshold when to smooth the surface.
Generate Mapping - when checked, mapping coordinates for the rope mesh
are created.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTRopeData
Rope objects in thinkingParticles are special, unlike other objects they can either
be created within thinkingParticles or outside of thinkingParticles.
One way of creating rope objects in thinkingParticles is by using standard 3ds
Max splines, which can be easily converted into a thinkingParticles rope object.
Editing and managing those splines would be done through 3ds Max own set of
tools.
However, Rope Objects can also be created in a fully procedural way and
accessing or modifying the underlying data can be performed with this node.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Rope Particle - sets the rope particle that will be evaluated.
Linear Stiffness - sets how "springy" or bouncy the rope will be. Lower
numbers will create an ultra soft rubber while higher numbers will create a
stronger appearing rope. Keep in mind we are talking here soft bodies! The rope
will never become as hard as a strip of steel!
Damping - adds a dampening force to the rope stretching. The higher this value
the more clay like the rope stretching will appear.
Iteration - sets the amount of intermediate steps the solver will take to simulate
the rope system. The higher this value the more accurate the result will be,
however the longer it will take to calculate.
Fixed Start - when checked the start of the rope will be fixed
Fixed End -when checked it will set the
Anchor - defines how strong the anchor holds
Rigid - sets the "bounce off" strength for rigid bodies colliding with the rope
spline
Mesh Type - 0 equals to NONE and 1 equals to Radial
Thickness - defines the radius of the rope. The higher this value the thicker the
rope will be.
Sides - sets the amount of segments circumventing the rope.
Steps - defines the mesh resolution along the length of the rope.
Rotation - rotates the rope around its center.
Constriction - sets the amount of constriction for the rope mesh. A value of
100% will show the maximum constriction.
Rate - sets the amount of constrictions. The higher this value the more
constrictions will be visible. To see all of the mesh effects a proper amount of
segmentation must be maintained!
Twist - sets how often the rope is twisted around
Autosmooth - check this option to turn on auto-smoothing of the rope mesh
Threshold - sets the angular threshold when to smooth the surface.
Generate Mapping - when checked, mapping coordinates for the rope mesh
are created.
Start Position - sets the start position of the rope
End Position - defines the End position of the rope
Breaking Threshold - sets the maximum force at which the rope breaks/tears
apart
Breaking Position - defines the position along the rope were the breaking
should occur. A value of 0.5 means the middle part of the rope will break, 0
means it will break at a position were the maximum force occurs.
Break - when set to 1, the rope breaks immediately
Break Zoing - defines the "pre-load" factor for the rope, this controls the tear off
effect. a value of 100% will create a maximum pre-loaded spring-back effect.
Operator Output
All available outputs of this operator are identical to their input counterpart. In
the interest of avoiding unnecessary redundancy, those parameters are not
described again. Please check the description of the parameters as shown in the
previous chapter.
Rollout Menu
Collision - lets you choose, from the drop down menu, the physics engine solver
to use for the Joint simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BTVehicleData
The BT VehicleData offers similar features and functionality as found in any
other of the thinkingParticles data operators. One important difference found in
BT VehicleData is, even though it can only handle vehicle data, any particle type
can be connected to this operator. If the particle represents, for example a
tractor; parameters related to tractor particles will be active,only. The same is
true for wheel particles or trailer particles.
This operator is perfect to procedurally adjust vehicle parameters at any given
time. In addition to adjusting vehicle settings, this operator can also be used to
query the vehicle status and some interesting physics simulation related status
variables.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) - This input data stream reads in the currently selected
particle group. The data stream MUST be connected and will be highlighted
yellow if it is not. Keep in mind a vehicle can be created out of multiple
particles. Every particle can have its own group, or all of the different particle
types are in the same group.
In general, there are three types of special particles: vehicle particles, wheel
particles, trailer particles. thinkingParticles takes care about the particle type,
there is no need to treat them any different. When the particle input is connected
to the operator it will automatically filter particles based on their types.
Wheel Index - to access a specific wheel of the vehicle, feed in an integer value
to this input port. A value of zero means accessing the first wheel of the vehicle
(tractor) and acquire its data.
Trailer Index - To access a specific trailer, feed in an integer value to this input
port. A value of zero means accessing the first trailer of the vehicle and acquire
its data.
Drive - sets the drive configuration of the vehicle. Front(0), Rear(1), All(2)
select one of the options to define the type of drive layout to be used with the
vehicles.
Steering - sets the steering wheel angle from -90 to +90 degrees. The slider,
found right below this control may also be used to steer the vehicle.
Speed - sets the speed of the vehicle, this value represents a force. Higher
numbers will result in a higher speed of the vehicle depending on the ground and
friction.
Brake - adds a "breaking force" to the vehicle. The higher this value to stronger
the breaking force will be.
Wheel Locked: Front(0),Rear(1),All(2) - select one of those options to activate
the hand break. The effect is immediate, unlike the break force which kicks in
gradually.
Rotation X,Y,Z - sets the wheel rotational axis in object space. Depending on
how the vehicle has been modeled it might be necessary to switch the rotational
axis.
Friction Slip - sets the coefficient of friction between the tire and the ground.
Should be about 0.8 for realistic cars, but can easily be increased for better
handling. In fact it all depends on the scale of the scene and how the vehicle is
modelled.
Rolling Influence - reduces the rolling torque applied from the wheels that
might cause the vehicle to roll over. It is a bit of a hack, but it's quite effective. A
value of 0.0 means that a roll over will be prevented, 1.0 will act like in the real
world and a vehicle actually can roll over.
Suspension Axis X,Y,Z - sets the axis along which the shocks will compress.
Damper Length - defines the length of the shocks. Keep in mind, as always,
physics simulations depend heavily on a proper setup of the world.
Damper Stiffness - sets the "stiffness" or overall strength of the shocks. Higher
numbers will make the shocks appear much harder.
Damper Relaxation - there are two possible dampening forces at work for the
shocks. One force is responsible for counteracting compression of the shocks
and one force would work against tension.
Relaxation - sets the counter-force for the relaxation phase of the
shocks.
Compression - defines the counter-force for the compression phase of
the shocks.
Max Travel - sets the maximum amount the springs can be compressed at
which the shocks will provide their maximum force.
Why does my vehicle sink into the
ground ?
Whenever the suspension cannot
support the weight of the vehicle, the
wheels may start sinking through the
ground. In such cases, increase
Stiffness, Max Travel or
Length. Increasing the length of the
shocks too much might introduce
instability into the simulation. Max
Travels sets the maximum amount
the springs can be compressed at
which the shocks will provide their
maximum force.
Max Force - sets the maximum force that can be applied to the shocks (when
Max Travel is reached).
Operator Output
The output values of this operator are identical to their input counterpart.
However, some more variables have been added and those can be used to query
about the physics simulation status of the vehicle.
Operator Rollout Menu
Collision - lets you choose, from the drop down menu, the physics engine solver
to use for the rope simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BulletPhysics
thinkingParticles ships with multiple physics solvers and there are three to
choose from. Some solvers are better in certain situations than others,
thinkingParticles' native solver "Shape Collision" is used on high-end movie
productions when quality and accuracy of collisions are more important than
simulation times. On the other hand PhysX is more often used in game
productions were simulation accuracy is not that important. BulletPhysics offers
the best compromise of both worlds accuracy and speed, even so it is not as
accurate as the one found in the "SC" solver.
While it is possible to use multiple
physics solvers in a DynamicSet, it
is highly recommended that you use
as few operators of this type as
possible. The memory requirements
are huge and they increase with each
addition of that operator type.
Because of the academically challenging nature of the subject matter, it is
assumed that you have at least some basic knowledge of computer based physics
and dynamic simulations. If not, it is recommended that you get hold of a good
book and familiarize yourself with the concepts of computer based physics
simulations.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Floor Node - (Node) This input data stream is used to specify through a node
helper for example a 3D mesh as a floor collision object. A floor object is
automatically treated as immovable with an infinite mass.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
Particle - (Particle) This output data stream supplies the current particle
information. Use this to modify specific particle properties.
Collided - (Bool) Whenever a collision event occurs, this output data stream will
return true as its value. In all other non-colliding situations, the output will report
false as the value.
Collision Average Position - (Position) This output data stream provides the
current interpolated collision point.
Be aware that this point may be
highly inaccurate as face to face
collisions usually happen on areas
and not at one individual point. Also,
when objects come into contact and
start sliding, the collision point will
be generated at all times over and
over again.
Collision Average Normal - (Normal) This output data stream outputs the
interpolated normal of the calculated collision point.
Sleeping - (Bool) This output data stream holds the frozen status of the particles,
as determined by the parameters set forth in the particle group rollout. When
particles are considered "frozen" or "inactive", this value will be true. When
particles are actively moving, this value will return false.
Double Star = Secondary Initiator Outputs
Double Star Output (**) behaves like the Top-Level Initiator outputs, this
outputs activate connected nodes for evaluation. It is important to understand
that all connected nodes will be evaluated. However, as this is a secondary
Initiator output, it can not be combined with the Top Level Output at the same
time. The main rule still applies: Never use 2 Initiators on the same node or
wiring.
Number of Collisions - (Integer) holds the total number of all collisions that
happened for a particle. A collision may happen multiple times, especially with
sliding objects (surface - surface). Note, this is a secondary Initiator output that
can not be combined with the top level Initiator outputs at the same time. Either
the Top-Level will be active or the low level department but not both at the same
time.
Coll Index - (Integer) outputs the current index number of the collision. This
might be used to get the current progress of the collision evaluation. Collision
index can become as big as the Number of Collisions value, if this is reached the
collisions are done.
Coll Particle A - (Particle) outputs the particle A of the collision pair. This
output is always evaluated before particle B!
Coll Particle B - (Particle) outputs particle B of the collision pair.
Coll Floor - (Bool) when a collision with the floor object happens, this output
will be set to True.
Coll Position - (Position) outputs the real world position Collision point.
Coll Normal - (Normal) outputs the normal of the calculated collision point.
Coll Position A - (Position) outputs the collision position of Particle A in local
object space.
Coll Position B - (Position) outputs the collision position of Particle B in local
object space.
Rollout Menu
The BulletPhysics operator is used to control the physics solver parameters.
The settings you find within this menu are "global" settings those settings would
affect the overall simulation.
Particle
Group - this drop-down list selects the particle collision partners for the floor or
inter-particle collision.
All Physics based parameters are set
and controlled within the particle
group itself. Select the relevant
particle group in the particle group
tree view to access the dynamic
properties of a particle group.
Deflector - is used to choose the deflector objects. Important: those objects will
be treated as unyielding, all the time, regardless of their local physics settings.
One application would be to use recorded particles as deflectors.
IMPORTANT
Deflector Particles will use the
physics settings from the Floor
controls.
Floor
Shape - defines the shape of the collision object used for the floor. There are 10
options to choose from, two was the one that fits closest to the object type used
as floor.
Mesh - select this option to define the floor object as a mesh object.
Convex Hull - select this optimized version when the floor object
represents a convex mesh.
Box - choose this option to use the highest level of optimization when
the floor resembles a box shape
Sphere - select is option when the floor object is also a spherical shape.
Cylinder X,Y,Z - to optimize the floor collision with cylindrical objects
choose either X,Y or Z.
Cone X,Y,Z - for optimum collision detection with cone shaped objects,
choose this option.
Restitution - Use this parameter to control the bounce value between the floor<>particle collisions. Higher values will make the particles lose less energy per
bounce. Be aware that values greater than 100 will create extra energy and the
particles will gain energy with each bounce.
Friction - This spinner defines the friction between particles and the floor when
they are in contact (sliding). Higher values will make the particles slide less.
Physics
Iteration - sets the number of sub-steps to be used to estimate the real collision
point of colliding objects. The lower this number, the faster the simulation will
run. However, lower values would also mean less accurate results. In most
situations, you can keep this value between 5-10, while in exceptionally complex
scenes, you can try to set a value as high as 30 to get more accuracy.
Linear Slop - Defines the penetration depth for object collisions. this value is
measured in world units. A value of 1 equals to 1 unit penetration depth
(overlapping). It is recommended to use the default value of 0.
ERP (Error Reduction Parameter) - use this parameter to adjust possible
errors in a joint setup. When a joint attaches two bodies, those bodies are
required to have certain positions and orientations relative to each other.
However, it is possible for the bodies to be in positions where the joint
constraints are not met. This ``joint error'' can happen in two ways:
1. If the user sets the position/orientation of one body without correctly
setting the position/orientation of the other body.
2. During the simulation, errors can creep in that result in the bodies
drifting away from their required positions.
Split Impulse - by default, Bullet solves positional constraints and velocity
constraints coupled together. This works well in many cases, but the error
reduction of position coupled to velocity introduces extra energy (noticeable as
'bounce'). Instead of coupled positional and velocity constraint solving, the two
can be solved separately using the 'split impulse' option. This means that
recovering from deep penetrations doesn't add any velocity when this option is
checked.
Although this removes most of the extra energy/bounce, it degenerates quality a
little bit, in particular for stable stacking. Hence, the setting should be disabled.
Also note that the split impulse option is only enabled for contact constraints,
and none of the other joints (hinge/ball socket and so on), for quality reasons
Randomize Constraints Order - check this option to enhance "stacking"
situations. Bullet solves constraints one constraint row at a time. By randomizing
the order of solving the constraint rows, stacking stability can be improved (at
the cost of a little bit of performance)
Warmstarting - Bullet uses an iterative algorithm where each iteration is based
on the solution of previous iteration. If no warmstarting is used, the initial
solution for Bullet is set to zero each frame. When using warmstarting, the first
iteration uses the last solution of the previous frame. This improves convergence
towards a better solution and hence stacking stability.
Factor - defines how much of the previous impulse is used for the next
calculation step. A value of zero will turn off warmstarting a value of 1
will use the original value.
Multithreading - when checked some parts of Bullet will use multi-threaded
code to speed up collision.
Size As Mass - Activate this checkbox to enable an automatic mass calculation
that is based on the size of the particle. For example, a particle with a size of 2.0
will be treated as 2 Kg.
Wakeup Sleeping Bodies - whenever this option is checked (animated) all
sleeping objects (out of any physics simulation) are turned active again.
Soft Body
Air Density - defines how much friction between air and objects should be
considered in the physics simulation process. Higher numbers will create more
"tumbling" like behavior on free fall simulations.
Recorder
thinkingParticles allows you to record particle dynamics. It is always a good idea
to use this feature whenever a simulation seems to be perfect for the job.
Recording the particles as they bounce around will make life easier at a later
rendering stage. Playback from hard disk is also usually much faster than
calculating the solution each time you play back the particle collisions,
especially considering time line scrubbing.
Select Record File - Click this button to bring up a standard Windows Save
dialog. Any legal name and path can then be specified to save the recorded
particle simulation.
Simulate, Play, Record - These buttons are fairly self-explanatory. The
Simulate button turns the recorder into playback mode and will play back the
recorded file on hard disk as you scrub the 3ds Max frame slider in the view
ports. The Record button will switch the recorder into record mode. With the
record button pressed, clicking the Play button on the 3ds Max timeline will start
the recording and simulation of the particle dynamics. After the last frame has
been reached, the recording automatically stops and turns into Play mode to
show you the results.
Active Time Segment / Range - This is a standard 3ds Max control that lets you
choose whether you want to record the entire particle animation, or just a
specified range of frames as defined within the two spinners.
Redraw Views - when checked, the 3ds Max view ports will be updated while
simulating. Depending on scene complexity it might be a good idea ot turn of
View Updates while simulating.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
BringTo Operator
The Bring To Operator is similar to the Position Follow Operator, however this
operator "brings" or forces a particle into a defined position and rotation. The
target can be any position in space, and the alignment can also be derived from
any reference object (a node helper) or absolute value.
IMPORTANT:
The target drag increases
exponentially as the number of
frames passes.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be brought to the target. The data stream MUST be connected
and will be highlighted yellow if it is not.
Position - (Position) This input data stream defines the Bring To target position.
The particle should land on this position (or near this point).
Alignment - (Alignment) This input data stream tells the particle how to align as
it arrives at this position in space.
Frames - (Frame) This input data stream is used to override the In Frames
spinner value.
Type - (Integer) sets the BringtTo method that should be used, 0 Old Stlye and 1
New Style.
Soft Start - (Scalar) is used to feed in a Soft Start value for the BringTo effect
(see description below).
Smooth Sticking - (Scalar) used to feed in a Smooth Sticking value for the
BringTo effect
Operator Outputs
Evaluated Frames - outputs the current (local time) frame that is evaluated by
the BringTo effect
Evaluated Relative - outputs the evaluation timing as a value between 0-1, 0
being the start of the BringTo effect and 1 being the end of the BringTo effect
Rollout Menu
In Frames - This spinner sets how long in frames the particles will take to reach
the input position in space. The particles will move freely less and less as the
time (frame) proceeds. Once the particle has reached the Bring To position and
alignment, space warps will no longer affect them.
Old Style - choose this option to use the "old" BringTo method as it was
introduced in TP 2.5
New Style - when checked, the new BringTo method will be used (as described
below).
The parameters below are only valid for the New Style setting
Soft Start - defines how strong the BringTo (drag to the target position) effect
should be applied in the beginning. The bigger this number the less the BringTo
effect (drag to the position) will be present in the starting phase. A value of 0
will apply the BringTo effect to the particles immediately. Default Value is 1.0
Smooth Sticking - slows down the approach to the target position (BringTo
effect) of the particles. The larger the value the slower the particles will approach
the target positions.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Follow Node Operator
Particles that follow a selected object is a common effect within many particle
animations. As such, thinkingParticles offers some advanced functions within
the Follow Node Operator to make particles follow an object. Make sure that
you try out the various options before you think that you can't achieve a certain
effect. Many features may surprise you!
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be used to follow. The data stream MUST be connected and will
be highlighted yellow if it is not.
Node - (Node) This input data stream is used to give the selected Follow Node
object the particles are to try and follow. The data stream MUST be connected
and will be highlighted yellow if it is not.
Type - (Integer) This input data stream takes an integer value that represents the
Type of Follow algorithm the particles will use. Valid input values are 0 through
1, where:
0 = Type 1
1 = Type 2
Speed1 - (Scalar) This input data stream is used to override the Type 1 Speed
spinner value.
Speed1 PositionDependence - (Scalar) This input data stream is used to
override the Type 1 Position Dep. spinner value.
Speed1 PLifeGradient - (Alpha Gradient) This input data stream is used to
override the Type 1 PLife Dep. spinner value.
Catch1 - (Scalar) This input data stream is used to override the Type 1 Catch
spinner value.
Catch1 PositionDependence - (Scalar) This input data stream is used to
override the Type 1 Catch / Position Dep. spinner value.
Speed2 - (Scalar) This input data stream is used to override the Type 2 Speed
spinner value.
Speed2 Variation - (Scalar) This input data stream is used to override the Type
2 Variation [%] spinner value.
Speed2 PositionDependence - (Scalar) This input data stream is used to
override the Type 2 Position Dep. spinner value.
Catch2 - (Scalar) This input data stream is used to override the Type 2 Catch
spinner value.
Catch2 Variation - (Scalar) This input data stream is used to override the Type
2 Catch / Variation [%] spinner value.
Catch2 PositionDependence - (Scalar) This input data stream is used to
override the Type 2 Catch / Position Dep. spinner value.
Start Time - (Frame) This input data stream is used to override the Type 2 Start
Time spinner value.
Start Variation - (Frame) This input data stream is used to override the Type 2
Random Start spinner value.
Position Scale - (Scalar) This input data stream is used to override the Type 2
Position Scale spinner value.
Position - (Integer) This input data stream takes an integer value that represents
the Type of Position calculation the particles will use. Valid input values are 0
through 1, where:
0 = Object Position
1 = Random Position
Follow At Time - (Bool) This input data stream is used to override the Follow
At Time checkbox state.
Node Rotation - (Bool) This input data stream is used to override the Node
Rotation checkbox state.
Node Alignment - (Bool) This input data stream is used to override the Node
Alignment checkbox state.
Follow Type - (Integer) This input data stream takes an integer value that
represents the Type of particle follow path the particles will use. Valid input
values are 0 through 2, where:
0 = Relative
1 = Absolute
2 = Position
Operator Outputs
No Operator Outputs.
Rollout Menu
thinkingParticles offers two types of follow features.
Type 1: This method is the easiest of the Follow Node options and has only a
handful of parameters for you to set. But don't THINK that this option isn't
worth looking at. Be prepared to learn something really advanced.
Type 2: In contrast to Type 1, this Follow Node option offers many more options
and parameters for you to set. By default, Type 2 makes the particles follow
relative to the follow object position. In other words, all particles keep their
relative distances to the follow object. This behavior may be changed at a later
stage as well.
Type 1:
Speed - This spinner value acts as a multiplier for the particle speed. A value of
1.0 makes the particles as fast as the selected Follow Node object (any 3ds Max
object), while a value of 0.5 makes the particles half as fast as the selected
Follow Node moves. Values greater than 1.0 will accelerate the particles beyond
the speed of the selected Follow Node which means that they eventually pass the
follow object and reach the end of the animation before the follow object reaches
it.
Position Dep. - By default, all particles following the selected node get the exact
same speed based on the Speed value described above. In the real world
however, having all particles moving with the exact same speed looks unnatural.
Imagine a flock of birds, for example. If they were to move in absolute
synchrony or change direction at the exact same time, the illusion of reality
would be destroyed.
Thus, the Position Dependency spinner lets you control how the follow speed is
assigned to the various particles. A value of 0.0 turns off the position
dependency for the particle speed and all of the particles inherit the exact same
speed. Higher values take into account the proximity of the particle to the
selected Follow Node in order to determine how much of the particle speed to
apply. In general, particles farther away from the selected Follow Node receive
less of the follow speed and particles that are closer to the Follow Node receive
more of the follow speed.
PLife Dep. - In addition to Positional dependency, thinkingParticles offers speed
dependency based on the life time of the particles. This lifetime dependency is
handled through a grayscale gradient, as shown below.
The leftmost edge of the gradient represents the point at which the particle is
born, while the rightmost edge represents the point at which a particle dies.
White values indicated within the gradient represent full speed, while black
indicates no speed at all.
Now, why would someone want this type of control? It lets you easily simulate a
loss of particles over time. As long as the particles have a certain age they will
follow perfectly, but as they get older they stop following (or even move away
from) the selected Follow Node object. A crop duster spraying pesticide over a
field of corn is a good example of this kind of effect. The pesticide leaving the
plane will briefly have the same speed as the plane, but because of air friction,
wind or whatever, the spray comes to a stop on top of the field and just rains
down in the right place.
Catch - One of the ideas behind a follow function is to make particles catch an
object that moves around. The Catch spinner controls the amount of tension the
particles should have when following the object. A value of 1.0 makes the
particles stick to their follow path (relative to the object), while values below 1.0
will make the particles loose and stretchy.
Position Dep. - This parameter only affects the Catch value when Catch is less
than 1.0. It will not affect anything else. The functionality is identical to the
Position Dependency of the Speed value, except that it controls the looseness
dependent on the distance to the follow object.
Type 2
Speed - Identical to the Type 1 speed spinner, this spinner acts as a multiplier for
the particle speed following an object. A value of 1.0 makes the particles as fast
as the selected Follow Node object (any 3ds Max object), while a value of 0.5
makes the particles half as fast as the selected Follow Node moves. Values
greater than 1.0 will accelerate the particles beyond the speed of the selected
Follow Node which means that they eventually pass the follow object and reach
the end of the animation before the follow object reaches it.
Variation [%] - Increase this value to add randomness to the speed of the
particles that follow a selected Follow Node object. If you set Variation to 100%,
every particle will get a random speed value.
Position Dep. - By default, all particles following the selected node get the exact
same speed based on the Speed value described above. In the real world
however, having all particles moving with the exact same speed looks unnatural.
Imagine a flock of birds, for example. If they were to move in absolute
synchrony or change direction at the exact same time, the illusion of reality
would be destroyed.
Thus, the Position Dependency spinner lets you control how the follow speed is
assigned to the various particles. A value of 0.0 turns off the position
dependency for the particle speed and all of the particles inherit the exact same
speed. Higher values take into account the proximity of the particle to the
selected Follow Node in order to determine how much of the particle speed to
apply. In general, particles farther away from the selected Follow Node receive
less of the follow speed and particles that are closer to the Follow Node receive
more of the follow speed.
Catch - One of the ideas behind a follow function is to make particles catch an
object that moves around. The Catch spinner controls the amount of tension the
particles should have when following the object. A value of 1.0 makes the
particles stick to their follow path (relative to the object), while values below 1.0
will make the particles loose and stretchy.
Variation [%] - Increase this value to add randomness to the Catch value of the
particles that follow a selected Follow Node object. If you set Variation to 100%,
every particle will get a random catch value.
Position Dep. - This parameter only affects the Catch value when Catch is less
than 1.0. It will not affect anything else. The functionality is identical to the
Position Dependency of the Speed value, except that it controls the looseness
dependent on the distance to the follow object.
Start Time - Usually the particles start following an object as soon as the
operator gets a "true" message from on its ON input data stream port. However,
you can also set any start time by adjusting this parameter.
Random Start - By default, all particles follow the selected Follow Node at the
same start time. However, there are situations where you don't want this to
happen, and the Random Start parameter takes care of this. A value of 0.0 will
disable this spinner while values greater than zero will divide the starting time
evenly amongst all particles making them follow one after another.
Position Scale - This value is only used when the Random Position radio
button below it has been selected. This value acts as a relative scale factor for the
particle positions. From start to end (animation time) the particle positions will
be scaled up to this percentage.
Object Position - These two radio buttons select the way how particle positions
are treated/calculated by thinkingParticles.
Random Position - These two radio buttons select the way how particle
positions are treated/calculated by thinkingParticles.
Follow At Time checkbox - Activate this checkbox to force the particles to
follow the object based on the time the ON input data stream was activated and
not on the particle animation time. If no data stream is input into the ON port to
start the operator, then activating this checkbox forces the paricles to follow over
the course of the current animation.
Node Rotation checkbox - Activate this checkbox to force the particles use the
rotation matrix of the selected Follow Node so that when the object rotates the
particles also rotate.
Node Alignment checkbox - Activate this checkbox to align all particles with
the selected Follow Node.
Relative - Select this radio option if you want the particles to follow the selected
Follow Node relative to path that the Follow Node is taking.
Absolute - Select this radio option if you want the particles to follow the
selected Follow Node absolute to path that the Follow Node is taking.
Position - Select this radio option if you want the particles to follow the selected
Follow Node based on the position to the path that the Follow Node is taking (a
straight line is the path taken).
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Force
Instead of using 3ds Max's own Space-Warp system to create wind or gravity
effects, this Node can be used to create the same or better effects. The big
advantage by using this Node is the flexibility because of the internal controls
and complete isolation with other scene based effects.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be brought to the target. The data stream MUST be connected
and will be highlighted yellow if it is not.
Position - (Position) defines the position (center) of the force field, this is
needed for volumetric force field effects like Spheres or Cylinders.
Direction - (Direction) sets the direction vector of the force field
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
No outputs available for this Node
Rollout Menu
Strength - defines the strength of the force field. This value is specified in
strength per second. A value of 1 will move the particle one 3ds Max unit further
within one second. To get an effects that looks somehow similar to the native 3ds
Max Gravity or other force field effects a value of 10 or 100 is suggested.
Variation - adds a random variation to the strength of the force field.
Decay 1 - defines the distance measured from the Position, at which the decay
should be calculated. After the Decay 1 radius is reached no more force is
affecting the particles.
Decay 2 - defines a second falloff distance for Cylinder and Directional forces.
This decay value affects those particles traveling along the height of the cylinder.
Type - sets the Type of force field that should be applied to the particles. The
following Types are possible:
Direct - choose this option to use the supplied (connected) direction vector to
apply the force field effect.
Sphere - when selected a spherical force field effect will be applied to the
particles.
Cylinder - choose this option to make the force field behave like a Cylindrical
one.
Cone - to apply forces in a cone like manner, choose this option.
FOV - defines the opening angle of the cone
Radial Sphere - this type of force field works like a "motor", it moves particles
around inside the force field. The speed of travel is defined by the strength of the
force field.
Radial Cylinder - like the Radial Sphere, this force field effect is more like a
"motor" that moves particles in a circular manner around its center.
Void Sphere - check this option to get a spherical force field that particles can
not enter into.
Void Cylinder - when checked, a cylindrical force field is created that particles
can not enter.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Freeze Operator
The Freeze Operator offers similar functionality when compared with the
Friction Operator. However, Freeze is able to bring the particles to a full stop by
freezing all particle motions at once.
However, be aware that Freeze affects more than just motion -- it affects all
particle timings, too. This means Age is also frozen, as well as animated
materials or any other animatable parameter related to the particle. Imagine all
time-related functions for the particle being frozen (by whatever percent
specified).
Note: if you want to freeze a particle's motion without affecting its Age you can
use Velocity and Spin, both with zero speeds/spin time, although gradually
reducing these values may take some additional wiring and calculation. Another
method could be with the TP ScriptOp capabilities and create a new operator that
reduces/freezes motion.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have its particles frozen. The data stream MUST be connected
and will be highlighted yellow if it is not.
Freezing Factor - (Scalar) This input data stream is used to override the
Freezing spinner value.
Variation - (Scalar) This input data stream is used to override the Variation %
spinner value.
Operator Outputs
No Operator Outputs.
Rollout Menu
Freezing - This spinner is responsible for stopping all particles in their tracks.
Set this value to 100 if you want to stop all particle motion as soon as its ON
Input Data Stream receives a True condition. Values below 100 will freeze the
particles so they have only a fractional percentage of their original speed.
Variation % - If you do not want to freeze all particles with the same amount,
increase this spinner's value. So, if the Freezing spinner is set to 100, and the
Variation % is set to 100 as well, it means that some particles will not be frozen.
Effectively with these settings the particles you've instructed the particles that
there is 100% variation in the freeze value so some particles will get 0 freezing
effect, while others would get 100% of the effect.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Friction Operator
The Friction Operator allows you to apply friction to your particles so they react
dynamically to one another and anything they collide with. Rule-based Friction
effects solve many of your particle system nightmares you might have
experienced in the past. Friction effects may be assigned to any particle group at
any time, also removing friction effects from any particle group is possible.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have friction applied to it. The data stream MUST be connected
and will be highlighted yellow if it is not.
Friction - (Scalar) This input data stream is used to override the Friction spinner
value.
Rotation Friction - (Scalar) This input data stream is used to override the Rot.
Friction spinner value.
Operator Outputs
No Operator Outputs.
Rollout Menu
Friction - This spinner is responsible for slowing down the forward momentum
that is applied to a particle Group. Please note that this effect actually works like
in the real world. At each time step that a particle moves, there will be a constant
energy loss until the particle comes to a full stop. Higher values will reduce the
forward speed of a particle quicker.
NOTE: Be aware that there is no mass involved in the friction calculation. Only
the relative speed plays a role. Faster objects will generate higher friction (air
resistance) than slower particles.
Rot. Friction - This spinner is responsible for slowing down any rotation that is
applied to a particle. As is the case with the Friction spinner, at each time step
where a particle rotates, there will be a constant rotational energy loss until the
particle comes to a full stop. Higher values will reduce the spin of a particle
quicker.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Motion Inherit Operator
The Motion Inheritance Operator is intended to create effects where objects
interact with particles. Any 3ds Max object can affect particles or particle
Groups in thinkingParticles. Any 3ds Max object can also control or add its
speed or rotation to a set of particles. A good example of this is seeing bubbles
being swept through a propeller on a boat. The motion of the particles is driven
by the rotation of the prop, and in thinkingParticles, instead of having to "fake"
such an effect, you can use real physics to achieve it instead.
The Motion Inheritance physics are
controlled by advanced 3D force
field curves that will be explained
below.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have its particles influenced by the object piped in through the
Node input data stream. The data stream MUST be connected and will be
highlighted yellow if it is not.
Node - (Node) This input data stream is used to get the selected object by which
the particles are to be influenced. The data stream MUST be connected and will
be highlighted yellow if it is not.
Inheritance - (Scalar) This input data stream is used to override the Inheritance
[%] spinner value.
Motion Variation - (Scalar) This input data stream is used to override the
Variation [%] spinner value (the one directly beneath the Inheritance spinner).
Rotation Inheritance - (Scalar) This input data stream is used to override the
Rotational Inh.[%] spinner value.
Rotation Variation - (Scalar) This input data stream is used to override the
Variation [%] spinner value (the one directly beneath the Rotation Inh. spinner).
Direction Variation - (Angle) This input data stream is used to override the
Direction [*] angular spinner value.
Distance Type - (Integer) This input data stream takes an integer value that
represents the force field boundary type that will control the selected object's
influence over the particles. Valid input values are 0 through 2, where:
0 = None
1 = Sphere
2 = Cylinder
Radius - (Scalar) This input data stream is used to override the Radius spinner
value.
Radius Gradient - (Alpha Gradient) This input data stream is used to override
the Gradient used for the Radial influence of the Motion Inheritance. Be aware
that this gradient is only valid when the Distance type is set to Sphere.
Cylinder Axis - (Integer) This input data stream takes an integer value that
represents the Primary Axis for a cylinder that is to surround the selected object.
Valid input values are 0 through 2, where:
0 = X-Axis
1 = Y-Axis
2 = Z-Axis
Cylinder Height - (Scalar) This input data stream is used to override the
Cylinder Height spinner value.
Height Gradient - (Alpha Gradient) This input data stream is used to override
the Gradient used for the height influence of the Motion Inheritance. Be aware
that this gradient is only valid when the Distance type is set to Cylinder.
Scale Gradient - (Alpha Gradient) This input data stream is used to override the
Gradient used for the scale influence of the Motion Inheritance. Be aware that
this gradient is only valid when the Distance type is set to Cylinder.
Operator Outputs
No Operator Outputs.
Rollout Menu
Inheritance [%] - This spinner controls the amount of particle influence an
object has. A value of 100 means that 100% of the speed and rotation is taken
from the object that is piped into the Node input data stream.
Variation [%] - If you do not want all particles to be influenced by the exact
same amount as set in the Inheritance % spinner, increase the Variation % up to
100 to give the particle motion some additional randomness.
Rotation Inh [%] - The Rotational Inheritance spinner determines how much of
the rotational information is passed along to the individual particles. When doing
particle animations that involve rotating objects (such as fans or propellers),
generally you'll want to have some of that rotational information passed along to
the individual particles. When set to 0.0, particles will be affected by the motion,
but individual particles will not rotate.
Variation [%] - If you do not want all particles to be influenced by the exact
same amount as set in the Rotation Inh % spinner, increase the Variation % up to
100 to give the particle rotations some additional randomness.
Dir. Variation [*] - Usually the direction is taken from the object - that is,
assigned to the IDS-Node connector. For example, when the object moves to the
right the particles move to the right (100% inheritance assumed). Increase this
value to create a spread out effect and give the particles a random direction when
they start interacting with the object.
Distance Type - In order to create Motion Inheritance, you will use a force field
or boundary that will define the area within which to check for the inheritance.
You may select one of three force field types that should encompass the object
being used to determine Motion Inheritance.
None - If you select this option, the boundary will have no falloff function, and
all particles are affected by the same amount as is set in the Inheritance %
parameter.
Sphere - Selecting this option creates a spherical force field boundary around
the object that should interact with the particles. The Falloff Gradient Ramp
directly beneath this dropdown menu will control the influence falloff. This
falloff is calculated from the center of the sphere to the outer edge. The gradient
ramp reads left to right and corresponds as follows: the left edge of the gradient
represents the center of the sphere, while the right edge of the gradient represents
the outer edge of the sphere.
Cylinder - Selecting this option creates a cylindrical force field boundary
around the object that should influence the particles. In this case, both falloff
gradients are used to control the Motion Inheritance influence falloff in the X
and Y directions.
Radius - This spinner defines the radius of the objects force field boundary (the
volume of influence).
Gradient Ramp - When Distance Type is set to Sphere, you may set the
influence falloff from center to the outer edges of the sphere volume. The
gradient works like this: The left hand side of the gradient controls the influence
amount in the center and the right hand side of the gradient controls the
influence amount at the outer edges of the volume. A pure white color will use
the value as it is set in the Inheritance % parameter. A pure black color will
switch off any object influence. All grays cale values in between both colors will
create intermediate influence amounts.
Cylinder Axis - These three options allow you to control the orientation of the
cylinder volume.
IMPORTANT: You MUST set the Distance Type to Cylinder to make these
parameters work. The cylinder volume is then displayed in the view port as a
wire frame cylinder.
Cylinder Height - This parameter controls the height of the cylindrical volume
of influence. You can see in the view ports the actual size of the volume as it is
displayed as a wire-frame cylinder around the object that is chosen to interact
with the particles.
Gradient Ramp - Use the gradient ramp below the Cylinder Height spinner to
set the falloff amount of the influence the object has along the length of the
cylinder volume as shown below.
Cylinder Scale - This gradient controls the falloff amount as seen from the
center to the outer radial edges of the cylinder (see the illustration below). The
gradient colors/ramps work like described above.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Orbit
Orbit is an all purpose Dynamics node that forces particles on a circular path
around a center supplied by the Position input of this node. Many advanced
effects can be created by this Dynamics node.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) this input data stream reads in the currently selected particle
group and uses those for the Node functions.
Position - (Position) sets the center position of the orbit effect. Note you may
input here multiple particle positions as well.
Alignment - (Alignment) specifies the rotation or alignment in space around the
Position of the object to orbit. Feeding the Position and Alignment from a Node
Helper node will make sure that the orbit stays always in synch with the moving
or animated object.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
No Operator Outputs.
Rollout Menu
Speed - sets the speed the particles travel around the center position.
Variation % - adds a variation to the Speed amount so that not all particles orbit
around the center Position at the same speed. The higher this value the more
variation will be.
Angle Speed - when checked, the Speed value is interpreted as an angular speed.
This has the advantage of setting a constant rotational speed independent of the
distance the particles have to travel.
Phase - controls the phase around the orbit. Changing this value will shift the
particles on their orbit forward or backward.
Variation % - adds a random variation on top of the Phase value. Higher values
will create more random phase values per particle.
Alignment Variation % - randomizes the Alignment data that is fed into the
Alignment port. Higher values will create more randomness in the Alignment
data.
Position Variation % - adds a random value onto the positional information that
is fed into the Orbit Node.
Center Variation % - randomizes the orbit positions, the higher this value the
more randomized the positions will be.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PathFollow Operator
The PathFollow operator lets you choose one or multiple paths and make the
particles follow this path. The coolest feature however, is that you can not only
select a spline object as a path, you may also select an edge or edge loop to act
as a path on a surface!
Operator Inputs
ON (Bool) - This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time (Time) - This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle (Particle) - This input data stream reads in the currently selected particle
group that is to have its particles follow the selected node. The data stream
MUST be connected and will be highlighted yellow if it is not.
Path ID (Integer) - lets you select a path for the active particles that they should
follow. This is needed if more than one path is selected.
Type (Integer) - used to switch between Absolute follow or relative
0 = Absolute
1 = Relative
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
No Operator Outputs.
Rollout Menu
Up - Click on the UP button to move a selected object up within the Follow-Path
list window.
Down - Click on the DOWN button to move a selected object down within the
Follow-Path list window.
Remove - Click on the Remove button to remove a selected object from the
Follow-Path list window.
Pick Object - Click on the Pick Object button to enter the pick object mode.
Once active, you can select any valid 3ds Max object and use it as a path. Keep
in mind that you can!
NOTE: Be aware that you can pick multiple objects at once. To pick more than
one object, you need to use the H-key to bring up the standard Select by Name
dialog within 3ds Max. This will let you perform a multi-select operation. When
the resulting particles are birthed, be aware that the objects will be assigned to
particles as they are stacked in the list window.
Hide - click this button to Hide/Unhide the selected path object in the viewport.
Follow Menu Section
Absolute - check this option to make the particles lock onto the exact path
position of the selected object.
Relative - when checked, the particles will follow the selected path object
relative to their current position.
Setting Up Menu Section
Start Position - used to add a positive or negative offset to the starting position.
You might have created circular paths (a roller coaster for example), in such a
case the starting position is not really defined. Use this parameter to shift the
starting position of the particles forward or backward along the path.
Variation - specifies a random variation that will be added or subtracted on top
of the Start Position value.
Distance - offsets the particles away from the path. Particles can be shifted up or
down from the path follow object. In the case of a selected mesh object with an
edge selection, the attached surface normal of the selected edge defines the
direction of the shift.
Variation - adds a random value to the Distance parameter. This can be used to
prevent an unnatural equidistant look when all particles have the same distance
form the path.
Rotation - lets you rotate the particles around the path follow object.
Variation - adds a random variation to the Rotation value for each particle
Initial Speed Menu Section
From Particle - check this option to use the initial speed of the particle as a start
for the follow operator.
Defined - when checked, the parameters described below will be used to define
the initial particle speed for the path follow operator.
Speed - defines the initial Speed of the particle that follow the path.
Variation % - adds some random variance to the Speed value.
Alignment Menu Section
Vertical X,Y,Z - sets the vertical (90? perpendicular to path) orientation of the
particles that follows the path. Lets say you see a circular path while looking
from the top viewport, vertical would mean the direction poking into your eye!
Or if you sit at the particle's position it is the UP vector.
Invert - when checked , the orientation of the selected axis becomes inverted.
Path X,Y,Z - defines the path's direction in relation to the particle. Imagine
sitting in a roller coaster, the path-axis would define the driving direction of your
particle.
Invert - check this option to invert the path-axis setting.
Multiple Particles Menu Section
PathFollow can be used to make multiple particles follow a path in an ordered
manner like a roller coster or train. This operator lets you set a fixed or a
variable distance between each particle.
From Particle - when checked, the original object/particle distance will be used
to place and move the particles on the path.
Defined - check this option to specify a fixed and locked distance between the
particles following the path.
Variation % - adds a random variation on top of the Distance value.
Group - select the group that will be used to define a fixed or variable distance
between particles. Specifying a group is only needed when Connected is
activated; in all other cases the particle input of the operator is enough. On the
other hand if a group is specified, no particle input is needed.
Connect - check this option to lock the particle to a fixed distance as defined in
the Distance parameter. All particles following this path will be locked to this
certain distance.
Special Case: Selected Edge Loop
PathFollow offers one special case for defining a follow path for particles, any
mesh edge selection can serve as a follow path. It should be clear that the edge
selection must form a continuos path along the objects surface.
As you can see in the example below the "inner" edge loop was selected to form
the path the particles should follow.
What is this used for ?
Using a continuos selection of edges in a mesh offers many advantages over
simple spline paths. Using the mesh supplies important information about the
orientation and rotation of the path in 3D Space. Creating a roller coaster
"looping" or even a cork screw looping is not possible in 3ds Max by using
splines, only. Right now, only a mesh can supply the correct 3D orientation in
space to make a roller coaster wagon follow the exact loops.
Standard spline objects as they are used in 3ds Max do not have normals
attached to them, this makes it impossible to align an object along a "twisted"
spline for example.
thinkingParticles will "detect" the edge selection and it will automatically use the
selected edges as a spline path to make particles following it.
Forces like gravity, friction or wind are legal to use with this path particle path
constraint. Those forces will be added in a physically accurate way, making it
possible to do a real world roller coaster simulation!
Path Rollout
Path - check this option to define the selected object to be already a path (Spline
objects)
Selected Edges - when checked, the selected object must be a mesh with an
active edge selection. Those selected edges will become the path.
Invert - check this option to reverse the path direction.
Base Axis X,Y,Z - select either axis to define the main alignment that should be
used for all further particle alignment processing.
Rotation - specify any angle, to freely rotate around the perimeter of the path.
Ticks per Unit - defines the maximum resolution of the time samples possible
along the path length. This value is only used when a mesh object, with selected
edges, is chosen as a path provider.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PAttach
PAttach is a very useful dynamics operator that allows you to "attach" one
particle to another.
The easiest way to think of the From/To relationship is as a Child/Parent
relationship where "From" is the Child and "To" is the Parent. This conforms to
the standard Max hierarchical linking approach where the Parent's
position/rotation/scale directly affects all linked/attached children. So the "From"
particle will be attached to the "To" particle and will inherit its transform matrix.
Be aware that using PAttach with SC and ShapeCollision may cause unwanted
errors.
For PFlow users, PAttach is similar to the Lock/Bond operator.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle From - this input port is used to define the "incoming" particle that
needs to be attached to the parent
Particle To - defines the "master" particle that acts as a parent for other
particles.
Operator Outputs
Acceleration - output the current acceleration of the "attaching" particle. This
might be used to detach a particle again based on it's acceleration it got from the
attach operation.
Rollout Menu
Absolute - check this option to directly link the objects.
Relative - transformations are done relative to the original position.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PhysX Operator
thinkingParticles offers an additional Rigid Body Dynamics Operator; a true
particle shape dynamic collision detection engine. In addition to the highly
accurate and production proven Shape Collision the PhysX operator offers full
support for the AGEIA Dynamics system and it will support in the future the
upcoming PhysX hardware rigid body chip. The Hardware is to expected to
accelerate rigid body collision by a huge amount.
While it is possible to use multiple
PhysX collision operators in a
DynamicSet, it is highly
recommended that you use as few
operators of this type as possible.
The memory requirements are huge
and they increase with each addition
of that operator type.
Because of the academically challenging nature of the subject matter, it is
assumed that you have at least some basic knowledge of computer based physics
and dynamic simulations. If not, it is recommended that you get hold of a good
book and familiarize yourself with the concepts of computer based physics
simulations.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Floor Node - (Node) This input data stream is used to specify through a node
helper for example a 3D mesh as a floor collision object. A floor object is
automatically treated as immovable with an infinite mass.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
Collision - (Bool) Whenever a collision event occurs, this output data stream
will return true as its value. In all other non-colliding situations, the output will
report false as the value.
Collision Particle - (Particle) This output data stream supplies the current
particle information. Use this to modify specific particle properties.
Collision Position - (Position) This output data stream provides the current
interpolated collision point.
Be aware that this point may be
highly inaccurate as face to face
collisions usually happen on areas
and not at one individual point. Also,
when objects come into contact and
start sliding, the collision point will
be generated at all times over and
over again.
Collision Normal - (Normal) This output data stream outputs the interpolated
normal of the calculated collision point.
Frozen - (Bool) This output data stream holds the frozen status of the particles,
as determined by the Physics rollout. When particles are considered "frozen" or
"inactive", this value will be true. When particles are actively moving, this value
will return false.
Rollout Menu
GroupA - This drop-down list selects the particle collision partners for the floor
or inter-particle collision.
All Physics based parameters are set
and controlled within the particle
group itself. Select the relevant
particle group in the particle group
tree view to access the dynamic
properties of a particle group.
Particle Group
Size As Mass - Activate this checkbox to enable an automatic mass calculation
that is based on the size of the particle. For example, a particle with a size of 2.0
will be treated as 2 Kg.
Floor
Optimize - Activate this checkbox to enable the parameters found in the
Optimize rollout. The face count of the colliding meshes will be automatically
reduced. This face reduction is only done "internally" for the collision objects
and not for the rendering mesh. This option may speed up the dynamic
simulation enormously. However, if overdone the results may be inaccurate.
Restitution - Use this parameter to control the bounce value between the floor<>particle collisions. Higher values will make the particles lose less energy per
bounce. Be aware that values greater than 100 will create extra energy and the
particles will gain energy with each bounce.
Dynamic Friction - This spinner sets the friction (you can also think of it as
"power loss") between particles and the floor when they impact with each other.
Please note that this power loss ONLY happens on impact.
Static Friction - This spinner defines the friction between particles and the floor
when they are in contact (sliding). Higher values will make the particles slide
less.
Velocity Friction - This spinner defines the relative speed difference between
two particles. A slower particle will force a faster one to slow down. This can be
used to simulate viscous substances like molasses.
Recorder
thinkingParticles allows you to record particle dynamics. It is always a good idea
to use this feature whenever a simulation seems to be perfect for the job.
Recording the particles as they bounce around will make life easier at a later
rendering stage. Playback from hard disk is also usually much faster than
calculating the solution each time you play back the particle collisions.
Select Record File - Click this button to bring up a standard Windows Save
dialog. Any legal name and path can then be specified to save the recorded
particle simulation.
Stop, Play, Record - These buttons are fairly self-explanatory. The Stop button
to resets the recorder status. The Play button turns the recorder into playback
mode and will play back the recorded file on hard disk as you scrub the 3ds Max
frame slider in the viewports. The Record button will switch the recorder into
record mode. With the record button pressed, clicking the Play button on the 3ds
Max timeline will start the recording and simulation of the particle dynamics.
After the last frame has been reached, the recording automatically stops and
turns into Play mode to show you the results.
Active Time Segment / Range - This is a standard 3ds Max control that lets
you choose whether you want to record out the entire particle animation, or just
a specified range of frames as defined within the two spinners.
Optimize Rollout
This rollout is responsible for adjusting the degree of optimization for the
particle collisions.
Off Under Faces - If an object that is being sent to be optimized has fewer faces
than the threshold value set in this spinner, it will not be processed for
optimization and ignored. This does not affect it's participation within the
simulation, it simply removes it from the optimization routines.
Face Thresh - This spinner sets the threshold angle used to determine which
faces are collapsed during the optimization process. Low values produce less
optimization but better approximations of the original shape. Higher values
improve optimization, but are more likely to result in faces that render poorly as
you get more degenerate triangles. (see Bias below for information on how to
control this).
Edge Thresh - This spinner sets a different threshold angle for open edges
(those that bound only one face). A low value preserves open edges. At the same
time you can apply a high Face Threshold value to get good optimization.
Bias - This spinner's value helps eliminate the skinny or degenerate triangles that
can occur during optimization, which in turn can cause simulation and rendering
artifacts. Higher values keeps triangles from becoming degenerate. The default
of 0.1 is generally considered enough to eliminate the skinniest triangles, while a
value of 0.0 turns the Bias setting off.
Max Edge Len - This spinner specifies the maximum length beyond which an
edge cannot be stretched when optimized. When Max Edge Len is 0, it has no
effect. Any value greater than 0 specifies the maximum length of the edges.
Along with Bias, this control helps you avoid creating long skinny faces while
optimizing.
Preserve Smooth Boundaries checkbox - Optimizes an object and maintain its
smoothing. When turned on, allows only faces that share at least one smoothing
group to collapse.
Physics Rollout
Skin Width - specifies how much objects can inter penetrate, as opposed to how
much they are separated. This value is specified as a percentage based on the
smallest value of the object's bounding box.
Example:
A Skin Width value of 1% would create the following allowed object inter
penetration:
Lets say a cube with the dimensions of 10,20,20 is involved in a collision and 10
is the smallest bounding box value and 1% means that the other object will
penetrate this cube with a maximum of 0.1 3ds max units.
Why do we need Skin Width ?
One way to deal with inaccuracies within physics simulations when stacking
objects, is by letting them slightly interpenetrate each other. The maximum
interpenetrations allowed between objects can be globally regulated using Skin
Width parameter. Clearly, a lot of interpenetration is visually undesirable.
However, avoiding interpenetration between colliding objects is even worse,
because objects may repel each other to the point where they separate, and then
fall back down on each other. Within an animation sequence this will lead to
visible "dancing" between objects.
Finding a good balance (a good value for Skin Width) for interpenetration
between colliding objects depends on many things such as the size of the objects
involved (so that the interpenetrating region is visually negligible) but also on
the stability of the simulation, which is usually governed by the gravity setting as
well as the sub-frame sampling. (Lower gravity and bigger sub-frame sampling
values typically result in more stable simulations.)
Velocity Threshold - sets the minimum speed an object needs to fall below to
become treated as frozen or inactive. Be aware that other objects interacting with
a sleeping one may change this status when the impact creates a velocity higher
than this value.
Rotation Threshold - defines the minimum rotational speed by which an object
is treated as frozen or inactive. As is the case with the Velocity Threshold, be
aware that other objects interacting with a sleeping one may change this status
when the impact creates an angular velocity higher than this value.
Bounce Threshold - a collision with a relative velocity below this value will not
create a bounce. This can be used for example to reduce jittering for object on a
ground plane.
Max. Angular Velocity - sets the maximum angular velocity permitted for an
object; because for various internal computations, very quickly rotating objects
introduce error into the simulation which leads to undesired results.
Example:
Objects shaped like a pencil for example are difficult to simulate because they
can store a lot of energy while rotating around a short axis, which is then
converted to a very high rotational velocity when they start to rotate around a
longer axis. High rotational velocities can lead to problems because certain
linear approximations of the rotational motion fail to hold. For this reason the
dynamics engine of PhysX automatically limits the rotational velocity of a body
to a user definable maximum value. Because this may prevent intentional fast
rotation in objects such as wheels, the user can override this value.
Penalty Force - defines the power used to move interpenetrating objects away
from each other. Be careful with high values, too high values can easily lead to
unwanted explosions.
Activate All checkbox - This checkbox will "wake up" frozen fragments after
they have been deactivated through either by Velocity Threshold or Rotational
Threshold. This setting can be helpful when working with fragments since
frozen particles don't respond to space warps.
Solver Iteration - sets the number of sub-steps to be used to estimate the real
collision point of colliding objects. The lower this number, the faster the
simulation will run. However, lower values would also mean less accurate
results. In most situations, you can keep this value between 5-10, while in
exceptionally complex scenes, you can try to set a value as high as 90 to get
more accuracy.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Position Follow Operator
The Position Follow Operator gives you the built-in capability to have your
particles seek a specific goal. By utilizing this operator, you can cause flocking
behavior where the selected particle Group will track and try to reach another
selected object or node.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have its particles follow the selected node. The data stream
MUST be connected and will be highlighted yellow if it is not.
Position - (Position) This input data stream reads in the currently positional data
that is to be used as the target for the particles to try and reach. The data stream
MUST be connected and will be highlighted yellow if it is not.
Type - (Integer) This input data stream takes an integer value that represents the
Type of Position Follow method the particles will use. Valid input values are 0
and 1, where:
0 = Constant Speed
1 = Spring
Speed - (Scalar) This input data stream is used to override the Speed spinner
value.
Laziness - (Scalar) This input data stream is used to override the Laziness [%]
spinner value.
X/Y/Z Offset - (Scalar) These input data streams are used to override the
XOffset, YOffset and ZOffset spinner values respectively.
X/Y/Z Lock - (Bool) These input data streams are used to override the X / Y / Z
Lock Axis checkbox controls.
Operator Outputs
No Operator Outputs.
Rollout Menu
Constant Speed - Choosing this option forces the particles in the attached
particle Group to try and follow the selected object at a constant rate of speed.
They will continue to seek the position (X,Y,Z coordinate) that represents the
pivot of the selected node.
Speed - The Speed spinner is used to set the relative speed at which the particles
will attempt to get to the position provided. Higher values will result in faster
seeking by the particles.
Spring - Choosing this option causes the seeking to become more spring-like less accurate initially (based on the Laziness [%] spinner) and prone to
overshooting and undershooting the positional target.
Laziness [%] - This spinner sets how much overshoot and undershoot the
particles will exhibit when trying to seek their target position. Higher values
produce particles that are prone to "miss" the target, while lower values will
force more accuracy into the seeking ability. Be aware that a value of 100% here
is equivalent to turning off the Position Follow operator.
X/Y/Z Offset - These three spinners provide a combined offset value (XYZ
point in space) that is used relative to the selected node position. So if the node
you're seeking is resting with it's pivot point at XYZ=1, 2, 9, and you set these
Offset spinners to XYZ= 1, 2, 9, then the particles will attempt to seek the
positional target of XYZ = 2, 4, 18.
X/Y/Z Lock Axis - These three checkboxes serve to limit the axes along which
the particles can seek the target position. They can be used independently or in
combination to limit the effect.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Repulsion Bounce Operator
Repulsion Bounce is an operator that lets you create particle dynamic effects
between two different particle Groups or multiple particles within one group. A
particle bounce, repulsion or rotation is initiated as soon as ON Input Data
Stream receives a true value. In many cases, you would use a Distance Condition
or a PPassAB Initiator to trigger the Repulsion Bounce operator, but most other
conditions would also work.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
ParticleA - (Particle) This input data stream reads in the first selected particle
Group that is to be used as the source for particle collision. This data stream
MUST be connected and will be highlighted yellow if it is not.
ParticleB - (Particle) This input data stream reads in the second selected particle
group that is to be used as the source for particle collision. This data stream
MUST be connected and will be highlighted yellow if it is not.
You can pipe the same particle
Group into both inputs above to have
particles within one Group interact.
Repulsion - (Scalar) This input data stream is used to override the Repulsion
spinner value.
Bounce - (Scalar) This input data stream is used to override the Bounce spinner
value.
Elasticity - (Scalar) This input data stream is used to override the Bounce Elast.
spinner value.
Mass - (Scalar) This input data stream is used to override the Mass spinner
value.
Rotation - (Scalar) This input data stream is used to override the Rotation
spinner value.
Operator Outputs
No Operator Outputs.*
Rollout Menu
Repulsion - Repulsion is an effect where the particles pull or push (depends on
the positive or negative value) each other. A value of 1.0 will pull the particles
away from each other with the same amount of energy (speed) while larger
values will add energy to the repulsion effect and smaller values will subtract
energy from the repulsion effect.
Bounce - Bounce is a dynamic effect that usually occurs when two or more
particles collide. Depending on various other parameters (Mass,Speed . . .) the
effect may also be used to accelerate particles in their direction of travel when
they collide. The Bounce parameter works as an energy multiplier value. A
value of 1.0 means that the unmodified energy amounts are exchanged. Values
greater than 1.0 will add energy (speed) when a collision occurs.
Bounce Elast. - There are two ways of collision handling in the mathematical
world of physics. One, represents a perfect collision (Full Elastic Bounce) and
the other represents an imperfect collision (Non-Elastic Bounce). A value of 1.0
creates a perfect mathematical bounce with no loss of energy. Values below 1.0
reduce the amount of energy when a collision occurs and vice versa. The
exchange of energy is defined by this value. How much energy do both collision
partners have afterwards? For example, a value of 0.5 means that each particle
gets 1/2 of the collision impulse.
Mass - Without proper mass handling, any dynamic simulation will fail or look
unreal. thinkingParticles handles particle masses in a physically correct manner.
All dynamic features are based on the energy a particle may create by its
properties (mass and speed). This multiplier value increases the mass difference
between the colliding parties without changing the actual Masses of the
individual particles.
Rotation - The Rotation spinner applies a rotational value to particles that are
repulsed due to collisions with other particles. A value of 0.0 will cause particles
that have collided to not spin at all, while values higher than 0.0 will create
rotational values on the collided particles.
Back to Dynamics Nodes
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Rolling Operator
The Rolling Operator can be used to simulate two dynamic effects; the first is
used to simulate a simple, natural rolling motion for each particle. The second
effect that can be created with this operator is forcing a particle to stretch out by
based on the speed it travels.
Natural rolling means that each particle's Edge Length is measured and is used
to control the individual rolling speed. Bigger objects will roll slower than
smaller ones.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have its particles be affected by rolling forces. The data stream
MUST be connected and will be highlighted yellow if it is not.
Type - (Integer) This input data stream takes an integer value that represents the
Rolling type that will control the particles' rotational Primary Axis. Valid input
values are 0 and 1, where:
0 = Rolling
1 = Direction of Travel
Laziness - (Scalar) This input data stream is used to override the Laziness
spinner value.
Source - (Integer) This input data stream takes an integer value that represents
the Primary Axis for the rolling dynamics. Valid input values are 0 through 2,
where:
0 = X-Axis
1 = Y-Axis
2 = Z-Axis
Invert - (Bool) This input data stream is used to override the Invert checkbox
state. Be aware that this stream is only valid when the Type of rolling is set to
Direction of Travel.
Stretch - (Scalar) This input data stream is used to override the Stretch spinner
value. Be aware that this stream is only valid when the Type of rolling is set to
Direction of Travel.
Axis - (Direction) This input data stream is used to override the Invert checkbox
state. Be aware that this stream is only valid when the Type of rolling is set to
Rolling.
Operator Outputs
No Operator Outputs.
Rollout Menu
Rolling - When this option is chosen, you will be using a simple rolling
algorithm to determine the amount of roll imparted to the particles you've
selected.
Direction of Travel - Select this option when you want to have the rotation
controlled by the vector formed by the direction in which each particle is
moving. When selected, it will also activate both the Primary Axis selection and
the Stretch parameter.
Laziness - Values greater than zero will simulate an effect like momentum of
mass for each particle. The particles need some time to accelerate until they roll
at their maximum speed. A 0.0 value makes the particles roll immediately after it
receives a True condition.
P Axis - When Direction of Travel is selected, you are able to select a Primary
Axis for rolling. With P-Axis, you may set any local particle rotation axis to be
used for this effect.
Invert - As Albert Einstein noted some time ago: Everything is relative. This
includes the local axis of the particle. Use the Invert button when you want to
use the negative value of the selected P-Axis.
Stretch - When this spinner's value is greater than 0.0, the particles will stretch
along the movement vector dependant on their speed. Specifically, the Stretch
value specifies the percentage of their length per each unit of the Speed setting.
Therefore, if you set this to 2 while Speed is set at 10, the particles are stretched
20 percent longer than their original size along the axis of their travel. This
spinner is only enabled when Direction of Travel is chosen. Negative values are
also allowed and this will create a squeezing effect on the particles.
Rolling Plane Axis
X / Y / Z Axis - Specifies the rolling vector of the X, Y, and Z axes, respectively.
These spinners and the Variation spinner are only enabled when Rolling is
chosen.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Shape Collision Operator
thinkingParticles offers a unique feature in the Shape Collision Operator; a true
particle shape dynamic collision detection engine. When used in concert with the
well-known automatic fracture system that comes with thinkingParticles, you
can create impressive life-like animations quickly and effectively.
As a testament to the power that comes with the Shape Collision operator, it was
successfully used in the 2010 blockbuster movie 2012 and was instrumental in
creating the destruction effects in the various shots of the movie.
While it is possible to use multiple
Shape Collision operators in a
DynamicSet, it is highly
recommended that you use as few
operators of this type as possible.
The memory requirements are huge
and they increase with each addition
of that operator type.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Floor Node - (Node) This input data stream is used to specify through a node
helper for example a 3D mesh as a floor collision object. A floor object is
automatically treated as immovable with an infinite mass.
Voxel Grid - (Integer) This input data stream is used to override the Voxel Grid
that is used on the selected particle Group. This value is normally set within the
selected Group's Shape Collision Dynamics rollout.
Edge Samples - (Integer) This input data stream is used to override the Edge
Samples value that is used on the selected particle Group. This value is normally
set within the selected Group's Shape Collision Dynamics rollout.
Optimize - (Bool) This input data stream is used to override the Optimize
checkbox setting that is used on the selected particle Group. This value is
normally set within the selected Group's Shape Collision Dynamics rollout.
Elasticity - (Scalar) This input data stream is used to override the Elasticity
value that is used on the selected particle Group. This value is normally set
within the selected Group's Shape Collision Dynamics rollout.
Dynamic Friction - (Scalar) This input data stream is used to override the
Dynamic Friction value that is used on the selected particle Group. This value is
normally set within the selected Group's Shape Collision Dynamics rollout.
Static Friction - (Scalar) This input data stream is used to override the Static
Friction value that is used on the selected particle Group. This value is normally
set within the selected Group's Shape Collision Dynamics rollout.
Size As Mass - (Bool) This input data stream is used to override the Size as
Mass checkbox setting within the Particle Group of Controls.
Floor Voxel Grid - (Integer) This input data stream is used to override the Voxel
Grid spinner value in the Floor Group of Controls within the Shape Collision
Operator.
Floor Optimize - (Bool) This input data stream is used to override the Optimize
checkbox setting within the Floor Group of Controls within the Shape Collision
Operator.
Floor Elasticity - (Scalar) This input data stream is used to override the
Elasticity spinner value within the Floor Group of Controls within the Shape
Collision Operator.
Floor Dynamic Friction - (Scalar) This input data stream is used to override the
Dynamic Friction spinner value within the Floor Group of Controls within the
Shape Collision Operator.
Floor Static Friction - (Scalar) This input data stream is used to override the
Static Friction spinner value within the Floor Group of Controls within the
Shape Collision Operator.
OPT Face Threshold - (Angle) This input data stream is used to override the
Face Thresh. spinner value within the Shape Collision Floor Node.
OPT Edge Threshold - (Angle) This input data stream is used to override the
Edge Thresh. spinner value within the Shape Collision Floor Node.
OPT Bias - (Scalar) This input data stream is used to override the Bias spinner
value within the Shape Collision Floor Node.
OPT Max Edge Length - (Scalar) This input data stream is used to override the
Max Edge Len. spinner value within the Shape Collision Floor Node.
OPT Preserve Smooth Boundaries - (Bool) This input data stream is used to
override the Preserve Smooth Boundaries checkbox setting within the Shape
Collision Floor Node.
OPT NumFaces - (Integer) This input data stream is used to override the Off
Under Faces spinner value within the Shape Collision Floor Node.
Velocity Friction - (Scalar) This input data stream is used to override the
Velocity Friction value that is used on the selected particle Group as it interacts
with the Floor Node. This value is normally set within the selected Group's
Shape Collision Dynamics rollout.
PHY Collision Iteration - (Integer) This input data stream is used to override
the Collision Iteration spinner value within the Physics rollout of the Shape
Collision Operator.
PHY Contact Iteration - (Integer) This input data stream is used to override the
Contact Iteration spinner value within the Physics rollout of the Shape Collision
Operator.
PHY Deactivation Time - (Scalar) This input data stream is used to override the
Deactiv. Time spinner value within the Physics rollout of the Shape Collision
Operator.
PHY Velocity Threshold - (Scalar) This input data stream is used to override
the Velocity Thresh. spinner value within the Physics rollout of the Shape
Collision Operator.
PHY Rotation Threshold - (Angle) This input data stream is used to override
the Rotation Thresh. spinner value within the Physics rollout of the Shape
Collision Operator.
PHY Contact Type - (Integer) This input data stream takes an integer value that
represents the Collision algorithm the particles will use. Valid input values are 0
through 1, where:
0 = Contact Type 1
1 = Contact Type 2
PHY Activate All - (Bool) This input data stream is used to override the
Activate All checkbox setting within the Physics rollout of the Shape Collision
Operator.
Operator Outputs
Particle - (Particle) outputs the current particle information for the colliding
particle. Use this to modify specific particle properties.
Collided - (Bool) this output data stream will return true whenever a collision is
happening. In all other non-colliding situations, the output will report false as the
value.
Collision average Position - (Position) provides the current interpolated
collision point.
Be aware that this point may be
highly inaccurate as face to face
collisions usually happen on areas
and not at one individual point. Also,
when objects come into contact and
start sliding, the collision point will
be generated at all times over and
over again.
Collision average Normal - (Normal) outputs the interpolated normal of the
calculated collision point.
Frozen - (Bool) outputs the frozen status of the particles as is determined by
within the Physics rollout. When particles are considered "frozen" or "inactive",
this value will be true. When particles are actively moving, this value will return
false.
Double Star = Secondary Initiator Outputs
Double Star Outputs (**) behave like the Top-Level Initiator outputs (*), these
outputs activate connected nodes for evaluation. It is important to understand
that all connected nodes will be evaluated. However, as this is a secondary
Initiator output (**) it can not be combined with the Top Level Output (*) at the
same time. The main rule still applies: Never use 2 Initiators on the same node
or wiring.
Number of Collisions - (Integer) holds the total number of all collisions that
happened for a particle. A collision may happen multiple times, especially with
sliding objects (surface - surface). Note, this is a secondary Initiator output that
can not be combined with the top level Initiator outputs at the same time. Either
the Top-Level will be active or the low level department but not both at the same
time.
Coll Index - (Integer) outputs the current index number of the collision. This
might be used to get the current progress of the collision evaluation. Collision
index can become as big as the Number of Collisions value, if this is reached the
collisions are done.
Coll Particle A - (Particle) outputs the particle A of the collision pair. This
output is always evaluated before particle B!
Coll Particle B - (Particle) outputs particle B of the collision pair.
Coll Floor - (Bool) when a collision with the floor object happens, this output
will be set to True.
Coll Position - (Position) outputs the real world position Collision point.
Coll Normal - (Normal) outputs the normal of the calculated collision point.
Coll Position A - (Position) outputs the collision position of Particle A in local
object space.
Coll Position B - (Position) outputs the collision position of Particle B in local
object space.
ShapeCollision Rollout
The Shape Collision operator is used to control all true shape collision dynamics
in thinkingParticles.
Particle Group of Controls
Group - this drop-down list selects the particle collision partners for the floor or
inter-particle collision.
All Physics based parameters are set
and controlled within the particle
group itself. Select the relevant
particle group in the particle group
tree view to access the dynamic
properties of a particle group.
Deflector - used to choose the deflector objects. Important those objects will be
treated as unyielding all the time regardless of their local physics settings. One
use would be to use recorded particles as deflectors.
Size As Mass - Activate this checkbox to enable an automatic mass calculation
that is based on the size of the particle. For example, a particle with a size of 2.0
will be treated as 2 Kg.
Floor Group of Controls
Voxel Grid - This spinner defines the number of cubic subdivisions to wrap the
object's outer boundaries within.
Optimize - Activate this checkbox to enable the parameters found in the
Optimize rollout. The face count of the colliding meshes will be automatically
reduced. This face reduction is only done "internally" for the collision objects
and not for the rendering mesh. This option may speed up the dynamic
simulation enormously. However, if overdone the results may be inaccurate.
Elasticity - Use this parameter to control the bounce value between the floor<>particle collisions. Higher values will make the particles lose less energy per
bounce. Be aware that values greater than 100 will create extra energy and the
particles will gain energy with each bounce.
Dynamic Friction - This spinner sets the friction (you can also think of it as
"power loss") between particles and the floor when they impact with each other.
Please note that this power loss ONLY happens on impact.
Static Friction - This spinner defines the friction between particles and the floor
when they are in contact (sliding). Higher values will make the particles slide
less.
Velocity Friction - This spinner defines the relative speed difference between
two particles. A slower particle will force a faster one to slow down. This can be
used to simulate viscous substances like molasses.
Recorder
thinkingParticles allows you to record particle dynamics. It is always a good idea
to use this feature whenever a simulation seems to be perfect for the job.
Recording the particles as they bounce around will make life easier at a later
rendering stage. Playback from hard disk is also usually much faster than
calculating the solution each time you play back the particle collisions.
Select Record File - Click this button to bring up a standard Windows Save
dialog. Any legal name and path can then be specified to save the recorded
particle simulation.
Simulate, Play, Record - These buttons are fairly self-explanatory. The
Simulate button turns the recorder into playback mode and will play back the
recorded file on hard disk as you scrub the 3ds Max frame slider in the
viewports. The Record button will switch the recorder into record mode. With
the record button pressed, clicking the Play button on the 3ds Max timeline will
start the recording and simulation of the particle dynamics. After the last frame
has been reached, the recording automatically stops and turns into Play mode to
show you the results.
Active Time Segment / Range - This is a standard 3ds Max control that lets you
choose whether you want to record out the entire particle animation, or just a
specified range of frames as defined within the two spinners.
Redraw Views - when checked, the 3ds Max view ports will be updated while
simulating. Depending on scene comlexity it might be a good idea to turn off
View Updates while simulating.
Optimize Rollout
This rollout is responsible for adjusting the degree of optimization for the
particle collisions.
Off Under Faces - If an object that is being sent to be optimized has fewer faces
than the threshold value set in this spinner, it will not be processed for
optimization and ignored. This does not affect it's participation within the
simulation, it simply removes it from the optimization routines.
Face Thresh - This spinner sets the threshold angle used to determine which
faces are collapsed during the optimization process. Low values produce less
optimization but better approximations of the original shape. Higher values
improve optimization, but are more likely to result in faces that render poorly as
you get more degenerate triangles. (see Bias below for information on how to
control this).
Edge Thresh - This spinner sets a different threshold angle for open edges
(those that bound only one face). A low value preserves open edges. At the same
time you can apply a high Face Threshold value to get good optimization.
Bias - This spinner's value helps eliminate the skinny or degenerate triangles that
can occur during optimization, which in turn can cause simulation and rendering
artifacts. Higher values keep triangles from becoming degenerate. The default of
0.1 is generally considered enough to eliminate the skinniest triangles, while a
value of 0.0 turns the Bias setting off.
Max Edge Len - This spinner specifies the maximum length beyond which an
edge cannot be stretched when optimized. When Max Edge Len is 0, it has no
effect. Any value greater than 0 specifies the maximum length of the edges.
Along with Bias, this control helps you avoid creating long skinny faces while
optimizing.
Preserve Smooth Boundaries checkbox - Optimizes an object and maintain its
smoothing. When turned on, allows only faces that share at least one smoothing
group to collapse.
Physics Rollout
Collision Iteration - This spinner sets the number of sub-steps to be used to
estimate the real collision point of colliding objects. The lower this number, the
faster the simulation will run. However, lower values would also mean less
accurate results. In most situations, you can keep this value between 5-10, while
in exceptionally complex scenes, you can try to set a value as high as 30 to get
more accuracy.
Contact Iteration - This spinner defines the number of sub-steps to be used
between colliding objects to create a "contact" situation. Face to face contact is
one of the most complex situations to handle for the dynamics engine. Increase
this value to get more realistic simulations.
Contact Type 1 - The physics engine within thinkingParticles offers two
algorithms to handle dynamic simulations. Contact Type 1 is the fastest method
but it may show some inaccuracies when objects need to stay down on the floor
for example. Also face to face direct contact situations are not well handled with
this method.
Contact Type 2 - This contact type provides the more accurate physics engine
that tries to solve many of the well known problems other dynamic engines
show. This takes a bit longer to process, but it creates usually a much more
realistic result.
Deactivation Time - This spinner defines the time-slot a particle is surveyed to
determine whether is it actively moving due to dynamics or simply doing a
stupid "dynamics dance" as it comes to rest. If a particle falls into this time-slot
and it's speed or rotational value is equal or below the ones defined it is
considered sleeping or frozen. Lower values will freeze the particles much faster.
This spinner works in concert with the two spinners below it (Velocity Thresh.
and Rotation Thresh.).
Velocity Threshold - This spinner sets the minimum speed an object needs to
fall below to become treated as frozen or inactive. Be aware that other objects
interacting with a sleeping one may change this status when the impact creates a
velocity higher than this value.
Rotation Threshold - This spinner sets the minimum rotational speed and object
needs to fall below to become treated as frozen or inactive. As is the case with
the Velocity Threshold, be aware that other objects interacting with a sleeping
one may change this status when the impact creates an angular velocity higher
than this value.
Activate All - This checkbox will "wake up" frozen fragments after they have
been deactivated through either by Velocity Threshold or Rotational Threshold.
This setting can be helpful when working with fragments since frozen particles
don't respond to space warps.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Shape Joint
The Shape Joint Node is used to dynamically create linkages between two
particles at arbitrary positions. This node is able to utilize the collision engine
from any one Shape Collision node, enabling full self-collision and collision
with other shapes within the collision node's affected groups.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle From - (Particle) defines the Particle that should become sticky to
another particle. This port MUST be connected and will be highlighted yellow if
it is not.
Particle To - (Particle) defines the particle that should stick onto another.
Position From - (Position) defines the joint Position of the "From" particle.
Position To - (Position) sets the joint position for the "target" particle
Type - (Integer) specifies the type of connection: 0=Spherical
Operator Outputs
No Output available
Rollout Menu
Right now there is no other available choice for this type of node. The options
are:
Collision = None
Type = Spherical Joint
Example
As shown in the sample setup above the Shape Collision node is feeding the
needed information into the Shape Joint node. Particles will stick onto each other
after collision.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Spin Operator
The Spin Operator produces a dynamic effect that usually occurs when an object
is experiencing a force that has an offset from its pivot point. This also includes
objects sliding on a plane, since they too can create rotational motion around any
axis.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have its particles be affected by spin forces. The data stream
MUST be connected and will be highlighted yellow if it is not.
Rotation - (Rotation) This input data stream sets the absolute rotational value of
the particle. The rotation is performed around the axis selected below in this
operator.
Attack Time - (Frame) This input data stream is used to override the Attack
Time spinner value.
Spin Time(s) - (Scalar) This input data stream is used to override the Spin Time
per second spinner value.
Spin Time Variation - (Scalar) This input data stream is used to override the
Spin Time Variation % spinner value.
Phase - (Angle) This input data stream is used to override the Phase deg. spinner
value.
Phase Variation - (Scalar) This input data stream is used to override the Phase
deg. Variation % spinner value.
Bearing Friction - (Scalar) This input data stream is used to override the
Bearing Friction spinner value.
Speed Dependence - (Scalar) This input data stream is used to override the
Speed Dependence spinner value.
Size Dependence - (Scalar) This input data stream is used to override the Size
Dependence spinner value.
Axis Type - (Integer) This input data stream takes an integer value that
represents the Type of Axis that will control the particles' spin. Valid input
values are 0 through 2, where:
0 = Random
1 = Direction of Travel
2 = User Defined
Axis - (Direction) This input data stream is used to override the three Axis
spinner values. This value is only used when the Axis Type is set to User
Defined.
Axis Variation - (Angle) This input data stream is used to override the Variation
deg. spinner value.
Operator Outputs
No Operator Outputs.
Rollout Menu
Use this rollout menu to control the Spin effect of a particle.
Effect
Attack Time - Increase this spinner's value to give the particles a little bit of
reaction time before they reach their full spinning speed. The value is set in
frames.
Spin Speed Controls
Spin Time [s] - This parameter sets the amount of time it takes to do a full 360
degrees rotation for each single particle. For example, a value of 10 for example
will make the particle do a single revolution in 10 seconds. Lower values will
produce faster spin rates, while higher values will create slower spinning.
Variation % - Increase this value to assign different spinning speed rates to each
particle. Higher values will add more variety to the spin speeds between
particles.
Phase deg - This spinner sets the starting angle for a particle. Usually the spin of
a particle starts at a 0 degree angle. You may shift this starting angle with the
help of the Phase parameter.
Be aware that this angular setting is
only applied at the birth time of a
particle.
Variation % - Increase this value to assign a different phase value to each single
particle. Higher values will add more variety to the angular phase when particles
are born.
Bearing Friction - This spinner value sets the time it takes until the particle
starts spinning.
NOTE: This value is only used when any of the Dependence values are set to a
non-zero value. Higher values increase the time it takes to start spinning while
lower values do not have as much effect on the time it takes to start spinning.
Dependence:
thinkingParticles is able to simulate real world effects like spinning particles or
objects. Imagine an exploding car - heavy parts (like the engine block) need
higher energy values to get accelerated by the blast wave while smaller parts
such as doors, screws, tires, debris and so on receive a much higher angular
acceleration from the same blast.
Therefore, the two Dependency types like you connect the spinning speed of a
particle to the size of the particle or even the actual particle speed. The idea
behind this feature is that usually bigger parts (size) are heavier than smaller
parts and also faster moving particles are lighter than slower moving particles.
Speed - This spinner controls how much dependence the spin speed has on the
velocity of the travelling particle. Faster particles will spin faster than their
slower moving counterparts. A value of 1.0 will make the spin speed fully speed
dependent. All values higher than 1.0 will act as a multiplier for the spin speed
dependence.
Size - This spinner controls how much dependence the spin speed has on the
relative sizes of the particle. Smaller particles will spin faster than their larger
counterparts. A value of 1.0 will make the spin speed fully speed dependent. All
values higher than 1.0 will act as a multiplier for the spin speed dependence.
Spin Axis Controls
Choose the spin axis that you want to use for your DynamicSet from this drop
down list.
Random - Choosing this option applies a random axis to each particle as it is
born for spinning.
Direction of Travel - Choosing this option creates a spin axis that is
perpendicular to the direction the particle is traveling. This is good for things
like bullets, where you want the particle to be spinning and not tumbling end
over end. A good way to visualize the direction of travel is to select the particle
Group in the Particle Group Tree View and set the display to Drops. This will
show you the relative paths each particle is taking.
User Defined - If you need to set a specific spin axis for each particle, you can
do so by choosing this option. When you choose this option, the three axis
spinners become active so you can set the axis manually. By default, the particles
rotate around their local Z-Axis (0,0,1). If you want to spin the particles around
their Y-axis you would set the parameters to 0,1,0 and so on.
Variation deg - To prevent all particles from spinning around the exact same
user defined angle, use this spinner to increase the angle variation.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
StdCollision Operator
thinkingParticles supports all of the standard 3ds Max Collision Space Warps
like Deflector among others. Through the use of this StdCollision Operator you
can assign any combination of particle Space Warps to your thinkingParticles
particle system.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that its particles are to be affected by rolling forces. The data stream
MUST be connected and will be highlighted yellow if it is not.
Node - (Node) Connect any operator or Helper node that offers an output data
stream to this input. All collision space warps (such as deflectors) bound to this
node will be used instead of those bound to the thinkingParticles icon. Be aware
that if this option is used, that the Active and Inactive lists within this operator's
rollout will no longer be used, so you won't be able to turn the various space
warps on or off as you could by binding the space warp directly to the icon.
Operator Outputs
No Operator Outputs.
Rollout Menu
In order for a standard 3ds Max
space warp to be visible within the
StdCollision roll-out, you must first
bind it (using the Bind to Space
Warp button) to the thinkingParticles
icon in the viewports as you would
the built-in particle systems.
Activate - To move a bound space warp into the Active list, highlight the name
in the list, then click this button. The space warp will then be moved and will
have an impact on particle behavior.
Deactivate - To move a bound space warp into the Inactive list, highlight the
name in the list, then click this button. The space warp will then be moved and
will not have an impact on particle behavior.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
StdForce Operator
thinkingParticles supports all of the standard 3ds Max Space Warps like Gravity
and Wind among many others. Through the use of this StdForce Operator you
can assign any combination of particle Space Warps to your thinkingParticles
particle system.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to interact with a bound 3ds Max Space Warp. The data stream
MUST be connected and will be highlighted yellow if it is not.
Node - (Node) Connect any operator or Helper node that offers an output data
stream to this input. All force space warps (such as wind or gravity) bound to
this node will be used instead of those bound to the thinkingParticles icon. Be
aware that if this option is used, that the Active and Inactive lists within this
operator's rollout will no longer be used, so you won't be able to turn the various
space warps on or off as you could by binding the space warp directly to the
icon.
Multiplier - (Scalar) This input data stream is used to define a multiplication
value for the active space warps. High values will cause the space warps' effects
to be much more intense, while lower values will cause the space warps' effects
to be more subtle.
Operator Outputs
Force Velocity - (Velocity) This output data stream provides the amount of force
the space warp wants to add to the particle before it is applied. When connected,
the space warp is not applied to the particles but can be added later.
Particle Velocity - (Velocity) This output data stream provides the particle
velocity with the space warp applied.
Rollout Menu
In order for a standard 3ds Max
space warp to be visible within the
StdForce rollout, you must first bind
it (using the Bind to Space Warp
button) to the thinkingParticles icon
in the viewports as you would the
built-in particle systems.
Activate - To move a bound space warp into the Active list, highlight the name
in the list, then click this button. The space warp will then be moved and will
have an impact on particle behavior.
Deactivate - To move a bound space warp into the Inactive list, highlight the
name in the list, then click this button. The space warp will then be moved and
will not have an impact on particle behavior.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Surface Follow Operator
The SurfaceFollow operator constrains particle movement and their positions to
a selected surface. This operator also offers many extra features to create well
defined particle generation based on distances traveled.
Operator Inputs
ON (Bool) - This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time (Time) - This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle (Particle) - This input data stream reads in the currently selected particle
group that is to have its particles follow the selected node. The data stream
MUST be connected and will be highlighted yellow if it is not.
Floor Node - (Node) This input data stream is used to specify through a node
helper for example a 3D mesh as a surface follow object.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
This operator makes particles travel over a defined surface. The operator can
activate various useful outputs once a certain sample length is met. Sample
length is basically a specific fraction of distance the particle has travelled on the
surface. The above described feature can be used for example, to lay equidistant
traces of particles along the path of a particle moving over a surface.
Sub Position - is the position (absolute world) of the particle on the surface at
the current Sample Length value. This position is obtained by sampling the
particle movement at the current sample length.
Sub Velocity - represents the velocity of the particle on the surface at the current
Sample Length value. This velocity is obtained by sampling the particle
movement at the current sample length.
Sub Normal - will be the surface normal of the particle on the surface at the
current Sample Length value. This Surface Normal is obtained by sampling the
particle movement at the current sample length.
Sub Alignment - outputs the alignment of the particle on the surface at the
current Sample Length value. This Alignment is obtained by sampling the
particle movement at the current sample length.
Sub BaryCoordinates - supplies the Barycentric coordinates of the particle on
the surface at the current Sample Length value. This Barycentric coordinates is
gotten by sampling the particle movement at the current sample length.
Sub Face Number - outputs the face number (ID) of the particle on the surface
at the current Sample Length value. This Surface Normal is obtained by
sampling the particle movement at the current sample length.
Sub Sample - carries the value of the number of times the Sample Length
method was executed to reach this particle position
Sub Travel Length - outputs the total length the particle has traveled so far
Rollout Menu
Distance - sets an offset to the surface (floor) for all particles controlled by this
operator.
Variation - adds a random value on top of the Distance parameter for each
single particle controlled by this operator.
Vertical X,Y,Z - sets the vertical (90 degrees perpendicular to path) orientation
of the particles that follows the path. Let's say you see a circular path while
looking from the top viewport, vertical would mean the direction poking into
your eye! Or if you sit at the particle's position it is the UP vector.
Invert - when checked , the orientation of the selected axis becomes inverted.
Travel X,Y,Z - defines the travel direction in relation to the particle. Imagine
sitting in a roller coaster, the path-axis would define the driving direction of your
particle.
Invert - check this option to invert the path-axis setting.
Speed - defines the speed the particles react on alignment changes. The higher
this value the faster the particles will align themselves to the surface they follow.
Sample Length - sets the distance in 3ds Max units at which a "particle sample"
is taken and output to the data streams. A value of 0.0 will deactivate the
distance sampling feature of this operator.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
UDeflector Operator
The UDeflector Operator lets you use any geometry object in your scene as a
deflector for your particle Groups to interact with.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Node - (Node) Connect any operator or helper node that offers an output data
stream to this input. This node will be used to test the particles against a true
surface collision with the connected node object. In order for this operator to
function, you MUST connect a node to this input data stream.
Particle - (Particle) Connect any other particle data stream to this input data
stream port. You MUST connect a particle node to this input data stream in order
for this operator to function.
Operator Outputs
Position - (Position) This output data stream supplies the current particle
position to other operators.
Normal - (Normal) This output data stream supplies the normal vector at the
collision point for further processing.
Alignment - (Alignment) This output data stream provides the current alignment
of the particle to other operators or conditions.
Collision - (Bool) This Boolean value indicates if a collision for the current
particle occurred.
Velocity - (Velocity) This output data stream provides the current particle
velocity to other operators or conditions.
UVW - (Vector) This output data stream holds the current UVW coordinate at
the collision point on the object's surface.
Face ID - (Integer) This output data stream holds the Face ID at the collision
point on the selected object's surface.
Face Coordinates - (Vector) This output data stream holds the Face Coordinates
at the collision point on the selected object's surface.
Rollout Menu
Bounce - This spinner controls the amount of bouncing when a particle hits the
selected object's surface. Values above 1.0 will create energy with each bounce,
while values lower 1.0 will reduce energy per bounce event.
Variation [%] - This spinner sets the amount of variation within the Bounce
parameter. When the value is increased, more particles will bounce differently.
Use this option to get rid of the sterile uniformity in the bounce of particles.
Energy Depend - Use this spinner to force the particle bounce value to a more
"energy based" behavior. In other words, faster particles will bounce more than
slower particles as the value is increased.
Surface [%] - This spinner controls the "spring-off" angle after the collision has
occurred. The higher this value gets the more the angle is tilted towards the
surface of the object. At 100%, particles will appear to be sticking on the surface
like water running down a curved surface.
Chaos [%] - When this spinner value is increased, the bounce off angles become
more random. When chaos equals 0 the bounce off angle will be based on
physically correct rules (incoming angle = outgoing angle). This is a great
feature to simulate uneven terrain with particles bouncing off in all directions.
Friction [%] - Increase this spinner value to add a constant friction to the
particles that collide and slide along the selected object's surface. Higher values
will make the particles slow down very fast when sliding on the object's surface.
Vel Inherit. - This spinner sets the amount of Velocity Inheritance applied to
particles hitting the surface. In contrast to the 3ds Max's own UDeflector,
thinkingParticles's UDeflector is able to work with non-moving particles and
transfer impulses to them.
Random Seed - Change this spinner's value to make identical UDeflector setups
look different from each other.
Collision
Event Only - Activate this checkbox to use the UDeflector operator to detect the
collision event/position only. When active, no "bounce-off" will happen to the
particles hitting the surface. To process this event, the Collison output data
stream can be used to activate other operators connected to this port.
UVW Channel - This spinner sets the UVW channel that should be used to get
the UVW coordinates from the selected object's surface.
Front Side - Select this radio button in order to calculate collision detection on
front faces only. Using this option will speed up the collision engine as it will
only check for front faces.
Back Side - Select this radio button in order to calculate collision detection on
back faces only. Using this option will speed up the collision engine as it will
only check for back faces.
Two Sided - When this radio button is active, the collision engine will perform a
two-sided collision test. Each collision on a surface will invoke a two face test,
and this will result in slower simulation and rendering setup speed.
Collision Offset
This sub-section of the rollout menu defines how the size (radius) of the
colliding object should be handled.
None - Select this radio button when you want to use only the center point for
collision detection between particles and the selected object's surface.
Particle Size (*Value) - When this radio button is active, the particle size is used
as a radial distance to detect collisions between particles and the selected object's
surface.
Value - When this radio button is selected, the Value spinner below is used to
increase or reduce the particle size in relation to collision detection.
Value - This spinner is used to increase or reduce the particle size value. When
checked the value itself is used as distance check. Keep in mind that this value
influences the Particle Size option! Keep it at 0 to prevent unwanted side effects
in the collision detection.
Variation [%] - This spinner is used to get more variation into the Value amount
explained above.
Offset Axis - This dropdown list lets you choose the orientation of the collision
plane. Keep in mind that this plane is needed to keep the collision system highly
optimized and efficient even with thousands of particles. A detection offset must
be specified to help the Deflector in detecting a proper particle collision between
a mesh surface and a particle.
thinkingParticles will move the particles along a defined axis to detect a collision
in advance. This is like sending out a ray from the particle's position to seek for
an object "in between". For example, setting the Offset Axis to -Z will move the
particle a bit further each step in the -Z direction to detect a possible collision.
The proper choice of the Offset Axis is very important and depends on the
orientation of the surface with which a particle will collide.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
AlembicExport
Operator Inputs
ON - determines whether the operator is considered 'on' or 'off'. You can connect
other operators to this input channel such as a Bool Helper to activate/deactivate
the whole operator.
Time - defines the local time for the operator when the user wants to override
the default system time.
Operator Outputs
There are no outputs available from this node
Rollout Menu
Particle Groups - this selection box is used to select one or many particle
groups to be considered for an Alembic export.
Add - press the Add button to add the selected particle group(s) to the list of
Export Particle Groups
Export Particle Groups - lists all the particle groups that will be exported into
one or multiple Alembic files.
Remove - press this button to remove the selected particle groups form the
export list.
Include Sub Groups - check this option to include particle groups below the
selected particle group hierarchy as well.
Select Record File - when clicked, a standard windows
file save dialog opens; this is to specify the output path
and file name of the *.abc file.
Active Time Segment - check this option to export the
full range of the 3ds Max frame slider.
Range - when checked; a time range to export can be
specified.
Sub Samples - defines the amount of frame sub-sampling
to use for exporting the data. A value of 0 means the
export will happen per frame; regardless of the subsamples set in thinkingParticles. A value of 1 means half
frame; 2 equals 90 sub-frames and so on ...
Redraw Views - check this option to see the 3ds Max
viewport redrawn while exporting.
Update Method - selects either the viewport mesh to be
exported or the render mesh to be exported into the
Alembic file.
Export Mode - there are 3 possible options.
Object per Group - exports each particle group
as one Alembic object
Object per Particle - exports each particle as one
Alembic object
Particle System - exports particles, only. No
meshes will be exported.
ObjectPerMaterial - exports particles sorted by
material. Each material gets its own alembic
object. This ensures the material IDs will not
change.
File Mode - can be either Single File or File per Group.
Storage - can be either HDF5 or Ogawa
Export - press this button to export the file.
Write Channels (Particle System,only) - Alembic allows to export particle
systems with specific channels. The following channels can be excluded or
included for export.
1. Velocity
2. Spin
3. Age
4. Lifespan
5. Alignment
6. Mass
7. Size
8. Scale
9. DataChannels
The AlembicExport node will always export all thinkingParticles Data Channels
when selected. There is no option to select specific thinkingParticles data
channels. While it is possible to use the Alembic particle system export as a
cache file; it is not recommended as the *.tpc or *.tps cache system is much
more optimized and performs much better.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Export Operator
The Export Operator is used to turn any non deforming/changing particle mesh
into a simple 3ds Max object with keyframes. All particle motion will be output
as single objects along with the relevant keyframes.
This particle exporter only works
with non-deforming/changing
particle meshes. Fragments
generated by the Fragment Operator
can also be exported to single objects
in 3ds Max, but the remaining mesh
can't. The reason this is the case is
that the remaining mesh is changing
every frame or sub-frame. This is
why it can not be exported to one
object.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) - This input data stream reads in the currently selected
particle group. The data stream MUST be connected and will be highlighted
yellow if it is not.
Operator Outputs
No Operator Outputs.
Rollout Menu
Quality - This spinner defines the amount of keyframe reduction that should be
done during the export. A value of 100 means that at each time step, a keyframe
for the exported particle will be created. Lower values will use an adaptive
process to reduce keyframes per exported particle. When this value gets really
low, errors may appear in the exported particle animation.
Active Time Segment - When this radio button is active, the entire active time
segment is included in the Export process.
Range - When the Range radio button is active, you can set the From and To
spinners to set the time segment you want to be included in the Export process.
Export - Clicking on this button activates the Export mode and your nondeforming/non-changing particles are exports to keyframes. When complete, a
new node will be present within your scene with the name TPOP_Export.
Remove - Clicking on the Remove button will delete the TPOP_Export node in
your scene that is associated with the export operation.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PartToObj Operator
Particle To Object is an operator that lets you turn any particles into an object at
one specific time. In contrast to the Export operator that exports every sub-frame
if necessary, the Particle To Object operator will export only one set of objects at
a single frame in time.
This is very useful for when you want to apply further processing to the particles
by a different dynamic simulation. At the activation time of this operator, all
particles will become pure 3ds Max objects with all of the relevant information
about rotation and movement, so that another dynamic engine could kick in and
use those objects for further processing. 3ds Max must be set to Play mode to
force the export at a specific time (activation of the operator).
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) With this input data stream, you MUST choose and connect
a selected Particle Group in order for this operator to function.
Operator Outputs
No Operator Outputs.
Rollout Menu
Update Per Turn checkbox - When this checkbox is activated, the export will
happen on each play cycle of 3ds Max.
Back to Export Nodes
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
FlowBoundary Operator
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
There are no outputs for this operator.
Rollout Menu
Solver - lets you choose from the drop down menu the fluid solver to use for this
fluid simulation. All compatible solvers found in the thinkingParticles setup will
be automatically listed. This allows for multiple fluids to have different
properties and still interact properly.
List Box - lists all formerly picked fluid collision objects
Add - Press this button to enter the pick mode, it
allows to pick any valid 3ds Max object in the
modeling viewport as a collision object for the
fluid.
Remove - when clicked on, the selected object is
removed from the list.
Group - sets the particle group to be used for fluid
collisions with objects
Include Sub Groups - when checked sub-groups of the
selected main group are also used as collision objects.
Important
This operator can use multiple
sources for its fluid collision objects.
You may either use the "Pick Object"
method or a particle group that
contains meshes (e.g
Object2Particle). Using both options
at the same time is also a valid
scenario.
Flow Rigid Body
Unyielding - check this option to make objects unyielding (immovable).
Kill On Contact - when checked, fluid particles colliding will be automatically
deleted
Friction - specifies the friction factor for the fluid interacting with the rigid body
Bounce - sets the bounce factor for the fluid hitting the collision objects
Buoyancy - defines the amount of buoyancy a rigid-body dynamics object
should have.
Adhesion - sets the amount of adhesion a particle should experience when in
contact with this boundary.
Acceleration Limit
Translation - sets the threshold value for the maximum allowed acceleration an
object can have within a time sample.
Angular - defines the angular threshold to restrict the maximum rotational
acceleration allowed for an object per time sample.
Intersect
Bias - defines the intersection bias value. Higher numbers will result in an earlier
collision detection which can be preferable in some situations.
Side - drop down list to choose the intersection method.
Front - check this option to get front face collisions, only
Back - when checked back face collisions are considered, only
Both - check this option to get both sides of a face tested on collisions
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
FlowGroup Operator
thinkingParticles offers a multi physics fluid dynamics system to simulate water
or other incompressible flowing substances. The basis of the fluid solver is a
Smoothed Particle Hydro dynamics (short:SPH) method.
SPH solvers have some advantages over other fluid methods as they are based
on a mesh-free system that only relies on particles and their positions in space.
No boundary restrictions are in effect nor is a fixed amount of particles at any
given time needed.
However, one system related drawback of SPH solvers can be found in the much
higher inaccuracy in simulating and maintaining the incompressible component
of a fluid, especially with large sub-frame time samples. thinkingParticles uses
it's own flavour of a SPH solver that is specifically developed to perform with
larger time steps (sub-frame samples) and perfectly integrates into the fully
procedural workflow thinkingParticles is famous for.
Important:
With the introduction of the
viscoelastic solver, a new setup logic
has been introduced as
well.Viscosity and both stiffness
values are directly linked to sub
samples. A value of 1 now represents
the highest maximum safe viscosity
for a fluid setup with a specific subsample amount. To safely increase
the viscosity of a fluid when using
the 6.4 viscoelastic solver, all you
have to do is increase the
subsamples. Values greater than 1
are possible and might create some
intresting results but can lead to
explosion of the fluid.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
There are no outputs for this operator.
Rollout Menu
Solver - lets you choose from the drop down menu the fluid solver to use for this
fluid simulation. All compatible solvers found in the thinkingParticles setup will
be automatically listed. This allows for multiple fluids to have different
properties and still interact properly.
Group - sets the particle group to be used to define the fluid particles.
Include Sub Groups - when checked sub-groups of the selected main group are
also used as fluid particles.
Type - select the algorithm to be used for the fluid simulation. There are 2
options:
SPH1 (6.0)
SPH2 (6.3) to learn more about this new algorithm check HERE
SPH VE (6.4) Dedicated Viscoelastic Solver to learn more click HERE
Smoothing Radius - This is the most central parameter to control the fluid
behavior. Like any other SPH solver, every incompressible bit of a fluid is
simulated by allowing errors. This is done by passing on a fraction of the
impulses to their neighbor particles within this Smoothing Radius. This value is
set in world units.
Density - sets the preferred target density of the fluid. The higher this number
the more dense the fluid becomes.
Decompress - adds an extra force that acts as a repulsive component in the fluid
simulation. This one of the most important settings to achieve a reasonable result
when filling fluid in containers.
Tension - sets the amount of surface tension for the fluid.
Viscosity - defines the viscosity of the fluid; this force can be used to create
sticky or oily fluids.
Imortant
Viscosity is directly related to the
amount of sub samples. Higher
viscosity values are only possible
with higher sub sample values.
A Viscosity value of 2 will only
work with 1 sub samples. Every
additional sub sample will alow you
to double the Viscosity value.
SPH2 + VE Sub Group
Pressure Compress - when set to 1.0 the fluid pressure will
be calculated in a neutral state. When this value is below 1 the
forces will increase; creating a more lively fluid that tends to
explode or splash easier with higher instability. Values above 1
(up to 10) will slow down the internal fluid movements;
creating a much calmer fluid flow and behavior.
String Viscosity - defines the viscosity of the fluid along the
axis between two particles; this force can be used to create a
more string like surface property of the fluid. Also fluid tends
to string together in long rope like structures.
Important
Viscosity and String Viscosity work
along each other the values add to
each other. The same rules apply to
String Viscosity; the higher the
viscosity value the more sub samples
the solver needs to get a stable result.
Spacer Push - sets an extra force that kicks in when particles
come closer than found in the Spacing control. This force will
ensure that particles keep their distance even under
compression.
Spacer Pull - defines an extra force that will keep particles
close to each other (attract) when they fall outside of the Spacing control
distance.
Important
Spacer Push and Spacer Pull can be
used to simulate visco-elastic
properties and help in increasing the
impression of extremley thick fluids
(honey, oil, dough).
Spacing - represents the distance between fluid particles for a certain density
value. This is calculated based on the density value. Changing this value will
change the density value accordingly. This value is set in world units.
Force Compensation - SPH solvers, in general, have an issue to create
reasonable simulations with a large water column. This extra factor tries to solve
the issue with stacking up volumes of fluids in a container.
Damping - sets an overall dampening force for the fluid system.
Acceleration Limit - defines the maximum speed allowed for a fluid particle. If
a particle is faster than this value it is set to this value.
Density Kill - kills particles that fall below this density value. This can be used
ot control isolated clusters of fluid by removing them. A value of 0 turns this
option off.
Isolation Kill - sets the amount of minimum neighbor particles that need to be
present to kill a particle from the fluid simulation. This can be used to control
isolated or stray particles in a fluid simulation. A value of 0 turns this option off.
Boundary Bounce - sets the amount of bounciness of the fluid form a surface
Boundary Friction - defines the friction along the surface a fluid gets into
contact with
Adhesion - sets the attraction force of the surface. Water drops stick to the
surface..
Rigid Buoyancy - defines the buoyancy force for rigid objects in a fluid
Gravity Direction - sets the direction of the gravity for the fluid.
Sleep Start - check this option to make particles sleep at the initialization phase
and keep their shape and make them not affected bey internal pressure forces.
Awake Threshold - sets the velocity difference that needs ot be reached to wake
up particles from the start sleep function.
Separate Check - activate this option to stop particles form sending their fluid
force (smoothing Radius) through objects (walls thinner than smoothing radius)
Show - chooses the following fluid visualization options:
Pressure - A red color indicates maximum pressure and white
represents minimum pressure
Velocity - a red color represents maximum velocity, white
represents minimal velocity
Mass - a red color indicates maximum mass while white represents minimum
mass
Show Scale - default 1.0. If changed the visualization of the selected value is
scaled to enhance or make differences in the fluid more visible.
Viscoelastic Rollout Menu (6.4)
This rollout menu is valid when SPH VE 6.4 is chosen as the solver Type. The
settings found here control the spring based fluid system and allow to create
extremely viscous fluids. All other settings of the fluid solver are valid as well;
including the SPH2 +VE group of controls.
On - check this option to activate the spring based viscoelasticity option of the
new fluid solver. When off, the new solver is still used, when selected from the
Type menu, however the spring based algorithm is turned off. The new SPH VE
6.4 solver is also good 'normal' fluid solver wich is superior to the previously
introduced 6.3 solver.
Activate Radius - specifies the spring creation radius. This value is a percentage
of the smoothing kernel, 1 means the full smoothing radius will be used ot create
springs between particles. The lower this value (less
springs) the more fluid like the system will behave.
Stiffness Push - defines the 'power' of the spring to push
the particle in its original place (at creation time).
Stiffness Pull - defines the 'power' of the spring to pull a
particle into its original place (at creation time).
Important
The maximum safe value for those
two settings is 1.0 which gives you
the maximum spring rigidity based
on the subsamples used. If you wish
to increase the power or rigidity of
the spring , increase the subsamples.
It is also possible to choose values
greater than 1, however be warned it
might tend to explode the fluid at
times.
Velocity Impulse - defines the amount of velocity exchange that happens
between two particles when they approach each other. A value of 1.0 indicates
that the velocity of both particles is neutralized (two jelly fluids colliding). When
this is set to 0, the particles are allowed to pass into each other.
Velocity Stickiness - sets the amount of velocity exchange when two particles
move away form each other. A value of 1.0 will neutralize the particle velocity
(sticking) while a value of 0 will not use and velocity reduction when particles
are moving away from each other.
Stretch Plasticity - sets the amount of plasticity when a spring is stretched.
Higher amounts will make the springs stretch beyond their original length faster.
Threshold - defines the cut off value at which the spring between two particles
is stretched beyond its original length. After stretching beyond the threshold the
spring stays deformed. The spring will first undergo an elastic deformation,
which is reversible (normal spring behavior) so the spring will return part way to
its original length. If the stretching is above the threshold value (length is based
on the smoothing radius), the spring will undergo a plastic deformation which is
not reversible (a new original length of the spring is assumed).
Density Plasticity - defines a pressure dependent spring deformation. Higher
values will create a faster deformation of springs. Use this setting alone to
simulate honey like fluids for example.
Threshold - sets the fluid density at which spring deformation should occur. For
honey like fluids keep this at zero to start immediate deformation of the springs.
Diffluence - defines a liquefaction factor for the fluid. This factor kicks in right
away and adds a constant reduction in stiffness (melting over time). The higher
this values the faster a liquid melts.
Tearing Length -sets the tearing length threshold at which the spring will be
deleted (cut off). This value is based on the smoothing radius, a value of 1.0 will
cut of a spring when its length is above the smoothing radius. Animate this value
to simulate solidification or liquefaction.
Max Springs - sets the maximum amount of springs per particle. By default (0)
an unlimited amount of springs per particle is possible. Use this value to reduce
the amount of springs and enhance simulation time. Some fluid simulations can
create way over 300 springs per particles which increases simulation time. We
do suggest to always start with a value of 0 and then later reduce it until the
simulation barely changes form its intended look.
Dynamic Interlace - when checked, new springs will be constantly created (new
bonds formed) even after tearing them off. To simulate honey like or dough like
fluids; turn this option on. This needs some extra processing time.
Foam
Group - selects the particle group to create the foam particles in.
Foam - check this option to create extra foam particles created at pressure points
in the fluid simulation.
ISO Value - defines the region where extra foam particles are created. A value
of 1.0 will allow the creation of foam particles right on the surface. Higher
values create foam particles above the water level and lower values below the
water level.
Speed Threshold - sets the maximum fluid particle speed that needs to be
reached to create a foam particle.
Rate per sec - restricts the creation of foam particles to this amount per second.
Mass Factor - defines the mass of the foam particle in relation to the fluid mass.
Density - sets the target density of the foam (fluid)
Decompress - sets the repulsion power between foam particles
Tension - sets the surface tension for the foam fluid
Viscosity to Fluid - sets the viscosity between foam and fluid
Viscosity to Foam - defines the viscosity between foam particles
Life Span - sets how long the foam particle should exist after it is created.
Max Count - sets the total amount of foam particles that can exist at a given
time
About SPH2 (6.3) Fluid Solver
The SPH2 algorithm is intended to become the new standard solver for particle
based fluid simulations in thinkingParticles; SPH2 offers a much more forgiving
nature with high pressure values appearing inside of the fluid; it also handles
larger time steps much better than its predecessor SPH1.
SPH2 has algorithm specific options to offer a more refined control of pressure
equalization over time. Fluids can be simply adjusted to be act more lively or be
more calm and equalize much better. Keep in mind; in general this is still a
particle based SPH solver intended for faster flowing fluids creating lots of
splashes. It is not really meant to create large scale ocean bodies of water.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
FlowSolver
This operator handles all flow simulations and represents the actual solver.
However, it has no parameters on it's own; each FlowGroup operator has its
own set of settings.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
RigidCollision -(Bool) is set True whenever a fluid particle collided with this
rigid body
Rollout Menu
Sub Sample - sets the amount of sub samples to be used per time step. This
parameter is one of the most powerful settings for fluid simulations. It can define
between getting a rough fluid simulation in about a few seconds or in hours or
days! The more sub-samples (the higher this number) the more accurate will be
the fluid simulation the lower the number the faster the simulation will be
calculated.
All of life is a trade off and so is fluid simulations! You can not have to get
champagne when buying a can of pop!
Imortant
Sub Samples is the most powerful
control in the fluid solver. It can do a
lot of damage at the same time.
Higher Sub Sampling will create a
more accurate energy balancing
between particles. This can result in
a much better simulation of the fluid.
However it also means that settings
for a different sub sampling value
may not work.
Viscosity is directly related to the
amount of sub samples. Higher
viscosity values are only possible
with higher sub sample values.
A Viscosity value of 2 will only
work with 1 sub samples. Every
additional sub sample will alow you
to double the Viscosity value.
VolumeLinked - check this option to use a more accurate fluid solving method
that takes neighborhood particles into account.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
HydroBoat Operator
thinkingParticles comes with multiple vehicle simulators; one is the water
vehicle simulator. This operator is used to simulate
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - this input defines the particle to be handled as a boat object. Only
particles with a mesh are handled as boats.
FollowPathID - sets the path number to be used from the list of splines for the
current boat particle. A value of zero selects the first spline path a value of 1
(one) the second and so on.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
This operator has no outputs
Rollout Menu
Field - lets you choose which HydroField Operator is
interacting with the boat.
Boat Axis
3d Models come in many flavours and orientations.
thinkingParticles is known for its flexibility and robust 3d
model handling. Those parameters help in easing the use of
3d boat models.
Travel - sets the orientation axis of the boat in which it
travels. This is actually defining the front of the boat.
Top - defines the 'Up' direction of the boat.
Speed
Every vehicle, be it on land or water travels at a certain
speed. The following settings define the traveling speed of
the vehicle.
Boat Length/sec - specifies the speed of the water vehicle
based on it's own length it travels per second. This allows
to have different sizes of boats traveling at different speeds.
Unit/sec. - when checked, the boat length based speed will
be deactivated and the vehicle speed is specified in units
per second.
Factor - this value allows to easily speed up or slow down the animation of the
boat(s). Thsi parameter is especially useful when Normalize to Speed Setup is
turned off and the Path Position control is used to animate a boat along a path.
Variation - adds some random variation to the speed value for each boat.
Steering
There are multiple ways to animate a water vehicle and its trajectory. A water
vehicle can be controlled with a simple left/right steering control or by a path.
Steer - sets the direction of travel 1.0 means a full right turn and a value of -1.0
means a full left turn.
Variation - adds some random variation to the steering for each single boat.
Path Follow
Water vehicles can be controlled in a way where they follow a pre-defined path.
Due to the unique nature of a water vehicle and - even more so - the law of
physics; paths need to be carefully drawn. Boats can not make sudden or
emergency changes of direction or stops.
Spline List Box - stores the selected (spline) paths for the water vehicle objects.
This operator can handle multiple vehicles and each vehicle can have its own
path. Based on the order of water vehicle creation (boat particles) and the order
in which the paths are picked (listed); the connection between a path and a boat
is made.
Pick Object - click this button to enter a standard 3ds Max pick object mode. It
allows to pick any spline in the scene to act as a path to follow. Multiple splines
can be picked, and if there are multiple boat objects each spline will be used for
a different boat.
Rem. - click this button to remove the selected spline form the list of available
splines.
Path Position - defines the position of the boat on a path (spline). A value of 0
represents the start of the spline and a value of 100 means the end of the path. By
default this parameter is pre animated; within 10 seconds the water vehicle
follows the full path. The Factor parameter found under the speed section allows
for easy speed modifications of the water vehicle.
Normalize to Speed Setup - when checked, the water vehicles will use the
defined speed along the path without caring about ever reaching the end of the
path or not.
Initial Align - when checked; the water vehicle is automatically aligned along
the path at the start of the animation.
Type - there are two options to select from
Relative - when selected, the path is moved to boat's position
Absolute - when selected the boat is moved to the path's position
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
HydroField Operator
The HydroField Operator is used to generate shallow water and ocean surface
simulations. All effects are based on an initially flat surface of water. Wind,
procedural forces and rigid body interactions are then added to this surface to
deform it to create waves. The special purpose boat simulation operator allows
to efficiently simulate water based vehicles.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
This operator has no outputs
Rollout Menu
Field Objects
Any flat surface mesh (e.g plane) can act as a water/ocean surface. Keep in mind
that the mesh density can/is independent of the field density that actually
simulates the ocean waves.
List Box - lists all formerly picked objects acting as the water surface
Add - Press this button to enter the pick mode, it allows to pick any
valid 3ds Max object in the modeling viewport to become a water
surface.
Remove - when clicked on, the selected object is removed from the list.
Ground Objects
Ground objects are special types of rigid bodies. Those bodies are "covered" by
the hydro-field so that in parts it can be splashed on or around. Imagine rocks at
the shore for example or big cliffs.
List Box - lists all formerly picked objects acting as a ground object
Add - Press this button to enter the pick mode, it allows to pick any
valid 3ds Max object in the modeling viewport to become a ground
object in the water.
Remove - when clicked on, the selected object is removed from the list.
Rigid- sets the particle group to be used for fluid collisions with objects
Include Sub Groups - when checked sub-groups of the selected main group are
also used as collision objects.
Intersect Bias - sets the intersection bias value to allow for more or less accurate
intersection (collision) testing. The higher this value the more inaccurate and
earlier the collision detection becomes.
Fields - defines the particle group to be used to store the field (water surface)
particle that is created by thinkingParticles in the process simulating water
surfaces.
Dimension -sets the unit factor to be used for the scene. The HydroField
operator is working with real world scale values and this parameter is to ensure
that internally all values are based on meters. Whatever unit factor you type in
this entry box equals to one meter! As an example: a value of 100 means that
100 3ds Max world units (what ever scale it is) equals to one meter for the
surface water simulation.
Cells per Dim. - sets the amount of grid cells that should be created to simulate
changing water pressure values for the water surface. The higher this value the
finer and more accurate the waves and pressure distribution will be.
Gravity - specifies the acceleration value for gravity (g) to be used by the
simulation. On earth this equals to 9.81 meters per square second (m/s2)
Density - sets the density value for the water surface simulation.
Wave Speed - waves or wakes created by rigid body objects (like a boat) travel
with the speed set with this parameter.
Wave Damping - defines a dampening factor for waves traveling across the
water surface. Increase this value to make the waves run out much faster.
Viscosity - sets the viscosity factor for the water surface simulation. The higher
this value the more the water surface will be have like oil or honey.
Suction - defines a "suction" factor for rigid body objects leaving or coming out
of the water surface.
Clamp Impulse - splashes and wave distribution is all about passing on
impulses (pressure); use this value to clamp or cut off the power of impulses.
This is useful in avoiding instability within a simulation.
Impulse Grid - sets the graininess of the field to pass on impulses. The higher
this value tpo more accurate the simulation will be.
Splash - activate this option to generate splashes caused by higher acceleration
found in the water surface and interaction with rigid bodies.
Spray - check this option to activate spray particle effects. Spray particles are
spawned from splash particles only! Spray particles exists in air only. As soon as
spray particles touch the wtaer surface they are automatically removed (killed).
Foam - check this option to create foam particles on the water surface.
Ocean - when checked, a ocean wave simulation will be added on top of the
existing water surface.
Kill Splash Outside Field - splash particles that end up outside the simulation
grid will be automatically removed when this option is checked.
Splash Rigid Collision - check this option to enable collision detection between
splash particles and rigid bodies.
Position Tracking - check this option to enable position tracking for the
simulation grid and surface mesh. This is useful for LOD simulations when a
smaller water surface area is sufficient.
Show Cells - check this option to enable the visualization of the cells that will be
used to simulate the hydro dynamics of the water surface. Red dots will indicate
the cell centers for the hydro simulation.
Show Boat Trajectories - check this option to enable the visualization of each
boats trajectory if used by a boat.
Splash
Splashes are created when the ocean surface exceeds a certain velocity; caused
by a rigid body intersecting with the water surface.
Spray particles are only born from airborne Splash particles.
Splash - sets the particle group to be used to create splash particles. If None is
selected no particles will be created! It is NOT recommended to use the ALL
group for splash particles - give them the proper sub-group!
Include Sub Groups - when checked sub-groups of the selected main group are
also used as splash particles.
Threshold - if this surface velocity threshold value is reached; one splash
particle will be created; if the actual velocity is 2 times above the threshold
value; then 2 particles are created (multiplied by Rate)
Rate - sets a multiplication factor for splash particle creation. The higher this
value to more splash particle will be created. A value of 2
would create 2 times more splash particles than normally.
Speed - defines the splash particle velocity; a value of 1.0
will set the splash particle velocity to the speed of the
surface waves. Increasing this value will accelerate the
splash particles.
Variation (Speed) - set this to greater than 0 to add some
random variation to the splash particle speed.
Fan Out - sets the spreading angle for the splash particle
generation. A value of 0 will create and send the splash
particles along the surface normal; a value of 1 will create
splash particles 180 degrees around the surface normal.
Life Span - sets the life span of the splash particles in
amount of frames
Variation (Life) - set this to greater than 0 to add some
random variation to the splash particle life time.
Max Particle - sets a cut off value for the splash particle
creation. This will prevent the creation of crazy amounts
of splash particles.
Interact with Field
Friction - defines the friction factor for the splash
particles.
Impact to Field - splash particles landing on the water
surface transfer their impulse to the water surface and
create extra ripples. This value controls the factor
(strength) of the impulkse transfer between splash
particles and the water surface.
Mass Factor - sets a multiplier to define the weight of the splash particless in
relation to the Hydrofield mass (Density)
Impulse Grid - defines the amount of cells to be used to average the Splash
impulse (impact). Thsi is useful to even out spikes when impacts happen.
Buoyancy Speed - when splash particles sink into the water, this value defines
how fast they will rise up form the water.
Filling - when a particle is submerged into a Hydrofield; its mass is added to the
Hydrofield. This is useful to increase the water level by adding particles into the
Hydrofield.
Kill Threshold - any splash particles falling below this velocity value are
considered sleeping or dead and will be automatically removed form the
simulation.
Field Air Bias - extends the transition zone between water surface and air.
Splash particles are considered still airborne when outside of this bias value.
Spray
Spray particles simulate fine and thin water spray caused by rolling ocean waves
or waves splashing onto a cliff or other obstacles.
Spray - sets the particle group to be used to create spray particles. If None is
selected no particles will be created! It is NOT recommended to use the ALL
group for spray particles - give them the proper sub-group!
Include Sub Groups - when checked sub-groups of the selected main group are
also used as spray particles.
Threshold - if this velocity threshold value is reached; one spray particle will be
created from a splash particle; if the actual velocity is 2 times above the
threshold value; then 2 particles are created (multiplied by Rate)
Rate - sets a multiplication factor for spray particle creation. The higher this
value the more spray particle will be created. A value of 2 would create 2 times
more splash particles than normally.
Speed - defines the spray particle velocity; a value of 1.0 will set the spray
particle velocity to the speed of the splash particle. Increasing this value will
accelerate the spray particles.
Variation (Speed) - set this to greater than 0 to add some random variation to
the spray particle speed.
Fan Out - sets the spreading angle for the spray particle generation. A value of 0
will create and send the spray particles along the original direction of the splash
particle; a value of 1 will create spray particles 180 degrees around the direction
of the splash particle.
Air Friction - defines the air friction factor for the spray particles.
Turbulence - when unequal to zero; turbulence is added to the spray particles
Buoyancy - when spray particles become airborne, this value defines how fast
they will rise up or come down from the air.
Max Particle - sets a cut off value for the spray particle creation. This will
prevent the creation of crazy amounts of spray particles.
Life Span - sets the life span of the spray particles in amount of frames
Variation (Life) - set this to greater than 0 to add some random variation to the
spray particle life time.
Foam
Foam - sets the particle group to be used to create foam particles. If None is
selected no particles will be created! It is NOT recommended to use the ALL
group for spray particles - give them the proper sub-group!
Include Sub Groups - when checked sub-groups of the selected main group are
also used as foam objects.
Friction - defines the friction factor for the foam particles.
Buoyancy Speed - when foam particles sink into the water, this value defines
how fast they will rise up form the water.
Max Particle - sets a cut off value for the foam particle
creation. This will prevent the creation of crazy amounts of
foam particles.
Life Span - sets the life span of the foam particles in
amount of frames
Variation (Life) - set this to greater than 0 to add some
random variation to the foam particle life time.
Field Air Bias - extends the transition zone between water
surface and air. Foam particles are considered still airborne
when outside of this bias value.
Ocean Threshold - sets the velocity threshold to be
reached to create foam particles on the water surface.
Map Create - check this option to create a sequence of
foam texture maps. When this option is checked, and a
simulation is played/run the textures will be written to the
harddisk.
Map Slot - click this button to get a standard file
save dialog to store the texture map files.
Map Size - defines the size of the map as in square
dimensions (e.g. 1024 x1024)
Density - sets the transparency of the foam map based on
particle density. The higher this value to stronger and
denser the foam map will be.
Radius - defines the radius each foam particle has on the bitmap.
Ocean
Scale - used to control the scale of all waves on the water surface
Wave Height - Defines the height of the individual waves on the surface.
Shortest Wave - Used to define a minimum wave length on the surface.
Choppiness - Sets how rough or "wild" the surface should look like.
Wind Speed - Sets the speed of the wind and this defines the traveling speed of
waves across the surface.
Wind Direction - Defines the direction of the wind. Use this parameter to
control the direction of travel for the waves. This uses the grid north as a basis
for direction, 0.0 is north.
Time Scale - Lets you scale the time (speed). This function is useful to
accelerate or slow down the speed of the waves traveling across the surface of
the ocean. Keep in mind that too fast a wave movement will not look that
realistic.
Cycle - check this option to make the ocean surface cycle through the animation
based on the current time frame slider.
Cycle Duration - defines the amount of Frames to use for the cycle animation
Random Seed: Sets the random seed for the ocean object so that no 2 surfaces
look the same.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Blurp Operator
The Blurp Operator is designed to let you create particle morph animations
quickly and effectively. The main idea behind Blurp is the creation of complex
disintegration / re-integration effects. An often-used description for this kind of
effect is the idea of taking a character like Dracula, having him disintegrate into
a flock of flying bats, then having those particles re-assemble into the shape of a
snarling dog.
While these kinds of effects could be accomplished using other operator and rule
combinations inside of thinkingParticles, this Operator takes the headaches out
of creating them and should help speed your workflow.
In order to trigger the Blurp Operator
you will need to pipe in a True
condition to the ON input data
stream. Without a True condition the
operator will not work.
Also keep in mind a particle morph
between ANY mesh objects is
possible. However, as a rule of
thumb, the number of faces should
be as equal as possible (or fairly
similar) - this will guarantee more
believable results within the
transition. Trying to get equally
sized fragments (similar shapes,
tessellation) will help you in
producing some serious eye candy
with Blurp.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Animation Phase - This input sets the
This operator input was introduced
particles' morph progress. You must
with SP2 of thinkingParticles 4
animate this parameter when you want
to morph between multiple objects. A value of 0.0 means Frame 0 within the
animation and a value of 1.0 means the last frame within the animation.
Operator Outputs
No Operator Outputs.
Rollout Menu
Group - Use this dropdown menu to select the particle group that is to be used
as the container for the picked objects' particles.
Animation Phase - This parameter sets the particles' morph progress. You must
animate this parameter when you want to morph between multiple objects. A
value of 0.0 means Frame 0 within the animation and a value of 1.0 means the
last frame within the animation.
Objects Listbox
The Blurp Operator is able to do multiple particle morphs within a single
operator. Because of this flexibility, you can morph one object into another while
using many other objects as intermediate steps in the transition. In the Object
listbox you'll find all of the objects that are to be used to morph between. All
objects are handled by a top-down order.
TIP: Be aware that you can also pick any Helper object in addition to standard
geometry. Helper objects are used as a position indicator for the particle flow
direction and are not as a target shape for the Blurp Operator. The particle stream
will pass through the helper object's position when included in the Object
Listbox.
REM. - Press the REM. button to remove any selected object from the listbox
window.
Hide/Unhide - This button lets you hide or unhide the original objects selected
(as they will be instanced for the Blurp effect).
PICK - Use this button to select any 3ds Max objects in the scene that you want
to use within the Blurp effect. When selected, the object will be added to the
bottom of the list.
Up / Down - These two controls move a selected entry up or down the list.
Remember that the top to bottom order of the objects in this list defines the order
of the morph effect.
Use SubTree Also - Activate this checkbox to make sure that linked children
objects are also included within the morph transitions between objects.
From To - This dropdown list lets you choose how the fragmentation process
should start/evolve. The reference for up/down or left/right is the local object zaxis.
In Tangent - A particle morph looks best when the transition between two
objects is smooth. When you add two objects to the Object Listbox, a spline path
is drawn between the morphing objects to show you how the transition is to
occur. Using this spinner, you can flatten out the trajectory and create sharp
edges in the path leading into the object.
When setting this spinner, be sure to
select the object in the listbox before
you adjust the relevant tangent of the
spline corner.
Out Tangent - Using this spinner, you can alter the trajectory along the path
leading away from the object.
Stay Time [%] - This spinner value reflects the percentage of time a selected
Blurp object stays together before it gets fragmented again as it morphs into
another object. This spinner is only useful when there are at least three mesh
objects in the morph list.
This spinner's value is used ONLY
by the selected Blurp object in the
list window. If you want to use the
same Stay Time [%] on all of your
Blurp objects, be sure to set them all
independently.
Let's take a hypothetical example of a Blurp effect that has three objects in it and
is animated to be exactly 100 frames long. As you transition from Object #1 to
Object #2 to Object #3, the timing will be equal by default. This means that the
first object will be visible at frame 0, the second object will be visible at frame
50 and the third object will be visible at frame 100.
It is important to recognize that since
you're morphing from one object to
another, the first frame will be the
only time you see the complete first
object, and the last frame will be the
first time you'll see the last object
completely assembled from the
morph effects as shown below.
A 3 object Blurp example
As you can see, at frame 0, the sphere labeled 1 is visible and whole. At frame
50, the sphere labeled 2 is visible and whole, and at frame 100, sphere 3 is
visible and whole. In between those frames, the object's fragment and move from
position to position.
Now to transition from frame 0 to frame 50 (morphing from Object #1 to Object
#2), the original object is fragmented (turned into chunks) and moved along a
path and then re-assembled into the new object. Likewise, going from frame 50
to frame 100 (morphing from Object #2 to Object #3) must also go through the
disassembly and re-assembly processes. And time here is also split equally so
that the fragmentation and rebuilding processes are the same in terms of evenly
divided timing.
So if you change the Stay Time [%] value for all three of the Blurp objects to
25%, it means that 25% of the time that is devoted to fragmenting the objects is
"stolen" from the overall timing so that the complete object is visible for that
amount of time.
Frag Time [%] - This spinner sets the time the object needs to become fully
fragmented. Like the Set Time [%] spinner, this value represents a percentage of
the total animation time. If you set this value to 300% for example, the
fragmentation process of the selected object will take three times longer than it
would usually take.
This spinner's value is used ONLY
by the selected Blurp object in the
list window. If you want to use the
same Frag Time [%] on all of your
Blurp objects, be sure to set them all
independently.
Next Time [%] - This spinner defines the time it takes for the fragments to
move from one position (source) to another (target). Like the Set Time [%]
spinner, this value represents a percentage of the total animation time. If you set
this value to 300% for example, the motion of the selected object will take three
times longer than it would usually take.
Helper Scale [%] - This value defines how much of the scaling information of a
selected helper object should be taken to "squeeze" the fragments along their
path to the new object position. You may use this feature to send a stream of
particles through a little hole or underneath a door. In these cases, the scale
transformation of the helper object is taken to define the squeeze.
Scale Particle - This checkbox is used to tell the particle fragments to scale
down as well as they pass through the selected helper node. When unchecked,
the fragments will retain their size as they pass through the helper object.
Material Mixmode - Activate this checkbox to get proper material morphs
between the various objects.
Mixmode Frames - This Parameter defines the time it takes to blend the
materials between the various Blurp stages.
Fragmentation Rollout
Fragment
The Blurp operator uses the exact same settings to control the object
fragmentation as you find within the Fragment Operator. The only difference
you might see is that the Blurp operator does not use any maps or materials to
control the Fragmentation order.
Group - Use this dropdown menu to select the particle group that is to be used
as the container for the picked objects' fragments.
No Fragments - Activate this checkbox to enter non-fragment mode. Fragments
aren't actually created, however this option can be a lifesaver when you want to
see the order in which your object activates its fragments. This can also be a
tremendous time saver for compositing tasks.
Single - Choose this option to use all triangles as independent object fragments.
This option is useful when you want to simulate dust or very small debris. The
other two options - Smooth and Distance and Count allows you to control the
amount and size of the object fragments.
Smooth and Distance - When Smooth and Distance is chosen, two additional
parameters are also enabled (Smoothing Angle and Radius [%]). All fragments
with the same surface smoothing angle (set in the Smoothing spinner) will Use
the size (radius) as set in the Radius [%] parameter.
Smoothing Angle - This spinner controls the size of the fragments when
Smooth and Distance is checked. All fragments with the same surface
smoothing angle will then use the size (radius) as set in the Radius [%]
parameter to create fragments.
Radius [%] - This spinner sets the radius to be used for controlling fragments
when Smooth and Distance is checked. Radius [%] is measured as a percentage
of the object's bounding box size, so a larger percentage will result in bigger
fragment chunks.
Count - When this option is selected, the Count spinner becomes active. As a
result, you can set a specific number of fragments to be created.
Count - This spinner's value controls the minimum number of fragments that
should be created. However, you should be aware that this parameter also
performs additional object tessellation in cases where the mesh isn't detailed
enough to create the number of chunks. In these cases, the mesh will be
adaptively subdivided to accommodate the Count value.
Thickness [%] - This spinner sets the thickness of the fragmented geometry. At
a value of 0.0, the fragments are single-sided with no thickness. When greater
than zero, the fragments are extruded inward at fragmentation-time by the
amount specified to produce a solid appearance. When using thickness in your
fragments, the inner and outer surfaces of the fragments use identical smoothing;
and this smoothing is picked up from the object-based emitter. Worth noting is
that the edges of the fragments are not smoothed.
Be aware that using this spinner can
double or quadruple the number of
faces.
Outside ID - This spinner lets you assign a Material ID that should be used on
the outside faces of the fragments. In order to do this, be sure to assign a
Multi/Sub-Object material to the selected emitter.
Edge ID - This spinner lets you assign a Material ID that should be used on the
newly created edge faces of the fragments. In order to do this, be sure to assign a
Multi/Sub-Object material to the selected emitter.
Backside ID - This spinner lets you assign a Material ID that should be used on
the newly created inner faces of the fragments. In order to do this, be sure to
assign a Multi/Sub-Object material to the selected emitter.
Remaining Mesh
The Blurp Operator is unique when it gets into creating particle fragments. In
contrast to other standard 3ds Max particle systems, Blurp can also handle the
remaining mesh of the fragmented object. The remaining mesh refers to the
geometry that still appears as the fragments break off. The options are None,
Hollow and Solid.
None: When this option is selected, the Fragment Operator will not have a
remaining mesh. As such, the entire object will disappear, and only as the
emitter's vertices exceed the Threshold spinner value, they appear as chunks.
This might look odd, but in combination with the No Fragments option you
may use this for perfect compositing.
Hollow: When this option is selected, you will be left with a hollow remaining
mesh. At the beginning of the fragmentation, the object appears solid, and then
pieces begin to break off. The result is that this effect looks like the object is
exploding into little pieces over time .
Solid: When this option is selected, the remaining mesh will continue to be a
complete solid object. This option is useful when you want to get an effect that
looks like the fragments are peeled off or blown off. With clever use of different
Material IDs you can also create an effect of breaking a hull or battle damage to
a surface where debris flies off and yet you still have another raw surface
beneath.
Thickness [%] - This spinner sets the thickness of the remaining mesh. Values
greater than 0.0 produce a remaining mesh surface that is incrementally smaller
than the original emitter surface (to enhance the peeling effect when Solid is
chosen for the Remaining Mesh).
Outside ID - This spinner lets you assign a Material ID that should be used on
the outside faces of the remaining mesh. In order to do this, be sure to assign a
Multi/Sub-Object material to the selected emitter.
Edge ID - This spinner lets you assign a Material ID that should be used on the
newly created edge faces of the remaining mesh. Understand that the only way
to see this material is when you choose Hollow as the remaining mesh
algorithm. In order to do this, be sure to assign a Multi/Sub-Object material to
the selected emitter.
Inside ID - This spinner lets you assign a Material ID that should be used on the
newly created inner faces of the remaining mesh. Understand that the only way
to see this material is when you choose Hollow as the remaining mesh
algorithm. In order to do this, be sure to assign a Multi/Sub-Object material to
the selected emitter.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Fragment Operator
The Fragment Operator is used whenever you want to break up an object into
fragments, essentially causing destruction or disintegration effects. A selected
object is converted into a particle emitter with each vertex on the object acting as
a source for fragment emission. Every particle emitter acts as a sensor, each with
its own Threshold value, and when the sensor contains a higher value than the
set Threshold value, it is turned into a fragment.
When objects explode into fragments, particles are used to control the dynamic
behavior of the chunks flying around. Each object fragment (a set of polygons) is
represented by one particle. Everything this particle does, is also applied to the
fragment. Spin, movement and collision detection are all handled by the
underlying particle information and not the actual set of polygons that represent
the object fragment unless otherwise told to by the Shape Collision Operator.
To see the fragments in the
viewports, choose Show Mesh in the
Master DynamicSet.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be given a standard shape. The data stream MUST be connected
and will be highlighted yellow, if it is not.
Life Span - (Life Span) This input data stream is used to override the Life Span
spinner value in the Fragment rollout.
Speed - (Speed) This input data stream is used to override the Speed spinner
value in the Fragment rollout.
Direction - (Direction) This input data stream is used to send a directional vector
to the fragments to give them a direction to travel.
Spin - (Spin) This input data stream is used to provide the angular direction
value for the particles to use for their motion.
Mass - (Mass) This input data stream is used to give a physical mass to the
particle fragments. This can be useful when you are breaking an object since you
can tell the larger fragments to be heavier than the smaller ones.
Alignment - (Alignment) This input data stream is used to align the fragments
with a selected Node's alignment (fed in through a Node Helper or Particle Data
Helper).
Threshold - (Scalar) This input data stream is used to override the Threshold
spinner value in the Fragment rollout.
Variation - (Scalar) This input data stream is used to override the Variation [%]
spinner value that is used to add some randomness to the fragmentation order
within the Fragment rollout.
Fragmentation Mask - (Texture Map) This input data stream is for future usage
(i.e. - it is not currently active) and will be used to override the texture map mask
that controls the fragmentation order within the Fragment rollout.
Fragmentation Mask ON - (Bool) This input data stream is used to override the
on/off state of the Fragmentation Mask toggle within the Fragment rollout. A
True condition will turn the mask on, while a False condition will turn the mask
off.
Mask Gradient - (Alpha Gradient) This input data stream is for future usage
(i.e. - it is not currently active) and will be used to override the gradient ramp
that controls the fragmentation order within the Fragment rollout.
Use Light - (Bool) This input data stream is used to override the Use Lights
checkbox state within the Fragment rollout.
Type - (Integer) This input data stream takes an integer value that represents the
fragmentation algorithm the particles will use. Valid input values are 0 through
2, where:
0 = Single Faces
1 = Smooth and Distance
2 = Count
None Fragments - (Bool) This input data stream is used to override the No
Fragments checkbox state within the Fragment rollout.
Smoothing Angle - (Angle) This input data stream is used to override the
Smoothing Angle spinner value in the Fragment rollout.
Smoothing Radius - (Scalar) This input data stream is used to override the
Radius [%] spinner value in the Fragment rollout.
Count - (Integer) This input data stream is used to override the Count spinner
value in the Fragment rollout.
From To - (Integer) This input data stream takes an integer value that represents
the fragmentation order the particles will use. Valid input values are 0 through 5,
where:
0 = Bottom -> Top
1 = Top -> Bottom
2 = Back -> Front
3 = Front -> Back
4 = Left -> Right
5 = Right -> Left
Life Variation - (Scalar) This input data stream is used to override the Variation
[%] spinner value that is used to add some randomness to the Life Span within
the Fragment rollout.
Speed Variation - (Scalar) This input data stream is used to override the
Variation [%] spinner value that is used to add some randomness to the fragment
speed within the Fragment rollout.
Motion Inheritance - (Scalar) This input data stream is used to override the M.
Inheritan [%] spinner value within the Fragment rollout.
Track Motion Inheritance - (Bool) This input data stream is used to override
the Track Motion Inheritance checkbox state within the Fragment rollout.
Thickness - (Scalar) This input data stream is used to override the Thickness
[%] spinner for the fragments within the Fragment rollout.
Thickness Size Dependence - (Bool) This input data stream is used to override
the Thickness Size Dependence checkbox state within the Fragment rollout.
Thickness Exclude Closed Fragments - (Bool) This input data stream is used
to override the Exclude Closed Fragments checkbox state within the Fragment
rollout.
Outside ID - (Integer) This input data stream is used to override the Outside ID
spinner for the fragments within the Fragment rollout.
Edges ID - (Integer) This input data stream is used to override the Edge ID
spinner for the fragments within the Fragment rollout.
Backside ID - (Integer) This input data stream is used to override the Backside
ID spinner for the fragments within the Fragment rollout.
Alignment Correction - (Bool) This input data stream is used to override the
Alignment Correction checkbox state within the Fragment rollout.
Remaining Type - (Integer) This input data stream takes an integer value that
represents how the Fragment Operator will manage the Remaining Mesh. Valid
input values are 0 through 2, where:
0 = None
1 = Hollow
2 = Solid
RThickness - (Scalar) This input data stream is used to override the Thickness
[%] spinner for the remaining mesh within the Fragment rollout.
ROutside ID - (Integer) This input data stream is used to override the Outside
ID spinner for the remaining mesh within the Fragment rollout.
REdges ID - (Integer) This input data stream is used to override the Edge ID
spinner for the remaining mesh within the Fragment rollout.
RBackside ID - (Integer) This input data stream is used to override the Inside ID
spinner for the remaining mesh within the Fragment rollout.
All Fragged Particles Die - (Bool) This input data stream is used to override the
All Faces Fragged then Die checkbox state within the Fragment rollout.
TS On - (Bool) This input data stream is used to override the Tessellation on/off
toggle switch within the Tessellate rollout. A True condition will turn the mask
on, while a False condition will turn the mask off.
TS Face Type - (Integer) This input data stream takes an integer value that
represents to what kind of geometry the tessellation algorithm will be applied in
order to subdivide the emitter. Valid input values are 0 and 1, where:
0 = Triangles
1 = Quads
TS Type - (Integer) This input data stream takes an integer value that represents
the tessellation algorithm to be used to subdivide the emitter. Valid input values
are 0 and 1, where:
0 = Edge
1 = Face-Center
TS Tension - (Scalar) This input data stream is used to override the Tension
spinner within the Tessellate rollout.
TS Iteration - (Integer) This input data stream takes an integer value that
represents the tessellation iterations to be used to subdivide the emitter. Valid
input values are 0 and 3, where:
0 = 1 iteration
1 = 2 iterations
2 = 3 iterations
3 = 4 iterations
TS Update Options - (Integer) This input data stream takes an integer value that
represents how the tessellation will be handled. Valid input values are 0 and 1,
where:
0 = Always
1 = When Rendering
Break Visible Edges Only - (Bool) when this input is active, the fragment node
will break the mesh at visible edges, only.
Random Seed - (Integer) inputs a random seed number that should be used as a
start value for all random functions within this Node.
Crack Spread - (Scalar) defines the maximum radius of the area to distribute
cracks of a pre-broken mesh over its surface. Within this radius the cracks will
be expanding in a linear manner, unless the Spread Gradient will be modified
from its default value.
Spread Gradient - (Alpha Gradient) controls the amount of "pre-tension" or
"pre-loaded" explosive power of an object. Moving the black color from its
default first position (left hand side) towards the right hand position will add
explosive power to the remaining mesh parts. Doing so will make the "cracks"
expand beyond the radius by adding the radius value to each new added
fragmented piece.
Spread Time - (Frame) specifies the time it takes to fully brake the object until
the specified radius is reached.
Segments - sets the amount of segments to create (subdivisions of the mesh)
RSegments - sets the amount of segments to create for the remaining mesh
(subdivisions of the mesh)
Operator Outputs
Born Particle - (Particle) This output data stream sends particle data for newly
created particle fragments to other operators. Every particle birth will activate all
rules connected to this particle data stream. As a result, this can be used to
directly assign a value to the particle.
Fragment Level - (Scalar) This output data stream represents the percentage of
the object hasn't been converted into fragments. So the value it projects before
the selected node fragments is 1.0 (meaning the object is intact), and then as
portions break off, the value decreases toward 0.0.
Rollout Menu
Group - Before you create any fragments, think about where you want to store
them. From the Group dropdown list you can select any particle group that
should be used to store the particle fragments.
Threshold - Change this spinner's value, or better, animate this value to break
off fragments based on their grayscale value when it becomes greater than the
Threshold spinner's value. As shown below, the sphere being used as a fragment
generator has a checker map applied to it. As the Threshold spinner is animated,
the fragments within the white area break off first, and are followed by the black
areas when the Threshold spinner value reaches 0.0.
Variation [%] - This spinner adds some randomness to the fragmentation order.
Usually the object breaks apart based on the threshold values stored at the
vertices of the emitter. This spinner changes this stored values randomly and this
can create a more realistic, chaotic look.
By default all of the emitter vertices
receive a fragmentation Threshold
value of 1.0 and this is altered by the
map or gradient applied.
This is one way to control the fragmentation - there is another that uses lighting
to help determine fragmentation. You can also control the emitter's threshold
value by illuminating the object's surface with a standard 3ds Max light. When
the object's surface illumination (the particle emitter) gets to a certain Threshold
value, the emitter becomes an object fragment. This makes it easy to create
object fragments in only those areas that are brightly lit - like by a laser blast.
That is what the next section of tools handles.
Activation Mask - The Fragment Operator is able to use any map or material to
control the object fragmentation in detail. Like other particle effects in
thinkingParticles, the Fragment Operator analyzes the grayscale values of the
map assigned to this mask. A pure white color will assign a value of 1.0 to
nearby particle emitter vertices and a black color will assign a value 0.0 to
nearby particle emitter vertices. All values in between will be assigned a
grayscale value relative to their brightness. Although RGB images will work for
this effect, it is recommended that you use only grayscale images to control the
object fragments.
The gradient above the Mask Map selector controls the fragmentation order
when no mask is used. If an image map or procedural material is applied, the
gradient is used as a placeholder for the values in the map or material. As an
example, imagine a checker bitmap. Where the checker pattern is white, those
areas of the object will fragment as soon as you animate the Threshold spinner
value down, while the black areas of the checker pattern will remain until the
Threshold value is set to 0.0. Any grayscale values in between will break off
when their relative values exceed that of the Threshold spinner.
You MUST animate the Threshold
spinner's value from 1.0 down to 0.0
to make an object break apart. This
will break parts of the object away
where the particle emitter vertices
contain higher values than the actual
Threshold value. If you do not
animate the Threshold value, a static
fragmented situation will be created.
Activate Light - activate this checkbox when you want the Fragment Operator
to control the fragmentation algorithms with standard 3ds Max lights. The
Threshold value sets the amount of illumination that is needed to create object
fragments. A Threshold value of 1.0 creates object fragments only when there is
a really bright spot on the objects surface.
PICK - To add a light to the listbox and use it to determine emitter
fragmentation, click on this button, then click on the light sources within your
3ds Max viewports. You can also use the H-key to bring up the Select By Name
dialog to choose lights in your scene.
REM. - To remove a light from the listbox, highlight it and then click this
button.
Helper Distance - check this option tu use helper particles or objects to activate
fragments
Threshold - sets a minimum distance the object needs to be to start a
fragmentation. When particles are used; this value will be multiplied with the
particle size to allow for a even deeper control of the effect.
Group - instead of picking individual objects; particles can be sued to activate
fragments as well.
PICK - to add an object to the listbox and use it to determine emitter
fragmentation, click on this button, then click on the objects within your 3ds
Max viewport.
REM. - To remove an object from the listbox, highlight it and then click this
button.
Crack Spreading - sets the maximum radius of the area to distribute cracks of a
pre-broken mesh over its surface. Within this radius the cracks will be expanding
in a linear manner, unless the Spread Gradient will be modified from its default
value.
Spread Gradient - controls the amount of "pre-tension" or "pre-loaded"
explosive power of an object. Moving the black color from its default first
position (left hand side) towards the right hand position will add explosive
power to the remaining mesh parts. Doing so will make the "cracks" expand
beyond the radius by adding the radius value to each new added fragmented
piece.
Spread Time - specifies the time it takes to fully brake the object until the
specified radius is reached.
Source Rollout Menu
No Fragments - Activate this checkbox to enter non-fragment mode. Fragments
aren't actually created, however this option can be a lifesaver when you want to
see the order in which your object activates its fragments. This can also be a
tremendous time saver for compositing tasks.
Break Visible Edges Only - when checked, visible edges will be broken into
fragments, only.
Single Faces - Choose this option to use all triangles as independent object
fragments. This option is useful when you want to simulate dust or very small
debris. The other two options - Smooth and Distance and Count allows you to
control the amount and size of the object fragments.
Smooth and Distance - When Smooth and Distance is chosen, two additional
parameters are also enabled (Smoothing Angle and Radius [%]). All fragments
with the same surface smoothing angle (set in the Smoothing spinner) will Use
the size (radius) as set in the Radius [%] parameter.
Smoothing Angle - This spinner controls the size of the fragments when
Smooth and Distance is checked. All fragments with the same surface
smoothing angle will then use the size (radius) as set in the Radius [%]
parameter to create fragments.
Radius [%] - This spinner sets the radius to be used for controlling fragments
when Smooth and Distance is checked. Radius [%] is measured as a percentage
of the object's bounding box size, so a larger percentage will result in bigger
fragment chunks.
Count - When this option is selected, the Count spinner beneath the From To
dropdown list is activated. As a result, you can set a specific number of
fragments to be created.
Count - This spinner's value controls the minimum number of fragments that
should be created. However, you should be aware that this parameter also
performs additional object tessellation in cases where the mesh isn't detailed
enough to create the number of chunks. In these cases, the mesh will be
adaptively subdivided to accommodate the Count value.
Random Seed - sets a random seed for the Fragment node, so that each
Fragment node behaves differently when using variations.
Sorting
From To - This dropdown list lets you choose how the fragmentation process
should start and evolve. The reference for up/down and left/right references the
local object axis.
Lifespan/Speed Rollout Menu
Life Span - This spinner sets the particle life for each fragment. All fragments
get the same life time when they are born.
Variation [%] - This spinner adds some random variation to the Life Span of
each fragment created by this operator. The Variation [%] value is a percentage
value that is added/subtracted to the original Life Span value. So if the Life Span
is set to 2 seconds and the Variation [%] spinner is set to 50%, the resulting
particle fragments have a maximum age of between 1 and 3 seconds.
Speed - The particle speed setting of the Fragment operator sets the particle
velocity for each fragment. All fragments inherit the same speed value when
they are born.
Variation [%] - This spinner adds some random variation to the Speed value for
each fragment created by this operator. The Variation [%] value is a percentage
value that is added/subtracted to the original Speed value. So if the Speed is set
to 10 and the Variation [%] spinner is set to 50%, then the resulting particle
fragments will have a maximum speed of between 5 and 15.
M Inheritan [%] - When the particle emitter is in motion before disassembling,
this spinner tells the fragments how much of the original object motion they
should inherit as they begin to break off. As this spinner represents a percentage,
a value of 100% tells the particles that they should inherit 100% of the motion of
the object's trajectory as it breaks off, while smaller values cause the fragments
to only inherit a portion of the original motion. This can be useful when doing
effects like meteors where you want the chunks to continue to trail behind as
they break off.
Track Motion Inheritance - When this checkbox is active, it lets you force the
particles to receive the motion inheritance information all the time. Imagine a
spinning object; to make the particles follow the spinning motion you would turn
this option on.
Fragment Shape Rollout Menu
Thickness [%] - This spinner sets the thickness of the fragmented geometry. At
a value of 0.0, the fragments are single-sided with no thickness. When greater
than zero, the fragments are extruded inward at fragmentation-time by the
amount specified to produce a solid appearance. When using thickness in your
fragments, the inner and outer surfaces of the fragments use identical smoothing;
and this smoothing is picked up from the object-based emitter. Worth noting is
that the edges of the fragments are not smoothed.
Be aware that using this spinner can
double or quadruple the number of
faces.
Thickness Size Dependen - Activate this checkbox when you want some
thickness variation in the fragments. Larger chunks will get the full Thickness
[%] while smaller fragments will get less thickness.
Segments - sets the amount of segments to create (subdivisions of the mesh)
Exclude Closed Fragments - Activate this checkbox when you want to avoid
applying thickness to fragments that already have thickness.
Outside ID - This spinner lets you assign a Material ID that should be used on
the outside faces of the fragments. In order to do this, be sure to assign a
Multi/Sub-Object material to the selected emitter.
Edge ID - This spinner lets you assign a Material ID that should be used on the
newly created edge faces of the fragments. In order to do this, be sure to assign a
Multi/Sub-Object material to the selected emitter.
Backside ID - This spinner lets you assign a Material ID that should be used on
the newly created inner faces of the fragments. In order to do this, be sure to
assign a Multi/Sub-Object material to the selected emitter.
Alignment Correction - No one knows how the particle fragments may be
rotated relative to one another through any other operator in thinkingParticles.
To ensure that the fragments are aligned along their original surface at birth,
activate this checkbox.
Remaining Shape Rollout Menu
The Fragment Operator is unique when it gets into creating particle fragments.
In contrast to other standard 3ds Max particle systems, Fragment can also
handle the remaining mesh of the fragmented object. The remaining mesh
refers to the geometry that still appears as the fragments break off. The options
are None, Hollow and Solid.
None: When this option is selected, the Fragment Operator will not have a
remaining mesh. As such, the entire object will disappear, and only as the
emitter's vertices exceed the Threshold spinner value, they appear as chunks.
This might look odd, but in combination with the No Fragments option you
may use this for perfect compositing.
Hollow: When this option is selected, you will be left with a hollow remaining
mesh. At the beginning of the fragmentation, the object appears solid, and then
pieces begin to break off. The result is that this effect looks like the object is
exploding into little pieces over time .
Solid: When this option is selected, the remaining mesh will continue to be a
complete solid object. This option is useful when you want to get an effect that
looks like as the fragments are peeled off or blown off. With clever use of
different Material IDs you can also create an effect of breaking a hull or battle
damage to a surface where debris flies off and yet you still have another raw
surface beneath.
Thickness [%] - This spinner sets the thickness of the remaining mesh. Values
greater than 0.0 produce a remaining mesh surface that is incrementally smaller
than the original emitter surface (to enhance the peeling effect when Solid is
chosen for the Remaining Mesh).
Segments - sets the amount of segments to create (subdivisions of the mesh)
Outside ID - This spinner lets you assign a Material ID that should be used on
the outside faces of the remaining mesh. In order to do this, be sure to assign a
Multi/Sub-Object material to the selected emitter.
Edge ID - This spinner lets you assign a Material ID that should be used on the
newly created edge faces of the remaining mesh. Understand that the only way
to see this material is when you choose Hollow as the remaining mesh
algorithm. In order to do this, be sure to assign a Multi/Sub-Object material to
the selected emitter.
Inside ID - This spinner lets you assign a Material ID that should be used on the
newly created inner faces of the remaining mesh. Understand that the only way
to see this material is when you choose Hollow as the remaining mesh
algorithm. In order to do this, be sure to assign a Multi/Sub-Object material to
the selected emitter.
All Faces Fragged then Die - Check this option to prevent "refragmentation".
Usually, whenever a True condition is sent to the ON input data stream, the
fragmentation is started again. In some situations this might not be the look you
want to get and so you would activate this checkbox to prevent this particular
effect from starting again.
Tessellate Rollout Menu
ON - If this button is checked, the object is tessellated by a function that works
like the Tessellate modifier in 3ds Max. The tessellation is applied to the whole
object. Be aware that each iteration doubles the number of triangles.
Operate On - These two options specify whether to perform the tessellation on
the triangular faces or on polygonal facets (quads created by visible edges).
Triangles: When this option is chosen, the tessellation operates on the selection
as a set of triangular faces.
Polygons: When this option is chosen, the tessallation algorithm divides
polygonal facets. For example, using the polygonal method on the side of a box
results in cross-shaped edges using the Edge method, and X-shaped edges using
the Face-Center method.
Edge - This tessellation method divides the face or polygon from its center point
outward to the midpoint of each edge. When applied to a triangular face, it also
divides unselected faces that share edges with the selected faces.
Face-Center - This tessellation method divides the face from its center point to
the vertex corners.
Tension - This spinner determines if the new faces are flat, concave, or convex
after Edge tessellation. A positive value rounds faces by pushing vertices
outward. A negative value creates concave faces by pulling vertices inward. A
setting of 0 keeps the faces flat. While designed for the Face-Center algorithm, it
also works with the Edge/Polygon method.
Iterations - These options specifies how many times the tessellation algorithm is
applied. For example, setting Iterations to 2 is similar to clicking the Tessellation
button twice in an Editable Mesh.
Update Options -Tessellation is an expensive feature that might take some time
to finish, especially if you use thousands of fragments within a complex mesh.
This group of controls allows you to determine how the mesh is updated.
Always - Select this option to get immediate updates at all times.
When Rendering - This updates (tessellates) the mesh at render time only.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
HFragmenter Operator
thinkingParticles' HFragmenter redefines your way of working with special
effects on destruction sequences. This thinkingParticles operator is one of the
most powerful features implemented so far, it's pretty complex and flexible
beyond imagination.
We do suggest to take your time to learn this powerful new tool, one way to get
started with HFragmenter is to check out all the sample scenes that came with
thinkingParticles.
Chaos Forced into Structure!
Hfragmenter is all about structuring complex physics into one single easy to use
interface and keeping full control at all times. HFragmenter is a Hierarchical
Destrcution (fragmentation) set of tools. It's not only one thinkingParticles node
it is a set of multiple tools, all inter-linked and working together with each other.
There are 3 tools that come with thinkingParticles that are meant to work
together and offer automatic direct linking between each other. The tools are:
HFragmenter thinkingParticles Node
HFragmenter Modifier
TP Collapse
Structural Integrity
The purpose of the tools listed above is to help you in creating a structural
skeleton that is based on freely adjustable physical parameters and hierarchical
ordering of components of the object to be destroyed. This unique approach lets
you freely define the breaking parts of an object along with when and how they
will break off. Once a structural skeleton has been defined, it can be altered and
adjusted to your needs any time.
There is one main rule to follow with this tool-set the "final" object that is to be
broken needs to be one mesh. It can not be individual objects, all faces or parts
of the object need to be collapsed into one mesh. Find below an example to
illustrate the one mesh rule.
Example:
You want to destroy a model of a
complete building. Some of the
components of a building may be:
Roof Shingles
Roof Beams
Walls
Windows
Window Frames
Doors
Chairs
Sofas
Chimney
Tables
All of the above objects can easily
add up to a count of hundreds of
objects or even thousands.
Remember, all those objects need to
end up in one single Mesh. The
magic of HFragmenter comes into
play when the HFragmenter
Modifier is used, after the model is
constructed, to define the
"destruction groups," by simply
selecting the elements in that single
mesh and naming them accordingly.
Using proper hierarchical structuring
allows to easily define the order of
destruction and the "chunks" that
should break apart from the main
mesh piece by piece
What if I do not want to setup the structure "afterwards"?
Collapsing thousands of objects into one mesh and then assigning each element
to a specific group can be a really tiresome task.
While HFragmenter Modifier offers all the necessary tools to define a structural
skeleton in no time at all - there is another tool that can help in getting complex
setups much faster. The 3ds Max utility TP Collapse automatically prepares
complex 3ds Max rigs to be used by HFragmenter Modifier; in fact it
automatically collapses multiple linked objects into one Mesh and assigns proper
Fragmenter Groups. To learn more about the TP Collapse Utility CLICK HERE
Why one Mesh Only?
The main idea behind the "one mesh" solution is to enable the shape collision
engine to handle huge amounts of complex objects interacting with each other.
"Carving out" chunks of debris or fragments from one single mesh helps the
collision engine to interact and calculate only those parts of the object relevant to
the actual effect at that time. Another key advantage of the "one mesh" approach
is the preservation of mass that comes for free by using the one mesh approach.
Imagine a 3D model of a huge building with several stories and each level of the
building has multiple rooms and assets in it like chairs, tables, doors,
carpets,lamps and so on. To simulate a total collapse of such a building caused
by an earth quake for example it would be a massive task for the physics engine
to handle every single object on its own. It's more efficient to start breaking the
object off as the disaster progresses through the structure and as the building
breaks the individual components can be released as well.
Operator Inputs
ON - feed a "True" value into this input to enable the operator and its
functionality.
Time - every operator can have its own "local" time, you may feed any Time
value into this input.
Activation Value - when connected, this input overwrites the "Value" spinner
control and feeds in the value.
Activation Code - to procedurally control the activation of the fragmentation "at
will", you may feed in any value to this input.
Joint Break Code - to release (break) one or multiple joints you may use this
input to specify the value that will be used to break a joint.
Joint Break Use Light - to directly control the "Use Light" switch for breaking
joints, connect this input to any other operator offering a boolean result/value.
Activation Use Light - connect any operator to this boolean input to control the
activation/deactivation of the global "Use Light" switch for Fragment groups.
Activation Map Multiplier - to procedurally control the Map Multiplier value,
connect any operator to this input.
Operator Outputs
*Born Particle - outputs the particle data of the "just created" particle
(fragment). This is an Initiator output - this means this output activates
connected nodes as well!
*Born Node - outputs the node data of the relevant object that was used ot
create the fragment.
*Born Node ID - outputs the thinkingParicles node ID of the object used to
create the fragments. The first picked object is Node ID = 0
*Parent Particle - outputs the "parent" particle, it's the particle that was
previously a fragment and can be used to fragment again - or it is the first
particle (the original).
Rollout Menu
Pick- click this button to enter Object pick mode. Pick one or many many
objects from within the scene to bring it into the HFragmenter Operator.
REM.- removes the selected object
Unhide- unhides the selected object.
Activation
In the Activation menu section you'll find all controls to "trigger" the breaking
(fragmentation) events. It is important to remember that any trigger value set to 0
(zero) means that the relevant trigger is deactivated (off).
Value - sets the global trigger "breaking
value", this parameter value is compared
to each single Position parameter in the
hierarchy level as set in the
HFragmenter Modifier section of the
dialog.
Trigger Values like Value, Map,
Code or Lights set here will trigger a
breaking of the object based on the
values set in all of the hierarchy
levels found in the FGroup menu
section of this dialog.
Code - is a fixed number used to initiate
an object breaking on "will". Whenever
this value is smaller or equal to the Code parameter in the hierarchy level, as set
in the HFragmenter Modifier section of the dialog, the object is broken at the
specified hierarchy level. This Trigger overrules all other triggers on breaking an
object.
Map - defines the breaking trigger value for the hierarchy levels by using a
standard 3ds Max texture map. The trigger values are defined as: black color = 0
and white color = 1. This is also the value you would use in the Map parameter
found in the FGroup menu section of the Hierarchy level to brake.
Map Multiplier - adjusts the texture map values by multiplying the result
gathered from the texture map by this value.
Use Lights - when checked, the illumination strength of picked light sources can
be used to define the Hierarchical breaking of an object.
Pick - lets you pick any light in the scene
Rem - removes the selected light form the list of lights
Important
All triggers like Value, Map, Lights
work fully independent of each
other; there is no interaction or
connecten between them!
Spreading Size - is a radius set in world units. Using this feature will create a
progressive "breaking" effect of an object. This "search" or affected radius is
increased in size over time (controlled by Spreading Time) it is perfect to
simulate shock waves running through a complex object hierarchy. All objects
(picked for this operator) falling into this radius will be broken off , without
testing any other possible trigger events (Map,Light etc)!
Spreading Time - defines the time the radius needs to grow in size (in frames:
standard 3ds Max system time).
Spreading Gradient - lets you define the animation curve of the spreading
radius; this works similarly to an ease-in or ease-out curve. The gradient is
defined by the left hand side (representing radius size 0) and the right hand side
(representing size 100%). A Spreading Time value of 30 frames will look "into"
this gradient 30 times (30 samples). This method of manipulation offers full
control over the radius size animation. A black color will create a radius of 0
while a white color in the gradient will create a size of 100%.
Shape
This rollout menu section makes most sense with objects fragmenting or
breaking into individual faces and not complete elements. To understand the
concept of 3ds Max elements check out the section about: What is an Element.
All controls described below, create a "volume" out of individual faces by
extruding the face.
Thickness - used to define the thickness of the fragments in 3ds Max world
units.
Segments - sets the amount of segmentation along the extrude.
Outside ID - defines the Material ID for the original faces created before the
extrude. A value of 0 will use the original material ID.
Edge ID - sets the edge material ID (faces around the extrude surface). A value
of 0 will use the material ID of the original face that will be extruded.
Backside ID - defines the Backside material ID (the cap of the extrude). A value
of 0 will use the same material ID as the original face that will be extruded.
Joints
The joints menu section offers controls to define breaking triggers for Dynamics
joints. HFragmenter and HFragmenter Modifier together build the foundation of
the most comprehensive destruction tools ever developed for 3ds Max. Besides
breaking object hierarchies into elements, Physics Dynamics based joints can
also be used to define a complex object structure for breaking.
Collision - each HFragmenter can be assigned to one specific shape collision
(SC) engine. Keep in mind that only the selected Shape Collision engine is
responsible for the simulation of the breaking effect.
Joint Break Code - defines the Joint breaking trigger value, this value is similar
to the Code parameter described in the Activation menu section.
Use Lights to Break - when checked and when lights are picked from the scene,
the Joints can be broken off by the illumination levels created by the selected
light sources.
HFragmenter Modifier
Fragmenter Group Selected
Joint Selected
HFragmenter uses the HFragmenter Modifier to define the structural skeleton of
the object that needs to be broken up. Without the Modifier to build the
hierarchy and define the elements of an object, the HFragmenter operator is
useless! Keep in mind that a proper setup of the structural skeleton and pattern
will save you an immense amount of after work in the long run! Every minute or
hour spent in planning the structural skeleton of an object saves you days of readjusting or re-simming physics! Take this as advice for good practice.
The Treeview of this dialog shows 2 different sub-object levels of the
HFragment modifier within the same dialog window. The first entry (by default
is called FGroup) shows the Hierarchy of the individual components of which
the object is made. Depending on the selection sets created with the HFragment
Modifier, the Faces or Elements will be visible all grouped in separate levels or
sub-levels.
In addition to the above, all available Joints will also be shown in this dialog.
Clicking on each Joint's name will show the corresponding rollout menu with all
its parameters. Unfolding (click the + sign) a Joint in the Treeview will reveal
the object names of the "Joint connections".
List View - reflects the object breaking hierarchy as a standard collapsible tree
view. Every "level" of the hierarchy can be selected within this tree view and the
relevant settings will be shown in the FGroup Rollout Menu down below. In
addition to the Faces and Elements, Joints are shown in this Treeview as well.
Fragment Group Selected (FGroup)
The following properties are available when a FGroup is selected in the
Treeview
Group - sets the particle group used for the created fragments of "that"
(selected) level of the hierarchy.
Activation
Value - sets the value at which breaking of this level of the hierarchy should be
done. Whenever Value equals or is bigger than the global Trigger value the
objects in that "level" are broken off (fragmented).
Code - if this fixed number is equal or bigger than the global Trigger value of
the same name, the level of this hierarchy is broken off along with all sub levels
underneath this hierarchy.
Map - sets the value that needs to be equal or bigger as compared to the global
texture map trigger, to break off the hierarchy at this level.
Light - defines a threshold for the Illumination value that needs to be equal to
this value or higher, for all picked light sources, to trigger a fragmentation.
Spreading - check this option to allow the selected (and only the selected)
Hierarchy Level to be affected by the "spreading" function of the HFragmenter.
Turn this option off to disable for the selected Hierarchy level the "spreading"
function.
Use Lights - when checked, illumination strength of picked light sources can be
used to define the Hierarchical breaking of an object.
When a light is picked in the FGroup
Rollout, the lights picked in the
global menu section above will not
be used at all for this selected
Hierarchy Level. The selected
light(s) will only affect one
Hierarchy Level down below; SubHierarchy levels will not be affected
Pick - lets you pick any light in the scene
Rem - removes the selected light form the list of lights
Joint Selected
The properties listed below will show up when a Joint is selected.
Breakable - check this option to make a joint breakable. Every joint type can be
turned into a "breaking" joint, so whenever any of the trigger values are kicking
in, the link will be automatically broken.
Velocity - defines the speed at which the objects, connected to the joint, need to
travel away to break the joint.
Rotation - sets the maximum rotational speed a joint can endure before it breaks
off. This simulates the centrifugal force that may appear on fast rotating masses.
Code - sets a definable trigger number; whenever this number is set the joint is
broken off
Light - sets the lights intensity that need to be reached to break off a joint. The
illumination is measured at the center of the joint.
Collision - check this option to enable self collision between joint partners.
Friction - sets the friction amount for the selected joint to create a more natural
looking dampening system of joints.
Important
The Light values set here behave like
a threshold; if the light value is
brighter than the value set here, the
hierarchy level is broken off.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Born Operator
The Born Operator is very similar to the Position Born operator except that it
simply acts as a birth event. In contrast to the Position Born operator, the Born
operator does not tell the particles where to be born, how fast they should move
or in what direction they should travel. In essence, the Born operator is a
stripped down version of the Position Born operator that gives the user the
ability to custom build what attributes need to be assigned to the particles.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Birth Type - (Integer) This input data stream sets which of the three birth types
will be used for the creation of particles (e.g. - Count, Particles / s, Pistol Shot).
The range of integer values goes from 0 to 2, with 0 = Count, 1 = Particles / s, 2
= Pistol Shot.
Count - (Integer) This input data stream provides the value for the number of
particles to be created at any time. In order for the connected operator to be used,
the Birth Type input must be set to Count in the rollout, or there must be a
connected operator that sets the Birth Type to 0.
Rate - (Scalar) This input data stream provides the value for the number of
particles to be created per second. In order for the connected operator to be used,
the Birth Type input must be set to Particles / s in the rollout, or there must be a
connected operator that sets the Birth Type to 1.
Shot - (Integer) This input data stream provides the value for the number of
particles to be created at one time. In order for the connected operator to be used,
the Birth Type input must be set to Pistol Shot in the rollout, or there must be a
connected operator that sets the Birth Type to 2.
Life Span - (Life Span) This input data stream supplies the particle life span for
all particles created within the Position Born operator.
Life Variation - (Scalar) This input data stream provides a variation amount for
the particle life span for all particles created within the Position Born operator.
Operator Outputs
Born Particle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle.
Particle Frame Counter - (Integer) This output data stream provides a
"counter-like" function that holds the current number of created particles at the
given frame. This counter is reset per frame and starts over again at 0. As a
result, you can use this output data when you want to trigger other rules based on
the creation of a certain number of particles.
Do not confuse this value with the
lifetime particle ID every particle
has.
Particle Animation Counter - (Integer) This output data stream provides a
"counter-like" function that holds the current number of created particles at the
given point in the animation. This counter is NOT reset per frame and
accumulates the total number of particles created over the course of the
animation. As a result, you can use this output data when you want to trigger
other rules based on the creation of a certain number of particles.
Rollout Menu
Group - When particles are created, a target particle group must be selected.
Choose any particle group from this group dropdown list to store the newly
created particles in.
Count - When this radio button is selected the spinner to it's right sets the
maximum amount of particles that will be created at any time.
Particles / (s) - When this radio button is selected the spinner to its right
determines how many particles per second are created. Remember this simple
formula when determining how many particles will be emitted per frame:
number of seconds = amount of frames/FPS rate. This option is most useful for
fast moving objects such as rocket trails, because there is no frame dependency
that might cause trouble.
Pistol Shot - When this radio button is selected, particle creation is set to go all
at once. Be aware that you can trigger an On/Off activation cycle to continually
emit blocks of particles from the Born operator.
In contrast to standard 3ds Max particle systems, this feature gives you the
ability to exactly control the number of particles born per activation event.
Connecting an animated Bool operator to the On input data stream can help
create this kind of effect.
Per Call - when checked, new particles will be created on each call of this
operator. Note this feature is only valid for the pistol shot mode! With every call
of the operator, a particle is created. In all other cases particles will be created
when the On input switches from False to True.
Life Span - This spinner sets the maximum life time a particle may have before
it is killed.
Variation [%] - This spinner assigns different Life Span values for each particle
created by the Born operator. A Variation value of 100% means that every
particle created will receive a different Life Span value - from 0 to the value set
within the Life Span spinner.
Random Seed - Each particle generator carries its own random seed. Change
this value to make the particles behave differently from other Born operators.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
FlowEmitter
The FlowEmitter operator is a particle generator
meant to be used for fluid simulations. However,
it is flexible enough to serve as a all purpose
particle generator as well.
FlowEmitter solves a key issue many SPH
particle fluid simulations suffer from; visible
banding or layering when particles are emitted at
different or changing rates. Achieving a constant
flow of particles while keeping the distance
between each particle the same, even when the
rate of particles generated drops, is a challenging
task for the software.
As shown in the illustration above the flow rate or in other words the generation
of particles per time does not match the current speed or time per particles
generated. This mismatch will create those discs or bands of particles. Now,
imagine you have an animated amount of particles or the size of the emitter
surface changes; the flow of particles will break down and show artifacts.
All those necessary calculations are done by this emitter type automatically. It is
the first time a fluid simulation system allows you to smoothly adjust the flow
rate of a fluid without creating banding artifacts or other issues caused by an
imbalance of particle density.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) - This input data stream reads in the currently selected
particle group to the FlowEmitter operator.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
BirthParticle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle.
FrameCounter - (Integer) This output data stream provides a "counter-like"
function that holds the current number of created particles at the given frame.
This counter is reset per frame and starts over again at 0. As a result, you can
use this output data when you want to trigger other rules based on the creation of
a certain number of particles.
Animation Counter - (Integer) This output data stream provides a "counterlike" function that holds the current number of created particles at the given
point in the animation. This counter is NOT reset per frame and accumulates the
total number of particles created over the course of the animation. As a result,
you can use this output data when you want to trigger other rules based on the
creation of a certain number of particles.
Rollout Menu
Group - lets you select the particle group to born the new particles into.
Shape - defines the emitter shape. It is either Circular or Square. NOTE: the
emitter particle scale is used to define any scaling that might apply. By scaling
the particle you can create rectangles or ellipses as emitters.
Type - sets the method to be used to control a constant flow and particle density.
The options are RatePerArea or Raster.
RatePerArea - when selected, particles are randomly spread over the
initial surface area.
Raster - use this option to create a even raster across the
surface area of the emitter.
Globals Group of Controls
Size Factor - this value is multiplied with the particle size
defines the actual size of the particle emitter (diameter).
Speed - sets the particle speed at birth.
Motion Inheritance - sets a factor of how much a motion
of the emitter should be added to the particle motion. A
value of 1 represents an equal speed of emitter and born
particles. Higher values will increase the particle motion
inheritance speed.
Spread Angle - sets an angle for the particles that will be
used to emit in relation to the emitter plane. This option
allows you to create emitting cones.
Gate Values
The main idea of the FlowEmitter is to use it in conjunction with fluid
simulations. Controlling the flow rate with changing particle sizes or amounts is
a real challenge for the system. This emitter type will always keep the particle
density constant to ensure a closed and even stream of particles. While you could
animate the Size factor to simulate a water tap being shut off, another more
elegant method would be using the X-Gate or Y-Gate option of this emitter. The
Gates work exactly like a valve or a faucet. The opening of the emitter gets
restricted by those parameters, either in X or Y direction
X-Gate Value - constricts the emitter flow in X-Axis. Animate this value to dial
down the flow of particles while keeping its proper density.
Y-Gate Value - constricts the emitter flow in Y-Axis. Animate this value to dial
down the flow of particles while keeping its proper density.
As shown in the illustration above the X-Gate value is blocking a 3rd of the
emitter opening.
Rate Per Area
Rate per Second - sets the amount of particles born per second.
Rate Area - defines the ratio between the amount of particles by area. The
specified value is the edge length of the emitter.
Raster
Raster Size - defines the maximum distance between each particle emitter.
Warning! Be careful too low distances can easily create millions of emitters
and particles.
Variation - defines a random variation on the position of the particle emitters. A
value of 1 will place emitters in a completely random way.
Limit Count / Sub-sample - restricts the maximum amount of particles created
by this emitter within a sub-sample simulation step.
Show - check this option to enable the viewport visualization of the emitters and
Gates.
Pouring
On - when checked, the Pouring effect is activated
Direction - defines the "what is down" direction in the
scene. In 3ds Max talk; Negative-Z means down. This is
important for the automatic pouring calculation and shut
off.
Slope Angle - sets an angle at which fluid (particles) start
to flow. When this angle is reached particles will slowly
start to pour out of the emitter.
Bellied - is used to adjust the volume of a virtual bottle to hold a certain amount
of particles. A value of 1 represents a straight cylinder. A value of 3 means that
the curvature of the bottle (container) is 3 times the opening.
Volume -sets the virtual amount of fluid of the container. This defines the
amount of fluid a container can hold. This is alos used to calculate when a
container is emptied.
Glucking - sets the amount of constriction for the fluid flow. A sine wave is used
to simulate the Glucking effect
Gluck Overshoot - defines the top of the sine wave of the fluid (more particles
at the top).
Gluck Frequency - sets the frequency of the Glucking.
Gluck Frequency Shift - adds a shift to the Glucking effect to create a more
natural random behavior.
Offset
The FlowEmitter is positioned with the help of a particle input. This particle
acts as the emitter particle. Most of the time it would be original position of a
helper object or the particle itself. However, an object my be used as well which
is brought into a simulation with the help of the ObjectToParticle operator.
Because an object would become a particle and the particle would be placed at
its pivot it is not necessarily the position to emit particles from. For such cases
the Offset function was created, to ensure that particles are emitting at the
correct position on or in the object.
X Offset - sets an offset amount for particle emitter position in relation to the
emitter particle.
Y Offset - sets an offset amount for particle emitter position in relation to the
emitter particle.
Z Offset - sets an offset amount for particle emitter position in relation to the
emitter particle.
X Rotation - sets a rotational offset amount for particle emitter position in
relation to the emitter particle.
Y Rotation - sets a rotational offset amount for particle emitter position in
relation to the emitter particle.
Z Rotation - sets a rotational offset amount for particle emitter position in
relation to the emitter particle.
©2017, cebas Visual Technology Inc.
thinkingParticles 6.6
InitialState
The initial state operator acts as a particle generator which allows you to "freeze"
any particle simulation state at a specific time. All particle data at that specific
time can be written to the disk drive for later continuation of a simulation or any
particle effect.
Operator Inputs
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
On - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
PerParticle - (Particle) - This input data stream reads in the currently selected
particle group and creates an instance for each particle and uses the saved initial
state to place the particles.
Position - (Position) This input data stream feeds a position value in and sets the
point in space used for particle emission. Be aware that this position input is not
needed when a Particle input (above) is connected unless you wish to create
particles in a different location.
Alignment - (Alignment) This input data stream is used to set the initial
alignment of the particles when they are born.
Scale - (Scale) This input data stream is used to set the initial scale of the
particle cloud when they are born.
All other inputs are the equivalent to the user interface controls.
Operator Outputs
BornParticle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle.
InSaveMode - will be True when Save Mode is active in all other cases it will
be False.
Rollout Menu
Source - selects the particle group to be used for either
saving the snapshot of a particle simulation or when loading
it into a new scene.
Include Sub Group - check this option to include the
subgroups as specified in the Source selection.
Zero Linear Velocity - this will set all velocities to zero
when loading back the initial state.
Zero Angular Velocity - check this option to remove all
angular (rotational) velocities when loading back the initial
state of the particles.
Save Mode - check this option to turn on the save mode.
When off, the operator is in generator mode.
Save State - press this button to save the particle state of the selected particle
group to hard disk.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
LayerToParticle
This operator offers a great new way to automate special effects pipelines.
Artists, not necessarily trained on thinkingParticles, are able to modify or add
objects to a thinkingParticles simulation without even knowing how the FX
setup works. 3D scene objects added to one or multiple layers are automatically
tracked by this operator and become part of the simulation without any further
interaction by the user.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Tracking - (Integer) allows to select the tracking method of this operato.
Possible options are:
0 - None, objects will be taken at their initial and original position and
rotation.
1 - Initial, takes the full object transformation into account including
possible velocities
2 - ObjectToParticle, the animation of the object will be tracked over
time and the particles will follow the object's position.
Instance Shape - (Bool) enables or disables shape instancing for
thinkingParticles
Operator Outputs
Born Particle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle. Note this output only occurs when the particle is
born.
Born Node - (Node) This output data stream sends the current node ID used to
create particles. This can be useful for other Operators that have a Node input
data stream for keying off of the same object.
Rollout Menus
Group - As is the normal procedure inside of thinkingParticles, you need to tell
the system where to store the particles when you create or modify them. Choose
any particle group from the dropdown list to store the newly created object
particles.
Layer String
Input Text Field - Use * to show a list of all available layers. One layer may be
selected form this list or multiple by using the wildcard character *. All objects
form the scene created or removed form this layer will be mirrored as
thinkingParticles objects (particles). Be careful with the layer setup!
Node String
Use the * wildcard to list all objects on that layer and to make them part of a
thinkingParticles simulation. You may also use a name plus the wildcard
character to specifically select individual objects from the above layer.
Tracking
None - when this option is chosen, no tracking will happen - the initial position
and rotation will be taken.
Initial - takes the original/initial object transformation into account when
creating/instancing the object into thinkingParticles.
Object to Particle - When this option is active, the animation of the object will
be tracked over time and the particles will follow the object position.
Instance Shape - thinkingParticles only affects the transformation matrix of the
original object. In most situations this is what you want. However, you need to
set this option when you want to use fragmentation effects or other more
advanced effects that deform or change the mesh definition of the object that is
turned into a particle.
Hide - This button provides the quick ability to hide the selected object in the
3ds Max viewports. Generally speaking, when you create an object for use as a
particle inside of thinkingParticles, it is done solely for that purpose. Therefore,
it's a good idea to hide that original object before you render.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
LayerToParticleData
This operator can be used to access and modify the LayerToParticle operator
from within any DynamicSet hierarchy. This "satellite" operator needs you to
select the LayerToParticle operator you wish to access and modify.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) - This input data stream reads in the currently selected
particle group to the Position Born operator.
Tracking - (Integer) allows to select the tracking method of this operato.
Possible options are:
0 - None, objects will be taken at their initial and original position and
rotation.
1 - Initial, takes the full object transformation into account including
possible velocities
2 - ObjectToParticle, the animation of the object will be tracked over
time and the particles will follow the object's position.
Operator Outputs
IsImported - (Bool) this output becomes True whenever the particle was created
by the selected LayerToParticle operator.
Tracking - (Integer) outputs the current tracking method for the particle
Node - (Node) outputs the node ID of the original scene object.
Rollout Menus
LayerToParticle - this drop down menu lets you select a specific
LayerToParticle operator across DynamicSets.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
MatterWaves Operator
The MatterWaves Operator lets you create amazing particle animations based on
multiple materials and maps that let you control every aspect of each particle.
MatterWaves is a highly advanced particle system operator for thinkingParticles
that offers features you usually find only in very high end animation packages.
To guarantee a flawless integration into 3ds Max, many new programming
techniques had to be invented to accommodate what MatterWaves brings to the
table. One of the amazing new technologies exclusively developed for
MatterWaves is called Multi-Layer Particle Control (MLPC). This technology
makes it possible to generate particle emitters based on multiple material maps at
the same time. It is this advanced technology that sets this particular particle
Generator apart from anything else available.
MatterWaves is a time based
particle system and as such, it
usually does not use frames as its
timing base. Nearly every parameter
in MatterWaves is based on time
(seconds) so be sure to remember
this when you create your
animations using this operator.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group to the MatterWaves Operator.
Life Span - (Life Span) This input data stream supplies the particle life span for
all particles created within the MatterWaves Operator.
Speed - (Speed) This input data stream sets the speed for the particles generated
within the MatterWaves Operator.
Direction - (Direction) This input data stream sets the directional vector for the
emission of the particles created within the MatterWaves Operator.
Spin - (Spin) This input data stream is used to provide the angular direction
value for the born particles to use for their motion.
Size - (Size) This input data stream sets the size in world units of the particles
created within the MatterWaves Operator.
Mass - (Mass) This input data stream sets the mass of the particles created
within the MatterWaves Operator.
Alignment - (Alignment) This input data stream is used to set the initial
alignment of the particles when they are born.
Node - (Node) This input data stream is used to feed in an object to be used as
the emission source for the MatterWaves Operator. If you input a node from this
connection, it will override the selection button within the Pick Object Based
Emitter.
Attack - (Scalar) This input data stream is used to override the Time(s) Attack
spinner in the MatterWaves rollout.
Sustain - (Scalar) This input data stream is used to override the Time(s) Sustain
spinner in the MatterWaves rollout.
Attack & Sustain Gradient - (Alpha Gradient) This input data stream is for
future usage (i.e. - it is not currently active) and will be used to override the
gradient ramp that controls the Attack and Sustain gradient within the
MatterWaves rollout.
Birth Type - (Integer) This input data stream takes an integer value that
represents the emission type the particles will use. Valid input values are 0
through 2, where:
0 = Count
1 = Particles / s
2 = Pistol Shot
Count - (Integer) This input data stream is used to override the Count spinner
within the MatterWaves rollout.
Rate - (Scalar) This input data stream is used to override the Particles/s spinner
within the MatterWaves rollout.
Shot - (Integer) This input data stream is used to override the Pistol Shot spinner
within the MatterWaves rollout.
Per Emitter - (Bool) This input data stream is used to override the Per Emitter
checkbox state within the MatterWaves rollout.
Per Emitter Activation - (Bool) This input data stream is used to override the
Per Emitter Activation checkbox state within the MatterWaves rollout.
Life Variation - (Scalar) This input data stream is used to override the Variation
% spinner value for the Life Span (s) within the MatterWaves rollout.
Life Variation Mask - (Alpha Gradient) This input data stream is for future
usage (i.e. - it is not currently active) and will be used to override the gradient
ramp that controls the Life Span (s) gradient within the MatterWaves rollout.
Life Mask - (Texture Map) This input data stream is used to override the
material map used within the Life Span (s) Mask.
Life Mask ON - (Bool) This input data stream is used to override the On/Off
toggle for the Life Span (s) Mask control. A True condition turns the mask on,
while a False condition turns it off.
Speed Variation - (Scalar) This input data stream is used to override the
Variation % spinner value for the Speed settings within the MatterWaves rollout.
Speed Mask Gradient - (Alpha Gradient) This input data stream is for future
usage (i.e. - it is not currently active) and will be used to override the gradient
ramp that controls the Speed gradient within the MatterWaves rollout.
Speed Mask - (Texture Map) This input data stream is used to override the
material map used within the Speed Mask.
Speed Mask ON - (Bool) This input data stream is used to override the On/Off
toggle for the Speed Mask control. A True condition turns the mask on, while a
False condition turns it off.
Speed SizeDependence ON - (Bool) This input data stream is used to override
the Size Dep. checkbox state within the MatterWaves rollout.
Speed SizeDependence - (Scalar) This input data stream is used to override the
Size Dep. spinner value within the MatterWaves rollout.
Size Variation - (Scalar) This input data stream is used to override the Variation
% spinner value for the Size settings within the MatterWaves rollout.
Size Mask Gradient - (Alpha Gradient) This input data stream is for future
usage (i.e. - it is not currently active) and will be used to override the gradient
ramp that controls the Size gradient within the MatterWaves rollout.
Size Mask - (Texture Map) This input data stream is used to override the
material map used within the Size Mask.
Size Mask ON - (Bool) This input data stream is used to override the On/Off
toggle for the Size Mask control. A True condition turns the mask on, while a
False condition turns it off.
Distance - (Distance) This input data stream is used to override the Emit
Distance spinner within the MatterWaves rollout.
Distance Variation - (Scalar) This input data stream is used to override the
Variation % spinner value for the Emit Distance settings within the MatterWaves
rollout.
Distance Mask Gradient - (Alpha Gradient) This input data stream is for future
usage (i.e. - it is not currently active) and will be used to override the gradient
ramp that controls the Emit Distance gradient within the MatterWaves rollout.
Distance Mask - (Texture Map) This input data stream is used to override the
material map used within the Emit Distance Mask.
Distance Mask ON - (Bool) This input data stream is used to override the
On/Off toggle for the Emit Distance Mask control. A True condition turns the
mask on, while a False condition turns it off.
Distance Direction - (Integer) This input data stream takes an integer value that
represents the direction offset type the particles will use. Valid input values are 0
and 1, where:
0 = In Face Normal Direction
1 = In Emit Direction
Motion Inheritance - (Scalar) This input data stream is used to override the
Motion Inheritance % spinner within the MatterWaves rollout.
Motion Inheritance Variation - (Scalar) This input data stream is used to
override the Variation % spinner value for the Motion Inheritance % settings
within the MatterWaves rollout.
Rotation Inheritance - (Scalar) This input data stream is used to override the
Rotation Inheritance % spinner within the MatterWaves rollout.
Rotation Inheritance Variation - (Scalar) This input data stream is used to
override the Variation % spinner value for the Rotation Inheritance % settings
within the MatterWaves rollout.
In Viewport - (Scalar) This input data stream is used to override the In Viewport
[%] spinner within the MatterWaves rollout.
Random Seed - (Random Seed) This input data stream is used to override the
Random Seed spinner within the MatterWaves rollout.
Use Material ID - (Bool) This input data stream is used to override the Mat. ID
checkbox state within the Emitter rollout.
Material ID - (Integer) This input data stream is used to override the Mat. ID
spinner value within the Emitter rollout.
Use Smoothing Group - (Bool) This input data stream is used to override the
Sm. Group checkbox state within the Emitter rollout.
Smoothing Group - (Integer) This input data stream is used to override the Sm.
Group spinner value within the Emitter rollout.
Use Selected Faces - (Bool) This input data stream is used to override the
Selected Face checkbox state within the Emitter rollout.
Face Reduce - (Integer) This input data stream is used to override the Face
Reduce spinner value within the Emitter rollout.
Use UV Channel - (Bool) This input data stream is used to override the
Coordinates checkbox state within the Emitter rollout.
UV Channel - (Integer) This input data stream is used to override the
Coordinates spinner value within the Emitter rollout.
Clip UV - (Bool) This input data stream is used to override the UVW Clipping
checkbox state within the Emitter rollout.
U Emitter - (Integer) This input data stream is used to override the U Emitter
spinner value within the Emitter rollout.
V Emitter - (Integer) This input data stream is used to override the V Emitter
spinner value within the Emitter rollout.
Random Distribution - (Bool) This input data stream is used to override the
Random checkbox state within the Emitter rollout.
Show Emitter - (Bool) This input data stream is used to override the Show
checkbox state within the Emitter rollout.
Use Active Emitter Only - (Bool) This input data stream is used to override the
Use Active Emitter Only checkbox state within the Emitter rollout.
Emit Direction - (Integer) This input data stream takes an integer value that
represents the emit direction method the particles will use. Valid input values are
0 through 8, where:
0 = Face Normal
1 = Helper Z Direction
2 = Cylinder Helper
3 = Sphere Helper
4 = To Helper Position
5 = Helper Move Dir.
6 = Helper Reflection
7 = Light Reflection
8 = Mask
Direction Mask - (Texture Map) This input data stream is used to override the
material map used within the Direction Mask.
Direction Mask ON - (Bool) This input data stream is used to override the
On/Off toggle for the Direction Mask control. A True condition turns the mask
on, while a False condition turns it off.
Direction Mask Intensity - (Scalar) This input data stream is used to override
the Mask Intensity spinner setting in the Emitter rollout.
Max Emit Angle - (Angle) This input data stream is used to override the Max.
Emit Angle spinner setting within the Emitter rollout.
Direction Variation - (Angle) This input data stream is used to override the
Direction Var Deg spinner setting within the Emitter rollout.
Use Material - (Bool) This input data stream is used to override the Use
checkbox state within the Emitter rollout.
Use Lights - (Bool) This input data stream is used to override the Use Lights
checkbox state within the Emitter rollout.
Emitter Mask - (Texture Map) This input data stream is used to override the
material map used within the Emitter Mask.
Emitter Mask ON - (Bool) This input data stream is used to override the On/Off
toggle for the Emitter Mask control. A True condition turns the mask on, while a
False condition turns it off.
Threshold - (Scalar) This input data stream is used to override the Threshold
spinner setting within the Emitter rollout.
Use Color - (Bool) This input data stream is used to override the Color
checkbox state within the Emitter rollout.
Color - (Color) This input data stream is used to override the Color swatch value
within the Emitter rollout.
Color Variation - (Scalar) This input data stream is used to override the RGB
Variation spinner setting within the Emitter rollout.
Particle Axis - (Integer) This input data stream takes an integer value that
represents the Primary Axis the particles will use. Valid input values are 0
through 2, where:
0 = X-Axis
1 = Y-Axis
2 = Z-Axis
Invert - (Bool) This input data stream is used to override the Color checkbox
state within the Birth Alignment rollout.
Axis Rotation - (Angle) This input data stream is used to override the Rotation
deg. spinner setting within the Birth Alignment rollout.
Type - (Integer) This input data stream takes an integer value that represents the
emit direction method the particles will use. Valid input values are 0 through 7,
where:
0 = None
1 = World X
2 = World Y
3 = World Z
4 = Face Normal
5 = Emit Direction
6 = Random
7 = User Defined
Direction - (Direction) This input data stream is used to provide a directional
vector for the particles.
Variation - (Angle) This input data stream is used to provide variation for the
directional vector for the particles.
Color Channel - (Integer) This input data stream is used to override the Color
spinner setting within the Write to Channel rollout.
Map Channel - (Integer) This input data stream is used to override the UVW
spinner setting within the Write to Channel rollout.
UVW Channel - (Integer) This input data stream is used to override the UVW
Channel spinner setting within the Write to Channel rollout.
Object Position Channel - (Integer) This input data stream is used to override
the Object Position spinner setting within the Write to Channel rollout.
World Position Channel - (Integer) This input data stream is used to override
the World Position spinner setting within the Write to Channel rollout.
Operator Outputs
Born Particle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle.
Particle Frame Counter - (Integer) This output data stream provides a
"counter-like" function that holds the current number of created particles at the
given frame. This counter is reset per frame and starts over again at 0. As a
result, you can use this output data when you want to trigger other rules based on
the creation of a certain number of particles.
Do not confuse this value with the
lifetime particle ID every particle
has.
Particle Animation Counter - (Integer) This output data stream provides a
"counter-like" function that holds the current number of created particles at the
given point in the animation. This counter is NOT reset per frame and
accumulates the total number of particles created over the course of the
animation. As a result, you can use this output data when you want to trigger
other rules based on the creation of a certain number of particles.
Color - (Color) outputs the color value a the emitter position
UVW - (Vector) outputs the current UVW coordinates of the active emitter
Object Position - (Position) outputs the active emitter position in local object
space
World Position - (Position) outputs the active emitter position in absolute world
space
Rollout Menus
Pick Object Based Emitter - The MatterWaves Operator must be assigned to an
object before particles can be created. Select the Pick Object Based Emitter
button and then click on the object in the scene that you want to turn into a
MatterWaves particle emitter. You may also use the select by name feature
within 3ds Max if you are not able to easily click on the desired object in the
viewports.
You may also pick multiple objects
in one go and add them to the emitter
list.
Rem. - When pressed the selected object will be removed from the list of
particle emitters
Group - Before you select an object and create any particles in the active
viewport, think about where you want to store them. From the Group dropdown
list you can select any particle group that should be used to store the particles
that are emitted from the selected object.
FIRE - You must press the Fire button to enable particle generation. This button
is fully animatable so you can turn the particle emission on and off throughout
the course of your animation. This is easily done using the standard 3ds Max
animation features. A Boolean ON/OFF controller turns the Fire button on and
off; no intermediate values are allowed.
Time (s) - The Fire Timing spinners let you control how the Fire button behaves.
While you can animate the Fire button, it turns the particles on and off and has
no way to slow the number of particles down or speed their emission up. These
spinners help overcome that by increasing or decreasing the number of generated
particles per time interval.
The first spinner represents the Attack time (in seconds). The second spinner
represents the Sustain time (in seconds). These two spinners work in concert
with the gradient beneath them to create a smooth transition between the states
and represents the time needed to create or destroy particles.
Attack / Sustain - The grayscale gradient below the Time(s) spinners lets you
control the Attack and Sustain curves. As you will see, there is only one gradient
and it was set up that way to provide a smooth transition between the two
particle emission states. The gradient is evenly divided - the left half controls the
Attack timing curve, while the right half controls the Sustain timing curve.
The Attack side is defined as the timing curve of the particle emission after the
Fire button is activated. Likewise, the Sustain side is defined as the timing curve
of the particle emission after the Fire button is turned off. An easy way to think
of these two parameters is like a keyboard synthesizer - striking a key and
releasing it is analogous to activating and de-activating the Fire button, and the
Attack and Sustain controls are like the synth's ability to cause a note to fade in
after striking the key (Attack) or fade out after the key is released (Sustain).
In the case of the Attack timing, you are able to set the time it takes to create all
particles to meet a certain target value (overall particle count, or particles/sec).
Unlike standard 3ds Max particle systems which use a constant particle rate or a
fixed number of particles, the MatterWaves Operator is able to create an
accelerated particle rate based on a specific time interval. Look at the diagram
below:
In this graph, here are the things to consider:
1. When the Fire button is activated, the Attack timer starts. In this example,
the Fire button is activated at Frame 2.
2. The Time(s) spinner that is set above the gradient controls how long (in
seconds) the acceleration curve should take. In this example, it was set to 5
seconds.
3. The grayscale gradient controls the Attack curve. In this example, it's linear
from black to white. A plain black color in the grayscale gradient indicates
a zero particle rate while a pure white color will create as many particles as
you have set in the Count, Particles/s or Pistol Shot menu section.
In the case of the Sustain timing, you are able to set the time it takes to destroy
all particles after the Fire button is released. Unlike standard 3ds Max particle
systems which use a constant particle destruction rate, the MatterWaves Operator
is able to create an ramped particle rate to gradually slow down and eliminate the
particles based on a specific time interval.
For example; when you set the Sustain Timing to 2 seconds, MatterWaves needs
2 seconds to gradually (as set in the grayscale gradient) decrease the number of
particles born until it reaches a complete stop after 2 seconds. It's similar to a
damping value for the Fire button when it's released. All effects or features
described in Attack Timing are also valid for Sustain Timing, it's just the other
way around.
Setting the Particle amount in MatterWaves
The MatterWaves Operator offers many in-depth controls through the different
particle generation methods. However, while some of the creation methods are
similar to other particle systems you might already know, others are totally
unique to MatterWaves and will take some getting used to. To use MatterWaves'
full power you need to understand how it creates particles and emitters. There
are three basic methods to control the number of particles created in an
animation.
Count - As the parameter name implies, the Count option sets the maximum
number of particles allowed at any one time in your animation. Count is based
on the whole animation regardless of any other timing value, and at no time
during the animation will there be more particles alive than the value set within
this spinner. To keep the number of particles constant once the capacity has been
reached, a particle is born only when another one dies.
Don't get confused when you use Attack and Sustain with this creation method.
In this case, the number of particles will grow continually depending on the
Attack curve, however, the total number of particles will never exceed the
number set in Count. Also worth noting is that if the Per Emitter checkbox isn't
active, any newly born particle will be created randomly at any free particle
emitter.
Particles / (s) - The Particles/s feature is a unique feature only MatterWaves
offers. It sets the maximum number of particles allowed per second. This value
is also based on a complete animation. This means as long as your animation
lasts, the number of particles generated won't exceed the value set in Particles/s.
Depending on the number of particles and emitters available, you may get
emitters that never create a single particle while the animation lasts. This is not a
mistake; the newly born particles are created by the emitters on a first come, first
served basis. If you want to make sure that every emitter is creating a particle
you may need to increase Particles/s.
Flow - check this option to get a constant flow of particles suitable for fluid
animations. In contrast to Particles/s this option will make sure that particles are
emitted in a constant flow per emitter. The Particles/s function divides the
particle emitting rate among all emitters over time and achieves to evenly fill a
volume even though there are possibly larger gaps. Check out the samples
below. Flow does the opposite, every emitter has the same emit rate per second
(as set in the dialog above). All particles are born at the same time with the set
rate.
Particles /[s] = 10
Flow = 10
To evenly fill a volume (like a raster) the particle emission speed needs to be
synchronized with the particle rate per second. If those two values do not match
up the particle stream will be showing gaps.
Pistol Shot - Another unique feature found in the MatterWaves Operator is
Pistol Shot. Usually standard 3ds Max particle systems are not able to simulate a
free interval creation of particles. While you can make a broad comparison
between the Pistol Shot feature with 3ds Max's Birth Rate feature, you can't
really get the same results from the standard systems as with Pistol Shot. When
you animate the Fire button, MatterWaves will create on each "button press" the
full number of particles set in this spinner immediately as a burst (except when
you use an Attack curve).
Per Emitter checkbox - This checkbox's name says it all. When you use
MatterWaves' Per Emitter option, the number of particles is controlled by the
number of emitters. As such, each emission point will be treated identically
when it comes to creating new particles, and the number of particles set in the
Particles section (Count, Particles/s, Pistol Shot) will always be higher than the
respective values when you use the Per Emitter option. It always will be a
multiple of the amount of emitters.
WARNING:
Be careful when you use the Per
Emitter option! The particle count
set in the spinners is valid for every
emitter and it is not divided by all
emitters. So, if you have 100
emitters and a particle Count of 100
and you use the Per Emitter option,
this can create 100x100=10.000
particles! 3ds Max may very well
slow to a crawl if you don't respect
this potential for huge quantities of
particles.
Per Emitter Activation checkbox - When this checkbox is active, the number
of particles emitted is controlled by the number of emitters that are active at that
moment in time. So if you've set up a particle animation to emit based on an
animated map color, turning on the Per Emitter Activation checkbox will send
the same number of particles to each emission point as that point gets a true
condition for it's activation. This can also cause system slowdowns if you are not
careful, so use this option wisely.
Life Span (s) - The particle life setting within the MatterWaves Operator uses
Multi-Layer Particle Control technology to control the particle life of each single
particle. If no mask (material map) is used, all of the particles get the same life
time when they are born. This works like with any other particle system, but
MatterWaves goes one step further. The Life Span(s) spinner sets the particle life
to a specific amount of time (measured in seconds).
Variation % - This spinner adds some random variation to the Life Span (s)
amount for each particle created by this operator. The value represents a
percentage value that is added/subtracted to the original Life Span value. As an
example, if the Life Span (s) spinner is set to 2 seconds and the Variation %
spinner is set to 50, the resulting particle system creates particles of maximum
ages between 1 and 3 seconds.
Mask - The particle Life Span Mask controls the particle life at the time of birth
for each particle. A pure white value in the image map or material creates
particles that can get as old as you set in the Life Span (s) spinner, while a pure
black value in the image map or procedural material will create particles with
zero life time. You may animate the image map or material to get a different life
value for each particle born.
The grayscale gradient is not used
when there is no image map or
material assigned to the Mask.
Particle Life Layer Example:
1. Life Span (s) Mask: A standard 3ds Max gradient material map (black =
Zero Life Time)
2. Emitter Map: A standard 3ds Max bitmap (black = no emitters)
3. Object with material
4. Final rendered result
Speed - The particle speed parameter can also be used to control the particle
speed via MLPC technology. Without the control of an image map or material,
the Speed parameter sets the particle speed to a specific minimum for every
particle that is born through MatterWaves.
Variation % - The Variation % spinner adds some random variation to the
Speed amount. This value is a percentage of Speed that is added/subtracted to
each particle.
Size Dep. checkbox - MatterWaves offers many unique features to help the
professional animator achieve the best results with minimum effort. Great
looking CG explosions with zillions of object chunks flying around are really
hard to do, especially if you want to make it look real. One common problem all
particle systems seem to have is the mathematically perfect spherical expansion
from the center of explosion. Even in outer space with no gravity at all there
wouldn't be a perfect spherical expansion of the object chunks.
The MatterWaves Operator helps you to fake some real world science for matter
and motion, especially when you do particle explosions. Like in the real world
you need to make exploding objects accelerate based on their mass and driving
force (a bomb or whatever). While the MatterWaves Operator is able to handle
impulses or mass per particle (object fragments), it may be a task that is way too
expensive to compute. As such, MatterWaves lets you simulate these effects by
making the world of physics really trivial and simple. Bigger objects usually
have more mass and so they need a higher force to start moving or accelerate.
This may not be always true in the real world (for example with giant blocks of
Styrofoam) but it's true for the MatterWaves Operator.
The Size Dep. parameter controls the size a particle/fragment must have in order
to achieve the velocity value that is set in the particle Speed parameter. All
particles/fragments bigger than Size Dep. move slower (based on the size
difference) and smaller particles will move faster. This feature is great to
simulate exploding objects with different fragment sizes.
Mask - The particle Speed Mask controls the particle velocity at the time of
birth for each particle. A pure white value in the image map or material creates
particles that can move as quickly as you set in the Speed spinner, while a pure
black value in the image map or procedural material will create particles with no
speed. You may animate the image map or material to get a different speed value
for each particle born.
NOTE: The grayscale gradient is not used when there is no image map or
material assigned to the Mask.
Motion Inheri % - When MatterWaves emits particles from static objects,
everything looks great. But what happens when you start to animate/move the
particle emitter around? Think about a good old locomotive under full steam.
The laws of physics tell us that the steam leaving the train's smokestack will
briefly have the same speed as the locomotive and so the steam will travel along
the motion vector of the locomotive. The Motion Inheritance % spinner is
designed to let you smoothly turn on the laws of physics for your emitted
particles. A value of 100% will give the particles emitted from the moving object
the exact same relative speed as the emitting object has.
Variation % - The Variation % spinner adds some random variation to the
Motion Inheritance amount. This value is a percentage of Motion Inheritance
that is added/subtracted to each particle.
Rot. Inheri. % - In the same way that Motion Inheritance % spinner affects
positional dynamics, the Rotation Inheritance % spinner affects the emitted
particles' rotational values when the emitting object is rotating. A value of 100%
will give the particles emitted from the rotating object the exact same rotational
speed as the emitting object has.
Variation % - The Variation % spinner adds some random variation to the
Rotational Inheritance amount. This value represents a percentage of Rotational
Inheritance that is added to or subtracted from each particle.
Size - This animatable parameter specifies the size for all particles in the system.
The MatterWaves Operator assigns this Size value to all particles born by this
operator. Size is usually a world unit value.
Variation % - The Variation % spinner adds some random variation to the Size
of each born particle. This value represents a percentage of the original Size that
is added to or subtracted from each particle.
Var. Mask - The particle Size Mask controls the particle size at the time of birth
for each particle. A pure white value in the image map or material creates
particles that can be as large in size as you set in the Size spinner, while a pure
black value in the image map or procedural material will create particles with no
size. You may animate the image map or material to get a different size value for
each particle born.
The grayscale gradient is not used
when there is no image map or
material assigned to the Mask.
Particle Size Layer Example:
1. Size Mask: A standard 3ds Max gradient material map (black = Zero Size)
2. Emitter Map: A standard 3ds Max bitmap (black = no emitters)
3. Object with material
4. Final rendered result with different particle sizes controlled by 1.
Emit Distance - The MatterWaves Operator usually places all particle emitters
direct on the object's surface without any offset (Distance = 0.0). When the Emit
Distance spinner value is greater than zero, all emitters will be placed with that
offset from the object's surface. Numbers below zero will move the particle
emitters "below" the object's surface. The Distance value is set in world units.
Variation % - The Variation % spinner adds some random variation to the
Distance offset of each born particle. This value represents a percentage of the
original Distance that is added to or subtracted from each particle.
Var. Mask - The particle Emit Distance Mask controls the particle placement
relative to the object's surface at the time of birth for each particle. A pure white
value in the image map or material creates particles that are placed at the offset
distance as you set in the Emit Distance spinner, while a pure black value in the
image map or procedural material will create particles with no offset. You may
animate the image map or material to get a different offset value for each particle
born.
The grayscale gradient is not used
when there is no image map or
material assigned to the Mask.
Normal - uses the interpolated surface normal direction to
offset the emitters.
Emit Direction - When Emit Direction is selected, the offset
can be applied by any of the methods described in Emit
Direction Mode.
Face Normal Direction - MatterWaves is able to offset the
particle emitters along the object's surface normals or along the
emit direction. A surface normal is always perpendicular to its
triangular plane and when this option is selected, the distance
offset is computed relative to the face normal.
Random Seed - Change this number to prevent all particles from behaving in
the same way when you use multiple MatterWaves Operators.
In Viewport [%] - It can be frustrating to wait for the particle system to update
the view to represent the current status. This parameter controls the number of
particles that should be visible in the viewport for playback of your particle
animations. A value of 100% means, that all particles will be drawn and
calculated for the display in the viewport. Reduce this number to decrease the
visible amount of particles in the viewport.
This value has NO effect on what is
rendered.
Emitter Rollout
Emit Source - This display is used to tell you the name of the object that is used
to emit particles.
Mat. ID - Emitter placement on an object's surface can be achieved in many
different ways. One easy and straightforward method used by the MatterWaves
Operator is emitter placement based on a specific Material IDs. All faces with
the same Material ID as set in Mat. ID spinner will be used to create particle
emitters. You MUST check the option to use Material ID.
Sm. Group - Another cool way to control particle emitter placement along an
object's surface is through the use of smoothing groups. The MatterWaves
Operator uses the mesh smoothing group information to place emitters on the
object's surface. To use this option you must activate the checkbox first.
Selected Face - Activate this checkbox to place particle emitters on selected
faces only.
FaceReduce - The Face Reduce spinner tells thinkingParticles to use every Nth
face when creating particle emitters on the object's surface - so a FaceReduce
value of 10 means that every 10th face is used to create particle emitters on the
selected object.
Coordinates - Activate this checkbox when you want to use UVW mapping
coordinates to place the particle emitters on the object. When this value is set to
0, the mesh is used to define where the emitters are placed, so every single
triangle will get an emitter. Any other number will set the UV Channel (0-99)
that should be used to place the emitters. The placement of the particle emitters
is controlled by UVW Map modifiers. The MatterWaves Operator places particle
emitters evenly along the UV Mapping space.
UVW Clipping - In some cases you will not want to use the full UVW mapping
area to create particle emitters. By default, the MatterWaves Operator will
always create particle emitters spread all over the object's surface. This is also
the case when the UVW Mapping area is smaller than the object's surface
(decal). Check this option to avoid such an effect.
Example: Imagine, a huge landscape made out of a dense quad patch object.
Within that area, you decide that only a small spot should generate particles.
Usually this situation would mean that you would need to increase the number of
UV Emitters towards the range of 10.000 so that you can be sure to get some
emitters near the desired spot on the landscape surface. Clip UVW helps in
solving this unwanted situation. Clip UVW creates particle emitters in the
designated UVW Mapping area only and not all over the landscape object.
U/V Emitter - These two spinners let you define evenly spaced particle emitters
based on the UV coordinates used in each direction (U and V). Be sure to note
that when you use U Emitter=10 and V Emitter=10, MatterWaves will create 100
particle emitters (10x10).
Random - The MatterWaves Operator will always try to evenly place particle
emitters along the object's surface. If you don't want this unvaried look of
particle emitters you may also change this particle emitter behavior by activating
the Random placement feature. When you check this option, the positions of the
particle emitters are varied by a certain amount.
Random U - defines the amount of random positioning in U direction
Random V - defines the amount of random positioning in V direction
Show - To visualize MatterWaves' particle emitters on the object's surface you
may check the Show button in the emitter rollout menu. Red dots on the object's
surface will appear that represent the particle emitter points created by the
MatterWaves Operator.
Use Active Emitter only - When you do not use the Active Emitter Only
feature, the MatterWaves Operator will distribute particles evenly amongst all
emitters available (active or not). This means, even when you have 100 particles
and have 30 emitters that are active (by light, material or whatever) there is a
good chance that each active emitter will emit only a few particles and not 100
as set by the user. To avoid this effect check the Use Active Emitter only button.
This will make sure that the number of particles are distributed amongst the
active emitters only.
Emit Direction
Mode - By default the emit direction for all particles created by the MatterWaves
Operator is the surface normal of each triangle. Besides this surface normal there
are many other options that can be used for the direction vector of the particles
when they are created by an emitter. Just as you can control the particle size,
speed or even age by an image map or procedural material, you can also control
the direction the particles move using materials.
You are presented with the following dropdown menu to choose from:
Normal - use this option to make MatterWaves use the interpolated surface
normal to emit particles.
Face Normal - MatterWaves uses the Face Normal setting by default. Each
particle emitter will use the surface normal to emit particles.
Helper Z-Direction - Helper or reference objects are really useful when you
want to control a whole mass of particles at once. The MatterWaves Operator
uses the reference object's transformation matrix to control the particles' emit
direction. Only the Z-Axis of the picked object is used to calculate the emit
direction of all particles.
Cylinder Helper - Select Cylinder Helper to make the MatterWaves Operator
use the reference object's transformation matrix to calculate a cylindrical spread
out effect. The reference object's position is used to control the center of the
spread out effect. The MatterWaves Operator will always use the Z-axis of the
reference object to create the cylindrical effect.
Sphere Helper - Sphere Helper offers another way to control the emit direction
of each single particle. When this option is selected, the MatterWaves Operator
uses a radial emit direction for each single particle created. The center of this
spherical particle effect is supplied by the reference object.
To Helper Position - All particles created by the emitters move in a direct line
to the reference object's center point. It's a very helpful feature when you want to
control a mass of particles.
The direction of travel for each
single particle is initially set at the
time of birth. If the reference object
moves, newly born particles will also
move into the new direction.
Helper Move Dir. - The MatterWaves Operator also offers another reference
object tracking feature to control a mass of particles. The reference object's
direction of travel and speed is analyzed and applied to the particles. All
particles use an inverted movement vector, so that the particles travel in the
opposite direction from the reference object.
Helper Reflection - Helper Reflection uses the reference object's position
information to calculate a reflection vector for each single particle created by
MatterWaves. It works like a mirror: incoming angle = negative outgoing angle.
Light Reflection - MatterWaves calculates the "light bounce" vector for each
particle when you select Light Reflection as the emitting angle mode. If you use
more than one light in a scene the averaged angle between the lights is used.
Mask - Set the emit direction mode to Mask to control the emit angle of each
single particle an image or procedural material map is used to control the emit
angle of each single particle. To use this feature you must also apply a map in the
Dir. Mask parameter.
Ref. Object - The MatterWaves Operator may use reference objects to control
particle systems and particle movements. All calculations based on reference
objects are done once, at the time of particle birth. When a particle is born it gets
its initial speed and direction of travel based on one of the several reference
schemes as described above.
Left-Click the Pick Object button, this will enter the pick mode of the
MatterWaves Operator. Any legal 3ds Max object may be picked right from
within the main user interface.
Dir. Mask - The Direction Mask works in exactly the same way as a bump map
causes reflected highlights to change across an otherwise smooth surface. The
grayscale change between two pixels is used to calculate the emit angle of each
particle. This feature allows you to easily control the direction of travel for all
particles created by the emitters on the object's surface. Right next to Dir.Mask
you can find the grayscale threshold value for the mask bitmap. A value of zero
will create no angular change ( it's like when you set the bump amount to zero!)
higher values will create higher angular changes between pixel values.
Mask Intensity - This spinner works like a bump map vector multiplier to
increase the bump map directional effect and becomes active when mask is
selected.
Max Emit Angle - This spinner allows you to gain additional control over the
particle emitters on the object's surface. To use this feature you must first have a
reference object selected and you must make sure that the Emit Direction Mode
is NOT set to Face Normal. Once set, particle emitters are created only when
the angle between reference object and surface normal is equal or below the Max
Emit Angle value. This option is best used on round or uneven surfaces. It is
perfect for creating Saturn-like planetary rings of particles.
Direction Var. Deg - The MatterWaves Operator is able to add random
directions to any emitted particle. This random direction amount is added after
everything has been processed by the MatterWaves Operator.
Emit On Off Manipulation Group of Controls
Use - Check the Use Material/Map radio button to control particle emitters by
material. When this option is selected, the MatterWaves Operator will analyze
the material and color of the object to compare the result with the threshold
particle emitter value (default=0). All rendered pixels on the object's surface that
fall below this threshold value will turn off the relevant particle emitters nearby.
Use Lights - To use light sources to control/create particle emitters activate the
Use Lights checkbox. In this case, the MatterWaves Operator activates/generates
particle emitters based on the amount of surface illumination. You may also use
a specific threshold to control the maximum amount of illumination to be used to
activate/generate a particle emitter.
Be aware that you can use both
options (Material/Map, Lights) at the
same time. If you use both options at
the same time "Use Material/Map"
will have highest priority. The map
controls at which place particles are
created and the light source
(lighting) turns emitters on or off.
Material/Map - The use of materials/maps to control particle emitters on an
object's surface is one of MatterWaves' key features. When you check the Use
Material/Map button, the MatterWaves Operator will use the object's own
material by default. Nevertheless, one can also choose any other material/map to
control the particle emitters. To set a different material/map left-click onto the
gray square next to the material name or drop any image map or procedural
material map onto it.
REM. - To remove a light from the listbox, highlight it and then click this
button.
PICK - The MatterWaves Operator is also able to use lights to control particle
emitters! Usually there is more than one light in a 3D scene and this is the reason
why the MatterWaves Operator offers a Pick Lights option. Left-click the Pick
button and start selecting the desired lights in the 3D scene. To remove a light
from this list at any time, select it from the list and left-click the REM. button.
Lights may affect the creation of particle emitters and also lights may be used to
activate the particle emitters to create particles when they become lit.
Threshold - The Threshold parameter acts like a cut off value that tells the
MatterWaves Operator when to stop creating particles on the objects surface.
The Threshold number represents a pixel intensity value created by the rendering
system. Generally, brighter pixels (white) have a higher intensity than darker
(black) pixels.
Note, threshold is deactivated by default. It is only accessible when Use
Material/Map or Use Lights is checked! When Threshold is grayed out you must
select one of the options above first!
Color - When you activate this option (when the Use checkbox is active), you
can select a color from the swatch next to the checkbox to test for the threshold
on the surface of the emitter.
RGB Variation % - The MatterWaves Operator offers RGB Color tracking, to
offer even more control where particle emitters should appear on the object's
surface. By default, the MatterWaves Operator places particle emitters based on
the material or map intensity values. Another way of placing particle emitters is
by RGB color tracking. Left-click the Color radio button to activate the color
swatch and the RGB Variation % parameter. Drag or set any color value that
should be tracked on the objects surface. The RGB Variation % value represents
the maximum color difference allowed to create a particle emitter. This feature
makes it possible to create particles regardless of the intensity (threshold) values.
Note, Color and RGB Variation is grayed out (deactivated) by default. To access
this feature you must select Use Material/Map or Use Lights first.
For View Only
Manual Update - We don't know how much "timing pain" you can withstand,
so we have built-in this little emergency hook for you. Whenever you feel it's
getting really time consuming doing screen updates, turn Manual Update on and
it's up to you when a screen update happens. This option is valid for the viewport
only. Each button press on Update updates the screen view of the MatterWaves
particle system. The number next to Update represents the last frame when
Update was pressed.
Note, this feature may interfere with
the Master DynamicSet setting "Edit
on the Fly".
Birth Alignment Rollout
P Axis - This set of radio buttons is enabled whenever you choose any setting
from the alignment dropdown menu but NONE. P-Axis sets the particle's local
axis that is used to align the particle when it is born. Alignment of the particle's
local axis is set in the dropdown menu underneath.
Invert - Invert is enabled whenever you select anything different from NONE in
the birth alignment dropdown list. Check INVERT when you want to Use the
negative particle axis as the alignment basis.
Rotation - Besides the various options that enable you to control the initial
alignment of a particle when it's born, you may also set a specific angle by
changing this parameter.
Alignment Dropdown
This dropdown list offers various options how the MatterWaves Operator aligns
the particle when it's born. All options are relative to the local particle axis as it
is set in the P-Axis section.
None - This option uses always the surface normal and the local Z axis of
the particle.
World X - The local particle axis will be aligned along the World X axis.
World Y - The local particle axis will be aligned along the World Y axis.
World Z - The local particle axis will be aligned along the World Z axis.
Face Normal - The particles will be aligned along the surface normal.
Emit Direction - The particles will be aligned along the emit direction
Random - Select this option to get a total Random particle alignment
User Defined - This option lets you choose each individual axis
Variation - To add some angular variation to the particle birth alignment
increase this value. Higher numbers create more visible variation. This value
represents an angle that is added or subtracted to the birth alignment value.
User Axis - Whenever User Defined is selected in the birth alignment drop down
list, the User Axis spinners are activated. You may align any three axis, together
or individually, with the local particle axis.
Write to Channel Rollout
Color - This spinner defines the Data Channel number that should be written. -1
means no Data Channel is written. The Color comes from the surface color the
emitter is placed on (used to decide to activate an emitter).
UVW - The first spinner is the UVW channel within 3ds Max, and the second
spinner defines the Data Channel number. The UVW Coordinate comes from the
surface position where the emitter is placed on.
Important
Tthe W coordinate of the UV
mapping is automatically animated
over time. Every new particle
created gets a new continuous
timestamp in the W component.
Object Position - This spinner defines the Data Channel number that should be
written. -1 means no data channel is written. The position represents the emitter
position in object space.
World Position - This spinner defines the Data Channel number that should be
written. -1 means no data channel is written. The position represents the emitter
position in world space.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ObjectToParticleDataOperator
The ObjectToParticleData operator allows for easy access to object
information for particles that have been imported into thinkingParticles by the
ObjectToParticle operator.
Operator Inputs
Particle - (Particle) - This input data stream reads in the currently selected
particle group to the Position Born operator.
Tracking - (Integer) allows to select the tracking method of this operato.
Possible options are:
0 - None, objects will be taken at their initial and original position and
rotation.
1 - Initial, takes the full object transformation into account including
possible velocities
2 - ObjectToParticle, the animation of the object will be tracked over
time and the particles will follow the object's position.
Operator Outputs
IsImported - (Bool) this output becomes True whenever the particle was created
by the selected ObjectToParticle operator.
Tracking - (Integer) outputs the current tracking method for the particle
Node - (Node) outputs the node ID of the original scene object.
Rollout Menus
From the drop down list choose the ObjectToParticle operator you want to
operate on. This method allows to access a specific operator from within any
DynamicSet.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ObjectToParticle Operator
thinkingParticles is the first particle system ever to offer the functionality to turn
an object into a particle. The ObjectToParticle Operator is used to turn any
mesh object, helper or even light source into a particle that can be accessed or
modified by other thinkingParticles operators. When picking a spline object, it
can be automatically turned into a rope object when BulletPhysics is chosen as
the collision solver.
In thinkingParticles, Object2Particle can now be accessed by Maxscript in order
to create tools that automatically add/remove objects to an Object2Particle
operator, turn on/off Tracking and Shape Instancing.
CRITICAL: If an object has its Renderable object property unchecked so that it
is NOT renderable, then it will NOT be imported into Obj2Particle, and any SC
Joint Helpers that depend on that object will also not receive the object and will
not be in effect.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Outputs
Born Particle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle. Note this output only occurs when the particle is
born.
Born Node - (Node) This output data stream sends the current node ID used to
create particles. This can be useful for other Operators that have a Node input
data stream for keying off of the same object.
Born Node ID - (Integer) This output data stream sends the number in the list of
nodes to other Operators and Helpers. Be aware that the first object in the list
will be given the ID of 0, and each object added will have their IDs incremented
by 1.
Rollout Menus
REM. - Click on the Remove button to remove a selected object from the
ObjectToParticle list window.
UP - Click on the UP button to move a selected object up within the
ObjectToParticle list window.
DOWN - Click on the DOWN button to move a selected object down within the
ObjectToParticle list window.
Pick Object - Click on the Pick Object button to enter the pick object mode.
Once active, you can select any valid 3ds Max object and turn it into a particle.
To pick multiple objects; right click onto the Pick button, from the menu several
options are available.
Selection - this will pick all previously selected objects and add them to
the list of objects.
Selection Sets - this will pick all objects in a named selection set and
add them to the list of objects.
Layers - this will select all objects from a selectedlayer.
Group - As is the normal procedure inside of thinkingParticles, you need to tell
the system where to store the particles when you create or modify them. Choose
any particle group from the dropdown list to store the newly created object
particles.
Track
None - when this option is chosen, no tracking will happen - the initial position
and rotation will be taken.
Object to Particle - When this option is active, the animation of the object will
be tracked over time and the particles will follow the object position.
Particle to Object - With this option active, when particles move in
thinkingParticles, the object is also moved automatically. In this case, you will
not have the ability to manually animate the object any longer.
Initial Velocity - takes the original/initial object transformation into account
when creating/instancing the object into thinkingParticles.
Instance Shape - thinkingParticles only affects the transformation matrix of the
original object. In most situations this is what you want. However, you need to
set this option when you want to use fragmentation effects or other more
advanced effects that deform or change the mesh definition of the object that is
turned into a particle.
Use Subtree - This option should be activated when you want to turn any
attached children of a selected object into a particle.
Hide - This button provides the quick ability to hide the selected object in the
3ds Max viewports. Generally speaking, when you create an object for use as a
particle inside of thinkingParticles, it is done solely for that purpose. Therefore,
it's generally a good idea to hide that original object before you render.
Changes Affect All - This button let's you distribute any changes within this
operator to all of the selected objects in the operator at once.
Joints Rollout
The joints menu section offers controls to define breaking triggers for Dynamics
Joints. Besides breaking object hierarchies into elements, Physics Dynamics
based joints can also be used to define a complex object structure for breaking or
animation.
Collision - each HFragmenter can be assigned to one specific shape collision
(SC) engine. Keep in mind that only the selected Shape Collision engine is
responsible for the simulation of the breaking effect.
BulletPhysics - Important Note
To get an actual rope object out of a
picked spline you must choose in the
Collision menu a BulletPhysics
solver - or you will not see a rope
object!
Joint Break Code - defines the Joint breaking trigger value, this value is similar
to the Code parameter described in the Activation menu section.
Use Lights to Break - when checked and when lights are picked from the scene,
the Joints can be broken off by the illumination levels created by the selected
light sources.
Pick - lets you pick one or many light objects form the scene to used ot trigger
the breaking of a joint
Rem. - when clicked, removes the selected light from the list.
Seed - can be used when you have more than one instance of the
ObjectToParticle operator within your scene to keep them from having the same
particle emissions.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Particle Draw Operator
A really cool way to create particles in a particle system is by drawing them, and
this is exactly what the Particle Draw Operator is designed to help you do. With
the help of a virtual brush you may freely draw one or more particles in 3D
space.
NOTE: when using the Max Painter option the Options button specifies a curve
from 1.0 to 0.0 -- this will apply depth to the painting regardless of Depth
Variation (as Depth Variation is only responsible for varying the depth specified
by the Options curve). In order to get completely flat-on-the-surface painting, set
the Options curve to go from 0.0 to 0.0.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Life Span - (Life Span) This input data stream is used to override the Life Span
spinner within the Particle Draw rollout.
Speed - (Speed) This input data stream is used to provide a velocity value to the
particles as they are born.
Direction - (Direction) This input data stream is used to provide a directional
vector for the born particles to use for their motion.
Spin - (Spin) This input data stream is used to provide the angular direction
value for the born particles to use for their motion.
Size - (Size) This input data stream is used to provide relative sizes to the born
particles.
Mass - (Mass) This input data stream is used to give a physical mass to the born
particles.
Alignment - (Alignment) This input data stream is used to align the born
particles with a selected Node's alignment (fed in through a Node Helper or
Particle Data Helper).
Operator Outputs
Born Particle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle.
Particle Frame Counter - (Integer) This output data stream provides a
"counter-like" function that holds the current number of created particles at the
given frame. This counter is reset per frame and starts over again at 0. As a
result, you can use this output data when you want to trigger other rules based on
the creation of a certain number of particles.
Do not confuse this value with the
lifetime particle ID every particle
has.
Particle Animation Counter - (Integer) This output data stream provides a
"counter-like" function that holds the current number of created particles at the
given point in the animation. This counter is NOT reset per frame and
accumulates the total number of particles created over the course of the
animation. As a result, you can use this output data when you want to trigger
other rules based on the creation of a certain number of particles.
Rollout Menu
Draw Particle - Press this button to enter the particle draw mode. As long as
this toggle is depressed and highlighted, 3ds Max is in draw mode and you can
draw in the active viewport window.
On single screen displays, you can
minimize the main dialog of
thinkingParticles as long as you are
drawing particles in the modeling
viewports.
One Particle - Check this option to draw one particle per mouse click, only. If
you want to change the depth of the cursor in an Orthographic viewport, you can
hold down the Ctrl-key. This will restrict the brush movement "into" the screen
perpendicular to your viewing mode. When you activate the draw mode, you
will see the following cursor in the viewports:
With each click, a single red point will be placed in your scene and will be made
part of the currently selected particle Group.
Radial - To draw multiple particles at one time in a spherical volume, select this
option. If you want to change the depth of the cursor in an Orthographic
viewport, you can hold down the Ctrl-key. This will restrict the brush
movement "into" the screen perpendicular to your viewing mode. When you
activate the draw mode, you will see the following cursor in the viewports:
With each click in the viewports, a cluster of red points (based on the Count
setting) will be placed in your scene and made part of the currently selected
particle Group.
Radius - This parameter defines the size of the particle brush in world units. Of
course, while painting, be aware that you can interactively change the size of
spherical radius of the brush by holding down the Shift-key. Also, if you want to
interactively raise or lower the number of particles to be drawn within the
volume, you can hold down the Ctrl+Shift keys together. By moving your
cursor up in a viewport, you will increase the particle count to be drawn, while
moving your cursor down in the viewport will decrease the particle count to be
drawn. Watch the Count value as you do this to see the total count.
Count - This spinner value defines the number of particles that should be drawn
by each mouse click within the spherical volume.
Max Painter - To draw particles on existing geometry within your scene using
the familiar 3ds Max painting tools, choose this option. You will be given the
ability to adjust the spray parameters within the Options dialog to control how
fast particles are applied to your geometry.
Be aware that this option will NOT
function if you have no geometry
currently selected within your active
viewport.
Options - Clicking on this button will bring up the familiar Painter Options
dialog from 3ds Max as shown below.
To learn more about the controls within this interface, go to your online 3ds Max
User Reference and from the Index tab type in paint weights. This will bring up
this dialog so that you can see what all of the options provide.
Count - This spinner determines the maximum number of particles that can be
drawn per stroke from the 3ds Max painter cursor. Higher values will produce
more particles quickly, while lower values will keep the flow of particles onto
the surface of the geometry slow.
Depth Var. [%] - This spinner defines the randomization along the height of the
paint stroke. This makes only sense if there is actually a height value in the paint
cursor.
Group - Before you draw any particles in the active viewport, think about where
you want to store them. From the Group dropdown list you can select any
particle group that should be used to store the particles you draw. Be aware that
you can change the particle Group at any time, even when you are drawing
particles at the same frame.
Life Span - This spinner sets the maximum life span for the drawn particles in
frames for each particle created by the draw operation.
You can change the Life Span setting
at any time to draw particles with
different Life Spans.
Variation [%] - Increase the variation parameter beneath Life Span to assign
slightly different Life Span values for each particle created by the Particle Draw
Operator. When you set Variation to 100%, every particle created will get a
different Life Span value.
Random Seed - Each particle Generator carries its own random seed. Change
this spinner value to make the particles behave differently from other Particle
Draw Operators.
Recorded Particles
Every time you draw particles with the Particle Draw Operator, you need to be
aware that the draw operation is recorded on a specific frame. This allows you to
have particles generated at specific points in time, so keep track of where you
are within the 3ds Max time slider.
When drawn, the particle list will show the frame number (prefaced by F:) and
the number of particles (prefaced by C:) that were drawn and are to be created at
the specified frame.
Remove
All - Clicking on this button will remove all of the drawn particles from the list,
regardless of what Frame they were created on.
Frame - You can selectively remove groups of particles from the list by
highlighting the name within the list and clicking this button. At that point, the
selected particle block created on that frame will be removed from the list.
Frame Offset - lets you shift the start frame of the draw operation. Increase this
number to move forward in time with the particle generation of this operator.
Expand To Timerange
This set of controls lets you take a selected group of drawn particles (from the
list window) and make it so that they are born over a range of frames in the
direction that you originally drew them. This can produce some interesting
write-on effects with your particles - so if you wanted to do a barnstormer plane
doing skywriting, using the Expand to Timerange controls would help you
produce the look you want.
If you know that you're going to
want to use this feature within
Particle Draw, it is a good idea to
create a separate Particle Draw
operator for each write-on effect you
are going to produce. Since this
functionality takes a block of
particles and re-times them over a
range of frames (creating a
potentially huge list of particles), if
you have other blocks of particles
drawn exactly where you want them,
it could take some time to delete the
extra entries in the list window
should you make a mistake. By
keeping each of these effects
separate, you can ensure that you can
quickly erase what you've done and
try again should you need to.
Start Time - This spinner defines the frame that you want the write-on effect for
the selected drawn particle set to start on.
Length - This spinner defines the number of frames that you want the write-on
effect to occur over. So if you have set the Start Time to a value of 5 and the
Length to 90, it means that the particle drawing will start on frame 5 and run for
90 frames (to frame 95).
All - Clicking on this button will take all of the drawn particles from the list and
apply the write-on effect to them regardless of the frame they were created on.
Frame - You can selectively apply the write-on effect to groups of particles by
highlighting the name within the list and clicking this button. At that point, the
selected particle block created on that frame will have the write-on effect applied
starting at the specified frame (in Start Time) and running for the specified
number of frames (in Length).
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Position Born Operator
Position Born is an operator that conditionally creates particles at a specific
position in space.
While the Position Born operator creates particles on its own without needing
any input data streams, like most other operators in thinkingParticle , it can be
controlled in a rule-based manner. Be aware that the ON input data stream can
be connected (through another collection of operators and conditions) and
through its connection it can create some advanced and amazing effects. Make
sure to read the description about the Pistol Shot option of this operator to see
what can be achieved.
Operator Inputs
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
On - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Particle - (Particle) - This input data stream reads in the currently selected
particle group to the Position Born operator.
Position - (Position) This input data stream feeds a position value in and sets the
point in space used for particle emission. Be aware that this position input is not
needed when a Particle input (above) is connected unless you wish to create
particles in a different location (or perhaps set an offset based on another rule).
Speed - (Speed) This input data stream sets the speed for the particles generated
within the Position Born operator.
Direction - (Direction) This input data stream sets the directional vector for the
emission of the particles created within the Position Born operator.
Size - (Size) This input data stream sets the size in world units of the particles
created within the Position Born operator.
Mass - (Mass) This input data stream sets the mass of the particles created
within the Position Born operator.
Spin - (Spin) This input data stream is used to provide the angular direction
value for the born particles to use for their motion.
Alignment - (Alignment) This input data stream is used to set the initial
alignment of the particles when they are born.
Life Span - (Life Span) This input data stream supplies the particle life span for
all particles created within the Position Born operator.
Life Variation - (Scalar) This input data stream provides a variation amount for
the particle life span for all particles created within the Position Born operator.
Speed Variation - (Scalar) This input data stream reads in a variation amount
for the particle speed for all particles created within the Position Born operator.
Direction Variation - (Angle) This input data stream provides a variation
amount for the particle emission direction for all particles created within the
Position Born operator.
Size Variation - (Scalar) This input data stream provides a variation amount for
the particle size in world units for all particles created within the Position Born
operator.
Mass Variation - (Scalar) This input data stream provides a variation amount for
the particle mass for all particles created within the Position Born operator.
Distance - (Scalar) This input data stream supplies an Emit Distance (offset) to
the position where all of the particles are created within the Position Born
operator.
Distance Variation - (Scalar) This input data stream supplies a variation to the
Emit Distance (offset) for the position where all of the particles are created
within the Position Born operator.
Birth Type - (Integer) This input data stream sets which of the three birth types
will be used for the creation of particles (e.g. - Count, Particles / s, Pistol Shot).
The range of integer values goes from 0 to 2, with 0 = Count, 1 = Particles / s, 2
= Pistol Shot.
Count - (Integer) This input data stream provides the value for the number of
particles to be created at any time. In order for the connected operator to be used,
the Birth Type input must be set to Count in the rollout, or there must be a
connected operator that sets the Birth Type to 0.
Rate - (Scalar) This input data stream provides the value for the number of
particles to be created per second. In order for the connected operator to be used,
the Birth Type input must be set to Particles / s in the rollout, or there must be a
connected operator that sets the Birth Type to 1.
Shot - (Integer) This input data stream provides the value for the number of
particles to be created at one time. In order for the connected operator to be used,
the Birth Type input must be set to Pistol Shot in the rollout, or there must be a
connected operator that sets the Birth Type to 2.
Operator Outputs
Born Particle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle.
Particle Frame Counter - (Integer) This output data stream provides a
"counter-like" function that holds the current number of created particles at the
given frame. This counter is reset per frame and starts over again at 0. As a
result, you can use this output data when you want to trigger other rules based on
the creation of a certain number of particles.
Do not confuse this value with the
lifetime particle ID every particle
has.
*Particle Animation Counter - (Integer) This output data stream provides a
"counter-like" function that holds the current number of created particles at the
given point in the animation. This counter is NOT reset per frame and
accumulates the total number of particles created over the course of the
animation. As a result, you can use this output data when you want to trigger
other rules based on the creation of a certain number of particles.
Rollout Menu
Group - When particles are created, a target particle group must be selected.
Choose any particle group from this group dropdown list to store the newly
created particles in.
Count - When this radio button is selected the spinner to it's right sets the
maximum amount of particles that will be created at any time.
Particles / (s) - When this radio button is selected the spinner to its right
determines how many particles per second are created. Remember this simple
formula when determining how many particles will be emitted per frame:
number of seconds = amount of frames/FPS rate. This option is most useful for
fast moving objects such as rocket trails, because there is no frame dependency
that might cause trouble.
Pistol Shot - When this radio button is selected, particle creation is set to go all
at once. Be aware that you can trigger an On/Off activation cycle to continually
emit blocks of particles from the Position Born operator.
In contrast to standard 3ds Max particle systems, this feature gives you the
ability to exactly control the number of particles born per activation event.
Connecting an animated Bool operator to the On input data stream can help
create this kind of effect.
In the sample shown above, particles create Teapot objects on impact on a
ground plane. The UDeflector collision output will activate the ON input data
stream within the Position Born operator whenever a particle hits a deflector.
When such an event occurs, Position Born becomes active and creates a new
Teapot object, because the Pistol Shot value is set to 1 particle per activation.
The rule setup as shown above is the preferred one.
Per Call - when checked, new particles will be created on each call of this
operator. Note this feature is only valid for the pistol shot mode! With every call
of the operator, a particle is created. In all other cases particles will be created
when the On input switches from False to True.
Life Span - This spinner sets the maximum life time a particle may have before
it is killed.
Variation [%] - This spinner assigns different Life Span values for each particle
created by Position Born. A Variation value of 100% means that every particle
created will get a different Life Span value.
Speed - This spinner defines the initial speed of the particles born by the
operator.
Variation [%] - This spinner assigns different Speed values for each particle
created by Position Born. A Variation value of 100% means that every particle
created will get a different Speed value.
Direction - The three direction spinners define the directional vector for the
newly created particles. By changing the X, Y and Z values, any direction vector
may be defined.
Variation [*] - This spinner assigns different directional values for each particle
created by Position Born. A Variation value of 100% means that every particle
created will get a different direction value.
Size - This spinner sets a specific particle size when a particle is created. Be
aware that the size value is measured in world units.
Variation [%] - This spinner assigns different size values for each particle
created by Position Born. A Variation value of 100% means that every particle
created will get a different Size value.
Mass - This spinner sets a specific mass for all particles created by Position
Born.
Variation [%] - This spinner assigns different Mass values for each particle
created by Position Born. A Variation value of 100% means that every particle
created will get a different Mass value.
Emit Distance - By default, all particles created by Position Born will be created
at the position (point) as it is supplied by the Position input or from the Origin (if
no Position input data stream is connected). This spinner will add an offset along
the Direction vector as set in the X, Y and Z Direction spinners in this operator.
So, for instance, if you've set the Z Direction spinner to 1.0, changing the Emit
Distance value to 15 will offset the emission point up by 15 units.
Variation [%] - This spinner assigns different Emit Distance values for each
particle created by Position Born. A Variation value of 100% means that every
particle created will get a different Emit Distance value.
Random Seed - Each particle generator carries its own random seed. Change
this value to make the particles behave differently from other Position Born
operators.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SnapShot Operator
The SnapShot operator is used to create a mesh snapshot out of a group of
particles. Out of many particles (source) one particle is created that represents
the mesh at that time along with all the masses added up.
It is best to control the snap shot through the ON input.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle A - Individual particles may also be input for Snapshot along with
Particle B; a combination of particle pairs is possible.
Particle B- Individual particles may also be input for Snapshot along with
Particle B; a combination of particle pairs is possible.
Operator Outputs
Born Particle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle.
Rollout Menu
Source - select the source particle group that will be used to snap shot the mesh
data from. Subgroups will be ignored.
Target - selects the target particle group where the one mesh particle lands.
Kill Source Particles - checked by default, this option removes by default the
snap shot particles. To keep the original particles and mesh uncheck this option.
Be careful! When this option is turned off many continuous snapshots can be
created.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
TrailBorn Operator
TrailBorn is similar to a PositionBorn or Born operator, however the particles
created by this operator use by default an unlimited live time, a size of 1 and
mass of 1. The key feature of this operator is to use it for procedural modelling
with particles. As usual thanks to the flexibility of thinkingParticles core this
operator might be even used to cook coffee or bake bread!
Operator Inputs
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
On - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Particle - (Particle) - This input data stream reads in the currently selected
particle group to the Position Born operator.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
Born Particle - (Particle) This output data stream sends particle data for newly
created particles to other operators. Every particle birth will activate all rules
connected to this particle data stream. As a result , this can be used to directly
assign a value to the particle.
BornLength - outputs the traveled distance that has been reached so far.
BornLengthRelative - defines the traveled distance (length) of the trail particle
trajectory as a normalized value between 0(start)-1(end). This assumes that
MaxLength is set to a non 0 value.
BornDirection - outputs the direction from the current to the next position
BornDistance - offers the distance value to the previously born trail particle.
LastParticle - outputs the trail particle before the current one
LastDirection - is the direction vector form the previous particle to the current.
Rollout Menu
Group - When particles are created, a target particle group must be selected.
Choose any particle group from this group dropdown list to store the newly
created particles in.
Distance - defines the spacing distance between trail particles. At exactly this
Distance traveled by the guiding particle a new particle is born. Born starts at
distance 0 (start).
Variation - by default trail particles are evenly spaced at Distance
value. However, to create a more random look of the trail particles
spacing the Variation can be increased. The higher this value the more
the particles positions will vary between each other.
Curve Quality - (range 0-1) defines how many extra trail particles should be
created to accurately capture the trajectory of the guide particle. If there are a lot
of corners and sudden changes in direction along with a large spacing distance
between trail particles; the value should be increased.
Max Segments - sets the maximum amount of trail particles that will be born. If
this amount is reached, no new particles are created. A value of 0 means that
there is no limit on the amount of trail particles that will be created.
Max Length - sets the maximum length the guiding particle can travel to spawn
trail particles. If the total length of the trajectory with trail particles ius greater
than this value no more trail particles will be born.
Variation - to create a random Max Length value for different guiding
particles, a variation can be added. The higher this value the more
variation the length of the trajectory of the trail particles will have.
Random Seed - each particle generator carries its own random seed. Change
this value to make the particles behave differently from other TrailBorn
operators.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
VertexToParticle
This little operator allows you to create very simply and fast to process soft body
effects based on particle collisions. Any 3ds Max mesh can be converted into
particles by using its vertices as particles. With the Track option turned on, the
movement of the particles will also affect the vertex positions of the original
object.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Outputs
No output ports available
Rollout Menu
REM. - when pressed, the selected object will be removed
UP - click this button to move the selected object one position upwards in the
list.
DOWN - when clicked, the selected object will be moved down by one position
Pick Object - press this button to active the Object pick mode to pick any legal
3ds Max mesh in the modeling view port.
Group - is used to select the particle group the newly created particles should be
put into.
Track Particle To Vertex - check this option, to enable the object vertices to
follow the particles.
Type-
Edges as Joint Group of Controls
Type - there are 2 possible options available:
None - when selected, the particles created form the object's vertices will behave
like loose unconnected particles without the tendency to keep the shape.
Spring - select this option to get a springy soft-body type of object.
Spring Constant - defines the strength of the Springs - the harder the springs the
more they will retract to their position
Spring Damping - sets the dampening between the springs, the higher the
dampening is the less the springs will wobble.
Volume Samples - sets the amount of internal spring sampling to keep the shape
of the object (volume). The more samples the more accurate the result will be
however, the longer it will also take to render.
Important Information about this Operator or Solver
The Dynamic-Solver used by Vertex to Particle is somehow completely different
from the other solvers implemented right now. It is important to understand that
this is a pure particle based effect. This Node creates particles- nothing more.
Collisions must occur between particles and the Sub-Frame Sampling plays the
most important role for this spring based solver!
We do suggest a minimum of 90 samples per frame to get an accurate and
predictable results with this kind of dynamics effect. Lower Sub-Frame samples
will not create an accurate result. In addition to the Sub-Frame samples, the
spring forces should not be in too extreme ranges, keep them in the 0-3 range.
Interaction with surface based effects like shape collisions or fragmentation is
not intended or really easily possible with this solver.
Back to Generator Nodes
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ImportFile
Out there in the 3D world of software tools many options and solutions are
available. Interacting with external tools and getting the data into tP has always
been a concern. With the ImportFile node thinkingParticles is offering file
compatibility with the following applications and file formats:
1. Realflow *.bin
2. Krakatoa *.prt
3. Alembic *.abc (supported formats Particle and Mesh)
Operator Inputs
ON - determines whether the operator is considered 'on' or 'off'. You can connect
other operators to this input channel such as a Bool Helper to activate/deactivate
the whole operator.
Time - defines the local time for the operator when the user wants to override
the default system time.
Emitter Particle - reads in the currently selected particle group that will be used
to act as an emitter.
UI Control Parameters - those input data streams are the equivalent of the UI
controls, keep in mind that there is no visual indication that an operator is
connected to any of those inputs! It might be needless to adjust a value if it gets
overwritten by a connected operator.
Operator Outputs
Emitter Particle - outputs the emitter particle as found and defined in the *.bin
file format.
Particle - outputs the particles found in the *.bin or *.prt file as per the
definition of the file format.
Mesh Particle - outputs the particle "holding" the mesh information as it is
found in the (*.bin) file
Position - used to supply the particle position of the particles found in the *.bin
or *.prt file
Velocity - outputs the particle velocity as it is found in the external file (either
*.bin or *.prt)
Force - outputs the force (acceleration) per particle as found in the (*.bin) file
Vorticity - outputs the vorticity (spin) per particle as it is found in the (*bin) file
Normal - outputs the normal (alignment) per particle as it is found in the (*bin)
file
Neighbors - outputs the number of neighbors a particle has as it is found in the
(*.bin) file
Texture Coords - outputs UVW coordinates per particle as it is found in the
(*.bin) file
Age - outputs the age per particle as it is found in the (*.bin) file
Isolation Time - outputs the amount of time the particle is without neighbor, this
is a value per particle found in (*.bin) file.
Viscosity - outputs the viscosity per particle as it is found in the (*.bin) file
Density - outputs the density value of the particle as it is found in the (*.bin) file
Pressure - outputs the pressure amount per particle as it is found in the (*.bin)
file
Mass - outputs the mass per particle as it is found in the (*.bin) file
Temperature - outputs the temperature per particle as it is found in the (*.bin)
file
RealFlow ID - outputs the RealFlow particle ID as it is found in the (*.bin) file
Rollout Menu
Add File - when clicked, a standard windows file open dialog opens. Possible
file formats to choose from are: *.bin and *.prt.
Remove - click this button to remove the selected file.
Zero Sequence Frame Offset - check this option to force an overwrite of the
timing information found in the (*.bin or *.prt) file. By default, the timing is
taken from the file itself.
Start Frame - sets the start frame for the external file playback (*.bin or *.prt).
Out Of Range - This drop down list reveals several Out of range options to
choose from. The particle or mesh playback from file may handle end of
animation or start of animation in different ways.
Remove - when checked, the animation will end and
nothing will be shown.
Hold Start - first frame of the animation will be shown until
the frame slider reaches the animation time of the file.
Hold End - when the animation ends the last frame is kept and the particles are
shown.
Hold Start/End - first frame of the animation is shown until the animation starts
and at the end the last frame is shown throughout the scene animation time.
Loop - the animation starts all over at the end and loops back form the first
frame.
Loop Hold Start - the first frame of the animation will be shown until the frame
slider reaches the animation time set in the file. Then at the end of the cycle it
will start over and loop.
Particle File
Emitters - selects the particle group to be used for creating the particle emitters
Particles - defines the particle group were the particles form the file will be
stored/created in.
Nth Particle - sets the amount of particles that should be displayed from the file.
A value of one will show every single particle as it is foudn in the (*.bin or *.prt)
file.
Zero Emitter Pos - when checked, the emitter position will not be taken from
the (*.bin or *.prt) file.
Zero Emitter Rot - when checked, the emitter rotation information will not be
taken form the (*.bin) file.
Mesh Files - specifies the particle group to use for handling the mesh form the
(*.bin) file.
Random Seed - sets the random seed for that particular ImportFile node.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Iterator
The Iterator node is a next generation type of thinkingParticles nodes, it allows
to Iterate or "loop" the evaluation of a particle setup. Similar to a Do or For loop
in a programming language, this Node allows to call several times a network of
nodes connected to it.
The use of this Node is endless and can be helpful in nearly every complex setup
of an advanced particle system. Please check out the example presented at the
end of this page, to learn more about the use of an Iterator node.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Count - (Integer) sets the number of iterations the Iterator should run through
Operator Outputs
On - (Bool) this output is set active (True) as long as the current Iteration takes
place.
Number - (Integer) outputs the loop counter. This number represents the current
position of the Iterator loop.
Number Normalize - (Scalar) outputs the Iterator loop position in a normalized
way (0-1). A value of 1 means that the end of the Iterator loop has been reached.
Width - represents a fixed value that indicates the number of steps a loop will go
through. This number is calculated by 1/Count, a good use of this value is to
create averaged values by adding up Iteration loops.
Rollout Menu
Count - sets the number of loops to go through for this Iterator.
Example
Scenario:
We would like to create a "ray shooter setup" to find an exit for particles out of a
box room with a tiny hole in it. To do this we need to send several random rays
form each particle position to test for a hole in the box. When a hole is found,
the particles need to be sent in that direction.
Wiring:
The example above uses the Iterator node to loop through the connected nodes
20 times.
As you can see in the above example the Iterator activates the 3 Random helper
nodes to create a randomized Vector pointing all around in the scene. With an
Iterator node set to 20, a total of 20 different randomized vectors will be created.
All Particles in the new Group will be evaluated 20 times as well and based on
the result of the Intersect node, the particles are moved into a different Group to
remove them from all further Iterations.
In the setup as seen above, the Intersect node is used to find a "No Intersection",
this was achieved by using the Invert helper node connected to the Hit output
port. So whenever, the Intersect does not create a result it will activate the Group
switching and it will also use the vector to accelerate the particles so that they
can move outside the box.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PPassAB Operator
The PPassAB Operator acts like the Group operator used within
thinkingParticles. The great advantage of PPassAB is the support for particle
interaction. It is the only way in thinkingParticles to create highly optimized
inter-particle interaction and collisions. Measuring particle distances between
multiple particle groups or within one particle group, for example, is only
possible with PPassAB.
It is strongly recommended that you
use only one Initiator within a
DynamicSet. When a second
initiator in a DynamicSet is
available, it might interfere with the
logic and processing within the rule
set.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Type - (Integer) This input data stream takes an integer value that represents the
type of interaction between particles that should be evaluated. This refers to the
radio buttons within the PPassAB rollout for All, Distance, Particle Size, Particle
Shape Collision (1 thru 4 repsectively).
Distance - (Distance) This input data stream receives a distance value for
collisions between particle groups to be evaluated on.
Outside - (Bool) This input data stream inverts the current collision set. It
basically says that all particles that are not colliding are passed from one Group
to another.
Operator Outputs
A Particle - (Particle) This output data stream sends the selected Group A
particles out to another node.
A Position - (Position) This output data stream supplies the current Group A
particle position to another node.
A Velocity - (Velocity) This output data stream supplies the current velocity of
the particle Group A, which can be fed into another operator or condition.
A Life Span - (Life Span) From this output data stream, the life span value of
the current Group A particle can be fed into other operators or conditions.
A Age - (Age) This output data stream provides the current particle age for the
Group A particle which can then be fed into other operators or conditions.
A Size - (Size) This output data stream determines the size of a particle in Group
A that can then be fed into other operators and conditions.
A Spin - (Rotation) This output data stream provides the current particle spin of
a particle in Group A can then be fed into other operators or conditions.
A Alignment - (Alignment) This output data stream provides the current
alignment of the particle in Group A that can then be fed into another operator or
condition.
A Mass - (Mass) This output data stream supplies the mass of a particle in
Group A that can then be fed into other operators and conditions.
A Scale - (Scale) This output data stream provides the current scale of the
particles in Group A that can then be fed into another operator or condition.
A Group - (Group) This output data stream supplies the current Group of a
particle in Group A that can then be fed into other operators and conditions.
A Shape - (Shape)This output data stream determines the current shape of the
particle in Group A that can then be fed into another operator or condition.
B Particle - (Particle) This output data stream sends the selected Group B
particles out to another node.
B Position - (Position) This output data stream supplies the current Group B
particle position to another node.
B Velocity - (Velocity) This output data stream supplies the current velocity of
the particle in Group B, which can be fed into another operator or condition.
B Life Span - (Life Span) From this output data stream, the life span value of
the current Group B particle can be fed into other operators or conditions.
B Age - (Age) This output data stream provides the current particle age for the
Group B particle which can then be fed into other operators or conditions.
B Size - (Size) This output data stream determines the size of a particle in Group
B that can then be fed into other operators and conditions.
B Spin - (Rotation) This output data stream provides the current particle spin of
a particle in Group B can then be fed into other operators or conditions.
B Alignment - (Alignment) This output data stream provides the current
alignment of the particle in Group B that can then be fed into another operator or
condition.
B Mass - (Mass) This output data stream supplies the mass of a particle in
Group B that can then be fed into other operators and conditions.
B Scale - (Scale) This output data stream provides the current scale of the
particles in Group B that can then be fed into another operator or condition.
B Group - (Group) This output data stream supplies the current Group of a
particle in Group B that can then be fed into other operators and conditions.
B Shape - (Shape)This output data stream determines the current shape of the
particle in Group B that can then be fed into another operator or condition.
Rollout Menu
GroupA - Select from this drop-down list the first particle group for particle
interaction.
GroupB - Select from this drop-down list the second particle group for particle
interaction. If you need to have particle interaction within a single particle group
(self interaction), the same group as you've selected for GroupA may be selected
again here.
All - Check this option to always activate the PPassAB operator with all particle
combinations. This can be a useful option when, for example, you want a
distance measured between particles with a connected Distance condition.
Distance - Choose this option to get a radial distance check between GroupA
and GroupB particles. Only when this distance is reached is the PPassAB
operator activated and all connected nodes will then be evaluated. Using this
method, a new particle can be born when two particles "collide".
Only The Nearest - check this option to activate the Node only for the nearest
Particle
Only The Furthest - when checked, the furthest particle will be output by this
Node
Particle Size - Activate this option when you want to use the particle size as a
distance check between particles from GroupA and GroupB. The current particle
size will be used to check against other particles for collisions in this case. It is
important that the particles actually have a size value assigned or the check will
fail, and none of the connected nodes will be evaluated.
Particle Shape Collision - Check this option to use a "brute force" and unoptimized collision check between faces. This is the most accurate method for
testing non spherical particle shapes. However, if the particle meshes are fairly
complex it is better to use the Shape Collision operator as it is far more
optimized for such cases.
Invert - When this checkbox is active, it acts like a negation factor. The
connected nodes to the PPassAB operator in this case will only be activated for
particles that do not collide (Distance, Particle Size, Particle Shape Collision).
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PPass Operator
The PPass Operator acts like the Group operator used to within thinkingParticles
1.0. However, unlike the older Group operator, PPass has the major advantage of
providing easy control as to which particle group parameters should be supplied
by. A dropdown list allows changes to be made to the particle group at any time
without the user having to re-wire or delete the original setup.
It is highly recommended that you use the PPass operator whenever possible and
avoid using the older Group nodes unless absolutely necessary.
It is strongly recommended that you
use only one Initiator within a
DynamicSet. When a second
initiator in a DynamicSet is
available, it might interfere with the
logic and processing within the rule
set.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Outputs
Particle - (Particle) This output data stream sends the selected particles out to
another node.
Position - (Position) This output data stream supplies the current particle
position to another node.
Velocity - (Velocity) This output data stream supplies the current velocity of the
particle, which can be fed into another operator or condition.
Life Span - (Life Span) From this output data stream, the life span value of the
current particle can be fed into other operators or conditions.
Age - (Age) This output data stream provides the current particle age which can
then be fed into other operators or conditions.
AgeRelative - (Scalar) outputs the particle age between 0 (birth) and 1 (death).
Size - (Size) This output data stream determines the size of a particle that can
then be fed into other operators and conditions.
Spin - (Rotation) This output data stream provides the current particle spin that
can then be fed into other operators or conditions.
Alignment - (Alignment) This output data stream provides the current alignment
of the particle that can then be fed into another operator or condition.
Mass - (Mass) This output data stream supplies the mass of a particle that can
then be fed into other operators and conditions.
Scale - (Scale) This output data stream provides the current scale of the particles
that can then be fed into another operator or condition.
Group - (Group) This output data stream supplies the current Group of a particle
that can then be fed into other operators and conditions.
Shape - (Shape)This output data stream determines the current shape of the
particle that can then be fed into another operator or condition.
Rollout Menu
Group - Use the Group dropdown list to specify the particle group that should
be used to supply the above mentioned output data streams.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PPassString
This operator is nearly identical to the PPass Initiator with one exception; data
channels will not be exposed/shown by this operator. This operator can collect
multiple particle groups by name and this might result in different particle
groups with different data channels.
The most powerful feature of this variant of PPass is that you may 'collect'
multiple particle groups just based on their names regardless of their position in
the hierarchy.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Outputs
Particle - (Particle) This output data stream sends the selected particles out to
another node.
Position - (Position) This output data stream supplies the current particle
position to another node.
Velocity - (Velocity) This output data stream supplies the current velocity of the
particle, which can be fed into another operator or condition.
Life Span - (Life Span) From this output data stream, the life span value of the
current particle can be fed into other operators or conditions.
Age - (Age) This output data stream provides the current particle age which can
then be fed into other operators or conditions.
AgeRelative - (Scalar) outputs the particle age between 0 (birth) and 1 (death).
Size - (Size) This output data stream determines the size of a particle that can
then be fed into other operators and conditions.
Spin - (Rotation) This output data stream provides the current particle spin that
can then be fed into other operators or conditions.
Alignment - (Alignment) This output data stream provides the current alignment
of the particle that can then be fed into another operator or condition.
Mass - (Mass) This output data stream supplies the mass of a particle that can
then be fed into other operators and conditions.
Scale - (Scale) This output data stream provides the current scale of the particles
that can then be fed into another operator or condition.
Group - (Group) This output data stream supplies the current Group of a particle
that can then be fed into other operators and conditions.
Shape - (Shape)This output data stream determines the current shape of the
particle that can then be fed into another operator or condition.
Rollout Menu
Group Search String - Use the text input field, to select multiple particle groups
by name. The main idea of this feature is to use the wildcard character (*) to
select multiple groups by name.
Check out the following example:
The particle groups are as follows.
The selector looks like this: spra* which selects all groups in the list that
have the letters SPRA in it.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PSearch
A PSearch node can be used for many advanced effects that need to find the
nearest or furthest particle within a search range. Thanks to the many outputs
this Node has to offer, all important data can be collected to create advanced
effects. Check out the simple example at the end of this page to learn how to use
this Node.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) is an input port to supply the position information a particle
carries, to this Node.
Position - (Position) feed in a position value to specify a world space position
for this Node. This position will be used to search for the nearest or furthest
particle.
Group - (Integer) specifies the Group to be used by this Node
Use SubTree - (Bool) when active the full Particle Group Hierarchy will be used
to search for particles near the Position
Radius - (Scalar) sets the Radius to search for a nearest particle
Operator Outputs
Nearest PID - (Particle) outputs the nearest Particle found from the supplied
Position.
Nearest Distance - (Distance )supplies the nearest Distance value form the
supplied position.
Furthest PID - (Particle) supplies the furthest particle ID as it was found in
within the search radius.
*Furthest Distance - (Distance) outputs the furthest distance value for furthest
particle found within the search radius
Found PIDs - (Particle) outputs all particles found within the search radius. This
output will iterate through all particles found .
Found Distances - (Distance) supplies all distances from found particles within
the search radius searched from the supplied position.
Found Indexes - (Integer) outputs the current index of the particle that are
within the search radius, searched from the position supplied .
Found Count - (Integer) holds the total amount of particles found within the
search radius.
Found Density - (Scalar) outputs the denisty of particles within the search
radius. This number is calculated by dividing the total amount of particles by the
radius.
Found Average Position - (Position) supplies the average position of all
particles found within the search radius.
Found Average Velocity - (Velocity) outputs the average velocity of all particles
found within the search radius
Rollout Menu
Group - lets you select the particle group to search for the nearest or furthest
particle within a radius
Use SubTree - when checked, the full Hierarchical particle group structure will
be used to search for the nearest or furthest particle within a radius.
Radius - specifies the search radius to search for around the supplied position
Example
In the example above, the PSearch node is used to find the nearest particle and
then the particle is sent towards the position of the nearest particle. A Threshold
node stops the particle 20 unites before the target is reached.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PSelection Operator
Sometimes it is necessary to access one or more individual particles to apply
some changes to it or delete it. thinkingParticles offers several methods to handle
this task including the PSelection Operator.
To use this operator, a user will select one or more particle IDs to affect.
Whenever the rule for this operator becomes true, all connected operators or
conditions will also become activated and evaluated.
It is strongly recommended that you
use only one Initiator within a
DynamicSet. When a second
initiator in a DynamicSet is
available, it might interfere with the
logic and processing within the rule
set.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Outputs
Particle - (Particle) This output data stream sends the selected particles out to
another node.
Rollout Menu
ADD - Click this button to add a particle ID to the list of particles that should
trigger the PSelection initiator. You may type in any ID or use the spinner to
change the number that is added to the list.
DEL - To remove a particle ID from the list, highlight the number in the list,
then press this button.
Particle ID - Use this spinner to type in any particle ID number that should be
used to trigger the PSelection initiator.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
PLight
Lights play an important role in any animation or visual
effects setup. Controlling lights is key to awesome shots
and creating depth and character in visuals.
thinkingParticles allows many ways to control lights in a
3d scene however, the PLight operator turns any particle
into a real Omni light type along with proper shadow
casting. The advantage of using PLight, in contrast to
normal Omni lights, is its 100% procedural control and
complete thinkingParticles workflow integration. Nearly
every aspect is controllable through thinkingParticles
nodes. Every single particle light can have its own light
intensity and color, for example.
PLight lights appear as standard Omni light types to
many 3ds Max renderers. Most renderers should have no
issue at all rendering this light type including shadows.
Any external renderer (e.g. mental ray, iray, ART,
Arnold) might have issues in rendering this light type.
Integrated rendering solutions following the 3ds Max
SDK or advanced external rendering solutions like finalRender 4 will have less
issues rendering this light type.
While any particle group may be used as a particle input some consideration has
to be done before doing so. The particle position (point in space) is used to
create an omni light per particle if it happens that this particle group carries a
shape of any kind the light will be occluded in its center, when using shadow
casting lights. When a 'light bulb' or any kind of fitting is used; make sure the 2
sided option is turned off in the shadow section or the Groups as Objects option
is used along with the relevant object properties.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) - This input data stream reads in the currently selected
particle group to the FlowEmitter operator.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
There are no Outputs available for this node.
Rollout Menu
PLight Menu
Nodes - click the button to bring up a standard light Include/Exclude dialog that
will allow you to either include objects into the illumination or exclude them.
Color - sets the particle light color. This color is the same for all particles. To get
a variation of color per particle you may use the color variation options or
specify the color per particle through node connections.
Multiplier - sets the intensity of the particle light.
Angle - this option allows to reduce the Omni light to reduce its spread or size,
depending on the surface of an object. Smaller values make the light to appear
more focused and not spread out.
Eval Type - particle lights can be calculated in 2 possible ways. Light energy is
accumulated throughout which means that more particles will create more light
which can lead to burned out areas when too many particles are at the same spot.
The second option Average will collect all intensities and average out the light
energy throughout the particle cloud of lights.
Variation
Ran. Color - check this option to generate and use random light colors for each
particle. This will ensure that no two particle lights look exactly the same.
Hue, Saturation, Value - to get random light colors out of the particle system
you need to adjust how much the colors should vary. The base color is always
the light color you select. The values you type in for Hue, Saturation and Value
are angles on the standard color wheel. Higher values mean more variation in the
particle system coloration.
Ran. Angle - another possible way to add randomness to the particle lights is by
randomizing the Angle value. By activating this option, random angles for each
particle light will be used. If you increase the associated spinner value, you'll get
more variation in the light particles emission direction. Higher values will create
more randomization of emission angles for each particle light.
Ran. Seed - the Random number generator has to start somewhere to generate
random numbers. If you always use the same starting number and you have more
than one particle group using particle lights, they will all look the same. To
change this, you should try to use a different random seed number for each
particle light in your scene.
Shadow
Particle lights do supports shadow casting from each individual particle light!
Keep in mind that, depending on the amount of particles the light and shadow
calculation might take considerably more time to render than rendering particle
lights without shadows.
Enable - when checked the Shadow calculation for particle lights are active.
Each particle light will cast a shadow.
Type - lets you choose from several 3ds Max shadow generators. Keep in mind
that not all shadows may be supported by your renderer. Some shadows might
also have restricted settings/functionality.
Each shadow type might show different settings and options..
Attenuation
The attenuation rollout menu offers access to the particle light's attenuation
options.
Decay - sets the method of light falloff calculations. There are three possible
options:
None - when chosen no light falloff by distance will take place.
Inverse - select this option to get inverse light falloff by distance
(linear).
Inverse Square - choose this option to get a physically accurate light
falloff. Intensity reduced by the square of the distance.
Near
Use - check this option to enable light attenuation based on individual distances.
Start - sets the start distance of the attenuation calculation.
End - sets the end distance of the attenuation calculation.
Show - when checked; wire frame outlines will indicate the Near start and end
ranges.
Far
Use - check this option to enable light attenuation based on individual distances.
Start - sets the start distance of the attenuation calculation.
End - sets the end distance of the attenuation calculation.
Show - when checked; wire frame outlines will indicate the Far start and end
ranges.
Multiply by Particle Size - when checked; all attenuation ranges will be
multiplied by particle size.
Show Reduce - sets the amount of particles to show the ranges; when active. A
value of 1 will shoe the ranges viewport indicator for every single particle light.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Camera Map Operator
The CameraMap Operator offers a powerful way to map particles and use
mapping data in such a creative way you might have not thought of before!
Mapping coordinates are created in a similar way like you might already know it
form the standard camera map modifier of 3ds Max.
There are many ways to use this operator to create particle effect, things like
camera mapping thousands of little spheres to form an object and disintegrate it
or rebuild it from a dust cloud. A camera mapped particle setup might be used to
drive a fragmentation and so on ... just imagine what YOU can do.
Be aware that the particles MUST have a shape BEFORE applying the camera
mapping, so use Camera Map in a dynset after Object2Particle or StdShape or
GeomInstance, not before.
Also realize the Camera Map operator can be controlled with its "On" input to
assign the mapping at a distinct point in time such as the particle's birth. If an
additional UV channel is needed later this can be accomlpished by again
controlling the "On" input and specifying a new UV channel integer (or of
course it can overwrite the previous UV assignment).
One very powerful way to use this operator is to pick the main render camera
and allow the CameraMap operator to activate every frame or sample. Then in a
compositing program you can paint a mask on top of the rendered sequence and
use that mask to activate certain particles or areas. For example during a shot
driving through a collapsing canyon you can paint per frame which parts of the
canyon will be activated (fragmented, etc). Be aware you may need to add
additional controls such as distance checks to the camera to avoid affecting all
particles in that line of depth (i.e. the ray created from the camera through the
mask out to infinity).
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time (Time) - This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle (Particle) - This applies the camera mapping to the selected particle
group. This MUST be connected and will be highlighted yellow if it is not.
Camera (Node) - this port may be used to input a Camera Object (through a
Node helper)
Map Channel (Integer) - sets the Map channel to be used by the Camera Map
operator.
Operator Outputs
There are no outputs for this operator
Rollout Menu
None - click this button to select a camera object in the 3ds Max viewport. You
may also feed in the camera information into this node by using a Node helper
and the Camera input port.
Map Channel - sets the map channel to be used/created by this operator for its
camera mapping
Memory UV
Group - sets the particle group to be used to bake UV coordinates. Obviously
this particle group needs to contain mesh objects.
Use Subtree - when checked sub-groups of the selected main group are also
used for baking UVs.
Memory - press this button to "freeze" or memorize the UV coordinates for the
current frame and situation the camera map operator is in. This feature allows to
grab the UV-Camera Map coordinates for all particle meshes at a certain time. A
physics simulation, for example, at its very end could be used to bake the
camera map operator to assign the UV texture coordinates to the particles as it
would know how the UV will come out in the future.
This feature works only by following some logical steps and guide lines. If a UV
texture setup from the future (end of a simulation) is needed, the scene has to be
simulated until the point of interest. After this; the Uv set can be memorized by
the operator, then the rendering and re-simulation may be started. After
memorizing a target UV setup, the particle count or objects may not change at all
or the result will be not as expected.
Reset Memory - check this button to delete any memorized UV coordinates for
the camera map operator.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Material Time
Inputs / Outputs / Rollout Menus
Animated materials and textures in combination with particles are somehow
tricky and complex to setup with standard 3ds Max tools. This is why this Node
comes in handy, it allows to specifically control an animated material for each
individual particle.
In 3ds Max particle systems can not
simply visualize different materials
at different animation times on
multiple particles. The view port
representation of the animated
materials or textures are not the same
as in the rendering. A test rendering
needs to be done to ensure the
outcome of the animated material
matches your intention.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group to be used by this Node.
Material Time - (Frame) used to feed in a material time value as a standard 3ds
Max frame number
Type - (Integer) used to set the Material Time method.
0 = User Defined Time
1 = Operator Time
2 = Particle Age Absolute
3 = Particle Age Relative
Operator Outputs
This Node has no Outputs available
Rollout Menu
Material Time - becomes active, dependent on the chosen option below. In
general, this parameter is used to supply a fixed time value that will then be used
to calculate the animated material effect.
User Defined - when this is checked, the Material Time specifies the frame that
should be used for the material animation.
Operator Time - check this option to use the Time value of the operator, this
operator Time will be used to animate the material.
Particle Age Absolute - when checked, the material will be animated directly
with the value of particle age. When a particle's age is 80, the material will
receive the animation time 80.
Particle Age Relativ - check this option to use the particle age information in
relation to the Material Time value. When a particle is born the material
animation will start (material at frame 0) as the particle gets older and dies the
material animation will be set to the frame number as supplied by Material Time.
This make it possible, for example, to let the particles fade out (with an animated
opacity) when they die.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Paint Operator
thinkingParticles offers an advanced function in the Paint Operator that lets you
paint on other objects with particles. Each impact of a particle on an object's
surface will create a color splash or other material effect. This collision detection
is face-accurate and it will be calculated whenever the ON input data stream
receives a True condition, or continually, if nothing is piped into the ON stream.
In order to paint on the surface of an object, you will use a special TP_TexMap
texture map to do the job. This texture map is specifically designed to paint on
the object's surface when a particle collides with it.
Keep in mind that collision detection
can be a very time consuming effect
and the processing time increases by
the square of the increased number
of faces and particles.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group to be used when painting the collision object. The data stream MUST be
connected and will be highlighted yellow if it is not.
Operator Outputs
Time - (Time) This output data stream sends out the time value
Position - (Position) This output data stream sends the position data for all of the
collision paint points.
Alignment - (Alignment) This output data stream sends out the alignment data
for all of the particles that collide and paint on the surface.
Collision Velocity - (Velocity) This output data stream sends out the velocity of
the particles that collide and paint on the selected surface.
Blend Intensity - (Intensity) This output data stream defines how much the map
is blended (value 0-1). This depends also on the gradient and blending time.
Rollout Menu
Pick Object - Activate this button and select the object from your scene that you
want to be painted by particle impacts.
Select TP_Texmap - Click this button to open the standard Material/Map
browser and select the TP_Texmap texture map type with which you want to
paint the object as particles impact its surface. This button can also act as a Drag
and Drop receiver for any TP_Texmap map.
Scale - This spinner's value sets the size of the map that should be drawn at each
particle impact point on the selected object's surface.
It is important to note that the scale
value is assigned in world units.
Scale Time - This spinner sets the time in frames the TP_Texmap map needs to
get to its full size as set in the Scale spinner. By default, the TP_Texmap is
applied at the Scale value set above, and appears to pop onto the surface. While
a Scale Time of 0 can be good for effects like bullet hits, it may not always be
appropriate. For other effects like raindrops, increase the Scale Time to give a
more natural scaling effect as the size is increased over the number of frames set
in this spinner.
The gradient below the Scale Time spinner controls the scale timing. The lefthand edge of the gradient represents the start size and the right hand edge
represents the end size of the map as set in the Scale spinner. A white color in
this gradient means a map size as it is set in Scale while a black color in the
gradient means a zero map size. Intermediate gray values create intermediate
sizes throughout the scaling process.
Blend Time - This spinner controls the time in frames that it takes until the
TP_Texmap map is fully visible. This feature works like alpha channel
compositing with standard bitmaps.
The gradient below the Blend Time spinner controls the blend timing. The lefthand edge of the gradient represents the start blend value and the right hand edge
represents the end blending of the map as set in the Blend Time spinner. A white
color in this gradient means a map blending is fully visible while a black color in
the gradient means the map is completely transparent. Intermediate gray values
create intermediate blending values throughout when a collision paint event
occurs.
Remove Time - This spinner controls the time in frames that it takes until the
TP_Texmap map is removed from the surface entirely.
Mapping Source
To control how the map is painted on the object's surface, choose one of the
following settings:
Original - Use this option to make each particle impact remove a bit of the
original map by revealing the "underlying paint" assigned to the TP_Texmap
operator. Be aware that these impacts may be very small to begin with and you
may need to set the Scale parameter higher in order to see them.
When you have more than one map
in the TP_Texmap map, they are
cycled when impacts are generated.
UVW - This option uses the UVW mapping channel selected below and the
Scale factor of the map to place the particle paint on the selected object's surface.
3D Planar - Each impact of a particle on the object's surface is accurately
calculated. With this option checked, the map is applied depending on the point
of impact and the surface orientation (normal). It's like planar mapping as seen
from the point of impact.
3D - When this option is chosen, a procedural map is assigned based on the 3D
UV information of the selected object. The system takes the collision point with
its XYZ values and moves the map to it. When you use a standard bitmap, you
won't see any difference in how the mapping is handled as it ONLY works with
3D procedural maps.
Make sure you understand that UVW
space is a 0.0 to 1.0 space and so the
Scale parameter must be adjusted
accordingly to get the results you
expect. For all other options the map
scale is dependent on world units-
it's the actual size of the object that
sets the dimensions.
Another thing to note is the use of
the Material ID by the Paint
Operator. Usually, all of the faces
with the same Material ID will get
the same map drawn by any particle
impact. If you see the same map
appearing on multiple sides of an
object it's because those faces use the
same Material ID. Use 3D or 3D
Planar to prevent this from
happening.
Ignore Material ID checkbox - When this checkbox is active, the painted map
can "splash" over different material IDs.
Falloff Blend
This set of options controls how the painted impact map is blended into the
original map of the object. In most cases you do not want to have a crisp
rectangular map appearing when a particle hits the surface. To control this and
get smooth blending towards the edges of the map, choose one of the options
listed below.
None - Select this option when you do not want to fade the impact map towards
the edges.
Rectangle - Activate this option to get a rectangular blend towards the edges of
the map.
Radial - Use this option to create a circular blend from the center to the outer
edges of the map.
Gradient - The Falloff gradient controls the blending from the center to the
outer edges of the map. A white color in the gradient makes the map opaque and
a black color in the gradient makes the map fully transparent. Each position in
the gradient represents a relevant position in the map with the left-hand side of
the gradient representing the center of the map and the right-hand side of the
gradient representing as the outer edge of the map.
Collision
Front - Select this option when you want the particle impact detection to work
on the facing surfaces to the particles.
Back - Select this option when you want the particle impact detection to work on
the backside surfaces to the particles.
Two - Select this option when you want the particle impact detection to work on
both the facing and backside surfaces to the particles.
Collision Offset - thinkingParticles uses advanced techniques to calculate the
exact point of impact on the object's surface. Each particle that hits or crosses the
surface of an object creates a color change or map change at the exact point of
impact. However, you can also use a feature that creates a collision before the
actual collision will happen. This is done by using an offset to the particle. There
are three options to choose from.
None - Check this option to get the most accurate results for plain particle
collisions.
Particle - Use this option when you want to use the particle size as an indicator
for collisions.
Value - Check this option and set any size that should be used to calculate a
collision event.
Color - Any color set in this color swatch will be used to paint on the object's
surface when there is no map chosen.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ShapeMaterial Operator
The ShapeMaterial operator allows the user to change/add a material to any
thinkingParticles shape object.
This feature is a very tricky one, as
there is only one material per particle
system available in 3ds max!
thinkingParticles uses Multi/Sub
Object materials to add the materials
to the scene assigned by this
operator.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group to be used when painting the collision object. The data stream MUST be
connected and will be highlighted yellow if it is not.
Operator Outputs
No Outputs are available
Rollout Menu
Material - drag and drop or choose any material you want to assign to the
particle shapes, connected to the Particle-IDS.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Clear Ref
Use this Node to clear or break a reference between particles. Depending on the
type of referencing, the connection between two particle pairs can be easily
removed or changed.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle 1 - (Particle) sets the first particle that should act as a reference
Particle 2 - (Particle) defines the second particle to act as a reference
Type - (Integer) sets the reference type to one of the following methods: 0=
From Me; 1= To Me; 2=From & to Me
Operator Outputs
No Operator Outputs.
Rollout Menu
From Me - check this option to remove or clear the connection from Particle 1
to Particle 2
To Me - when checked, the connection coming from Particle 2 is removed, only.
From & To Me - clears both connections between Particle 1 and Particle 2
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Get Ref
GetRef is one of three Reference operators within thinkingParticles. GetRef is
used to retrieve the reference particles. Before it can be used a SetRef operator
must be used to create references between two or more particles.
References in thinkingParticles are somewhat different than the 3dsmax
reference option when creating cloned objects. In thinkingParticles, the reference
is a relationship between two particles, where one particle is defined as the To
particle in the relationship, and the other particle is the From particle. There is no
hierarchical implication, only a directional To/From relationship. It is often
easiest to imagine a hierarchical relationship and consider the From particle as
the parent and the To particle as the child.
Remember that the reference is directional and that it is created From one
particle To another particle. When using SetRef you define one particle to be the
From particle and the other particle as the To particle. When using GetRef you
are asking either the From or the To particle "who is your reference?" and you
must specify if you are requesting the To or the From reference particle.
Example 1: we use SetRef to create a reference between particle ID 4 and 5 PID
4 and PID 5. With SetRef we pipe PID 4 into the From input and PID 5 into the
To input. This creates a reference relationship between PID 4 and 5 where PID 4
is the From particle and PID 5 is the To particle. Then in another dynamic set we
use GetRef and use PID 4 as the input. This means we are inquiring about To
and From relationships for PID 4. In the GetRef operator we specify From
because we want to find out relationships where PID 4 is the From particle.
GetRef will then output PID 5 because it has a relationship with PID 4 where
PID 4 is the From particle. If we set GetRef to To it will not return anything in
this case because there are no relationships where PID 4 is the To particle in the
relationship.
Important Keep in mind that particles can have multiple To/From partners. If
using GetRef and the result contains multiple PIDs then the output connection
will iterate through the results.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) lets you set the particle from which you wish to get a
reference.
Type - (Integer) sets the reference type to one of the following methods: 0=
From Me; 1= To Me; 2=From & to Me
Operator Outputs
Ref. Particle - outputs the referenced particles (dependent upon the reference
Type chosen)
Number Refs. - outputs the total number of references depending on the setting
of From Me, To ME, or both.
Rollout Menu
From Me - check this option to get the referenced particle that is connected to
the one at the Particle input
To Me - when checked, the particle is output that is holding a reference to the
one connected at the Particle input
From & To Me - outputs the particles that are connected to this Particle and it
outputs those particles as well as particles to which this Particle is connected.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Set Ref
SetRef is one of three Reference operators within thinkingParticles. SetRef is
used to create reference relationships between particles. After the reference
relationship is created the GetRef operator can retrieve information about the
reference relationships, or the ClearRef operator can remove reference
relationships between particles.
References in thinkingParticles are somewhat different than the 3dsmax
reference option when creating cloned objects. In thinkingParticles, the reference
is a relationship between two particles, where one particle is defined as the To
particle in the relationship, and the other particle is the From particle. There is no
hierarchical implication, only a directional To/From relationship. It is often
easiest to imagine a hierarchical relationship and consider the From particle as
the parent and the To particle as the child.
Remember that the reference is directional and that it is created From one
particle To another particle. When using SetRef you define one particle to be the
From particle and the other particle as the To particle. When using GetRef you
are asking either the From or the To particle "who is your reference?" and you
must specify if you are requesting the To or the From reference particle.
Example: we use SetRef to create a reference between particle ID 4 and 5 PID 4
and PID 5. With SetRef we pipe PID 4 into the From input and PID 5 into the To
input. This creates a reference relationship between PID 4 and 5 where PID 4 is
the From particle and PID 5 is the To particle. Then in another dynamic set we
use GetRef and use PID 4 as the input. This means we are inquiring about To
and From relationships for PID 4. In the GetRef operator we specify From
because we want to find out relationships where PID 4 is the From particle.
GetRef will then output PID 5 because it has a relationship with PID 4 where
PID 4 is the From particle. If we set GetRef to To it will not return anything in
this case because there are no relationships where PID 4 is the To particle in the
relationship.
Important Keep in mind that particles can have multiple To/From partners. If
using GetRef and the result contains multiple PIDs then the output connection
will iterate through the results.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle From - (Particle) defines the particles from where the connection
should be created from.
Particle To - (Particle) sets the particle that should be used to create a
connection with
Operator Outputs
No Node Outputs.
Rollout Menu
This Node has no rollout menu options
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Scripted Operators
With the release of thinkingParticles R4 a powerful new method to extend the
functionality of thinkingParticles has been introduced. Standard MAXScript can
be used now to write your very own thinkingParticles operators, when needed.
Those scripted operators "feel" and behave like any other thinkingParticles
Node; they can be s powerful as the built in ones!
It is way beyond the scope of this manual to teach you how to program a 3D
application or how to properly learn the mathematical skills to write your own
thinkingParticles plug-ins. We do assume an in depth knowledge of the 3ds Max
scripting language and concepts. If you have never wrote a MAXScript before,
we do suggest you check out the available training material offered by Autodesk
to learn MAXScripting.
By installing thinkingParticles, sample scripts have been automatically installed
into the default 3ds Max Script folder. Check out the "TP_Startup.ms" script in
the Startup folder of 3ds Max. This script explains the functions and features of
thinkingParticles which are available to MAX Scripters.
A thinkingParticles Plugin Template
A scripted thinkingParticles plugin would at least look like the template shown
below. To learn more about the function calls and features of thinkingParticles
scripting, check out the "TP_Startup.ms" file placed in the Script startup folder
of 3ds Max.
plugin Geometry [plugin ID]
name:"[plugin name]"
category:"Script"
classid:#([your class id])
extends:TP_ScriptBase
invisible:true
replaceui:true
version:1
(
//here is your plugin code it must contain at least those 3 functions:
tp_color_type()
tp_init_inoutputs()
tp_calculate()
)
tp_register [your plugin ID] 1
Grab
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Geom Instance Operator
The Geom Instance Operator lets you pick any object to be used as a particle.
The most flexible particle shape you can have inside of thinkingParticles is a
piece of instanced geometry. It can be anything you model, an animated
polygonal spaceship that has a complex hierarchy or a simple chamfered
cylinder. This powerful operator even gives you the ability to create crowds of
character studio bipeds that are animated and react correctly to the space they
occupy.
It is important to note that the object instancing happens whenever the ON input
data stream receives a true condition.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be given a standard shape. The data stream MUST be connected
and will be highlighted yellow if it is not.
Use Subtree - (Bool) This input data stream is used to override the Use Sub-tree
Also checkbox state within the Geom Instance rollout.
Normalize Type- (Integer) This input data stream takes an integer value that
represents the Type of normalization algorithm the particles will use for its
instances geometry. Valid input values are 0 through 2, where:
0 = None
1 = Box Normalize
2 = Normalize Size
Normalize Size - (Size) This input data stream is used to override the Normalize
Size spinner value within the Geom Instance rollout.
Offset Type - (Integer) This input data stream takes an integer value that
represents the Type of animation offset type the particles will use for its
instance's geometry. Valid input values are 0 through 3, where:
0 = None
1 = Birth
2 = Character Animation
3 = Material Time
4 = Animation Tree
Frame Offset - (Frame) This input data stream is used to override the Frame
Variation spinner value within the Geom Instance rollout.
Second Per Speed - (Scalar) This input data stream is used to override the Sec.
per Speed spinner value within the Geom Instance rollout.
Rotation Radius - (Scalar) This input data stream is used to override the
Rotation Radius spinner value within the Geom Instance rollout.
Cycle Frames - (Frame) This input data stream is used to override the Cycle
Frames spinner value within the Geom Instance rollout.
Character Axis - (Integer) This input data stream takes an integer value that
represents the primary axis that the character will be oriented on. Valid input
values are 0 through 2, where:
0 = X-Axis
1 = Y-Axis
2 = Z-Axis
Invert Axis - (Bool) This input data stream is used to override the Invert
checkbox state within the Geom Instance rollout.
Rotation - (Angle) This input data stream is used to override the Rotation deg.
spinner value within the Geom Instance rollout.
Vertex Color (Color) - this port is used to supply either a vertex color (Color
Channel 0) or you may pipe in the particle ID (Particle) to feed TP Variation
Texture Map with the relevant data needed to handle unlimited color variations
per object!
Example Setup to feed Particle ID into Vertex Channel
ATree State Number - (Integer) sets the current animation state of the
animation as defined in the Animation-Tree.
ATree Master Speed- sets the Master Speed which acts as a global multiplier
for all animation ranges in all Animation State folders.
ATree Master Speed Variation - adds a random variation on top of the Master
Speed value, the bigger this value the bigger the randomness will be.
ATree One Turn Guaranteed - when set to True (1), the animation tree is
forced to playback the animation state at least for the first time.
Operator Outputs
ATree State - (Integer) outputs the current Animation Tree State number.
ATree State Progress - (Scalar) outputs the current progress of the Animation
State; 0= start of animation and 1= end of animation sequence
ATree Transition - (Integer) outputs the current transition number (from one
State to a new State)
ATree Transition Progress - (Scalar) holds the current Transition Progress;
0=start of transition animation and 1= end of transition aniamtion
ATree Destination - (Integer) outputs the number of the next Animation Tree
State to be called.
Rollout Menu
Up/Down - Clicking on this button will move the various
instanced objects up and down within the listbox.
Remove - If you want to remove a selected object from the
list, highlight its name in the listbox and then click on this
button.
Pick Object - Press this button to enter the pick object
mode. You may choose any 3ds Max geometry, light or
other helper object from within the viewports, or you can
then hit the H-key to select an object by name.
NOTE: Be aware that you can pick light sources and
helpers with the Pick Object button, however, lights and
helpers are not displayed or used within the scene.
Hide - Press this button to Hide the selected object so that
it is not visible within the viewports outside of the particle
system. This can be a very handy way of hiding the
instanced object used within the system.
Use Subtree Also - Activate this checkbox to instance the
object's hierarchy as well as the selected object. When
active, every object attached to the selected one will also be
instanced with their relative positions and animation intact.
For instance, if you have a butterfly body that has two
animated wings as separate objects that are linked to the
body, by turning this checkbox on and selecting the
butterfly body, the animated wings will automatically be
used as well giving you an instant flock of animated
butterflies
Render Instance - this works in conjunction with the
Master Dynamic setting, if the Render instancing is
enabled and this option is checked as well the created
objects will be flagged as instances to the Renderer.
Scaling
Original Size - By default, thinkingParticles will use the selected object's
original size when it instances the geometry. Use this option when you want to
preserve the size of the instanced geometry.
Keep in mind that this size setting
might be overridden by other Size
Operators or settings that are applied
to the particles elsewhere within the
system.
Box Normalize - Every object can be enclosed by a bounding box. Selecting this
option encases the instanced geometry particle in a bounding box and normalizes
it to 1.0. In other words, an object that has a bounding box size of 30 units will
be considered 1.0 unit big when Box Normalize is used. However, be careful
when you use this option. thinkingParticles needs to calculate the bounding box
of an object every time it is triggered to get or set a size. With complex geometry
this might take some time.
As an example, suppose you have a spaceship that is 1,000 3ds Max units in
size. If you want to use this object as a particle, you most likely won't want each
object to maintain it's original size. Let's also suppose that you want to make
sure each spaceship particle is 5 3ds Max units in size instead. Using the Box
Normalize option and typing in a size of 5 in a Size Operator will force the
particle to be 5 units regardless of its real size.
Normalize Size - When you select this option, you can set the size you'd like to
use for the instanced geometry. Type in the size of the object (bounding box) you
are going to use as a particle. This size value will be normalized to 1.0.
Offset Keying Group of Controls
Type - The Geom Instance Operator offers three methods of synchronizing
particles and the animation data associated with the instanced geometry.
None - by default, an instanced shape will use no animation offset and the
animation of the instanced geometry runs through regardless of the birth time of
a particle. When None is selected, all particles will have the identical animation
timing. So if you use the example of a butterfly flapping its wings, all of the
instanced butterfly particles will flap their wings at the same time.
Birth - select this option when you want the animation associated with the
instanced geometry to start when the particle is born. So in the case of the
butterfly flapping its wings, each butterfly particle will start flapping its wings
when it is created by thinkingParticles.
Character Animation - is directly related to the characters and crowd work, and
when you choose this option it makes sure that any animated character (IK rig or
character studio Biped) will behave correctly when instanced inside of this
operator.
Material Time - will use the animation keyframes of the material as an Offset
when a particle is born.
Animation Tree - choose this option to activate the crowd animation feature of
thinkingParticles. When this option is selected the Animation Tree section of the
rollout menu becomes relevant for all character animation settings
Frame Variation - It would be highly unrealistic if all instanced particles started
with their animation at the exact same moment. A flock of birds, for example
will not show any synchronous wing movement for all of the birds in the group.
To make each animated particle start at a different time you should increase the
Frame Variation value. Higher Frame Variation values mean more variation in
the particle system animation.
Character Animation
Instanced geometry that has no animation assigned to it is generally quite easy to
handle when instanced. However, animated character rigs with complex IK
settings need some special care. In an effort to handle characters,
thinkingParticles makes a distinction between the skeletal animation assigned to
geometry and the mesh animation of an object or character. In the Character
Animation group of controls, all settings for Character Studio or other character
plug-ins can be adjusted.
When using Character Studio, you should set up the Geom Instance settings as
follows:
1. In the main dialog, Pick the mesh object that is attached to a Biped rig,
without enabling the Use SubTree Also checkbox.
2. Under the Character Animation group of controls, you will pick the Bip01
(or root node object).
Pick Biped - This button is named Pick Biped because thinkingParticles expects
a hierarchical bone structure as offered by a Biped rig. character studio offers a
ready-to-animate bone structure for bipedal characters. Because it's only a matter
of a proper IK definition, any other hierarchical bone structure will also work.
By "proper" generally speaking all you need to do is ensure that you have a root
node in the chain, and that the nodes are linked together.
Hide - Press this button to hide or unhide the selected Biped rig or IK skeleton
(bone structure).
Sec. per Speed - Each character animation (preferably a character studio
animation) uses an internal reference to measure its walking or movement speed.
Change this spinner's value to adjust the speed of the character animation. When
this value is increased to numbers greater than 1.0, all animation parts of the
character will move faster, while values below 1.0 will cause the character
animation to move slower.
Rotation Radius - Animating characters is a tricky business and when doing
crowd control based on particle systems it can become even more complex.
Using particles can be a good idea, however, they are nothing but points in space
and so having characters change direction like particles is something that needs
to be avoided. To get natural, constant movement to your characters that are
instanced using thinkingParitcles, increase the Rotation Radius value. It will
make sure that the character uses a defined amount of space to turn around or
change direction - it won't change direction in an unrealistic manner. Another
good use for this spinner is using it to control car motion. Think about a truck;
the turning radius of a truck is much bigger than the one of a small sports car and
through the use of this spinner, you can make sure that the two do not behave the
same.
Cycle Frames - Use this spinner to specify the length of a character animation in
frames. This is needed because thinkingParticles will reference all character
animation timing based on this value.
Character Axis - thinkingParticles does not know what kind of character you
are going to model or animate. It might be a fish, butterfly or a dinosaur. As
such, you need to specify what axis is considered up as it is seen from the
character's point of view so that the character is aligned properly with the
environment.
Invert - Activating this checkbox flips the selected Character Axis to its
opposite value so that the character's alignment will flip as well.
Rotation deg - Depending on the situation and animation task, the initial
rotation of a character might need to be adjusted. To do so, change the rotation
angle of the character with this spinner. The rotation of the character will be
around the specified Character Axis.
Animation Tree
thinkingParticles uses a standard windows explorer like
Tree-View control to handle animation sequences.
Animation sequences are stored "within the mesh" either as
point caches or as animated bone systems or any type of
deforming tool 3ds Max offers. It is important to
understand that this Animation-Tree is an exact
representation of the animation flow that will be called by
thinkingParticles one after another.
The most powerful feature here, is the animation and
transition handling per particle! Each individual particle
carries the information of the animation cycle and each
particle "knows" what animation cycle it has to finish
before it starts with another cycle (the blending animation
between 2 different animations).
Counting of Animation Cycles starts at 0 (zero), so the first
Animation State is State number 0, the second Animation
State is State number 1 and so on. The operator has an IDSATree State Number that allows you to switch the
animation cycle at will. By changing the ATree State
Number
How does it Work ?
Lets explain the Animation Tree concept of thinkingParticles with a simple
example. Lets say we want to create a crowd system of people sitting in a
stadium. Each character in the stadium should show a natural behavior
independent of his neighbour! So every character must be able to behave
differently.
The first thing we have to do is create ONE object that has ALL possible
animation sequences "in it". The character can be animated with any standard
method found in 3ds Max. However, it is recommended to use point caches as an
animation option because it is very memory efficient and fast on deforming
meshes.
Our stadium character should perform the following sequences:
Frame 0-59 : Sitting or Sitting Down Animation
Frame 60-89: Standing Up Animation
Frame 90-169: Stood Up/ Standing and Cheering
Animation
Frame 170-200: Siting Down Sequence Animation
It is important to note that all intermediate sequences (0-59, 60-90) show a
smooth transition in their animation! thinkingParticles just calls the animation
from within the character no animation blending is done, this would be far too
time consuming for thousands of characters! A good amount of work has to be
done by the animator. They need to make sure there is proper blending between
animation cycles!
So our Character has now a total of 200 Frames animation divided in 4 simple
cycles where each cycle starts smoothly and blends into the other. In the
Animation-Tree you will find the full sequence of the character animation
represented like this:
As you can see to the left, Our Range0 is the animation from frame 0-59, after
this has been performed we want to blend into the standing animation from
frame 60-90. All this is done in the animation cycle with the State Number 0.
Our second animation state (State Number 1) starts with the Stand UP/Cheering
sequence from frame 90-170 and blends into the Sit-Down sequence from frame
170-200. By using this animation-tree setup, characters can easily be forced to
sit down by changing the Animation State Number of this operator. Keep in
mind that every character will react individually on an animation state change.
Important Keyboard Shortcuts within Animation Tree
Right-Click onto a Transition Folder will block the transition for direct
execution. A blocked transition will force the Animation-Tree engine to search
for the next possible transition. One good example to use this option is to allow
an animation even though the first State is not "loop-able".
Usually the Animation-Tree expects animation States that perfectly loop,
sometimes it is better or much easier to animate characters or objects in such a
way that there is a rather a pause and a completely new animation starts from
there. However, this all depends on the characters used or the intended
animations that need to be performed.
Add State - when pressed, an Animation State is added to the tree-view. The
Animation State is indicated by folder symbol that is parallel to the root folder
(left hand side).
Add Range - click this button to add an animation range to the selected
Animation State folder. You may select multiple ranges inside an Animation
State folder, the animations will then be chosen on a weighted manner, the
weight for a selected animation to show up is chosen with the help of the
probability parameter.
Remove - when clicked on, the selected entry will be removed from the treeview.
Animation Start - sets the first frame of the animation for the selected Range
entry
Animation End - defines the last frame of the animation for the selected Range
entry.
Playback Speed - sets the playback speed of the animation defined by the Start
and End parameters. This is a factor that gets multiplied with the original
animation range. A value of 0.5 would mean the frames will playback half of
their original speed.
Variation - adds some random variation to the Playback Speed parameter so that
each character behaves differently.
Probability - sets the probability of the selected animation range. Changing this
value makes sense if there are more than one Range entries in the Animation
State folder. A value of 1.0 for all ranges will play back each animation with the
same probability. A value of 2 will make sure that this (the selected ) Range will
be played back twice as often.
Interruptible - when checked, the selected Animation State can be interrupted
and the next animation state will start right away. This will create jumpy
animations if the Animation State is not a still animation.
Master Speed - acts as a global multiplier for all animation ranges in all
Animation State folders.
Variation - adds a random variation to the Master Speed value.
One Turn Guaranteed - check this option to force the animation tree to use the
first State Number change that occurred while playing back an animation state.
All further State change requests will be ignored, this guarantees that a
animation cycle is finished before new States are used as targets.
Random Seed Menu Section
Animation Tree - used to set the random seed value for all animation ranges
created with this operator. This is useful to avoid an equal and synchronous
looking animation when multiple operators of that kind are used in a scene.
TP/MultiSub Material - sets the random seed for the thinkingParticles
Mutli/Sub material.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ImplicitShape Operator
This operator creates an iso-surface based on particle information; which is
usually used for representing a fluid surface or any other kind of surface based
on a point cloud. There are several algorithms available in creating surfaces out
of point clouds.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be given a standard shape. The data stream MUST be connected
and will be highlighted yellow if it is not.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
This operator has no outputs
Rollout Menu
Type - lets you choose between different surfacing
algorithms. A description of the current implementation
can be found at the end of this document. To advance to
the descriptions click HERE
Scale - by default, the particle size defines the size of the
implicit surface volume. This scale factor allows to adjust
the size without changing the particle size. A value of 0.5
would create isosurface volumes that are half of their
original particle size.
Isovalue - defines the "melting" force or how much the
ISO surface volume is confined to its spherical shape.
Mesh Smoothing - defines the amount of post smoothing
the generated ISO-surface. the higher this value the
smoother it will appear. Keep in mind nothing comes for
free; the surface accuracy will degrade a lot the higher this
value is.
Iterations - sets the amount of iterations for the
mesh smoothing algorithm. It defines actually how
often the code will look over the surface to smooth
it out.
Position Smoothing - defines the amount of position smoothing. A value of 1
will use the maximum displacement possible of the particle positions before it
creates the ISO-surface.
Iterations - sets the amount of iterations for the position smoothing
algorithm. It defines actually how often the code will look over the
particles to smooth the positions out.
Neighborhood - sets the search radius that actually defines the
'neighborhood' of a particle. All particles found within this radius are
considered for position smoothing.
Max. Field Value - sets the maximum field value; used for the ISO surface
generation. This value can be used to optimize the surface generation speed. The
Max. Field value should be as close to the Isovalue setting as possible. If this
value is equal to or lower than the Isovalue setting; no mesh will be generated.
Setting this value too high will at some point show no effect at all and might
increase render time.
Vertex Merge - due to various optimization methods in the multi-threaded
surface generation it is possible that surface gaps might show up. If this is the
case, use this value to stitch the surface together within those problematic areas.
Stretch and Squish
This ISO-surface operator offers enhanced algorithms to overcome the bumpy
surface issue that can show up when using ISO-surface methods in general. The
following controls are meant to create a smoother (flat) surface.
Stretch Factor - fast moving particles can stretch the ISO-surface based on their
velocity and direction of travel. This option is usually useful to bridge gaps when
fluids are falling or moving fast.
Squish Factor - this option allows to squish or flatten the ISO-surface along the
perpendicular to the axis of travel, only. This results in a elongated disc shaped
flat ISO-surface.
Low Velocity - defines the low velocity threshold for when to apply the stretch
function for the ISO-surface.
High Velocity - sets the high velocity threshold for when to apply the stretch
function for the ISO-surface.
Resolution
Viewing - sets the resolution for the viewport representation of the ISO-surface.
ISO-surface are mathematically described surfaces created out of a volume of
particles. The sampling rate; or the accuracy of sampling the volume to create a
surface representation
Rendering - sets the resolution for the rendering representation of the ISOsurface. ISO-surface are mathematically described surfaces created out of a
volume of particles. The sampling rate; or the accuracy of sampling the volume
to create a surface representation
Material
Material Swatch - sets the material to be used by the ISO-surface. Click the
button to get a standard 3ds Max material browser.
Material ID - sets the material id for the main implicit surface. When used with
a Multi Sub material this can be adjusted.
Data To Mapping Channel
UVW - defines the particle Data channel to be used as the
UV mapping channel.
Mapping ID - sets vertex color channel ID to store the
UVW data
Color - defines the particle Data channel to be used as
vertex color.
Mapping ID - sets vertex color channel ID to store color
information in the implicit surface.
Vector - defines the particle Data channel to be used as 3
point vector.
Mapping ID - sets vertex color channel ID to store 3 point vector information
Vector 1- defines the particle Data channel to be used as 3 point vector.
Mapping ID - sets vertex color channel ID to store 3 point vector information
Vector 2- defines the particle Data channel to be used as 3 point vector.
Mapping ID - sets vertex color channel ID to store 3 point vector information
Vector 3- defines the particle Data channel to be used as 3 point vector.
Mapping ID - sets vertex color channel ID to store 3 point vector information
Tip:
You can easily use a vector to
control three values at once. Vertex
Color in a mesh (implicit) allows
you to access each component
individually from within the material
editor. An R component could be
used as a diffuse factor, a G
component could be controlling the
reflectivity and a B component could
be controlling the transparency of a
material.
Bubble
ImplicitShape allows you to automatically create trapped air bubbles in a fluid.
Use this option to control the density of the air bubbles and their size. Keep in
mind that those bubbles are real geometry and need a certain resolution of the
ISO-surface to be properly visible.
Bubble - check this option to enable automatic air bubbles
within the implicit surface.
Count Ratio - defines the amount of air bubbles based on
the particle amount of the fluid. A value of 1 means that
every particle will become an air bubble.
Radius - defines the size of the air bubbles as fraction of the scale value of the
ISO surface.
Variation - values greater than 0 will add a size variation to the air bubbles. A
value of 1 will create the maximum variation in size possible.
Margin -sets the distance to the enclosing surface (hull). Air bubbles will not
appear when the distance is closer to the hull than set in this parameter.
Material-ID - lets you set a sperate material ID for the air bubbles in the
implicit surface.
Surfacing Types
There are two available options right now:
Blob(6.0)
Surface (6.3)
The first option; Blob (6.0) was introduced with the release of thinkingParticles
6.0, iIt is the standard Meta-Ball' algorithm used to create stretchy blob surfaces.
ISO Value = 0.5 Particle Size 10 (Grid (10))
ISO Value = 0.5
Particle Size 10 (Grid
(10))
ISO Value = 0.5 Particle Size 16 (Grid (10))
ISO Value = 0.5
Particle Size 20 (Grid
(10))
As shown in the illustrations above, the Blob method is good for connecting 2 or
more particles that can also stretch based on the speed they travel. It's the most
common method used to create fluid surfaces as it handles detachment (drops)
pretty well.
Surface (6.3)
This method offers an alternate algorithm that is meant to be rather used on point
clouds instead of a few individual points on space. The more particles the more
pleasing the result will be. The following examples use an identical setup as
shown above, even though it is not the suggested usage scenario.
ISO Value = 0.5 Particle Size 10 (Grid (10))
ISO Value = 0.5
Particle Size 15 (Grid
(10))
ISO Value = 0.5 Particle Size 16 (Grid (10))
ISO Value = 0.5
Particle Size 20 (Grid
(10))
Below, we demonstrate the intended use of the Surface 6.3 method in direct
comparison to the Blob 6.0 method. Both images use the exact same settings
without any further adjustments.
Blob 6.0 vs. Surface 6.3
Below results are with unmodified settings; both algorithms use the same input
settings.
Blob 6.0 : Visible 'Blobbyness' very round edges
Surface 6.3: Less
blobby more surface
detail
The main intend to use the Surface 6.3 algorithm is to reconstruct a flat surface
out of a point cloud. This algorithm is pretty good at achieving this; it must be
stated that for this algorithm to work it needs a minimum amount of particles in
close proximity. Find below an example of the same point cloud as shown above
; but with adjusted settings. In general Surface 6.3 can handle much larger Scale
factors as well as ISO values of up to 0.86 or 90.
This algorithm is not able to use the stretching or squishing functions.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Meta Shape Operator
The Meta Shape Operator gives you the ability to create metaballs around your
thinkingParticles particle systems. MetaParticles or metaballs can be used in
many situations, but they are mostly used to create liquids or blobby slime
effects. Metaball surfaces are procedural surfaces that are formed around the
particle system and blend together to create one blobby surface that creates the
look of a contiguous liquid. This surface remains closed until the particles move
far enough apart to overcome the tension value and break apart into smaller
blobby surfaces. Depending on the effect you want, you can get water, mercury,
maple syrup and other liquid effects with varying surface tension properties.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off." You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be given a standard shape. The data stream MUST be connected
and will be highlighted yellow if it is not.
Tension - (Scalar) This input data stream is used to override the Tension spinner
value within the MetaShape rollout.
Variation - (Scalar) This input data stream is used to override the Variation %
spinner value within the MetaShape rollout.
Coarseness Render - (Scalar) This input data stream is used to override the
Render spinner value within the MetaShape rollout.
Coarseness View - (Scalar) This input data stream is used to override the
Viewport spinner value within the MetaShape rollout.
One Connected Blob - (Bool) This input data stream is used to override the One
Connected checkbox state within the MetaShape rollout.
Operator Outputs
No Operator Outputs.
Rollout Menu
Tension - This spinner determines the "tightness" of the procedural liquid
surface with regard to their tendency to blend together with neighboring
particles. The higher the Tension value, the harder the blobs and the harder it is
for them to merge or blend together.
Variation % - This spinner specifies the amount of variation within the Tension
effect so that the surface isn't created too evenly. This can be helpful when you
want a more "lumpy" effect.
Render - This spinner sets the coarseness for the metaball surface in the
rendered scene. In general this specifies how accurately the metaparticle solution
is calculated. The higher the Render coarseness value, the less calculation is
needed and the quicker the surface is generated. However, if the coarseness is
too high, there may be little or no metaparticle effect at all. Always try to set
coarseness to a level just sufficient to render as smoothly as you require.
Viewport - This spinner sets the coarseness for the metaball viewport display.
Usually the viewport is set to a much more coarse value than the Render
coarseness to speed interaction within the 3ds Max viewports.
Relative Coarseness - determines how the coarseness values will be used. If this
option is turned off, the Render Coarseness and View Coarseness values are
absolute, where the height and width of each face on the blobmesh is always
equal to the coarseness value. This means the faces on the blobmesh will retain a
fixed size even if the metaballs change size. If this option is turned on, the size
of each blobmesh face is based on the ratio of the metaball size to the
coarseness, which will cause the blobmesh face size to change as the metaballs
become larger or smaller.
Use Mesh - by default thinkingParticles will use spherical blobs to create a
"melted" and continuos surface between multiple particles.
Large Data Optimization - This option provides an alternate method for
calculating and displaying the blobmesh. This method is more efficient than the
default method only when a large number of metaballs are present, such as 2000
or more. Turn on this option only when using a particle system or other object
that produces a large number of metaballs.
Material - Pick this button to open a standard Material/Map browser to choose a
material that will be applied to the metaball surface.
Metaball surfaces do not have any
mapping coordinates assigned. As
such, procedural or non-UVW
materials must be used for Meta
particles.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Shape Blend Operator
The Shape Blend Operator takes any number of mesh objects and transitions
from one to another over a set amount of time. The order of these object blends
is controlled by the hierarchy of the relevant DynamicSets. These are not morphs
between objects, (that is handled by the Blurp Operator) only simply transitions
from one object to another.
In the Introduction, there was some discussion as to the hierarchy within
DynamicSets and how the order of the nodes could affect the particle animation
(click HERE to refresh your memory). The Shape Blend Operator makes
extensive use of this hierarchical order and it is critical to it's operation. The
Shape Blend Operator uses its placement in the DynamicSet and traverses down
from there.
In the example above, there is a Shape Blend operator followed by multiple
Instanced objects in the Countdown DynamicSet. Usually such a setup would be
pure nonsense and so would be the result of it. However, the Shape Blend
Operator takes over the hierarchy and blends between the different particle
shapes below it, one after another. So it will process Instance 0 first, followed by
Instanced 1, Instanced 2, and so on. This is how you control what shape will
appear and the order in which they will appear.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be given a standard shape. The data stream MUST be connected
and will be highlighted yellow if it is not.
Blend Time - (Frame) This input data stream is used to override the Blend Time
spinner in the Shape Blend rollout.
In Blend Gradient - (Alpha Gradient) This input data stream is used to override
the Blend In gradient in the Shape Blend rollout. (NOTE: This input data stream
is for future use only)
Out Blend Gradient - (Alpha Gradient) This input data stream is used to
override the Blend Out gradient in the Shape Blend rollout. (NOTE: This input
data stream is for future use only)
Operator Outputs
No Operator Outputs.
Rollout Menu
Blend Time - This spinner sets the transition time in frames between the two
blends.
Blend In - This grayscale gradient controls the timing to blend in the target
shape. Usually, both gradients (In and Out) should match perfectly to avoid an
intersecting frame were both shapes are visible at the same time.
Blend Out - This grayscale gradient controls the speed it takes to blend out the
source shape. Usually, both gradients should match perfectly to avoid an
intersecting frame were both shapes are visible at the same time.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ShapeNoise Operator
The ShapeNoise operator offers the option to add a deformation to any particle
shape in a procedural way. This operator offers a many features to control and
modify how a particle shape (mesh) can be displaced or changed in a way that
enhances the look of volume broken mesh debris. While the main function of
this operator is to work in conjunction with the volumeBreake operator it may
also be used with any type of particle mesh including fluids or instanced
geometry.
A tesselation option is offered as well to refine the existing surface of an
object however, to not confuse this with a subdivision surface operator that
actually reshapes the surface and rounds it off or makes edges smoother.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group and applies the modifications to each particle mesh.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
This operator does not have any output data streams.
Rollout Menu
Length Reference - sets the method to be used to
calculate the intensity of the displacement.
Absolute World - choose this option to use real world
scale in meters or whatever unit you may have chosen to
set the displacement height (intensity).
Relative to Bounding Box - when chosen, the intensity
(height) of the displacement is based on the objects
individual bounding box. This option ensures that the
displacement is properly scaled to the size of the object.
On the left; Absolute World on the right; Relative Bounding Box both
use the same Intensity for displacement (height). As seen on the smaller
spehere the Absolute World uses the same height value regardless of the
size of the object.
Operate On
Material ID - when checked, the shape noise effect will be applied to the
specified Material ID, only.
Selected - check this option to apply the shape noise effect to only selected faces
in the mesh.
Optimize
Threshold - defines the edge length of a triangle at which the omptimization
shoudl take place (reduction in faces).
Iterations - sets the amount of optimization repetitions for the mesh. The higher
the iteration the more the optimization has a chance to reduce the amount of
triangles.
Fall Off
FallOff - check this option to enable a fall-off function for the shape noise
effect. This works best with volume broken objects that show a definite edge.
Radius - sets the distance towards an edge at which the shape noise effect is
100% active. This function can help in preventing broken or chunky edges.
Gradient - this gradients controls the curve or rate at which the shape noise
effect blends in as seen form the edge.
Write Map Chan. - allows to write, to a specified vertex channel, an edge
distance blending map. This can then be used to blend textures as well in the
same way as the noise effect.
Falloff = Off
Falloff = On
Tesselate
Faces sometimes need more subdivisions to enhance the look of a shape noise
effect. Keep in mind that the quality of the displaced shape noise is highly
dependent on the underlying original mesh quality!
In situations when there is no original mesh, which is always the case when a
mesh is volume broken, the chunks are mathematically created and depending on
the original mesh data it may turn out to create problematic face divisions for
proper displacement.
Example:
It is best to use the optimize option in conjunction with the tesselation. Even on
simple broken geometry the underlying cutting lines can create some really
delicate situations for the displacement system.
After tesselation of the simple chunks that show straight cuts the underlying
geometry can be somehow problematic. In the illustration below, some of the
problematic areas are marked. Those areas would cause stretching or continuity
errors when displaced.
In the following the optimization option was used to clean up the rough mesh
even rfurther and remove as good as possible unnecessary vertices. The resulting
mesh is now much more even with more equally spaced polygons.
Tesselate - check this option to create extra triangles within a surface.
Iterations - sets the amount of repetitions used to go over the mesh to refine the
existing faces
Iterations Remain - sets the amount of iterations for the remaining mesh parts.
The remaining mesh is defined as "Not the same material ID as the cut face".
Min Edge Length. - defines the minimum edge length to start a subdivision of
the edge.
Noise
Noise - when checked, noise will be added to the fragments to create a more
organic natural look.
Important:
When no map is specified and Noise
is checked, a standard Perlin Noise
will be used for displacement. This
allows you to get a rough surface in
no time at all.
Intensity- controls the height or strength of the displacement done to the surface
of the fragments.
Evaluate - controls the method of displacement there is several options available
Normal - when selected; the surface normal is used to create
displacement. This is best for representing the actual map as geometry.
Differential - this method creates the noise and displacement in a way
that it creates the perfect 'negative' on one side. This mode will create a
displacement that keeps the volume correct for the fragments and
remaining mesh. This mode can only work with 3D Maps.
Normal Waterline - defines the gray level to be used as the medium
displacement. Values below will create a negative displacement, values above
will create a positive displacement.
Differential Dist. - sets the distance between two noise levels to be considered a
displacement of the surface. This value should be between 0-1. Too high
numbers will reduce the resolution of the noise map.
Scale - controls the size of the texture map. The larger this value the bigger the
scale of the map will be.
Random Shift Coordinates - offers multiple options to define the source of the mapping
coordinates.
Object - choose this option to use the objects UVW coordinates from
the current particle mesh..
OriginalObject - when selected; the original's object's UVW
coordinates are used. This is the UVW coordinates of the unbroken
object (before volume breaking).
Auto Smoothing Group - when checked, automatic smoothing will be
applied to the mesh
Threshold - defines an angle at which the surfaces are considered to have the
same smoothing group.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
StdShape Operator
Standard particle systems in 3ds Max offer usually a basic set of shapes for the
particles. thinkingParticles is no exception and also offers them through the
StdShape Operator.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be given a standard shape. The data stream MUST be connected
and will be highlighted yellow if it is not.
UVW - lets you define the UVW "start" point for the material mapping. For
example, when a gradient ramp is used the center of the particle will be used as
the UVW 0,0 spot. By supplying UVW coordinates you may change the color of
the particle based on the speed (controlled by a gradient).
Vertex Color (Color) - this port is used to supply either a vertex color (Color
Channel 0) or you may pipe in the particle ID (Particle) and assign the material a
TP Variation TexMap (in the Diffuse slot) in order to give each particle a unique
diffuse color.
Example Setup to feed Particle ID into Vertex Channel
Operator Outputs
No Operator Outputs.
Rollout Menu
Shape Type - Choose any particle shape from the drop down list. Whenever the
ON input data stream receives a True condition, the assigned particles will use
the selected shape. The shape types themselves are self-explanatory and are
identical to the ones you find in the standard 3ds Max particle systems. (Note:
the ON input is not necessarily required - it simply allows you to force the shape
to be assinged).
Render Instance - this works in conjunction with the "Render Instance"
checkbox in the Master Dynamic rollout. If this setting is enabled on StdShape
and is also enabled on the Master Dynamic then these particle shapes will be
flagged as instances to the renderer and will significantly reduce the memory
requirements of rendering and when caching files.
To properly allocate memory the Render Instance number on the Master
Dynamic must match or slightly exceed the total number of particles using the
instanced shape who are alive at any given time. For example, if you have a
StdShape and ~40000 particles who use that StdShape during the animation then
enter 40000 in the Master Dynamic Render Instance field. If only 20000 of those
particles are alive at any given time then enter 20000.
The GeomInstance operator also has a Render Instance checkbox. If you have a
simulation with 20000 StdShape particles and 5000 GeomInstance particles then
you would enter 25000 in the Master Dynamic Render Instance field in order to
tell the system there are a total of 25000 particles who use instanced geometry.
If you specify a Render Instance number on the Master Dynamic that is less than
the total number of instanced particle shapes then the remainder of particles will
each require additional memory for their shape.
One way to determine the proper allocation is to select the particle group name
using the instanced geometry in the Group Tree and scrub the timeline after
caching and watch the Selected number in the TP UI title bar which will display
the total number of particles in the entire system, in the selected branch, and in
the selected group. Keep track of the maximum value and do this for each
instanced particle group, then add those numbers and enter it in the Master
Dynamic Render Instance field.
Particle Mapping
Over - If this method is chosen the mapping is controlled by the age of the
particles. The particle walks through the UV coordinates of the map applied. In
the 3ds Max Online Reference guide go to the Search tab and type in Using
Mapped Materials with Particle Systems to learn more about the techniques
used by this operator.
Don't forget to turn on Face Mapping
in the Material if you want the
mapped material to show up on the
particles.
Time - The Time spinner specifies the number of frames from birth that it takes
to complete one mapping of a particle. If set to 30 the particle uses the bottom
edge of the map at its birth and moves through to the top edge of the map at
frame 30.
Distance - The Distance spinner specifies the distance in units from birth that it
takes to complete one mapping of a particle. If set to 50, as the particle moves
along the normal vector it will display the bottom edge of the map at birth and
the top edge at 50 units along the normal vector.
Material - Press this button to open the standard Material/Map browser of 3ds
Max. This material will be used for the particles created by this operator.
Generated - check this option to
generate automatic mapping based on
the type of particle shape
This feature was introduced in SP2
of thinkingParticles 4
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SCJointCounter Operator
SC JointCounter operator enables you to get all the available joints that exist
between a pair of particles. Please note, you must specify the SC shape collision
operator that has been used for the joints from which you want to gather data or
you will not get any joint information at all.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle 1 - sets the Particle1 particle ID that will be used to acquire the Joint
information
Particle 2 - sets the Particle2 particle ID that will be used to acquire the Joint
information
Which - this input defines the option to choose which Joints to output by this
operator. The options are
0 = From
1 = To
2 = Both
Note that you can simply provide the Particle 1 input and specify "Both" in order
to access all joints associated with that particle.
Operator Outputs
Joint* - outputs all of the joint IDs relevant to the Particle input
Number of Joints* - outputs the number of Joints a particle pair has (Particle 1
and Particle 2)
Rollout Menus
The SC JointCounter operator offers only a few settings to adjust. Possible
options are:
Collision - lets you specify the SC shape collision operator that has been used to
handle the joints. thinkingParticles is able to use multiple SC shape collision
operators in one particle system setup, hence the need to specify the solver you
want to get joint information from.
Which Joints
From - when selected, joints attached to Particle 1, only will be output to the
*Joint connector.
To - when selected, joints attached to Particle 2, only will be output to the *Joint
connector.
Both - check this option to output all joints connected to either Particle 1 or
Particle 2
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SCJointData Operator
SC JointData can be used to either set or get information about a joint. It requires
a Joint input which can be accessed from either SCJointOperator or
SCJointCounterOperator. All joints have a specific Joint ID integer and this
integer can actually also be used as the Joint input.
SCJointOperator can only define Particle From/To, Position From/To/World, and
Type, so in order to set additional joint properties SC JointDataOperator is
necessary.
Among the many useful features of this operator are its ability to set a joint's
ability to break, it's breaking velocity & rotation thresholds, to define or redefine
joint types and Particle To/From connections, and to track when a joint has
broken (via the Broken output, which outputs 1 continuously when a joint is
broken).
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Joint - inputs the joint ID of the joint to be changed or reads the data from the
joint.
Type - lets you set the type of Joint that will be created between the two
particles. Possible options are:
<0 = Joint will be deleted
0 = Spherical
1 = Fixed
2 = Spring
3 = Cylindrical
4 = Hinge
5 = Ball
6 = Wobble
7 = Slider
Particle From - sets the "From" particle ID that will be used to create a Joint
Position From - defines the joint
position in object space as seen from the
"From" particle where the Joint will be
placed between the two Joint partners.
Alignment From - inputs the Joint's
alignment in object space coordinates
that needs to be created between the two
particles.
Particle To - sets the "To" particle ID
Important
You must supply both object space
positions when using these inputs.
One input alone will cause an invalid
Joint. This Joint position in space
should be the same point in world
space for each of positions you feed
into these inputs.
that will be used to create a Joint
Position To - defines the joint position in object space as seen from the "To"
particle where the Joint will be placed between the two Joint partners.
Alignment To - inputs the Joint's alignment in object space coordinates that
needs to be created between the two particles.
World Position - inputs the Joint's position in world space coordinates that
needs to be created between the two particles.
World Alignment - inputs the Joint's alignment in world space coordinates that
needs to be created between the two particles.
Breakable - sets if a joint is breakable or not. (a value of 1 means breakable)
Break Vel. Threshold - sets the maximum velocity allowed before the Joint
"breaks off"
Break Rot. Threshold - sets the maximum allowed rotational speed (angle
change per second) before the Joint is broken
Broken - sets this input to 1 to break the joint immediately
Collision - connect a value of 1 to this input to allow for collision detection
between Joint objects
Spring - defines the Spring Power, the higher this value the more power the
spring will have
Angle - defines the rotational constraining angle of this joint
Initial Angle - sets the starting angle of this Joint type
Length - defines the "length" of this joint (Slider Joint)
Initial Length - sets the starting length (position) of this Joint type (Slider Joint)
Wobble - defines the "wobble" factor of this joint (Wobble Joint)
Friction - sets a friction value for this Joint
Damping - sets the dampening factor of this Joint type
Spring Initial - defines a "pre-loading" amount for the spring. Positive values
will force to push the object away and negative values will pull the objects
towards the Joint axis point. This value is visualized in the view port in the form
of a rectangular dot, either moving up or down from the joint axis point.
Operator Outputs
Type - outputs the type of Joint that will be created between the two particles.
Possible options are:
0 = Spherical
1 = Fixed
2 = Spring
3 = Cylindrical
4 = Hinge
5 = Ball
6 = Wobble
7 = Slider
Particle From - outputs the "From" particle ID that was used to create a Joint
Position From - outputs the joint position in object space as seen from the
"From" particle where the Joint will be placed between the two Joint partners.
Alignment From - outputs the Joint's alignment in object space coordinates that
needs to be created between the two particles.
Particle To - outputs the "To" particle ID that will be used to create a Joint
Position To - outputs the joint position in object space as seen from the "To"
particle where the Joint will be placed between the two Joint partners.
Alignment To - outputs the Joint's alignment in object space coordinates that
needs to be created between the two particles.
World Position - outputs the Joint's position in world space coordinates that
needs to be created between the two particles.
World Alignment - outputs the Joint's alignment in world space coordinates that
needs to be created between the two particles.
Breakable - outputs the state of a joint, if a joint is breakable or not. (a value of
1 means breakable)
Break Vel. Threshold - outputs the maximum velocity allowed before the Joint
"breaks off"
Break Rot. Threshold - outputs the maximum allowed rotational speed (angle
change per second) before the Joint is broken
Broken - outputs the status of the Joint an output value of 1 indicates a broken
joint.
Collision - outputs a value of 1 when collision detection between Joint objects is
active, 0 when inactive
Spring - outputs the Spring Power, the higher this value the more power the
spring will have
Angle - outputs the rotational constraining angle of this joint
Initial Angle - outputs the starting angle of this Joint type
Length - outputs the "length" of this joint (Slider Joint)
Length Initial - outputs the starting length (position) of this Joint type (Slider
Joint)
Wobble - outputs the "wobble" factor of this joint (Wobble Joint)
Friction - outputs a friction value for this Joint
Damping - outputs the damping factor of this Joint type
Spring Initial - outputs a "pre-loading" amount for the spring. Positive values
will force to push the object away and negative values will pull the objects
towards the Joint axis point. This value is visualized in the view port in the form
of a rectangular dot, either moving up or down from the joint axis point.
Rollout Menus
The SC Joint operator offers only a few settings to adjust. Find below the
possible settings:
Collision - lets you choose from the drop down menu the physics engine solver
to use for the Joint simulation. All compatible solvers found in the
thinkingParticles setup will be automatically listed.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SCJoint Operator
The SC JointOperator is used to created SC Joints between particles. This can be
done at any time and can be controlled in a variety of ways, most basicaly with
the On input. The only required inputs are the Particle From and Particle To
which define the two particles involved, where one particle is identified as the
start of the joint (From) and the other as the end of the joint (To).
The joint occupies a single point in space, which can be specified with either the
Position From and Position To, or with the World Position. Position From and
Position To can sometimes be difficult to calculate as the same point in space, so
the World Position input is often preferred. (If you simply use the Particle From
position as the Position From, and the Particle To's position as Position To, the
joint will likely behave erratically and explode because the single point in space
is attempting to exist in two locations at once.)
Calculating the joint World Position can be as simple as averaging the two
particle positions with an Expression operator ((v1+v2)/2). Keep in mind that as
a single point in space the joint would ideally be located somewhere inbetween
the two particle meshes. This can require more advanced calculations, such as
using an Intersect calculation from each particle toward the other particle in
order to get a surface position on each particle mesh, then averaging those two
positions. Of course you could also simply calculate one Intersect and use that
one result as the joint location. The options are wide open.
Once the joint is defined you can connect the Joint* output to an
SCJointDataOperator to create additional properties such as velocity and
rotational breaking thresholds, or spring values, or dampening, etc.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle From - sets the "From" particle ID that will be used to create a Joint
Particle To - sets the "To" particle ID that will be used to create a Joint
Position From - defines the joint
Important
position in object space as seen from the You must supply both object space
"From" particle where the Joint will be
positions when using these inputs.
placed between the two Joint partners.
One input alone will cause an
invalid Joint. This Joint position in
Position To - defines the joint position
space should be the same point in
in object space as seen from the "To"
world space for each of positions
particle where the Joint will be placed
you feed into these inputs.
between the two Joint partners.
Type - lets you set the type of Joint that will be created between the two
particles. Possible options are:
0 = Spherical
1 = Fixed
2 = Spring
3 = Cylindrical
4 = Hinge
5 = Ball
6 = Wobble
7 = Slider
World Position - inputs the Joint's position in world space coordinates that
needs to be created between the two particles.
World Alignment - inputs the Joint's alignment in world space coordinates that
needs to be created between the two particles.
Operator Outputs
Joint - outputs the currently created joint ID.
Rollout Menus
The SC Joint operator offers only a few settings to adjust. Find below the two
possible settings:
Collision - lets you choose, from the drop down menu, the physics engine solver
to use for the Joint simulation. All compatible solvers found in the
thinkginParticles setup will be automatically listed.
Type - lets you choose a certain type of Joint for the Particle pair, connected to
this operator. To learn more about the various Joint types and possible
parameters, you may want to check out HFragment Modifier
Back to Shape Collision Nodes
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SC Operator
"SC" is the new ShapeCollision operator for thinkingParticles which is meant to
replace the "old" ShapeCollision operator. This all new rigid body solver offers
many advantages over the old one and uses the latest methods and algorithms to
calculate rigid body dynamics, providing faster, more accurate, more efficient
and more flexible performance than the "old" ShapeCollision operator.
To keep backward compatibility with older scenes and files, the old
ShapeCollision is still available from the Dynamics Menu and it produces the
exact same results, as it did in previous versions.
We recommend using this new SC
operator instead of the "old"
ShapeCollision
The new SC operator offers you the following benefits
Support of multiple Joint types
Enhanced Multi-Threading/Multi-Core support
Specifying Contact Type is no longer needed
Enhanced Solver Algorithm for better full frame sampling
Increased Overall Speed
High Frequency Jittering has been reduced significantly
Voxel Debug Mode added
As a testament to the power that comes with the SC operator, it was successfully
used in the 2010 blockbuster movie 2012 and was instrumental in creating the
destruction effects in the various shots of the movie.
While it is possible to use multiple
Shape Collision operators in a
DynamicSet, it is highly
recommended that you use as few
operators of this type as possible.
The memory requirements are huge
and they increase with each addition
of that operator type.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Floor Node - (Node) This input data stream is used to specify through a node
helper for example a 3D mesh as a floor collision object. A floor object is
automatically treated as immovable with an infinite mass.
Voxel Grid - (Integer) This input data stream is used to override the Voxel Grid
that is used on the selected particle Group. This value is normally set within the
selected Group's Dynamics rollout.
Edge Samples - (Integer) This input data stream is used to override the Edge
Samples value that is used on the selected particle Group. This value is normally
set within the selected Group's Dynamics rollout.
Optimize - (Bool) This input data stream is used to override the Optimize
checkbox setting that is used on the selected particle Group. This value is
normally set within the selected Group's Dynamics rollout.
Elasticity - (Scalar) This input data stream is used to override the Elasticity
value that is used on the selected particle Group. This value is normally set
within the selected Group's Dynamics rollout.
Dynamic Friction - (Scalar) This input data stream is used to override the
Dynamic Friction value that is used on the selected particle Group. This value is
normally set within the selected Group's Dynamics rollout.
Static Friction - (Scalar) This input data stream is used to override the Static
Friction value that is used on the selected particle Group. This value is normally
set within the selected Group's Dynamics rollout.
Size As Mass - (Bool) This input data stream is used to override the Size as
Mass checkbox setting within the Particle Group of Controls.
Floor Voxel Grid - (Integer) This input data stream is used to override the Voxel
Grid spinner value in the Floor Group of Controls within the Shape Collision
Operator.
Important when you set Voxel Grid
to 0 (zero) a true box collision is
assumed, when set to 1 (one) the
mesh itself is used to test the
collision to the nearest surface point.
The latter mode is much more
accurate but it also uses more CPU
computing time so it is slower.
Floor Optimize - (Bool) This input data stream is used to override the Optimize
checkbox setting within the Floor Group of Controls within the Shape Collision
Operator.
Floor Elasticity - (Scalar) This input data stream is used to override the
Elasticity spinner value within the Floor Group of Controls within the Shape
Collision Operator.
Floor Dynamic Friction - (Scalar) This input data stream is used to override the
Dynamic Friction spinner value within the Floor Group of Controls within the
Shape Collision Operator.
Floor Static Friction - (Scalar) This input data stream is used to override the
Static Friction spinner value within the Floor Group of Controls within the
Shape Collision Operator.
OPT Face Threshold - (Angle) This input data stream is used to override the
Face Thresh. spinner value within the Shape Collision Floor Node.
OPT Edge Threshold - (Angle) This input data stream is used to override the
Edge Thresh. spinner value within the Shape Collision Floor Node.
OPT Bias - (Scalar) This input data stream is used to override the Bias spinner
value within the Shape Collision Floor Node.
OPT Max Edge Length - (Scalar) This input data stream is used to override the
Max Edge Len. spinner value within the Shape Collision Floor Node.
OPT Preserve Smooth Boundaries - (Bool) This input data stream is used to
override the Preserve Smooth Boundaries checkbox setting within the Shape
Collision Floor Node.
OPT NumFaces - (Integer) This input data stream is used to override the Off
Under Faces spinner value within the Shape Collision Floor Node.
Velocity Friction - (Scalar) This input data stream is used to override the
Velocity Friction value that is used on the selected particle Group as it interacts
with the Floor Node. This value is normally set within the selected Group's
Dynamics rollout.
PHY Collision Iteration - (Integer) This input data stream is used to override
the Collision Iteration spinner value within the Physics rollout of the Shape
Collision Operator.
PHY Contact Iteration - (Integer) This input data stream is used to override the
Contact Iteration spinner value within the Physics rollout of the Shape Collision
Operator.
PHY Deactivation Time - (Scalar) This input data stream is used to override the
Deactiv. Time spinner value within the Physics rollout of the Shape Collision
Operator.
PHY Velocity Threshold - (Scalar) This input data stream is used to override
the Velocity Thresh. spinner value within the Physics rollout of the Shape
Collision Operator.
PHY Rotation Threshold - (Angle) This input data stream is used to override
the Rotation Thresh. spinner value within the Physics rollout of the Shape
Collision Operator.
PHY Activate All - (Bool) This input data stream is used to override the
Activate All checkbox setting within the Physics rollout of the Shape Collision
Operator.
Operator Outputs
Particle - (Particle) outputs the current particle information for the colliding
particle. Use this to modify specific particle properties.
Collided - (Bool) this output data stream will return true whenever a collision is
happening. In all other non-colliding situations, the output will report false as the
value.
Collision average Position - (Position) provides the current interpolated
collision point.
Be aware that this point may be
highly inaccurate as face to face
collisions usually happen on areas
and not at one individual point. Also,
when objects come into contact and
start sliding, the collision point will
be generated at all times over and
over again.
Collision averaged Normal - (Normal) outputs the interpolated normal of the
calculated collision point.
Frozen - (Bool) outputs the frozen status of the particles as determined by and
within the Physics Rollout Menu . When particles are considered "frozen" or
"inactive", this value will be true. When particles are actively moving, this value
will return false.
Double Star = Secondary Initiator Outputs
Double Star Output (**) behaves like the Top-Level Initiator outputs, this
outputs activate connected nodes for evaluation. It is important to understand
that all connected nodes will be evaluated. However, as this is a secondary
Initiator output, it can not be combined with the Top Level Output at the same
time. The main rule still applies: Never use 2 Initiators on the same node or
wiring.
Number of Collisions - (Integer) holds the total number of all collisions that
happened for a particle. A collision may happen multiple times, especially with
sliding objects (surface - surface). Note, this is a secondary Initiator output that
can not be combined with the top level Initiator outputs at the same time. Either
the Top-Level will be active or the low level department but not both at the same
time.
Coll Index - (Integer) outputs the current index number of the collision. This
might be used to get the current progress of the collision evaluation. Collision
index can become as big as the Number of Collisions value, if this is reached the
collisions are done.
Coll Particle A - (Particle) outputs the particle A of the collision pair. This
output is always evaluated before particle B!
Coll Particle B - (Particle) outputs particle B of the collision pair.
Coll Floor - (Bool) when a collision with the floor object happens, this output
will be set to True.
Coll Position - (Position) outputs the real world position Collision point.
Coll Normal - (Normal) outputs the normal of the calculated collision point.
Coll Position A - (Position) outputs the collision position of Particle A in local
object space.
Coll Position B - (Position) outputs the collision position of Particle B in local
object space.
Rollout Menus
The Shape Collision operator is used to control all true shape collision dynamics
in thinkingParticles.
Particle
Group - this drop-down list selects the particle collision partners for the floor or
inter-particle collision.
All Physics based parameters are set
and controlled within the particle
group itself. Select the relevant
particle group in the particle group
tree view to access the dynamic
properties of a particle group.
Deflector - is used to choose the deflector objects. Important: those objects will
be treated as unyielding, all the time, regardless of their local physics settings.
One application would be to use recorded particles as deflectors.
IMPORTANT
Deflector Particles will use the
physics settings from the Floor
controls.
Size As Mass - Activate this checkbox to enable an automatic mass calculation
that is based on the size of the particle. For example, a particle with a size of 2.0
will be treated as 2 Kg.
Floor
Voxel Grid - This spinner defines the number of cubic subdivisions to wrap the
object's outer boundaries within.
Important when you set Voxel Grid
to 0 (zero) a true box collision is
assumed, when set to 1 (one) the
mesh itself is used to test the
collision to the nearest surface point.
The latter mode is much more
accurate but it also uses more CPU
computing time so it is slower.
Optimize - Activate this checkbox to enable the parameters found in the Rollout
Menu. The face count of the colliding meshes will be automatically reduced.
This face reduction is only done "internally" for the collision objects and not for
the rendering mesh. This option may speed up the dynamic simulation
enormously. However, if overdone the results may be inaccurate.
Elasticity - Use this parameter to control the bounce value between the floor<>particle collisions. Higher values will make the particles lose less energy per
bounce. Be aware that values greater than 100 will create extra energy and the
particles will gain energy with each bounce.
Dynamic Friction - This spinner sets the friction (you can also think of it as
"power loss") between particles and the floor when they impact with each other.
Please note that this power loss ONLY happens on impact.
Static Friction - This spinner defines the friction between particles and the floor
when they are in contact (sliding). Higher values will make the particles slide
less.
Velocity Friction - This spinner defines the relative speed difference between
two particles. A slower particle will force a faster one to slow down. This can be
used to simulate viscous substances like molasses.
Show Voxels
Show Voxels - check this option to enable Voxel debug mode. When on, Voxels
will be visible in the view port as small red dots.
Initialized Only - when checked, initialized Voxels will be shown as green dots.
Initialized Voxels are those Voxels involved in the final collision detection to
find the closest surface point of a colliding partner.
Direction - when checked yellow dots appear on the surface of the colliding
objects indicating the direction of collision based on the nearest Voxel in space.
Recorder
thinkingParticles allows you to record particle dynamics. It is always a good idea
to use this feature whenever a simulation seems to be perfect for the job.
Recording the particles as they bounce around will make life easier at a later
rendering stage. Playback from hard disk is also usually much faster than
calculating the solution each time you play back the particle collisions.
Select Record File - Click this button to bring up a standard Windows Save
dialog. Any legal name and path can then be specified to save the recorded
particle simulation.
Simulate, Play, Record - These buttons are fairly self-explanatory. The
Simulate button turns the recorder into playback mode and will play back the
recorded file on hard disk as you scrub the 3ds Max frame slider in the
viewports. The Record button will switch the recorder into record mode. With
the record button pressed, clicking the Play button on the 3ds Max timeline will
start the recording and simulation of the particle dynamics. After the last frame
has been reached, the recording automatically stops and turns into Play mode to
show you the results.
Active Time Segment / Range - This is a standard 3ds Max control that lets you
choose whether you want to record the entire particle animation, or just a
specified range of frames as defined within the two spinners.
Redraw Views - when checked, the 3ds Max view ports will be updated while
simulating. Depending on scene comlexity it might be a good idea ot turn of
View Updates while simulating.
Optimize Rollout
This rollout is responsible for adjusting the degree of optimization for the
particle collisions.
Off Under Faces - If an object that is being sent to be optimized has fewer faces
than the threshold value set in this spinner, it will not be processed for
optimization and ignored. This does not affect it's participation within the
simulation, it simply removes it from the optimization routines.
Face Thresh - This spinner sets the threshold angle used to determine which
faces are collapsed during the optimization process. Low values produce less
optimization but better approximations of the original shape. Higher values
improve optimization, but are more likely to result in faces that render poorly as
you get more degenerate triangles. (see Bias below for information on how to
control this).
Edge Thresh - This spinner sets a different threshold angle for open edges
(those that bound only one face). A low value preserves open edges. At the same
time you can apply a high Face Threshold value to get good optimization.
Bias - This spinner's value helps eliminate the skinny or degenerate triangles that
can occur during optimization, which in turn can cause simulation and rendering
artifacts. Higher values keeps triangles from becoming degenerate. The default
of 0.1 is generally considered enough to eliminate the skinniest triangles, while a
value of 0.0 turns the Bias setting off.
Max Edge Len - This spinner specifies the maximum length beyond which an
edge cannot be stretched when optimized. When Max Edge Len is 0, it has no
effect. Any value greater than 0 specifies the maximum length of the edges.
Along with Bias, this control helps you avoid creating long skinny faces while
optimizing.
Preserve Smooth Boundaries - Optimizes an object and maintain its
smoothing. When turned on, allows only faces that share at least one smoothing
group to collapse.
Physics Rollout
Collision Iteration - This spinner sets the number of sub-steps to be used to
estimate the real collision point of colliding objects. The lower this number, the
faster the simulation will run. However, lower values would also mean less
accurate results. In most situations, you can keep this value between 5-10, while
in exceptionally complex scenes, you can try to set a value as high as 30 to get
more accuracy.
Contact Iteration - This spinner defines the number of sub-steps to be used
between colliding objects to create a "contact" situation. Face to face contact is
one of the most complex situations to handle for the dynamics engine. Increase
this value to get more realistic simulations.
Deactivation Time - This spinner defines the time-slot in which a particle is
surveyed to determine whether it is actively moving due to dynamics or simply
performing a stupid "dynamics dance" as it comes to rest. If a particle falls into
this time-slot and it's speed or rotational value is equal or below the ones
defined, it is considered sleeping or frozen. Lower values will freeze the
particles much faster. This spinner works in concert with the two spinners below
it (Velocity Thresh. and Rotation Thresh.).
Velocity Threshold - This spinner sets the minimum speed an object needs to
fall below to become treated as frozen or inactive. Be aware that other objects
interacting with a sleeping one may change this status when the impact creates a
velocity higher than this value.
Rotation Threshold - This spinner sets the minimum rotational speed and object
needs to fall below to become treated as frozen or inactive. As is the case with
the Velocity Threshold, be aware that other objects interacting with a sleeping
one may change this status when the impact creates an angular velocity higher
than this value.
Activate All - This checkbox will "wake up" frozen fragments after they have
been deactivated either by Velocity Threshold or Rotational Threshold. This
setting can be helpful when working with fragments, since frozen particles don't
respond to space warps.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SmokeBoundary
This operator is used to define collision objects or obstacles for smoke
simulations. While any other particle collision operator might work, this is the
suggested method for smoke particles to collide with rigid bodies.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
There are no outputs for this operator.
Rollout Menu
Solver - lets you choose from the drop down menu the
fluid solver to use for this fluid simulation. All compatible
solvers found in the thinkingParticles setup will be
automatically listed. This allows for multiple fluids to have
different properties and still interact properly.
List Box - lists all formerly picked fluid collision objects
Add - Press this button to enter the pick mode, it
allows to pick any valid 3ds Max object in the
modeling viewport as a collision object for the
fluid.
Remove - when clicked on, the selected object is
removed from the list.
Group - sets the particle group to be used for fluid
collisions with objects
Include Sub Groups - when checked sub-groups of the
selected main group are also used as collision objects.
Important
This operator can use multiple
sources for its fluid collision objects.
You may either use the "Pick Object"
method or a particle group that
contains meshes (e.g
Object2Particle). Using both options
at the same time is also a valid
scenario.
Body
Unyielding - check this option to make objects unyielding (immovable).
Kill On Contact - when checked, fluid particles colliding will be automatically
deleted
Friction - specifies the friction factor for the fluid interacting with the rigid body
Bounce - sets the bounce factor for the fluid hitting the collision objects
Temperature - sets the temperature of the listed rigid body objects. This
temperature value is used to either heat the colliding fluid particles or cool them
down. The amount of heat transfer depends on the heat emission factor.
Heat Emission - defines a factor for the heat transfer between the fluid particle
and the rigid body. The higher this factor the faster the heat transfer happens.
Acceleration Limit
Translation - sets the threshold value for the maximum allowed acceleration an
object can have within a time sample.
Angular - defines the angular threshold to restrict the maximum rotational
acceleration allowed for an object per time sample.
Collision
Model - you may choose 3 different solver methods to calculate smoke and rigid
body interactions.
Ray Intersect - check this option to use a ray intersect method to detect
collisions between the smoke fluid and a mesh object. This method does
not respect any volume around the object's surface. it is ppossible for
particles to fall through surfaces.
Voxel - uses a volumetric intersection method that detects an event way
before the particle would actually hit the surface. This is especially
useful for gas like simulations when pressure builds up on moving
surfaces.
Intersect + Voxel - uses both methods to get the most accurate volume
aware collision detection possible.
Voxel No Collision - activate this mode to influence the surrounding
area only without any collision detection.
Ray Intersect
Bias - defines the intersection bias value. Higher numbers will result in an earlier
collision detection which can be preferable in some situations.
Side - drop down list to choose the intersection method.
Front - check this option to get front face collisions, only
Back - when checked back face collisions are considered, only
Both - check this option to get both sides of a face tested on collisions
Voxel
Subdivision - defines how often the longest edge should be
subdivided to create the voxel grid. Lengths are based on
the objects's bounding box size.
Margin - specifies an offset for the collision point. This
can be used to move the collision point towards/under the
surfaces or away. This value is based on the object's
bounding box size. A value of 0.2 represents 20% of the objects bounding box
size.
Influence Radius - sets a radius at which friction and heat emission should take
place. This is actually the distance to the colliding surface. The values is based
on the object's bounding box size. A value of 0.2 represents 20% of the length of
the objects bounding box size.
Motion Influence - sets a friction value for smoke fluid particles falling within
the Influence radius. This can be used to simulate a pressure wave in front or
behind a moving object.
Show - there are 5 possible options
Off - no visualization in the viewport is shown
InOutside - visualizes the voxels in the viewport for the the inside and
outside areas of a collision surface.
Inside - when selected, the inside voxels are visualized, only
Outside - when selected, the outside voxels are visualized, only
On Geom - when selected, the voxels on the object are visualized, only
Normal - select this to visualize the calculated normals
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SmokeData
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - lets you feed in any particle data. The particle should belong to a
smoke particle group.
Temperature - defines the particle temperature.
Operator Outputs
IsVorton - this output becomes true when the particle on the input is a Vorton
particle.
Temperature - outputs the current temperature of the particle.
Field Density - outputs the field density the particle shares.
Collided - when a collision of a smoke fluid particle happens, this output will be
set to True.
Rollout Menu
SGroup - this drop-down list lets you specify the SmokeGroup operator you
want to use to query smoke fluid information about a particle.
NOTE:
Particles that are not part of the
SmokeGroup operator will become
initialized with basic settings for
smoke fluid simulations, however if
particles are not part of the
SmokeGroup then they will not act
as a fluid. As soon as they become
part of the group they will act as
fluid
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SmokeGroup
thinkingPartciles 6 Subscription Drop2 offers a new fluid solver and hereby
extends its special effects toolset beyond incompressible hydro fluid simulations.
This new fluid solver perfectly integrates with all existing physics solvers and
adds another weapon to the arsenal of special effects to thinkingParticles.
The SmokeGroup operator acts as a container for the solver settings and is not
actually "the solver" by itself. This philosophy is exactly the same as introduced
by our hydro fluid solver or the other rigid body dynamics solver available in
thinkginParticles. By using this "container" based approach we do allow top
have multiple fluids (smoke) in one DynamicSet with proper interaction between
each other.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
There are no outputs for this operator.
Rollout Menu
Solver - lets you choose from the drop down menu the smoke solver to use for
this smoke simulation. All compatible solvers found in the thinkingParticles
setup will be automatically listed. This allows for multiple fluids to have
different properties and still interact properly.
Render - select a SmokeRender node used to define the rendering apprance of
the volumetric effect.
Ranges - choose the SmokeTRanges operator that controls the color settings
when rendering the effect
Vorton - sets the particle group to be used to define the smoke particles.
Include Sub Groups - when checked sub-groups of the selected main group are
also used as smoke particles.
Velocity Grid Size - sets the Velocity Grid Size. This value is in world units keep this in mind - it is dependent on the scale of the scene. Grid sizes too small
for the scene will explode in memory consumption. Grid sizes too big for a
scene scale will create unrealistic and rough simulations. As the name implies;
velocity information, only is stored in this Grid.
Show Grid - check this option to visualize the 3D Grid used to optimize
calculations
Vorton Grid Size - defines the grid size for Vortons to store information about
rotational forces in the medium. This value is in world units - keep this in mind it is dependent on the scale of the scene. Grid sizes too small for the scene will
explode in memory consumption. Grid sizes too big for a scene scale will create
unrealistic and rough simulations. As the name implies; Vorton Grid
information, only is stored in this Grid.
Rel. Dens. Slope - defines how the center of pressure is calculated based on the
particle density. Values are between 0 and 1.0. The higher the value to more the
particles tend to stay together. Values above 1.0 are possible but might show
strange effects.
Show Grid - check this option to visualize the 3D Grid used
to optimize calculations
Dimension - sets the base scale for all non world scale
settings. A value of 100 units represents 1m for example.
This setting needs to be changed, only when the scene is
scaled to a different unit.
Spacing - changes the base distance between particles for all
fluid calculations. This parameter is used to compensate a
change in particle count (density). To keep the simulation
and rendering similar without being affected by the particle
count this value comes in handy. When doubling the particle
count this value should be doubled as well.
Example: Lets say you have a simulation that was based on
40 thousand particles. Now, you want to increase the amount
of particles to get that extra detail. Without Spacing you
would have to adjust many parameters including the density
values of the renderer. If you double the particle amount you
just have to double the spacing amount, and all other
parameters will be globally multiplied to their proper values
to make the simulation still look the same including the
rendering.
Time Scale - allows to slow down or speed up the
simulation. Keep in mind that this actually increases or
reduces the subframe steps of the simulation! There are other
parameters dependent on this setting as well (born rate of
your particles ...)
Ambient Density - defines the neutral density value of the
atmosphere (non particle). Whenever the smoke fluid
simulation reaches this density it is floating (no upward or
downward force). This is based on the "room temperature" or
environment temperature.
Density Deviation - lets you define the weight of the smoke
fluid based on the "room temperature" or when all heat is
dissipated. Values above 0 will make the fluid smoke sink
(heavier than density). Below 0 will make the fluid smoke rise up in the air
(lighter than air).
Temperature - sets the initial temperature of the smoke fluid. Hot gases rise
faster compared to colder gases when Temperature Expansion is greater 0.
Temperature Variation - sets a random variation amount that will be added or
subtracted from the temperature. A value of +5 will add temperature values
between up to +5 to the temperature amount for each particle created.
Temp. Expand - defines the volume expansion based on the temperature of the
gas fluid. When set to 1.0 it means that doubling the temperature of the gas
would result in doubling of its volume and hence the density would be only half.
Temp. Diffusion - sets the heat exchange between one gas fluid particle and its
surrounding gas fluid particles. Over time the heat will be averaged throughout
the gas fluid. Cooling or energy loss of the whole system is based on the cooling
rate factor.
Temp. Compress - cooling gases or fluids compresses the volume of the fluid.
This value specifies a factor that is dependent on the temperature and density of
the fluid. This parameter shrinks the volume when cooling down and expands it
when heating up.
Cooling Rate - sets the amount of temperature loss based on the density and
temperature of the gas fluid.
Buoyancy - defines the "lift" or "fall" of the gas fluid. The higher this value the
faster the gas fluid sinks or rises.
Gravity Direction - sets the direction vector of gravity.
Vorticity - sets the amount of whirls that should be created based on density and
velocity changes of the fluid.
Vorticity on Accel - sets the amount of whirls that should be created based on
density and velocity changes in the field caused by friction of the fluid.
Vorticity Radius - defines the radius of a whirl in world units. The larger this
value the more particles are affected. This value is also dependent on the Vorton
Grid Size if this radius is below the grid size the effect might behave
unpredictable.
Pressure Expan. - sets a factor to define the expansion of a gas fluid
independent of temperature.
Density Threshold - a setting that controls the Pressure Expand function of the
fluid. If the fluid density value is above this threshold, the Pressure Expansion
function is applied to the particles within the volume of the fluid.
Position Diffusion - sets a constant force to expand the fluid system. This force
is not dependent on density or any other aspect of the fluid simulation.
Linear Viscosity - defines the amount of viscosity which is applied to the linear
component (movement).
Angular Viscosity - defines the amount of viscosity which is applied to the
rotational component.
Linear Friction - defines the amount of friction applied to all particles
(movement) in the fluid simulation (air friction)
Angular Friction - defines the amount of friction applied to all particles
(rotation) in the fluid simulation (air friction)
Kill Density - sets the lowest density value at which particles will be removed.
All particles dropping below this density value will be deleted.
Kill Temperature - sets the lowest temperature value at which particles will be
removed. All particles dropping below this temperature value will be deleted. A
value of 0 represents the environment temperature.
External Force - defines a factor that will be applied when external forces (e.g.
wind) influence the gas fluid simulation. It is important to note that all forces
must be placed before the SmokeSolver to have an effect on the gas
simulation.
Spawning
Check this option to enable automatic particle fluid
spawning to increase the amount of particles while keeping
the density if the fluid in certain areas.
Show Emitter Particle - when checked, red particles will
indicate the areas the spawning of new particles will
happen. Spawn does not need to be active to use this
preview feature.
Spawn - check this option to activate spawning of extra particles.
Density - sets the threshold value at which spawning should occur. All densities
below this value will spawn new particles, while keeping the overall particle
density intact.
Particles - sets the multiplier for the density function to define how many
particles are created when the density drops below the threshold. The higher the
difference to the threshold is, the more particles will be created, multiplied by
this factor.
Max Levels - defines how often a Spawn particle is allowed to spawn a particle
from itself.
Max Particles - sets the maximum amount of possible spawn particles in a
simulation.
Atmospheric Disturbance
Atmospheric irregularities are simulated by a global 3D
noise function that can be applied to the simulation or even
only to parts of the particle fluid states
(Combustible,Flame,Smoke).
Strength - sets how much influence (power) the Atmospheric disturbance
should have on the fluid system.
Size - defines the size of the atmospheric disturbances. This value is set in world
units. If this is too small there might be no visible effect at all.
Move - adds a drift factor to the atmospheric disturbance.
Show
Type - lets you define the type of visualization that will be
used to show the smoke fluid. There are 6 options
available.
None - no visualization of the smoke parameters will be shown.
Temperature - a fixed red to gray gradient will be used. Red being the
hottest and gray being ambient temperature.
Density - a fixed white to gray gradient will be used. White being the
highest density.
Velocity - a fixed white to gray gradient will be used. White being the
highest velocity.
Color TRanges - uses the color gradient of the selected SmokeTRanges
operator.
Density TRanges - when selected, the density color gradient of the
selected SmokeTRanges operator will be used to visualize the particles.
Self Illumination TRanges - select this option to see the self
illumination gradient effect in the viewport.
Show Scale - a multiplier to compensate for the the display of the gradient
mapped to the particle values.
Write to Data Channel
Temperature - sets the data channel number for the
temperature values. Temperature values of each particle are
stored alongside in the selected data channel.
IMPORTANT:
If you plan to cache a smoke fluid
simulation and want to render it form
the cache file, you must use/activate
the Temperature and Density Data
channels. Failing to do so will result
in an empty rendering.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SmokeRender
This thinkingParticles Node is unique in the sense that it is
not a node that manipulates particles or any object inside
of 3ds Max. While rendering; after reach simulation step
the rendering parameters set in the node are used to do the
rendering.
Rendering is done through a special atmospheric renderer
that is automatically added as soon as a SmokeRender
node is selected from within a SmokeGroup operator. The
3ds Max atmospheric has no settings, all controls reside
inside the SmokeRender node.
thinkingParticles uses a hybrid particle-grid approach to
render smoke or fire effects. Being particle based in its
core, poses an issue of discrete point rendering. A single
point in space can not be rendered as it is an infinite zero
dimensional object. Rendering points in thinkingParticles
is done by evaluating spherical volumes centered around
the particles generated in space. A grid or voxel construct,
placed around particles is used to optimize the evaluation
of the whole volume generated by a particle cloud.
Operator Inputs
All of the the input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
There are no outputs for this operator.
Rollout Menu
Smoothing Radius - defines the "size" of the volume to look for density values.
This value affects the rendering speed and visual quality of the rendering. Keep
this radius as small as possible.
Position Jitter - any value greater than 0 will add some positional jittering to
the ray-marching algorithm. This feature works best on thin and highly
transparent smoke fluid effects. Using this feature helps in hiding the particle
nature of the effect by smoothing out the rendering.
Velocity Stretch - defines how much the render effect should be stretched along
the way of travel. The higher this value the more stretching will occur. This can
be used to simulate motion blur (cheap mans motion blur)
Add Camera Velocity - check this option to respect camera movement as well
for the aforementioned stretching rendering effect.
Contour -sets a multiplier (exponent) for the fall-off function to calculate
volume densities. The higher this value the sharper the details will appear.
Flat Density - when checked the Density calculation will appear more averaged.
Camera Ray Marching
Step Length - defines the ray-marching stepping length into - and through the
volume. Larger steps will render faster but will result in a more flat or even
artifact filled volume rendering. The value is in world units, if you have a large
scale this should a large scale as well! Using "micro steps" on a cloud as big as
the Empire State building will result in weeks or months of render time without
any visual benefit.
Intersect Bias - defines the base accuracy of the ray-marching when entering the
volume. This value needs to be smaller than Step Length to get better accuracy
for the first hit of the volume. This value plays an important role with high
density cloud effects.
Density - sets the density of the volume per ray-marching step. Denser volumes
will transmit less light and create darker shadows. Keep in mind that densities
are dependent on the amount of particles found within a volume.
The more particles in one place the more the density will add up.
Soften - this multiplier controls the amount of surface softening
of dense volume renderings. The higher this value the softer the
appearance will be.
Max Opacity - sets the maximum opacity the ray marching can
reach. Values below 1.0 can help in speeding up rendering but
the result might look more transparent.
Shadow - check this option to generate cast shadows
Step Length - defines the ray-marching stepping length into and through the volume. Larger steps will render faster but will
result in a more flat or even artifact filled volume rendering. The
value is in world units, if you have a large scale this should a
large scale as well! Using "micro steps" on a cloud as big as the
Empire State building will result in weeks or months of render
time without any visual benefit.
Intersect Bias - defines the base accuracy of the ray-marching
when entering the volume. This value needs to be smaller than
Step Length to get better accuracy for the first hit of the volume.
This value plays an important role with high density cloud
effects.
Density - sets the density of the volume per ray-marching step.
Denser volumes will transmit less light and create darker
shadows. Keep in mind that densities are dependent on the
amount of particles found within a volume. The more particles in
one place the more the density will add up.
Soften - this multiplier controls the amount of surface softening
of dense volume renderings. The higher this value the softer the
appearance will be.
Max Opacity - sets the maximum opacity the ray marching can
reach. Values below 1.0 can help in speeding up rendering but
the result might look more transparent.
Self Shadow - check this option to generate self shadows
Step Length - defines the ray-marching stepping length into - and through the
volume. Larger steps will render faster but will result in a more flat or even
artifact filled volume rendering. The value is in world units, if you have a large
scale this should a large scale as well! Using "micro steps" on a cloud as big as
the Empire State building will result in weeks or months of render time without
any visual benefit.
Intersect Bias - defines the base accuracy of the ray-marching when entering the
volume. This value needs to be smaller than Step Length to get better accuracy
for the first hit of the volume. This value plays an important role with high
density cloud effects.
Density - sets the density of the volume per ray-marching step. Denser volumes
will transmit less light and create darker shadows. Keep in mind that densities
are dependent on the amount of particles found within a volume. The more
particles in one place the more the density will add up.
Soften - this multiplier controls the amount of surface softening of dense volume
renderings. The higher this value the softer the appearance will be.
Max Opacity - sets the maximum opacity the ray marching can reach. Values
below 1.0 can help in speeding up rendering but the result might look more
transparent.
Self Illumination
Intensity - besides the self Illumination that can be set within the SmokeGroup
operator, this factor lets you add self-illumination based on density values. This
simulates denser areas to be brighter than less dense areas.
Scattering
thinkingParticles smoke renderer supports light scattering effects inside the
volume. This is done in a highly efficient way while precalculating illumination
values based on a dynamic grid created around particles.
Grid Size - this defines the grid or voxel density. The bigger this value the wider
illumination can be spread throughout the volume. The finer the voxels or grid
gets the more accurate the result will be, however the longer the rendering might
take.
Smoothing Ite. - light and energy calculations are based on a very rough grid in
space, calculation errors will occur. To evenly distribute energy within a grid,
multiple iterations might be necessary. Increase this value only if you see light
flickering within the volume.
Show Grid - check this option to visualize the voxel grid that is used to
calculate the light scattering effect inside the volume. Visualization of the voxel
grid is possible after one rendering, only.
Light (only pre) - this factor sets the strength of the light scattering within the
volume caused by direct illumination.
Self Illuminate - this factor sets the strength of the light scattering within the
volume caused by self illumination effects within the volume.
Lights - volumetric effects have a much greater impact and appearance with the
play of light and shadow. To illuminate a volumetric effect you may pick any
light in the scene.
Add - press this button to enter a standard pick object mode. Any Light
object picked in the modeling view port will be added to the list of lights
used buy this atmospheric renderer.
Remove - when pressed, the selected light will be removed from the list.
Multiplier - sets the strength of the illumination for the volumetric effect
caused by the light source. The higher this value to stronger the illumination will
appear on or inside the cloud.
Ambient - defines the strength of the ambient light that should be added to the
volumetric effect.
Ambient Color - lets you define the color top use to create an ambient
illumination effect.
Pre Calculate Light/Shadow - check this option to pre-calculate Lights and
Self-Shadows of the smoke rendering effect.
Light Grid - check this option to speed up the pre calculation of lights
and shadows by using a dynamic grid.
Size - defines the voxel grid size used for the light/shadow pre
calculation step.
Smoothing Ite. - light and energy calculations are based on a very
rough grid in space; calculation errors will occur. To evenly distribute
energy within a grid, multiple iterations might be necessary. Increase
this value only if you see light flickering within the volume.
Show Grid - check this option to visualize the voxel grid used to precalculate the light/shadow pass.
finalRender
Visible in GI - check this option to allow GI rays generated by finalRender to
consider this atmospheric effect as a source of illumination. Keep in mind that if
you check this option and use the smoke effect as a light emitter at the same
time; you will add twice the illumination values.
Light Emitter
Check this option (Light Emitter) to turn the smoke render
effect into an actual area light source.
Grid Size - this defines the grid or voxel density. The bigger this value the
coarser the illumination will be calculated in the volume. The finer the voxels or
grid gets the more accurate the result will be, however the
longer the rendering might take.
Smoothing Ite. - light and energy calculations are based on
a very rough grid in space, calculation errors will occur. To
evenly distribute energy within a grid, multiple iterations
might be necessary. Increase this value only if you see light
flickering within the volume.
Show Grid - check this option to visualize the voxel
grid used to calculate the emitting light and shadows.
Intensity - sets the power of the light source
Exclude - click this button to bring up the standard light
exclude list opf 3ds Max.
Far Attenuation - check this option to calculate a smooth cubic light
attenuation based on the near and far distances.
Start - sets the area with maximum light.
End - defines the end distance at which no light will be affecting the scene.
Number of Rays - sets the number of shadow rays shot towards each of the
the position in the light grid. Be careful as the number of rays easily multiply.
Ray Bias - this shadow ray bias allows to move the shadow away form the
surface or towards the surface.
Ray Jitter - used to randomize the shadow rays to get a smoother appearance
of the area shadows.
Shadow - when checked area shadows are calculated
Shadow Atmospheric - check this option to cast a shadow from another
atmospheric illuminated by this light source.
Phong Shading
Phong - when set to any non zero value a specular
highlight will be created for smoke fluid effects
Specular - controls the power or brightness of the
highlight.
Glossiness - controls the size or spread of the highlight.
Soften - controls the blending of the specular highlight.
Color - filters the highlight color that depends on the light color.
Render Elements
This atmospheric renderer offers multiple render elements that can be used to
enhance the look of smoke and fire effects in a post processing stage. Find below
the list of supported render elements.
1.
2.
3.
4.
5.
6.
7.
TP_SmokeCombustibleRenderElement
TP_SmokeFlameRenderElement
TP_SmokeSmokeRenderElement
TP_SmokeVelocityRenderElement
TP_ZDepthRenderElement
TP_TransparencyRenderElement
TP_NormalRenderElement
Smoke Velocity Render Element
Mode - sets the method and format used to write the velocity render element.
Possible Options are:
1.
2.
3.
4.
5.
3ds Max
SmoothKit
ReelSmart
3D RGB
3D
Max Velocity - sets the maximum velocity value for the render element
Update - when checked, the maximum value in a scene will be suggested
after one rendering.
ZDepth Render Element
Min Depth - sets the minimum distance value for the render element
Max Depth -sets the maximum distance value for the render element
Use Ray Length - check this option to use the actual ray length as the distance
Update - when checked, after one rendering the Min and Max values will be
automatically set.
IMPORTANT:
thinkingParticles render elements are
supported by any 3ds Max
compatible renderer.
"Compatible" means, it is not
enough to just being able to render
an image with 3ds Max. The
renderer has to be properly
programmed to support 3ds Max
interface calls. Even mental ray,
shipping with 3ds Max as a default
renderer does not support render
elements properly.
Data Channel Input
Color - sets the data channel number to be used to read color data for the
rendering effect. This color value replaces the color form the gradient
completely.
Filter - defines the filter color per particle it wither multiplies with the color
from the gradient or the color fed into the color input.
Density - defines the Data channel number to be used to set the density value per
particle; this is a multiplier and a value of 1.0 will not affect the original value.
Selfillumination - this is a multiplier for the self illumination value of the
particle. Values greater than 1 will increase self illumination and values below 1
will decrease it.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SmokeSolver
This operator handles all Smoke simulations and represents the actual solver.
However, it has no parameters on its own; each SmokeGroup operator has its
own set of settings.
Check out the following chapters to learn more about the fluid simulation
method used by thinkingParticles.
Mesh Free Vortex Particles
thinkingParticles' SmokeSolver uses a mesh-free scheme for representing
vorticity and advecting vortons and a grid-based scheme for interpolating
velocity between points. This solver is an adaptive hybrid fluid solver were
vortons (causing whirls) and tracer particles (interpolated particles to
extrapolate resolution) can move anywhere, but an adaptive growing gird is used
to calculate other fluid properties like velocity.
One big advantage of using such an approach lies in the unlimited volume it can
interact in, another benefit is that the simulation result is less dependent or
affected by the grid size or resolution of the grid itself.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Outputs
ExternalSolver - (bool) this output becomes True before Boundary calculations
take place. This is useful, for example, to add another physics solver "inbetween" like any of the available rigid body solvers (Bullet, ShapeCollision)
Rollout Menu
There is no UI for this Node.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SmokeTRanges
This operator is used as a "container" for SmokeGroup to define the color ranges
for rendering a smoke effect. This operator needs to be selected from within the
SmokeGroup operator.
Operator Input
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
All other input channels represent 1:1 the parameters as described in the Roll
Out Menu section of this chapter.
Operator Output
there is no output available for this operator.
Rollout Menu
This section of the user interface controls the color
behavior across various temperature ranges. In general; a
user definable temperature is assumed as a transition
between the 3 smoke particle states
(Combustion,Flame,Smoke).
Combustion
Here, are the controls for the fluid simulation when
particles act and behave as a combustible matter.
Temperature - sets the initial temperature of the
combustible matter. This is actually represents the
ignited fuel.
Cooling Rate - acts as multiplier to the cooling
rate. This defines how fast combustible matter
cools down to transition into its next sate - Flame.
Disturbance - this multiplier defines the amount
of atmospheric disturbance for this section of the
fluid simulation. If an atmospheric disturbance is
specified and this value is set to 0 the combustible part of the fluid
simulation will not receive any turbulence at all.
Flame
This section controls the parameters for the fluid simulation when particles act
and behave as " flame". There are three states a particle can have Combustible,
Flame, Smoke
Temperature - sets the initial temperature of the flame.
Cooling Rate - acts as multiplier to the cooling rate. This defines how
fast Flame cools down to its next sate: Smoke.
Disturbance - this multiplier defines the amount of atmospheric
disturbance for this section of the fluid simulation. If an atmospheric
disturbance is specified and this value is set to 0 the Flame part of the
fluid simulation will not receive any turbulence at all.
Smoke
This section controls the parameters for the fluid simulation when particles act
and behave as smoke. There are three states a particle can have Combustible,
Flame, Smoke
Temperature - sets the initial temperature of the smoke.
Cooling Rate - acts as multiplier to the cooling rate. This defines how
fast Smoke cools down to the ambient temperature.
Disturbance - this multiplier defines the amount of atmospheric
disturbance for this section of the fluid simulation. If an atmospheric
disturbance is specified and this value is set to 0 the Smoke part of the
fluid simulation will not receive any turbulence at all.
Color
This menu section controls the viewport and the rendering
appearance of the smoke effect. Color Gradient and Alpha
channel directly influence the rendering output of the
atmospheric shader.
The color gradients use the same Gradient controls like
many other native thinkingParticles gradient controls.
Density
To control the density or transparency of the rendering effect, this gradient is
used. The positions on the gradient represent the 3 States and transitions between
them of the fluid simulation.
Self Illumination
Use this gradient to control the amount of self illumination for the 3 States and
transitions between them of the fluid simulation.
Intensity - when set to 1.0 a pure white color value in the corresponding
gradient will equal to a full self illumination mode. A pure black color will turn
off the effect of self illumination. This color gradient is directly related to the
Color Temperature gradient. When you set a color-key at position 0.33 it will
affect the self illumination color set at 0.33 in the color gradient.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
IsSpline Operator
This operator is used to gather information about a particle in connection of
being a spline or not and what its function may be.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) this input data stream reads in the currently selected particle
and this particle is usually the guide particle representing one spline or branch.
The data stream MUST be connected and will be highlighted yellow, if it is not.
Operator Output
IsSpline - (Bool) outputs True when this particle belongs to a spline
SplineID - (Integer)outputs the Spline ID for that particle
KnotID - (Integer) outputs the KnotID of that particle
IsFirstKnot - (Bool) outputs True if this is the first knot in a spline (start of a
spline)
IsLastKnot -(Bool) outputs True if this is the last knot in a spline
IsRootSpline -(Bool) outputs True if this spline is a root spline (first level) if
this is False the spline is a branch.
Rollout Menu
Every spline needs to be managed by thinkingParticles within its own physics
simulation. To handle the creation of multiple splines with different parameters
and behaviors; thinkingParticles splines need to be managed in spline pools. For
this - a special operator called SplinePool is used. There can be easily many of
such operators hence the option to specify the SplinePool operator to use.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SplineCreate
This operator can be used to procedurally create splines. Its output allows to
easily add spline knots and even sort the knot order within the spline.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Output
Initial* - is set to TRUE when a spline is created. This is useful to control the
addition of spline knots with other connected nodes.
SplineID* - outputs the current SplineID created.
Rollout Menu
Sp.Pool -selects the spline pool to be used.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SplineData Operator
This operator is used to acquire information about procedural spline data. This
data can be used to change or react to the creation or animation of splines.
Without any input, the selected SplinePool data is used. All splines in the
SplinePool are evaluated (incl. spline branches).
Important
This operator has two modes.
Without any inputs connect the
specified SplinePool data is used and
processed.
With a SplineID on the input; or with
an additional BranchID on the input
the relevant data of the selected
spline is output and processed.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
SplineID - (Integer) used to feed in an Integer value to specify which spline to
gather data on.
BranchID - (Integer) allows to select a branch of a spline.
PositionOnSpline - (Scalar) sets the position on the spline in a normalized
manner. A value of 0 would equal to the start of the spline and a value of 1
would represent the end of the spline.
PositionInAbsolute - (Bool) when this input is set to 1; The PositionOnSpline
input is measured in real world unit values specifying the absolute distance.
AddKnotParticle - (Particle) any particle fed into this port will be used as a
spline knot. Knots will be added to the existing spline knots (ascending count).
AddKnotPosition - (Integer) sets the position within the spline for the particle
connected to the AddKnotParticle input. If the position is of an already existing
spline knot the knot created will be inserted at this position and all other knots
move up.
AddKnotType - (Integer) sets the type of knot to create for that spline.
a value of 0 creates a bezier knot
a value of 1 will create a corner knot
a value of 2 will create a smooth knot
ThicknessCurveID - sets the curve ID to be used by the selected spline.
ThicknessCurveScale - defines the curve repetition factor of the selected
curve ID
ThicknessCurvePhase - sets the phase value of the selected curve
Operator Outputs
Initial - (Bool) this value will output TRUE when a spline is just created (first
knot added)
Root - (Bool) when TRUE, the selected spline is a root spline and not a branch.
False means that this spline is a branch.
NumSplines - (Integer) outputs the number of splines hold by the selected
SplinePool operator; when a SplineID is specified (input), the number of all
connected splines will be reported.
NumKnots - (Integer) outputs the total amount of knots for the selected spline
(through SplineID input) or all of the knots from all splines (in SplinePool) if
no input is connected.
BranchSplineID - (Integer) outputs the branch spline ID for the selected spline
and branch.
Position - (Position) outputs the world position (X,Y,Z) of the selected spline
(needs a position input)
Alignment - (Alignment) holds the alignment information of the specified spline
position (input)
Velocity - (Velocity) produces the current velocity at the specified spline
position (input)
Spin - (Spin) outputs the spin of the selected spline position (input)
Tangent - (Tangent) outputs the tangent data of the selected spline position
(direction)
User Shape ID - outputs the USer defined Shape-ID
ThicknessCurveID - outputs the curve ID to be used by the selected spline.
ThicknessCurveScale - outputs the curve repetition factor of the selected
curve ID
ThicknessCurvePhase - outputs the phase value of the selected curve
Rollout Menu
Sp. Pool - this drop down menu lets you choose the SplinePool operator to
receive and handle the spline data.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SplineImport
Spline import is used to turn a standard 3ds Max spline object into multiple
particles and a fully procedural spline. There are some "natural" restrictions that
come with this operator. It works best with all smooth, and all corner splines free
bezier splines will not import properly! The reason for this is the complexity for
thinkingParticles of being able to control the splines within a physics simulation.
Current algorithms are optimized for smooth types (like simulating a rubber
band or rope).
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Output
*Born Particle - (Particle) outputs the newly created particle from the spline
vertex
*Node ID - (Integer) delivers the Node of the current spline that was picked
from the modeling viewport
*Knot ID - (Integer) outputs the current knot ID
*InitalState - (Scalar) this will be set to TRUE when the first knot of a spline is
processed
Rollout Menu
Sp. Pool - this drop down menu lets you choose the SplinePool operator to
receive and handle the spline data.
Group - sets the particle group to be used for the newly created spline particles.
Import Nodes
Pick Object - click this button to enter into selection mode. Select within the
modeling viewport any spline object that should be transformed to a procedural
thinkingParticles spline
REM. - press this button to remove the selected spline.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SplineInit Operator
SplineInit is used to create procedural splines based on particles. Each particle
becomes a spline knot and a spline is drawn between them; connecting each
particle to form the final spline object. The SplineInit operator works in
conjunction with SplinePool to actually create a visible fully procedural spline
object in a scene. Procedural thinkingParticles splines can easily used in physics
simulations or other special effects loaded tasks.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) this input data stream reads in the currently selected particle
and this particle is usually the guide particle representing one spline or branch.
The data stream MUST be connected and will be highlighted yellow, if it is not.
AddParticle - (Particle) adds the particle to become a spline knot. Usually you
would feed in the TrailBorn particles.
InsertAt -(Integer) specifies the knot position within the spline to insert a
particle as a spline knot.
KnotType - (Integer) allows to specify the spline knot type. See list below
a value of 0 creates a bezier knot
a value of 1 will create a corner knot
a value of 2 will create a smooth knot
Operator Outputs
Initial - (Bool) outputs TRUE if this particle is the first knot created for a spline.
This output is only active for the first particle that becomes a spline knot.
Spline ID - (Integer) outputs the ID of the current spline
Knot ID - (Integer) outputs the Knot ID of the spline
Rollout Menu
Every spline needs to be managed by thinkingParticles within its own physics
simulation. To handle the creation of multiple splines with different parameters
and behaviors; thinkingParticles splines need to be managed in spline pools. For
this - a special operator called SplinePool is used. There can be easily many of
such operators hence the option to specify the SplinePool operator to use.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SplineKnot Operator
This operator allows you to handle and process the knots of any spline object.
The SplineKnot operator is also useful to handle branching of splines; branches
can only exists on knots.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
SplineID - (Integer) used to feed in an Integer value to specify which spline to
gather data on.
KnotID - (Integer) this input defines the knot number to use to gather data
about.
BranchID - (Integer) allows to select a branch of a spline.
Type - (Integer) allows to specify the spline knot type. See list below
a value of 0 creates a bezier knot
a value of 1 will create a corner knot
a value of 2 will create a smooth knot
UVW - (Vector) lets you set a UVW coordinate per spline knot
Operator Output
Particle - (Particle) outputs the particle data stream of the particle defining the
selected knot
NumBranches - (Integer) produces the number of branches in the selected
spline.
BranchSplineID - (Integer) outputs the branch spline number at the selected
knot. By default the first BranchID is output as long as there is no BranchID
input connected.
Position - (Position) produces the position data of the selected knot.
Alignment - (Alignment) outputs the alignment information about selected knot.
Velocity - (Velocity) produces the velocity information of the selected knot.
Spin - (Spin) outputs the spin data of the selected knot.
Tangent - (Tangent) produces the tangent information of the selected knot.
Type - (Integer) outputs the spline knot type. See list below
a value of 0 creates a bezier knot
a value of 1 will create a corner knot
a value of 2 will create a smooth knot
UVW - (Vector) outputs the UVW coordinate for that selected Spline Knot
Rollout Menu
Every spline needs to be managed by thinkingParticles within its own physics
simulation. To handle the creation of multiple splines with different parameters
and behaviors; thinkingParticles splines need to be managed in spline pools. For
this - a special operator called SplinePool is used. There can be easily many of
such operators hence the option to specify the SplinePool operator to use.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SplinePhysics Operator
Use this operator node to create spline based physics simulations. Splines can act
like springs or ropes.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
LinearStiffness - (Scalar) sets the flexibility of the spline. The higher this value
the more rigid this spline will be.
Damping - (Scalar) adds a global dampening factor to the simulation and is
good in preventing over oscillation of a spline.
Iteration - (Integer) defines the amount of sub-steps for the physics simulation
of the spline.
Fixed Start - (Bool) when set to True the start of the spline will be fixed in the
simulation
Fixed End - (Bool) when set to True the end of the spline will be fixed in the
simulation
Operator Outputs
This node has no output.
Rollout Menu
Sp. Pool - every spline needs to be managed by thinkingParticles within its own
physics simulation. To handle the creation of multiple splines with different
parameters and behaviors; thinkingParticles splines need to be managed in
spline pools. For this - a special operator called SplinePool is used. There can be
easily many of such operators hence the option to specify the SplinePool
operator to use.
Linear Stiffness - sets the flexibility of the spline. The higher this value the
more rigid this spline will be.
Linear Damping - adds a dampening factor to the simulation along the length of
the spline; this helps preventing over oscillation of a spline.
Angular Stiffness - sets the rotational flexibility of the spline. The higher this
value the less the spline will be allowed to rotate.
Angular Damping - adds a dampening factor to the simulation when a spline
rotates; this helps preventing over oscillation of a spline.
Iteration - defines the amount of sub-steps for the physics simulation of the
spline.
Fixed Start - when checked the start of the spline will be fixed in the simulation
Fixed End - when checked the end of the spline will be fixed in the simulation
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
SplinePool Operator
thinkingParticles allows for procedural spline creation based on particles; were
every particle is acting as a knot for a spline. Splines are automatically drawn
between particles. Multiple branches from splines and branches from branches
are supported as well. In any case, the principles are always the same - every
spline particle controls a knot on a spline regardless of it being a branch or not.
The above diagram explains how the creation hierarchy works.
SplinePool acts as a central spline collector and is able to control multiple
splines in a simulation at once. All splines referencing the same SplinePool
operator will have the same settings and parameters, to add multiple independent
splines in a simulation; multiple SplinePool operators are needed. This operator
works in conjunction with SplineInit.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off.' You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
The remaining input parameters are identical to the UI controls. For more
information about the use of an individual parameter check out the descriptions
below.
Operator Outputs
This node has no outputs.
Rollout Menu
Show Spline - check this option to actually see a spline in the viewport (no
mesh)
Steps - sets the accuracy or amount of steps along a spline when drawn. The
higher this number the smoother the spline will appear.
Curve Radius - defines how smooth a sharp angle (90 Degree angle) will be
drawn. A value of 0 will keep a sharp angle setting this value to 1 will create a
smooth round spline in corners.
Color - setting this option to On along with the color swatch will allow to draw
the spline in a fixed color. This comes in handy especially for debugging
purposes.
Mesh Hull
None - check this option, to prevent thinkingParticles form creating a mesh
Radial - when checked, a "round" rope mesh will be created.
Constriction - sets the amount of constriction for the spline mesh. A value of
100% will show the maximum constriction.
Rate - sets the amount of constrictions. The higher this value the more
constrictions will be visible. To see all of the mesh effects a proper amount of
segmentation must be maintained!
User Spline Shapes - check this option to enable user defined Shapes, any
selected Shape Helper Node will be used to define the shape.
Shapes - choose from the drop down list any Shape Helper Node containing a
user defined shape.
Thickness - defines the radius of the spline. The higher this value the thicker the
spline will be.
Curves - lets you choose from a list of available Cruve2D controls in the scene.
This curve controls the thickness or scale of the spline mesh over its length. The
X-Axis represents the length of the spline while the Y-Axis defines the thickness
along the spline. If multiple curves exist, the splines inside the SplinePool will
be cycled through. The SplineData operator allows you to choose a specific
curve control for a spline.
Scale - acts as a multiplier for the curve control to set the amount of repetitions
(e.g. will repeat the curve value 2 times)
Variation - if greater than zero a random variation is added to the scale for each
spline in the spline pool
Phase - shifts the curve along the X-Axis. When this is animated the curve will
cycle through.
Variation - if greater than zero a random variation is added to the phase for each
spline in the spline pool.
Out of Range - controls what happens when the curve is reaching its borders
(left or right).
Stop - the last value will be used
Loop - will start at the first value
PingPong - reverses the curve
Increment - adds the last increment found in the curve
Rotation - rotates the spline around its center.
Sides - sets the amount of segments circumventing the spline.
Steps - defines the mesh resolution along the length of the spline.
Twist - sets how often the spline is twisted around
Cap Steps - defines the segmentation steps of the end and start cap
Cap Radius - sets the Cap Radius for the end and starting cap of the spline.
Find below some sample illustrations of various values. Keep in mind this
value can also go into the negative! This will create an indented cap.
Cap Radius % = 0
Cap Radius % = 50
Autosmooth - check this option to turn on auto-smoothing of the spline mesh
Threshold - sets the angular threshold when to smooth the surface.
Cap
Radius
% =
200
Generate Mapping - when checked, mapping coordinates for the spline
mesh are created.
2D Mapping Channel 1
Normalize - check this option to create one UV mapping space along the
length and perimeter of the spline.
World Scale - when checked the UV coordinates will be in world space. The
associated spinner control defines the size of the mapping.
3D Mapping Channel Vertex Color
Important
Due to 3ds Max restrictions and how
it handles mesh objects created by a
particle system; the UV coordinates
can only be set in the Vertex
Channel. You must use the Vertex
Channel option in the material
texture control to use this mapping
method.
Normalize - check this option to create one UV mapping space along the
length and perimeter of the spline.
World Scale - when checked the UV coordinates will be in world space. The
associated spinner control defines the size of the mapping.
Material
Material Control - sets the Material of the spline. Click this button to bring u pa
standard 3ds Max material browser dialog.
Info Text Box - this text box shows the current status of the spline object.
The amount of paths used and how many knots are created/used.
Bullet Rollout Menu
Drop Down Menu - is used to choose the bullet solver to be used in a
simulation.
Linear Stiffness - sets how "springy" or bouncy the spline will be. Lower
numbers will create an ultra soft rubber while higher numbers will create a
stronger appearing spline. Keep in mind we are talking here soft bodies! The
spline will never become as hard as a strip of steel!
Damping - adds a dampening force to the spline stretching. The higher this
value the more clay like the spline stretching will appear.
Margin - defines the collision distance to the actual spline to enable an earlier
contact point. This is needed to simulate a mesh hull collision around the spline
(margin is constant value; mesh hull can not vary).
Dynamic Friction - adds dynamic friction to spline simulations. This parameter
usually affects the collisions created between spline and mesh objects.
Time Scale - defaults to 1.0 (no change in time), this factor allows to adjust the
simulation time per SplinePool.
Fixed Start - when checked the start of the spline will be fixed
Fixed End -when checked it will set the spline end to be fixed
Contact Hardness
Rigid - sets the "bounce off" strength for rigid bodies colliding with the spline
(not the mesh hull).
Kinetic - defines the "bounce off power" from unyielding objects.
Soft - sets the bounce off power from soft body collisions.
Anchor - defines how strong the anchor holds
Position Iteration - sets the amount of intermediate steps the solver will take to
simulate the rope system. The higher this value the more accurate the result will
be, however the longer it will take to calculate.
Collision
Rigid - when checked, collisions with rigid bodies (spline to rigid) will be
considered.
Soft - when checked, collisions with soft bodies (spline and soft bodies) will be
considered.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ABomb Operator
A-Bomb is a unique particle operator that allows you to add fluid like motion to
existing particles. When used in a default setup, the result of this operator will
create a classic mushroom cloud effect. However, with a little modification many
kind of complex fluid motions can be created and may be used to simulate
smoke or dust floating around.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be brought to the target. The data stream MUST be connected
and will be highlighted yellow if it is not.
Position - (Position) This input data stream defines the Bring To target position.
The particle should land on this position (or near this point).
Direction - (Direction) This input data stream is used to override the User XYZAxis controls.
UI Controls - all UI Controls can be easily overwritten with an Input Data
Stream of any connected operator. Be careful! There is no real indication that an
operator is overwriting the UI element.
Operator Outputs
No Operator Outputs.
Rollout Menu
Center Drift - controls the amount the particles spread from the center (stem).
Only, the particles on the cap are affected by this value. Keep in mind that an
absolute symmetrical start position is needed to make this feature work as
expected.
Center Drift = 0.5
Center Drift = 2.0
Variation - adds random variation to the Center Drift value. This value is set as
percent of Center Drift.
Direction Drift - controls the amount of particle movement (acceleration) from
the top of the cap downward. Particle rolling takes place in the cap only.
Direction Drift allows you to add additional height per particle roll. See the
sample images below.
Direction Drift = 1
Direction Drift = 2.0
Variation - adds random variation to the Direction Drift value. This value is set
as percent of Direction Drift.
Whirl Speed - controls the rolling speed of the particle in the mushroom's cap.
High numbers will result in faster cycling times for each particle. Don't get
confused when the shape of the mushroom cloud changes. Nearly every
parameter interacts with the other parameters - changing this value will result in
a different look for the particle system.
Variation - adds random variation to the Whirl Speed value. This value is set as
percent of Whirl Speed.
Distance Dependent - acts as a influence multiplier for the particles. This
parameter defines the strength if the A-Bomb effect based on the distance the
particle has towards the center. Higher numbers will affect particles farther away
much stronger.
See samples below.
Distance Dependent = 100 Distance Dependent = 500
Friction - sets the amount of internal particle friction. Higher values will result
in a tighter mushroom cap.
Particle Friction - sets the amount of inter-particle velocity. This parameter only
affects the rolling cycles of the mushroom cap. Higher values will result in a
more spread-out effect.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Alignment Operator
Advanced particle animations must have full control of how particles are aligned
in space or in relation to each other. The Alignment Operator is used to provide
this kind of control. A common use of this operator is to use it for flocking
animations in which the particles always face forward based on the direction of
travel. It would look funny if the birds were to fly backwards, wouldn't it?
This operator is also able to create specific output values that might be used by
other operators.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be used for alignment. The data stream MUST be connected and
will be highlighted yellow if it is not.
To Position - (Position) This input data stream is used to indicate a User Defined
object that the particles should be aligned to.
To Particle - (Particle) This input data stream is used to indicate another particle
group that the particles should be aligned to.
Direction - (Direction) This input data stream is used to override the User XYZAxis controls.
Laziness - (Scalar) This input data stream is used to override the Laziness
spinner value, which determines the swiftness of the particle to align to a
specified vector.
Source - (Integer) This input data stream takes an integer value that represents
the Primary Axis for the alignment. Valid input values are 0 through 2, where:
0 = X-Axis
1 = Y-Axis
2 = Z-Axis
Invert - (Bool) This input data stream determines whether or not the Primary
Axis is left at it's default (Invert = off), or if the Primary Axis vector is reversed
(Invert = on).
Type - (Integer) This input data stream takes in an integer value that represents
the type of alignment desired. Valid input values are 0 through 7, where:
0 = None
1 = Random
2 = Direction of Travel
3 = World X
4 = World Y
5 = World Z
6 = User Defined
7 = To Particle
Variation - (Angle) This input data stream is used to override the Variation [*]
spinner value, which determines any angular variation along a user-defined
vector.
X / Y / Z Rotation - (Angle) These input data streams are used to override the
angular X/Y/Z Rotation spinner values, which adds a rotational angle amount to
the alignment vector.
X / Y / Z Limits - (Bool) These input data streams determine whether or not the
alignment angle is limted along the specified axis (Bool = True), or left
unconstrained (Bool = False).
X / Y / Z From - (Angle) These input data streams are used to override the
angular limit starting point for the selected axis.
X / Y / Z To - (Angle) These input data streams are used to override the angular
limit ending point for the selected axis.
X / Y / Z Slide Factor - (Alpha
Gradient) These input data streams are
used to override the gradients used to
determine the acceleration curve used to
align the particle to the defined vector.
NOTE: These inputs are provided
for future data stream inputs and are
not active currently.
Operator Outputs
In Focus - (Intensity) This output data stream can be used to track an object that
gets near to the particle of the connected group. In essence, it uses a Float value
to determine how "good" a value is. 0.0 represents bad alignment, while 1.0
represents perfect alignment.
Direction - (Direction) This output data stream sends out the orientation of the
particle axis in World Space.
Rollout Menus
Laziness - In certain situations you will want to force the alignment of particles
to occur over time and not happen immediately. A good example of this is a
cannon on a ship. In order to aim (align) at it's target, motors must turn to rotate
the tower, the cannon itself must be raised or lowered, etc. This process takes a
small amount of time, and the Laziness value helps mimic this timing. When this
spinner is set to zero, particles will immediately align with their new directional
vector, while values above zero slow the alignment of the particles down by a
certain amount. The higher the value, the longer it will take for particles to align.
P Axis - An alignment operation in 3D space must always have reference points.
This value uses the particle (object) axis for the alignment. You may choose one
of the following axis as the reference of alignment.
X-Axis
Y-Axis
Z-Axis
Invert - Activate this checkbox to invert the Primary Axis (P-Axis) to its
negative value. Example, X becomes -X and Y becomes -Y. This checkbox can
come in handy when you are working with instanced particle objects.
Random - The dropdown list offers the following settings:
None - This leaves the particles with their default alignment.
Random - When you select this option, all particles use a random vector.
Direction of Travel - Select this option when you want the particles to align
along their movement vector.
World X,Y,Z - With this option selected you may align the particles along
the X, Y or Z World Axis.
User Defined - This option must be selected when you want to set a certain
direction vector or when you want to use the Input data stream To Position
input.
To Particle - Particles can also be aligned in relation to other particles. To
use this option, the Input data stream To Particle must be connected to a
different particle group.
Variation [*] - Let's say that you want to align particles along a user defined
vector. Use this value to add some variation to this fixed vector. The variation
ranges from 0-180 degrees.
User Axes - When setting a user defined alignment vector, these three values are
used to define the direction. By default this vector points Z-up, or 'up in the sky'.
X / Y / Z Rotation - In addition to a directional vector, you can also set a certain
amount of rotation along the user defined axis.
Limits checkbox - Particle alignment can be restricted to freely adjustable
angles. The first angle value ([*]) is the minimum angle allowed and the second
angle value (To [*]) is the maximum angle allowed.
Be aware that the Alignment
operator locks the particle to this
angle regardless of any condition
that might change this angle.
Slide Factor - Each axis also provides the ability fine tune the acceleration
curve used to reach the alignment angle. It is handled with a Slide Factor
gradient shown in the rollout. To open the gradient, simply click on the visible
gradient pattern. You will be presented with the following dialog:
By default, the alignment angle is calculated in a linear manner, but sometimes it
might be useful to have a more mechanical approach, like a big cannon tower on
a warship. It needs some time to accelerate until the target is in focus. Black
color in the gradient means no movement/rotation while white color represents
free rotation/movement that is based solely on the laziness value. All grayscale
values in between represent a percentage of this free rotation/movement. Electric
motors can be easily simulated by a soft grayscale ramp.
The sliding factor gradient represents
the two Limits values (From [*] &
To [*]) by dividing the gradient in
the middle of its total range (Key
value 0.5). From the leftmost edge to
the middle key value you are setting
the angular change over time
affecting the From value. From the
middle key value to the rightmost
edge of the gradient you are setting
the user defined acceleration ramp
for the To value.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Bubble Motion Operator
The Bubble Motion Operator is a special purpose operator that adds a secondary
motion to the particles so that they behave like air bubbles rising from the deep
sea.
While ideally suited for underwater animations, you can also use this operator in
many other situations. For example, it may be also perfect for creating a chaotic
vortex or similar structures.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be used to apply bubble motion to. The data stream MUST be
connected and will be highlighted yellow if it is not.
Amplitude - (Scalar) This input data stream is used to override the Amplitude
spinner in the Bubble Motion rollout.
Amplitude Variation - (Scalar) This input data stream is used to override the
Variation [%] spinner in the Bubble Motion rollout.
Period - (Scalar) This input data stream is used to override the Speed spinner in
the Bubble Motion rollout.
Period Variation - (Scalar) This input data stream is used to override the
Variation [%] spinner in the Bubble Motion rollout.
Phase Variation - (Angle) This input data stream is used to override the Phase
Var. [*] spinner in the Bubble Motion rollout.
Operator Outputs
No Operator Outputs.
Rollout Menu
Amplitude - This spinner sets the amplitude of the bubble motion. The
amplitude represents the maximum length particles move away from their
original position. Higher amplitude values will result in far more spread out
particle paths and effects.
Variation [%] - You may vary the amplitude for each single particle to avoid
getting an artificial, computer-generated look. Higher variation percentage
values will result in more noise within the particle group.
Speed - Usually, rising air bubbles jitter rapidly on their way to the water
surface. This parameter lets you freely set the jitter speed for the bubble motion
effect.
Variation [%] - Use this parameter, to avoid giving every particle the exact
same jitter speed. Higher percentage values will create more variation in bubble
motion speed within the group.
Phase Var. [*] - Another problem that can appear when you start using multiple
Bubble Motion operators in one scene or particle system is that you generally
don't want to have all particles with the exact same motion or trajectory. To
counter this effect, you need to change the Phase Variation spinner to make the
motion of each group of particles unique.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
DataChannel Operator
The DataChannel Operator is used to assign values to a custom data channel
that is assigned to a Particle Group. There are only Input Data Streams available
where the Particle data stream is a needed input. Based on the connected particle
data stream the value is assigned to that group and the selected data channel
number.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group. The data stream MUST be connected and will be highlighted yellow if it
is not.
Float - (Scalar) This input data stream can accept any operator or condition that
can input a Floating point number into the channel.
Int - (Integer) This input data stream can take any operator or condition that can
input a Integer number into the channel.
Point3 - (Vector) This input data stream can accept any operator or condition
that can input a Vector or Point3 (X, Y, Z) value into the channel.
Alignment - (Alignment) This input data stream can take any operator or
condition that can input alignment data into the channel.
Color - (Color) This input data stream can accept any operator or condition that
can input a color (R,G,B) value into the channel.
Operator Outputs
No Operator Outputs.
Rollout Menu
Data Channel - This spinner is used to set the Data Channel number to assign
the connected value to. Data channels are numbered starting from 0 and can
progress as high as you want. The first data channel that can be assigned to a
particle group is 0.
For more information about Data Channel in thinkingParticles see the section in
the Introduction titled: What is a Data Channel?
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Group Operator
The Group Operator offers you the ability to change or transfer particles from
one group to another. And, since it's an operator, you can easily set up a rule
when this particle transfer should occur. This is one of the most powerful
features of thinkingParticles since the effective use of particle groups is a key to
successfully manipulating a particle system's behavior.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be used as the source for the particle transfer. This data stream
MUST be connected and will be highlighted yellow if it is not.
Group - (Group) This input data stream is used to override the dropdown list
within the rollout to choose the new group to transfer the particles to.
Operator Outputs
No Operator Outputs.
Rollout Menu
Group - From the drop down list, choose any particle group that you want the
particles transferred to. As soon as the Group input data stream's ON port
receives a "true" value, the particles attached to the Particle input data stream
will be transferred to the selected particle group.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Mass Operator
thinkingParticles offers one of the most advanced and sophisticated particle
dynamic engines available for 3ds Max. Physically accurate particle dynamics
need to have accurate values to calculate the correct dynamic solution. The Mass
Operator is used to assign a specific mass value to the particles.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have mass assigned to. This data stream MUST be connected
and will be highlighted yellow if it is not.
Mass - (Mass) This input data stream is used to override the Mass spinner value.
Mass Variation - (Scalar) This input data stream is used to override the
Variation % spinner value.
Size As Mass - (Bool) This input data stream is used to override the Size As
Mass checkbox value.
Operator Outputs
No Operator Outputs.
Rollout Menu
Mass - This parameter sets the mass for each single particle connected to the
Particle input data stream port. Be aware that this value is a dimensionless value
- it does not correspond to a specific unit of measurement (like pounds,
kilograms, etc.). Rather it is a relative value - something with a mass of 2 will be
twice as heavy as another particle with a mass of 1.
Variation % - Increase the variation amount, if you do not want to assign the
same mass amount to every particle in the group connected to the Particle input
data stream.
Size As Mass checkbox - When this checkbox is active, all of the particle sizes
will be calculated and their relative size will be applied as their mass. This was
added so that when doing particle animations such as fragmentation, that the
bigger chunks were automatically handled as heavier.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
MAXScript Operator
The MAXScript Operator is able to execute MAXScript code based on any
condition or rule created by an action of the particle system.
MAXScript is the powerful programming language for all 3ds Max users. It is
tightly integrated into the core application and offers nearly all the features of
any other programming language.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator. Be aware that
you can have code run when both True and False states are received by the ON
input data stream.
Operator Outputs
No Operator Outputs.
Rollout Menu
The MAXScript Active code is executed when a True condition is set within the
ON input data stream. You can directly type in or load any MAXScript code into
the active text field you wish. However you do need to be careful. Test your
scripts thoroughly before inserting them here. thinkingParticles does not check
or verify the MAXScript code you type or load. If, for example, the code
contains instructions to delete the hard drive, when a True condition is piped in,
the MAXScript operator will delete it - no questions asked.
Likewise, the MAXScript Inactive code is executed when a False condition is
set within the ON input data stream. You can directly type in or load any
MAXScript code into the Inactive text field you wish. However you do need to
be careful. Test your scripts thoroughly before inserting them here.
thinkingParticles does not check or verify the MAXScript code you type or load.
If, for example, the code contains instructions to delete the hard drive, when a
False condition is piped in, the MAXScript operator will delete it - no questions
asked.
Load - Clicking on this button will bring up a dialog where you can choose
MAXScript .MS files to be used within the operator.
MAXScript list - These windows contain lists of loaded MAXScript .MS files
and can be used to type in MAXScript code directly for use within the operator.
The upper window contains the Active code (to be executed when ON = True),
and the lower window contains the Inactive code (to be executed when ON =
False).
Up / Down - Clicking on these buttons will move the various MAXScript lines
up or down, depending on which line is selected.
Remove - Click the Remove button to delete a line of code or a loaded .MS file
from the Active or Inactive lists.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Memory
Storing data is one of the most important tasks when doing complex particle
system setups. The Memory node is especially made for this kind of task.
One of the biggest features the memory operator offers is the DynamicSet wide
parameter access, any value may be accessed in any DynamicSet at any time.
Also storing values per particle is also possible
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) when a particle data stream is connected to this port, the
memory will be held per particle.
Depth - (Integer) selects the depth value to read the value form a variable from.
Operator Outputs
This Node has an variable amount of Outputs
Rollout Menu
The Memory Node rollout menu is fully controlled by the mouse. The upper list
view window is used to create the variables that should be used to store values.
By dragging the variables to the Inputs section or the Outputs section, Input
Ports or Output Ports will be created.
A right click onto the Memory text field will bring up the below dialog. From
there you may choose between many available data Types.
While creating a Variable to store values, you may specify the Depth this
variable should be able to store values. A depth of 3 will for example allow the
variable to store 3 values. Be careful when using the depth value, higher values
means more memory consumption.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
NodeAttribute
The NodeAttribute operator offers a powerful method to setup a complex Visual
Effects scene without touching the thinkingParticles user interface at all. It offers
a new way for a thinkingParticles FX artists to integrate the modeling and
animation team into the process of creating visual effects.
Besides the external control of a complex thinkingParticles FX scene; this node
can also be used to enhance a rigid body dynamics workflow.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Node - (Node) use this input to feed in node data from another
ChildIndex - (Integer) this input allows to specify a specific child node buy
setting the relevant number (zero being the first object).
Operator Outputs
WireColor - outputs the wire color of the connected node
ParentNode - outputs the parent node which can be used with other
thinkingParticles operators requiring a Node input.
NumberOfChilds - outputs the amount of child nodes this object has.
ObjectID - outputs the standard 3ds Max node ID
Rollout Menu
Pick Node - click this button to select any object in the 3ds Max scene. This
object will be used to scan for Custom Attributes that have been assigned with
standard 3ds Max tools.
AutoUpdate Ports - check this option to automatically update the ports when
new custom attributes are added to the objects.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ParamBlock Operator
The ParamBlock Operator is one of, if not the most powerful and versatile
operator offered by thinkingParticles.
This operator gives you full and unlimited access to every single parameter in
your 3ds Max scene, and most importantly, it lets you create any number of
input data or output data stream ports based on the parameters and values of
selected 3ds Max object. These ports can then be used by other operators or
conditions to trigger even other operators.
One example of this operator's usefulness is being able to have particles change
color or size or speed based on the position or radius of a selected object.
Another example would be to use a selected object's material color or specular
level to drive the rate of particle emission. The uses are just about endless.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Operator Outputs
No Operator Outputs.
Rollout Menu
Pick Object - Click this button to enter the Pick Object mode. You may choose
any valid 3ds Max object including Lights, Meshes, Particle Systems or Dummy
objects.
When an object is selected, you'll then be presented with a list of all of the
parameters it supports as shown below.
In this case, a sphere has been chosen, and you are given the ability to access its
parameters and assigned materials. 3ds Max has a really advanced system of
handling parameters by their real names as they appear in the scene. When you
click on a parameter that is supported by thinkingParticles, the two buttons
beneath the window will change to Add Input and Add Output respectively,
and you can then add an input or output to your ParamBlock operator.
Be aware that there are some objects
in 3ds Max that will show one or
more blank parameter names when
used for the ParamBlock operator.
This is not a mistake within
thinkingParticles - the parameter
simply has no name. Even
TrackView will display the same
blank fields.
No Input - When you choose any of the parameters from the list, this button will
change to read Add Input. Clicking on it at this stage will add an input data
stream for the selected parameter within the ParamBlock operator. This newly
created data port behaves exactly like any other built-in connector.
In the image below, the sphere's X Position was chosen and the Add Input
button was clicked. Three things happen at this point:
1. The X Position row gets a red arrow that points to the input side of the
operator (as shown above).
2. The ParamBlock operator now sports an additional input data stream (as
shown below).
3. The Add Input button now turns to Rem Input. This can be used to remove
unwanted input data streams later if it is determined they are not needed.
If you select a parameter within the list that already has an input data stream
created, the button will change to read Rem Input, which you can use to remove
the created input data stream.
No Output - When you choose any of the parameters from the list, this button
will change to read Add Output. Clicking on it at this stage will add an output
data stream for the selected parameter within the ParamBlock operator. This
newly created data port behaves exactly like any other built-in connector.
In the image below, the sphere's X Position was chosen and the Add Output
button was clicked. Three things happen at this point:
1. The X Position row gets a red arrow that points to the output side of the
operator (as shown above).
2. The ParamBlock operator now sports an additional output data stream (as
shown below).
3. The Add Output button now turns to Rem Output. This can be used to
remove unwanted output data streams later if it is determined they are not
needed.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
ParticleData Operator
Particle groups do not have any inputs due to system restrictions and design
issues. However, besides the many basic operators that can set Velocity, Speed
and Mass, thinkingParticles offers the robust ParticleData Operator which can
be used to set multiple parameters of a particle in one shot.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream serves as a particle data stream
output.
Position - (Position) This input data stream supplies the current particle position.
Velocity - (Velocity) With this input data stream, the current velocity of the
particle can be fed into another operator or condition.
Life Span - (Life Span) With this input data stream, the life span value of the
current particle can be fed into other operators or conditions.
Age - (Age) This input data stream holds the current particle age so that it can be
fed into other operators or conditions.
Size - (Size) From this input data stream, the size of a particle may be fed into
other operators and conditions.
Rotation - (Rotation) This input data stream holds the current particle rotational
value so that it can be fed into other operators or conditions.
Alignment - (Alignment) This input data stream holds the current alignment
value so that it can be fed into other operators or conditions.
Mass - (Mass) From this input data stream, the mass of a particle can be fed into
other operators and conditions.
Scale - (Scale) From this input data stream, the scale of a particle can be fed into
other operators and conditions.
Group - (Group) This input data stream holds the current group of a particle so
that it can be fed into other operators or conditions.
Shape - (Shape) From this input data stream, the shape of a particle can be fed
into other operators and conditions.
CH: is displayed whenever a data channel is used in the selected particle group
Operator Outputs
No Operator Outputs.
Rollout Menu
Data Channel Group - used to select the particle group containing data
channels
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Particle Die Operator
The Particle Die Operator is fairly simple and allows you to send any group of
particles to their death at any given time. This can happen at once, or over time.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be killed. The data stream MUST be connected and will be
highlighted yellow if it is not.
Die In Time - (Frame) This input data stream is used to override the Die In Time
value in the Particle Die rollout.
Variation - (Scalar) This input data stream is used to override the Variation [%]
value in the Particle Die rollout.
Operator Outputs
No Operator Outputs.
Rollout Menu
Die in Time - This value sets the number of frames it takes to kill the selected
particle group completely. A value of zero kills the particle immediately, while
higher values cause the particles to "fade" from existence over the number of
frames given.
Variation [%] - To prevent all of the particles from dying on the exact same
frame, you may want to increase the variation value. Higher percentage values
result in more random death values for the particles.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Position Operator
The Position Operator lets you define a single point in space where particles
should be placed. In many cases, this operator is used in concert with the Born
Operator to feed in the position where the user wants the particles to be emitted
from.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be used as the source for the positional adjustment. This data
stream MUST be connected and will be highlighted yellow if it is not.
Position - (Position) This input data stream supplies the current particle position
and overrides the existing X,Y and Z-axis spinners.
Operator Outputs
No Operator Outputs.
Rollout Menu
Position - Use the X, Y and Z-axis spinners to set the positional information for
the particles.
Variation - The variation spinner provides an "offset" value for particle
placement. It is important to note that this value affects all three axes equally,
even if one or more of them is set to 0.0. So if you have all of your Position
spinners set to 0.0 and have a Variation value of 10.0 - particles will be placed
randomly in a 10x10x10 area surrounding the origin.
Replace - When this option is chosen, the particle's position is taken from the
Position input data stream and the spinners' values are not used.
Added - If you choose this option, the position data specified within this
operator is added to the existing position for the particles. So, if you have a
Position Born operator generating particles into a group at XYZ=10,10,0, and
you set up a second DynamicSet to input the group's particles into this Position
Operator with XYZ =0,10,0 and Added turned on, that the position for the
particles would then be 10,20.0.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Scale Operator
The Scale Operator is used to conditionally scale particles in an animation. You
have the option to use a uniform scale for the particles (or instanced objects) or
you may want to use a non-uniform scale with the XYZ values.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have its scale adjusted. The data stream MUST be connected and
will be highlighted yellow if it is not.
Scale Factor - (Scalar) This input data stream is used to override the Scale [%]
spinner in the Scale rollout.
Variation - (Scalar) This input data stream is used to override the Variation [%]
spinner in the Scale rollout.
X / Y / Z Scale - (Scalar) These input data streams are used to override the
X/Y/Z-Scale [%] spinners in the Scale rollout.
Operator Outputs
No Operator Outputs.
Rollout Menu
Scale [%] - Use this spinner to set the scale of the selected particles by a certain
percentage. A value of 100% will not alter the current scale of the particles.
Lower values will effectively shrink the particles, while larger values will
enlarge the particles.
Variation [%] - In order to avoid having all particles with the exact same scale,
increase the Variation percentage value to create more randomization in the
scales between particles.
X / Y / Z Scale [%] - To get non-uniform scaling along all three axes for the
selected particle group, use any or all of the axis scale parameters.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Set Alignment Operator
The Set Alignment Operator is used to place a selected particle into a specific
alignment at the point it receives a true ON condition. This is a handy way of realigning particles within an animation.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to be used as the source for the alignment adjustment. This data
stream MUST be connected and will be highlighted yellow if it is not.
Alignment - (Alignment) This input data stream reads in a matrix value for the
alignment of the particle and is used to override all of the spinners in the rollout.
UI Overwrite - those inputs are identical with those found in the rollout menu.
When an input is connected the relevant UI control value is ignored.
Operator Outputs
No Operator Output
Rollout Menu
Rotation [*] X/ Y/ Z - The three rotational axis spinners can be used to set the
way in which the particles orient themselves over time.
Variation [*] X/ Y/ Z - These three spinners can be used to add a bit of random
rotational variance to your particles.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Size Operator
Use the Size Operator to assign any size to a selected particle input data stream.
Keep in mind that this operator is valid as long as the ON input data stream is set
to true, and that by default, the size values applied are immediate, and not
gradual over time.
Operator Inputs
ON - (Bool) This input data stream determines whether the operator is
considered 'on' or 'off'. You can connect other operators to this input channel
such as a Bool Helper to activate/deactivate the whole operator.
Time - (Time) This input data stream is used to define the local time for the
operator when the user wants to override the default system time.
Particle - (Particle) This input data stream reads in the currently selected particle
group that is to have its size adjusted. The data stream MUST be connected and
will be highlighted yellow if it is not.
Size - (Size) This input data stream is used to override the Size spinner in the
Size rollout.
Size Variation - (Scalar) This input data stream is used to override the Variation
% spinner in the Size rollout.
Operator Outputs
No Operator Outputs.
Rollout Menu
Size - Use the Size spinner to set a specific particle size in 3ds Max World units.
Variation % - In order to avoid having all particles with the exact same size,
increase the Variation percentage value to create more randomization in the sizes
between particles.
©2017, cebas Visual Technology Inc.
ThinkingParticles 6.6
Velocity Operator
The Velocity Operator allows conditional speed assignment to be applied to
selected particles based on any other condition or operator result. Be sure to
understand that this oper