Drive
X-Particles is built seamlessly into Cinema 4D like it is part of the application. It’s compatible with the existing particle modifiers, object deformers, Mograph effectors, Hair module, native Thinking Particles, and works with the dynamics system in R14 and later.
Project Goal and Concept:
To create a cutting-edge particle system for Cinema 4D that surpasses the capabilities of Insydium X-Particles, offering a more intuitive, powerful, and versatile solution for artists and designers.
Our general goals with the new simulation features in Cinema 4D will also apply to the new particle system:
- Good performance by simulating on the GPU
- Bidirectional interaction with other simulation types
- Easy to use and quick to set up.
Target Audience:
Motion Graphics Artists: Professionals creating dynamic, visually stunning animations.
VFX Artists: Specialists working on visual effects for films, games, and commercials.
Architectural and Automotive Visualization: Designers using particles to enhance architectural renderings.
We present our new approach toward particle simulation as part of our Unified Simulation Framework.
The new approach aims to bring Cinema 4D’s particle simulation capabilities up to speed with the current Simulation framework efforts, with focus on simplicity, ease of use, and readability.
The fusion of artistic workflow and technical rigor in particle system aerodynamics offers a powerful paradigm for creating visually stunning and scientifically accurate simulations. By leveraging the strengths of both disciplines, we can achieve a level of realism and expressiveness that is unparalleled in traditional simulation methods.
Particles Design WORKSHOP
Workflow
With the new approach, the Object Manager is viewed as a simple logic tree that describes a setup, each object in the hierarchy is viewed as an instruction. The tree is parsed and the instructions are executed in depth first order from top to bottom.
Object and Hierarchy Overview
There are 4 main types of objects/instructions:
Emitters: Instruct how particles should spawn.
CRITICAL NOTE: Unlike other emitter objects in Cinema, the FP Emitters DO NOT OWN the particles that are emitted.
CRITICAL NOTE: Unlike other emitter objects in Cinema, the FP Emitters DO NOT OWN the particles that are emitted.
Conditions: Provides a way to query the particle properties e.g. Velocity, Age, Group, etc. using basic comparison expressions.
Groups: A dual purpose object.
First, the Group objects owns the emitted particles associated with it, it is implemented as a Point Object and so it can be used with any generator or deformers in Cinema that accepts Point/Particle objects as input.
Second, its role in the hierarchy doubles as a specialised Condition object that only allows particles associated with it to be affected by modifiers nested in it. Note: In this document and in general, when we refer to Condition Objects, we refer to Group Objects as well.
First, the Group objects owns the emitted particles associated with it, it is implemented as a Point Object and so it can be used with any generator or deformers in Cinema that accepts Point/Particle objects as input.
Second, its role in the hierarchy doubles as a specialised Condition object that only allows particles associated with it to be affected by modifiers nested in it. Note: In this document and in general, when we refer to Condition Objects, we refer to Group Objects as well.
Modifiers: Modify the particle properties e.g. Position, Velocity, Radius, etc.
Nesting Modifiers under Conditions means that the nested modifiers are applied only to particles with properties that fulfil the conditions.
Nesting Conditions under other Conditions means that the conditions are combined into a single expression(based on user specified settings).
Nesting Groups under other Groups the only particles from the child group are affected by modifiers nested under the child group.
Nesting other types of instructions has no effect on the logic, the order of depth first top to bottom execution remains. i.e. it is possible to nest Emitters under Modifiers, Modifiers under Emitters, Conditions under Modifiers, Conditions under Emitters etc. etc.
Multiple Simulation Setups
It’s possible to separate and run multiple setups by nesting the fp objects under different Simulation Scene objects.
Particle systems
Emitters:
Note: The FP Shape Emitter object emits unconditionally, even if nested under conditions, it is still executed regardless of the results of the condition.
Note: The FP Shape Emitter object emits unconditionally, even if nested under conditions, it is still executed regardless of the results of the condition.
FP Shape Emitter:
The Standard FP Shape Emitter provides Basic emission options to emit from Basic Shapes or linked Geometry and initial property options.
Tips:
The Standard FP Shape Emitter provides Basic emission options to emit from Basic Shapes or linked Geometry and initial property options.
Tips:
Creating an FP Emitter automatically creates an Fp Group object and links it to the emitter.
While an FP Emitter is selected and its Group link is not populated, creating an FP Group object automatically assigns it to the emitter.
Geometry Emitters:
Geometry emitters can link a Geometry object as an emission source and provide extended emission options specific to the geometry type and options to use vertex maps and vertex colors.
Geometry emitters can link a Geometry object as an emission source and provide extended emission options specific to the geometry type and options to use vertex maps and vertex colors.
fp Mesh Emitter
fp Spline Emitter
fp Reproduce
Reproduces particles at the positions of existing particles(referred to as Source Particles) and provides options to inherit properties from Source Particles.
Reproduces particles at the positions of existing particles(referred to as Source Particles) and provides options to inherit properties from Source Particles.
Caution: this object can easily overload your scene since it can and will use particles it had previously emitted as sources in the next simulation step. Make sure to apply sufficient masking to avoid particle count explosion.
Conditions:
Nested condition objects can be combined using different boolean operators.
Nested condition objects can be combined using different boolean operators.
fp Condition
Provides options to query particle properties and use them in conditions to create a mask for modifiers.
Provides options to query particle properties and use them in conditions to create a mask for modifiers.
Note: For floating point comparisons, a default epsilon value of 0.001 is used.
Note: For spatial properties(Distance Traversed, Position, Radius and Velocity) the unit used is the project’s unit.
Note: For spatial properties(Distance Traversed, Position, Radius and Velocity) the unit used is the project’s unit.
fp Field Condition
Samples the particle position in a field list and compares the value with a threshold to create the mask. A value higher than the threshold will activate the mask for that particle.
Samples the particle position in a field list and compares the value with a threshold to create the mask. A value higher than the threshold will activate the mask for that particle.
fp Time Condition
Provides modes to query the current simulation scene time as well as a Pulse mode.
Provides modes to query the current simulation scene time as well as a Pulse mode.
Groups:
fp Group
Point Object the owns the particles associated with this Group. As a Point Object, can be used as input for any Generator in Cinema that accepts Point/Particle Objects.
In the logic tree, the fp Group instruction doubles as a specialised Condition object that asks if a particle is associated with this group.
Point Object the owns the particles associated with this Group. As a Point Object, can be used as input for any Generator in Cinema that accepts Point/Particle Objects.
In the logic tree, the fp Group instruction doubles as a specialised Condition object that asks if a particle is associated with this group.
fp Multi Group
Merges fp Group objects into a single Point Object.
In the logic tree, the fp Multi Group instruction doubles as a specialised Condition object that asks if a particle is associated with any of the groups listed in it.
Merges fp Group objects into a single Point Object.
In the logic tree, the fp Multi Group instruction doubles as a specialised Condition object that asks if a particle is associated with any of the groups listed in it.
Modifiers:
Forces
All Forces under Simulate > Forces
fp Math
Provides low level direct manipulation of particle properties.
Provides low level direct manipulation of particle properties.
fp Kill
Kills particles.
Kills particles.
fp Pyro
Uses Pyro simulation available in the scene to influence the motion of the particles.
Uses Pyro simulation available in the scene to influence the motion of the particles.
fp Color Mapper
Maps properties to a color gradient.
The value used for the gradient is a [0, 1] pos value calculated from pos = (in - lower) / (upper - lower) and then clamped
Maps properties to a color gradient.
The value used for the gradient is a [0, 1] pos value calculated from pos = (in - lower) / (upper - lower) and then clamped
fp Data Mapper
Maps properties to other properties.
Maps properties to other properties.
fp Look
Turns the Forward vector of the particle’s Alignment attribute.
Turns the Forward vector of the particle’s Alignment attribute.
fp Spin
Modifies the Angular Velocity of the particle.
Modifies the Angular Velocity of the particle.
fp Turn
Turns the particle’s Velocity Direction.
Turns the particle’s Velocity Direction.
fp Switch Group
Switches the Group ID of the particles.
Switches the Group ID of the particles.
Proximity-based Modifiers:
fp Flock
Enables flocking behaviour to the particles.
Flocking motion is modelled using 3 attributes
Enables flocking behaviour to the particles.
Flocking motion is modelled using 3 attributes
Cohesion: Influences particles to move toward the geometric centre of their surrounding particles
Separation: Influences particles to be repelled from their surrounding particles
Alignment: Influences particles to align their direction to the average direction of their surrounding particles.
fp Blend
Blends attributes depending on particle-particle distance.
Blends attributes depending on particle-particle distance.
fp Stick
Handles everything stick related on collision
Handles everything stick related on collision
fp Collide
Detects collisions and provides modes to handle them.
Note: For now it only considers the position of the geometry and no additional influences like its velocity.
Note: The difference between repel and collide is mainly that avoid does not use a raycast to determine a “force” but rather when its distance is smaller than the radius.
Detects collisions and provides modes to handle them.
Note: For now it only considers the position of the geometry and no additional influences like its velocity.
Note: The difference between repel and collide is mainly that avoid does not use a raycast to determine a “force” but rather when its distance is smaller than the radius.
fp Surface Attractor
Attracts Particles to a Surface once within specified radius.
Note: For now it only considers the position of the geometry and no additional influences like its velocity
Attracts Particles to a Surface once within specified radius.
Note: For now it only considers the position of the geometry and no additional influences like its velocity
fp Predator Prey
Enables Predator-Prey behaviour to the motion of the particles.
Enables Predator-Prey behaviour to the motion of the particles.
Feedback Cycle II
Refining Information Architecture, UX Flow, and UI
Building upon the initial design and user feedback, the second cycle of development will focus on:
1. Information Architecture Refinement
Taxonomy Optimization: Re-evaluate the taxonomy of particle system components to ensure a more intuitive and logical organization.
Grouping and Labeling: Refine the grouping and labeling of elements to improve clarity and discoverability.
Search Functionality: Implement a robust search feature to help users quickly find specific components or settings.
2. UX Flow Enhancement
Task Analysis: Conduct a detailed task analysis to identify common user workflows and potential pain points.
Navigation Improvements: Optimize navigation paths to guide users efficiently through the particle creation process.
Onboarding and Tutorials: Create effective onboarding and tutorial materials to help new users get started quickly.
3. UI Iterations
Visual Consistency: Ensure consistent visual elements and styles throughout the UI.
Accessibility: Prioritize accessibility by adhering to WCAG guidelines and providing alternative text for visual elements.
Responsive Design: Design the UI to be responsive and adaptable to different screen sizes and devices.
Microinteractions: Incorporate subtle animations and feedback to enhance the user experience.
Key areas for improvement:
Conditional Logic: Simplify the interface for creating and managing complex conditional logic.
Particle Presets: Expand the library of pre-built particle presets to cover a wider range of use cases.
Performance Optimization: Optimize the UI and underlying code for better performance, especially when dealing with large particle systems.
Basic Emitter AM&OM
Mesh Emitter
Reproduce
Spline Emitter
Flow of Data
Here we’ll outline how information and data is passed between Cinema and the Simulation Engine during the simulation of a frame:
The Logic Tree in the Object Manager, as composed by the user, is parsed by Cinema and handed to the Simulation Engine along with other Simulation Scene related settings.
The Simulation Engine flattens the Tree and populates a Pipeline of Commands to execute. This step might be required to be repeated if certain changes to the logic tree structure happen during simulation runtime.
Execution of the pipeline begins, each Command in the pipeline is executed in sequential order.
Emission commands generate the Particle Data.
Condition commands query the data and set the Bit Mask of the associated Condition Object.
Modifier commands modify the properties of particles whose entries in the Bit Mask of the closest Condition Object ancestor are 1.
The simulated particles are retrieved from the Simulation Device and are then handed to Cinema where they’re synced to their respective fp Groups.
Note: Upon execution of Emission commands, a resize of the particle data buffers might be required. The buffer sizes(size corresponds to the particle count) are always a Power of 2, with a minimum Initial Capacity of 256. When the next emission will cause in an exceed in the buffer’s capacity, the buffer is reallocated and doubled in capacity to the Next Power of 2. This action might introduce small performance hiccups during simulation runtime.
Note: At the end of each frame, a criteria is checked, if the number of dead particles exceeds a user specified percentage(Simulation Scene > FP > Compactly Threshold) of the total number of particles, and the total particle count is at least 1024, a compactly command is executed that erases dead particles out of the memory.
Aerodynamic
Metrics and Key takeaways
During development of the new particle system we often found ourselves asking what exactly modifiers should do. Unlike in for example most modeling operation there often isn't a "correct" way of doing things in a particle modifier. A good example are the modifiers interacting with surfaces or splines. The particles should somehow react to the presence of the geo, but how they should respond exactly is debatable and depends on the use case. We often ended up creating several different modes to cover more use cases, but that makes the UI more complicated and cluttered and is still not covering all the conceivable use cases. A node based workflow would allow any user with an analytical mindset and bit of math skill to decide what exactly should happen in that case.
Overall we are happy with the OM based workflow and logic of the particle system and feel this should remain as is. Instead of recreating all aspects of a particle system in nodes, we decided to go with a solution that is embedded in the OM workflow and only requires nodes in cases that can't be solved through existing elements of the particle system
The Particle Nodes Modifier is the result of this thought process.