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 operator is conditional. An AlwaysTrue condtion connected to the ON input data stream of this operator for example, means that the particle speed will be always set by this operator. You would then not be able to change the speed of the particles regardless of any Space Warp or other 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 that is to have its speed adjusted. 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 selected particle group's position data and can be used to define the direction for the velocity. A vector is drawn from the current position to the value that is piped in here. The end result is that this connection can act as a directional vector. Velocity - (Velocity) This input data stream reads in a value to apply as a combined speed + direction setting. Inputting a value into this data stream overrides the Speed and/or Direction input data streams. Be aware that the value piped in is dependent upon the selected Type of control. If only Speed is selected, only the speed part will be taken into account. The same is true when only Direction or Direction & Speed are selected. Type - (Integer) This input data stream takes an integer value that represents the Type of Velocity method the particles will use. Valid input values are 0 through 2, where: 0 = Speed & Direction 1 = Speed 2 = Direction Speed - (Speed) This input data stream is used to override the Speed spinner within the Velocity rollout. Speed Variation - (Scalar) This input data stream is used to override the Variation % spinner within the Velocity rollout. Direction - (Direction) This input data stream is used to override the User Direction Axis spinners within the Velocity rollout. Direction Variation - (Angle) This input data stream is used to override the Variation Angle spinner within the Velocity rollout. Evaluation Type - (Integer) This input data stream takes an integer value that represents the Type of Evaluation method the particles will use. Valid input values are 0 through 2, where: 0 = Replace 1 = Multiply 2 = Added Per Second - (Bool) This input data stream determines whether the Per Second checkbox within the Velocity rollout 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. Operator Outputs No Operator Outputs. Rollout Menu Control: Speed & Direction - Select this radio button to set the Speed and Direction of the selected particle group (as piped in through the Particle input data stream). When the operator affects the selected particles, both the speed of the particles and the direction they are travelling is changed to match the settings within this rollout. Speed - Select this radio button to set the Speed of the selected particle group only. When the operator affects the selected particles, just the speed of the particles is changed to match the settings within this rollout. Direction - Select this radio button to set the Direction of the selected particle group only. When the operator affects the selected particles, just the direction of travel of the particles is changed to match the settings within this rollout. No speed change is applied. Speed - This parameter sets the new speed of the selected particles connected to the input data stream. Be aware that the speed is set to this value only when the ON input data stream of this operator receives a True value from another operator or condition. Variation % - Increase this spinner value to add variation to the speed of the particles. Higher percentage values make more particles move at different speeds. User Direction Axis - The X,Y and Z spinners define a directional vector in 3D World space. A value of X/Y/Z = 0,0,1 points "up" from the ground plane, while X/Y/Z = 1,0,0 heads to the right while X/Y/Z = 0,1,0 points "into" the screen. Variation Angle - Increase this parameter to cause the selected particles' trajectories to be randomized. Higher variation angle values force the particles to deviate from their original trajectory based on the angle set. So a value of 45 means that a particle's path will be altered by up to 45 degrees when the Velocity operator becomes active. Velocity Application The Velocity operator has two special input data streams, Direction and Velocity. Any condition or operator may modify these inputs based on various rules. One example would be that one operator changes the speed of a particle group based on the distance to an object in the scene. Any value available at the Velocity or Direction data stream may replace the relevant value of the operator, multiply the relevant value or add to the relevant value. Replace - Choosing this option completely replaces the velocity (and/or direction when that option is chosen) for the particles. Multiply - Choosing this option takes the existing velocity data, and multiplies it by the new speed value. So if your particles original velocity was set to 2.0, and the Velocity operator's Speed setting was 5.0, the resulting Velocity would be 10.0. Added - Choosing this option takes the existing velocity data, and adds it to the new speed value. So if your particles original velocity was set to 2.0, and the Velocity operator's Speed setting was 5.0, the resulting Velocity would be 7.0. Per Second checkbox - This checkbox is used to accelerate the particles to the velocity given when Added or Multiply is active. Within one second (frame value depends on set frame rate inside of 3ds Max), the particle is accelerated to the value set. ©2017, cebas Visual Technology Inc. ThinkingParticles 6.6 ViewportColor The ViewportColor node allows to assign specific colors to particles in the playback viewport. This color may be either a fixed color or dependent on any value (speed, age). 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. Value - sets the value to be used by the color gradient to lookup the color for the particle. One would usually feed in velocity or age of the particle. Min Value - sets the minimum value for the color gradient (left most color to be used) Max Value - defines the maximum value for the color gradient (right most color) Color - sets one fixed color for the particles in the viewport. Operator Outputs No Operator Outputs. Rollout Menu Color Gradient - sets the color gradient to be used based on the Value input port. Min Value - sets the minimum value for the color gradient (left most color to be used) Max Value - defines the maximum value for the color gradient (right most color) ©2017, cebas Visual Technology Inc. ThinkingParticles 6.6 Collision Map Collision Map is a very special Node that is also used in a unique way. It is the first Tool-Node created for thinkingParticles and its use differs from all other Nodes in thinkingParticles. As a Tool-Node it is meant to act on its own and not in a complex wire network. Collision Map can be used "on its own" or along with Particle groups. What's it for ? This Tool-Node is intended for advanced breaking or demolition effects, it automatically creates animated maps that contain necessary breaking or fragmentation information for further processing with the Fragment-Node. How does it work, what does it do? Collision Map creates automatically animated intersection maps, representing an animated intersection between two or multiple objects. All selected objects are tracked and evaluated against collisions, any collision or intersection will create a gray scale pixel in the map representing the distance of the surface. This gray scale map can then easily be used as a fragmentation map. It is also important to note, that this is a static effect, this means if your animation changes the collision map needs to be re-recorded 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. Operator Outputs No Operator Outputs. Rollout Menu Pick Object - Click this button to activate the object picking mode that allows to pick one or multiple objects in the 3ds max view port. Important When you pick more than one object, the first in the list of objects will become the one object that receives the collision map! All other objects below will collide with the first in the list to create the collision map. Rem - press this button to remove the selected object from the list of objects Select Record File - brings up a standard save dialog that lets you choose a file name for the collision map. Keep in mind that this is a sequence of files or a movie file. Important: The collision map will be renamed automatically! An ID number will be added to the name you have supplied, when you create a collision map for a Cube object for example, multiple collision maps will be created. Each face ID will create a collision map on its own, resulting in 6 individual movie files or image sequences all named like filename_id1, filename_id2 and so on. Active Time Segment - choose this option to use the 3ds max time line for recording the collision map. Range - check this option, to use a custom time line range. The first value indicates the start frame that will be used for recording the collision map. To - sets the end frame for the collision map recording Sub Samples - increase this value to raise the accuracy when tracking collisions Material ID - 0 sets the material ID that should be used to create the collision map for. A value of 0 will automatically create collision maps for all available material IDs. UV Channel - sets the UV channel to create a collision map Scan Depth - sets the ray length to search for possible object collisions on all surfaces of the object Map Width - sets the width of the collision map in pixels Map Height - specifies the height of the collision map in pixels Automatic Record Render - choose this option, to automatically re-create the collision maps before rendering starts. Blow Up Group of Controls On - check this option to create a special blow up collision map that increases automatically in size over time. Speed - sets the speed in pixels that should be used to radially extend the collision point/area. The end result will always be a pure white map and when used with the Fragment node, it will mean total fragmentation of the object. Wetmap Mode On - check this option to use a special highly optimized particle point mode collision map method. Fade In - sets the amount of fade in for the wet map. This time is set in Frames! Fade Out - defines the amount of fade out time for the wet map drying. This time is set in Frames! ©2017, cebas Visual Technology Inc. ThinkingParticles 6.6 VolumeActivate Operator This operator represents a new "breed" of operators in thinkingParticles enhancing the overall way of how thinkingParticles works internally. For the first time it is possible within thinkingParticles to reach and feed another operator with data across DynamicSets! In this special case, the VolumeActivate operator is able to replace and overwrite the activation data of any VolumeBreak operator in a thinkingParticles setup which makes it possible to supply multiple "points of impact" to one VolumeBreak operator for example. In simple terms, this operator allows you to control when, where and how a particle is fragmented when involved with a VolumeBreak operator. Note that this operator requires the existence of a VolumeBreak operator, and is used to tell that VolumeBreak operator where to activate the VB fragments (via the Position input), how "far" into that particle shape volume to activate (via Initial Length), how fast to activate to that length (via Spreading Second), as well as what Position Type (World, Object, Normalized). 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 - inputs the particle ID of the particle group with a volumeBreak operator applied. Position - sets the breaking position for a specific volumeBreak operator, the position can either be set in World Space, Object Space or Normalized to the bounding box of the object. Initial Length - sets the starting length of the volumeBreak effect, this length is "centered" at the position as defined above. This tells VB how "far" into the particle shape volume to activate the VB fragments. Spreading Length - defines the maximum extent of the fragmentation starting from the position set in the above described parameter. Spreading Second - sets the total time needed to release all fragments. This can be used to simulate a shock wave running through an object. This value is in seconds. Position Type - sets the way the position is supplied. It can be either of the below options: 0 = World 1 = Object 3 = Normalized Operator Outputs This operator has no outputs. Rollout Menus VolumeBreak - sets the VolumeBreak operator that should be affected by this VolumeActivate. The drop down menu lists all available VolumeBreak operators so make sure the right one is selected. Input Position - defines the format of the Position that is supplied to this operator. As shown below, several options exist. Feeding in a start position to this operator can be done in multiple formats. The position may be supplied as world space X,Y,Z values or they may be in object space or even normalized to a 1,1,1 box relative to the object. ©2017, cebas Visual Technology Inc. ThinkingParticles 6.6 VolumeBreak Operator The volumeBreak operator is a volumetric geometry fracturing tool, based on volumeBreaker, that will instantly create sub-geometry within any mesh geometry that perfectly fits together and fills the given volume. With volumeBreaker cebas brings a Hollywood-quality destruction tool to 3ds Max. volumeBreaker was developed in consultation with, and to meet the very exacting demands of, VFX artists working on multi-million-dollar movies. volumeBreak can be applied to virtually any mesh, including meshes that are 'lazy' and not a fully enclosed volume. volumeBreaker will attempt to compensate for any errors within the mesh, such as unwelded vertices and open edges. The sub-geometry created is output as individual "fragment" particles, accessible within thinkingParticles by any available 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. For example, if you set this operator's Activation parameter to 100% and control the ON input dynamically, you can instantly fragment a particle shape at that time. 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 inputs are the equivalent of their User Interface controls. Operator Outputs Born Particle - outputs the currently created particle information for the fragment particle. Use this to modify specific particle properties. Rollout Menus Group - sets the particle group in which the fragment particles are born. Activate - defines how fragmented the particle shape will be. 100% means completely fragmented. 0% means no fragmentation. Usually you would want to animate this amount. This can be done dynamically in a variety of ways, including but not limited to the Timer operator or the Counter operator (or even a simple animated Float helper). From To - sets the method and order of releasing fragments. You may choose from multiple "release" directions for the fragments. Keep in mind that volumeBreaker is all about "volume" and this means fragments are created inside of an object and so the release direction plays an important role! Check out the options as shown below: Max Recursion - defines the maximum recursion depth for secondary breaking of an already broken object. The higher this number the finer it will be broken. Be aware that just a few recursions may create millions or even billions of triangles! Use Light - when checked, illumination strength of picked light sources can be used to define the Hierarchical breaking of an object. Threshold - defines the illumination level (brightness) that needs to be present at the point to initiate a fragmentation of the FGroup. Note that this brightness is tested at the center of VB cell. Pick - lets you pick any light in the scene Rem - removes the selected light form the list of lights Use Helper - check this option to use any Helper object in the scene to trigger a Fragmentation Threshold - sets the "trigger" distance for the helper object. This world space value sets the absolute distance at which the fragmentation process should start. Again, this distance is tested from the center of the VB cell (i.e. the VB fragment). Group - choose a particle group to activate fragments. Note: The particle size is multiplied with the helper threshold value to allow ofr more distance control per particle. Pick - click this button to add scene object to the list of fragmentation triggers. Rem - click this button to remove the selected helper object from the list of fragmentation trigger helpers. Use Map - when checked a texture map is used to initiate the breaking off from a FGroup. Threshold - 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. Spreading Group Of Controls Size% - a radius set in world units, relative to the bounding box of the object. Using this feature will create a progressive "breaking" effect of an object. This "search" or affect radius is increased in size over time (controlled by Spreading Time) it's 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)! Max Neighbor Distance % - if the distance (center-center) to the next fragment is greater than this percentage of the bounding box of the object fragments will not be released. Spreading will be stopped. Time - defines the time the radius needs to grow in size (in frames; standard 3ds Max system time). 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 as this: the left hand side of the gradient represents radius size 0 the right hand side represents size 100%. A Spreading Time value of 30 frames will look "into" this gradient 30 times (30 samples). This method of control 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%. Speed - sets the speed the fragments should obtain after they have been released. Variation - adds some r