AdnGlue

AdnGlue is a Maya node that can be used to attach multiple muscles together. This solver uses as input a series of simulated muscles and allows the user to define glue connections between those muscles by using a maximum glue distance value and painted maps.

There are two differentiated modes that this solver can run in:

  • Static. The solver ingests the input geometry data at each simulated frame and computes the glue connections, as well as the distance, shape and volume constraints directly over the point positions of that input geometry data. There is no influence of gravity nor inertia propagated from one frame to the next one.
  • Dynamic. The solver behaves as a standard time-dependent simulation solver where the external forces (i.e. gravity) are integrated to introduce inertia to the system. The input geometries become a target geometry used by the solver to compute soft constraints against. Glue, distance, shape and volume constraints are computed too. By default, the AdnGlue runs in static mode, but there is a boolean attribute exposed to allow switching to dynamic mode.

The maps required to control the AdnGlue solver can be painted using the standard Maya Paint tool.

How To Use

The AdnGlue node can be applied to any set of geometries. For each geometry, their mesh at each frame is gathered and simulated to ensure the original distance between the neighboring geometries. This is achieved by creating attachments between each vertex of a geometry and the closest point on the surface of one of the other geometries (the closest one). More aspects are then computed to ensure that the simulated output preserves the original shape and edge-lengths of the simulated meshes. The output of the node is a mesh that combines all the input geometries together and adds the results of the solver.

To create an AdnGlue node within a Maya scene, the following inputs must be provided:

  • Input Geometries (IG): List of geometries to be simulated and attached together by the glue solver.
NOTE
  • Applying the AdnGlue node will automatically create a new mesh in your scene, which will display the results of the solver.
  • The naming of the new mesh created follows the format "AdnGlue1_GEO".
  • Deleting the AdnGlue node will not delete the created output mesh and vice versa.

The process to create an AdnGlue node is:

  1. Select the Input Geometries.
  2. Press Glue button in the AdonisFX shelf or the Glue action in the AdonisFX’s Solvers menu, under the Create section.
  3. A message in the terminal will notify you that AdnGlue has been created properly, meaning that it is ready to simulate with default settings. Check the next section to customize their configuration.
NOTE
  • By default, no glue connections are created, resulting in the output geometry being identical to the input meshes combined.
  • Check the description of Max Glue Distance attribute and also the paintable maps to control the amount of glue connections to create and the areas where they have to be created.

Attributes

Solver Attributes

Name Type Default Animatable Description
Enable Boolean True Flag to enable or disable the node computation.
Dynamic Boolean False Flag to switch the solver to run in dynamic mode.
Substeps Integer 1 Number of steps that the solver will execute per simulation frame. Greater values mean greater computational cost. Has a range of [1, 10]. The upper limit is soft, higher values can be used. Only available in dynamic mode.
Iterations Integer 3 Number of iterations that the solver will execute per simulation step. Greater values mean greater computational cost. Has a range of [1, 10]. The upper limit is soft, higher values can be used.
Stiffness Float 5000.0 Defines the overall stiffness of the material to be used for the simulation. This value can be later overridden for each different aspect of the solver to fit creative needs.
Volume Preservation Float 0.0 The amount of volume to preserve each simulated input muscle. Has a range of [0.0, 1.0]. The upper limit is soft, higher values can be used.
Bypass Boolean False When set to True, this attribute makes the input geometry pass through the solver without any simulation being applied. The solver does only transfer the input geometries into the output combined mesh. This is very useful if you want to compare results between having and not having the glue simulation performed.

Time Attributes

Name Type Default Animatable Description
Preroll Start Time Time Current frame Sets the frame at which the node initializes.
Current Time Time Current frame Current playback frame.

Scale Attributes

Name Type Default Animatable Description
Time Scale Float 1.0 Sets the scaling factor applied to the simulation time step. Has a range of [0.0, 2.0]. The upper limit is soft, higher values can be used.
Space Scale Float 1.0 Sets the scaling factor applied to the masses and/or the forces (e.g. gravity). AdonisFX interprets the scene units in centimeters. If modeling your creature you apply a scaling factor for whatever reason (e.g. to avoid precision issues in Maya), you will have to adjust for this scaling factor using this attribute. If your character is supposed to be 170 units tall, but you prefer to model it to be 17 units tall, then you will need to set the space scale to a value of 10. This will ensure that your 17 units creature will simulate as if it was 170 units tall. Has a range of [0.0, 2.0]. The upper limit is soft, higher values can be used.
Space Scale Mode Enumerator Masses + Forces Determines if the spatial scaling affects the masses, the forces, or both. The available options are:
  • Masses: The Space Scale only affects masses.
  • Forces: The Space Scale only affects forces.
  • Masses + Forces: The Space Scale affects masses and forces.

Gravity

Name Type Default Animatable Description
Gravity Float 0.0 Sets the magnitude of the gravity acceleration in m/s2. The value is internally converted to cm/s2. Has a range of [0.0, 100.0]. The upper limit is soft, higher values can be used. Only available in dynamic mode.
Gravity Direction Float3 {0.0, -1.0, 0.0} Sets the direction of the gravity acceleration. Vectors introduced do not need to be normalized, but they will get normalized internally. Only available in dynamic mode.

Advanced Settings

Override Constraint Stiffness

Name Type Default Animatable Description
Glue Float -1.0 Sets the stiffness override value for the glue constraints used to attach the muscles to one another. If the value is less than 0.0, the global stiffness will be used. Otherwise, this custom stiffness will override the global stiffness. Has a range of [0.0, 1012]. The upper limit is soft, higher values can be used.
Distance Constraints Float -1.0 Sets the stiffness override value for distance constraints. If the value is less than 0.0, the global stiffness will be used. Otherwise, this custom stiffness will override the global stiffness. Has a range of [0.0, 1012]. The upper limit is soft, higher values can be used.
Soft Constraints Float -1.0 Sets the stiffness override value for soft constraints. If the value is less than 0.0, the global stiffness will be used. Otherwise, this custom stiffness will override the global stiffness. Has a range of [0.0, 1012]. The upper limit is soft, higher values can be used. Only available in dynamic mode.
Shape Preservation Float -1.0 Sets the stiffness override value for the shape preservation constraints. If the value is less than 0.0, the global stiffness will be used. Otherwise, this custom stiffness will override the global stiffness. Has a range of [0.0, 1012]. The upper limit is soft, higher values can be used.
Volume Constraints Float -1.0 Sets the stiffness override value for volume constraints. If the value is less than 0.0, the global stiffness will be used. Otherwise, this custom stiffness will override the global stiffness. Has a range of [0.0, 1012]. The upper limit is soft, higher values can be used.
NOTE

Providing a stiffness override value of 0.0 will disable the computation of that constraint.

Mass Properties

Name Type Default Animatable Description
Point Mass Mode Enumerator By Density Defines how masses should be used in the solver.
  • By Density allows to estimate the mass value by multiplying Density * Area.
  • By Uniform Value allows to set a uniform mass value.
Density Float 1060.0 Sets the density value in kg/m3 to be able to estimate mass values with By Density mode. The value is internally converted to g/cm3. Has a range of [0.001, 106]. Lower and upper limits are soft, lower and higher values can be used.
Global Mass Multiplier Float 1.0 Sets the scaling factor applied to the mass of every point. Has a range of [0.001, 10.0]. Lower and upper limits are soft, lower and higher values can be used.

Dynamic Properties

Name Type Default Animatable Description
Triangulate Mesh Boolean True Use the internally triangulated mesh to build constraints.
Global Damping Multiplier Float 0.0 Sets the scaling factor applied to the global damping of every point. Has a range of [0.0, 1.0]. The upper limit is soft, higher values can be used. Only available in dynamic mode.
Inertia Damper Float 0.0 Sets the linear damping applied to the dynamics of every point. Has a range of [0.0, 1.0]. The upper limit is soft, higher values can be used. Only available in dynamic mode.
Glue Multiplier Float 1.0 Sets the multiplier factor for the weights of the glue constraint. Has a range of [0.0, 2.0]. The upper limit is soft, higher values can be used.
Max Glue Distance Float 0.0 Sets maximum distance at which a vertex has to be from neighbor surfaces to create a glue constraint. Depending on the scale of your creature, higher values might be required to guarantee dense glue connections to be created. Use the debugger to help you define the value that fits your creature the best.
Compression Multiplier Float 1.0 Sets the scaling factor applied to the compression resistance of every point. Has a range of [0.0, 2.0]. The upper limit is soft, higher values can be used.
Stretching Multiplier Float 1.0 Sets the scaling factor applied to the stretching resistance of every point. Has a range of [0.0, 2.0]. The upper limit is soft, higher values can be used.
Attenuation Velocity Factor Float 1.0 Sets the weight of the attenuation applied to the velocities of the simulated vertices driven by the Attenuation Matrix. Has a range of [0.0, 1.0]. The upper limit is soft, higher values can be used. Only available in dynamic mode.
Substeps Interp. Exp. Float 1.0 Sets the exponential factor to weight the interpolation at each substep (only if dynamic is enabled). Has a range of [0.0, 1.0]. The upper limit is soft, higher values can be used. A value of 0.0 disables the interpolation: input geometry targets and attenuation matrix are not interpolated. A value of 1.0 applies linear interpolation (input geometry targets and attenuation matrix) between previous and current frame based on a linear weight, i.e. weight = substep / num_substeps. A value between 0.0 and 1.0 applies exponential interpolation (input geometry targets and attenuation matrix) between previous and current frame based on an exponential weight, i.e. weight = (substep / num_substeps) ^ exponent.

Self Collisions Properties

Name Type Default Animatable Description
Self Collisions Boolean False Toggles the self collisions on and off.
Self Collisions Mode Enumerator Triangle to Triangle Determines the method used for self-collision detection and response.
  • Point to Point: detects and resolves collisions between points only.
  • Triangle to Triangle: detects and resolves collisions between triangles, providing more accurate results for thin meshes but at a higher computational cost.
Self Collisions Iterations Integer 1 Sets the number of iterations for the self-collision correction. Has a range of [1, 10]. The upper limit is soft, higher values can be used.
Thickness Float -1.0 Sets the thickness value for self-collision detection. Points closer than this distance will be considered in self-collision. A value of -1.0 disables thickness for self-collisions. Has a range of [-1.0, 3.0]. The upper limit is soft, higher values can be used.
Min Displacement Float -1.0 Sets the minimum displacement a point must have to be considered for self-collision correction. Below this value, no correction will be applied. A value of -1.0 disables this check. Has a range of [-1.0, 1000.0]. The upper limit is soft, higher values can be used.
Max Displacement Float -1.0 Sets the maximum displacement a point can have to be considered for self-collision correction. Above this value, no correction will be applied. A value of -1.0 disables this check. Has a range of [-1.0, 1000.0]. The upper limit is soft, higher values can be used.
Enable Relax Boolean True Toggles the relaxation process for self collision affected points.
Relax Neighbors Boolean False Sets if the relaxation process for self collisions should also consider the neighboring points that were detected in the self collision corrections.
Relax Iterations Integer 1 Sets the number of iterations to compute for self collision affected points. Smoothing and relaxation are applied in each iteration, while pushing in and pushing out are applied only in the last iteration. Has a range of [0, 20]. The upper limit is soft, higher values can be used.
Relax Weight Float 1.0 Influence of the smoothing and relaxation for self collision affected points. Has a range of [0.0, 1.0].
Relax Smooth Float 0.5 Amount of smoothing to apply for self collision affected points. Has a range of [0.0, 1.0].
Relax Float 0.5 Amount of relaxation to apply for self collision affected points. Has a range of [0.0, 1.0].
Push In Ratio Float 0.0 Amount of correction applied by the push in adjustment for self collision affected points. Has a range of [0.0, 2.0]. The upper limit is soft, higher values can be used.
Push In Threshold Float -1.0 Maximum correction applied by the push in adjustment for self collision affected points. The threshold will be ignored if its value is 0.0 or less. Has a range of [-1.0, 2.0]. The upper limit is soft, higher values can be used.
Push Out Ratio Float 0.0 Amount of correction applied by the push out adjustment for self collision affected points. Has a range of [0.0, 2.0]. The upper limit is soft, higher values can be used.
Push Out Threshold Float -1.0 Maximum correction applied by the push out adjustment for self collision affected points. The threshold will be ignored if its value is 0.0 or less. Has a range of [-1.0, 2.0]. The upper limit is soft, higher values can be used.
Last Substep Only Boolean False If enabled, self-collisions are only computed in the last substep of the simulation.
Last Iteration Only Boolean False If enabled, self-collisions are only computed in the last iteration of each substep.
Point Radius Mode Enumerator Average Edge Determines how the point radius is computed for self-collisions.
  • Uniform Value: uses the uniform value to estimate the radius.
  • Average Edge: uses the average edge length of the connected edges per vertex.
  • Minimum Edge: uses the minimum edge length of the connected edges per vertex.
Point Radius Scale Float 1.0 Sets the scaling factor applied to the point radius. It uses the value directly if the Point Radius Mode is set to Uniform Value. Has a range of [0.0, 3.0]. The upper limit is soft, higher values can be used.
Search Radius Float -1.0 Sets the search radius for the self collision detection. It is used to determine the maximum distance to search for self collisions. If a value lower than 0.0 is used, the search radius will be estimated from the number of steps and the average edge length of the whole mesh. A value greater than 0.0 will represent a search radius in scene units. Has a range of [-1.0, 1.0]. The upper limit is soft, higher values can be used.
Quality Mode Enumerator Quality Sets the quality mode for self-collision detection.
  • Quality is more accurate, recommended for final results.
  • Fast provides higher performance, recommended for preview.
Ignore Rest Intersections Boolean True Ignore self-collision detection and correction for primitives that are intersecting in the rest pose.

Maps

Name Type Default Animatable Description
Maps Remap Mode Enumerator Squared Defines the mode of remapping the painted values of soft and shape preservation constraints. The other paintable maps remain unmodified. Each remap mode applies a function to the input painted values (x) to get the final value used for the simulation (y).
  • Linear: y = x
  • Squared: y = x^2
  • Cubic: y = x^3
  • Square Root: y = x^(1/2)
  • Cube Root: y = x^(1/3)
  • Logarithmic: y = log((exp(1) - 1) * x + 1)

Node Attributes

Name Type Default Animatable Description
Envelope Float 1.0 Specifies the deformation scale factor. Has a range of [0.0, 1.0]. The upper and lower limits are soft, values can be set in a range of [-2.0, 2.0]

Debug Attributes

Name Type Default Animatable Description
Debug Boolean False Enable or Disable the debug functionalities in the viewport for the AdnGlue node.
Feature Enumerator Distance Constraints A list of debuggable features for this node.
  • Distance Constraints: Draw Distance Constraint connections representing the constrained pair of vertices in the simulated mesh.
  • Glue Constraints: Draw Glue connections between every vertex and its closest point on the closest neighbor surface.
  • Self Collisions Volume: For each vertex draw a sphere whose volume depends on the point radius that the vertex has.
  • Shape Preservation: Draw Shape Preservation connections between the vertices adjacent to the vertices with this constraint.
  • Soft Constraints: Draw Soft Constraints connections from the simulated mesh to the target mesh.
  • Acceleration Structure: Draw a bounding box encapsulating all the collision primitives present in the internal acceleration structure used to solve self-collisions at the level specified in the attribute Debug Level Acceleration Structure. If the level set is -1, then all levels are displayed. If the value is greater than the number of levels, then no levels are displayed. Otherwise, only the specified level is displayed.
  • Rest Self Collisions: Draw the edges of the triangles that are intersecting with the mesh at rest.
Width Scale Float 3.0 Modifies the width of all lines.
Color Color Picker Red Selects the line color from a color wheel. Its saturation can be modified using the slider.
Debug Level Accel. Struct. Integer -1 Sets the level of detail to display the acceleration structure for debugging. Has a range of [-1, 10]. The upper limit is soft, higher values can be used.

Attribute Editor Template

glue attribute editor
Figure 1: AdnGlue Attribute Editor.
glue editor advanced settings and debug menu
Figure 2: AdnGlue Attribute Editor (Advanced Settings).
glue editor advanced settings and debug menu
Figure 3: AdnGlue Attribute Editor (Advanced Settings (Self-Collisions), Maps, Node Attributes and Debug menu).

Paintable Weights

In order to provide more artistic control, some key parameters of the AdnGlue solver are exposed as paintable attributes in the node. The Maya paint tool must be used to paint those parameters to ensure that the values satisfy the solver requirements.

Name Default Description
Compression Resistance 1.0 Force to correct the edge lengths if the current length is smaller than the rest length. A higher value represents higher correction.
  • Tip: To optimize the painting of the weight, flood it to 1.0 as a starting point and tweak some areas later on.
  • Tip: Reducing the value of the weight in some areas will contribute to reduce wrinkling effect.
Global Damping 1.0 Set global damping per vertex in the simulated mesh. The greater the value per vertex is the more it will attempt to retain its previous position. Only available in dynamic mode.
Glue Resistance 1.0 Force to preserve the distance to the closest point on the closest neighbor surface. A higher value represents higher correction.
  • Tip: Paint a value of 0.0 in those areas where the gluing effect is not needed and it will increase the performance.
Mass 1.0 Multiplier to the individual mass values per vertex.
Max Glue Distance Multiplier 1.0 Multiplier to the individual values of the max glue distance per vertex.
  • Tip: Paint a value of 0.0 in those areas where the gluing effect is not needed and it will increase the performance.
Self Collision Point Radius Multiplier 1.0 Multiply the point radius of each vertex.
  • Tip: Paint with a value of 0.0 the areas that should not compute self collisions to reduce the computational impact.
Self Collision Thickness Multiplier 1.0 Multiply the Thickness of each vertex.
  • Tip: Paint with a value of 0.0 the areas to ignore the thickness for the intersections detection process; and with a value greater than 0.0 the areas to push along the direction of the normals for the intersections detection process.
Self Collision Weights 1.0 Amount of correction to apply to the current vertex when a collision with another vertex is detected.
  • Tip: Paint with a value of 0.0 the areas that should not compute self collisions to reduce the computational impact.
  • Tip: Paint with a higher value the areas that should receive more correction due to self-intersections, and with a lower value the areas that should receive less correction.
Shape Preservation 1.0 Amount of correction to apply to a vertex to maintain the initial state of the shape formed with the surrounding vertices.
Soft Constraints 1.0 Weight to modulate the correction applied to the vertices to keep them at a constant distance to the corresponding vertex on the input geometries at initialization. These constraint weights will allow the glued geometry to follow the input geometries in dynamic mode. Only available in dynamic mode.
Stretching Resistance 1.0 Force to correct the edge lengths if the current length is greater than the rest length. A higher value represents higher correction.
  • Tip: To optimize the painting of the weight, flood it to 1.0 as a starting point and tweak some areas later on.
  • Tip: Smooth the borders by using the Smooth and Flood combination to make sure that there are no discontinuities in the weights map. This will help the simulation to not produce sharp differences in the dynamics of every vertex compared to its connected vertices.
AdnGlue weights
Figure 4: Example of painted weights on the glue layer: on the left the map is flooded to 1.0 used for compression, stretching, glue resistance, global damping, mass, max glue distance multiplier, shape preservation and soft constraints; in the middle the front view of the self-collisions weights map; on the right the back view of the self-collisions weights map.
NOTE

In case you are experiencing issues trying to paint weights on the AdnGlue output geometry, find in the limitations section a proposed workaround.

Debugger

In order to better visualize node constraints and attributes in the Maya viewport there is the option to enable the debugger, found in the dropdown menu labeled Debug in the Attribute Editor.

To enable the debugger the Debug checkbox must be marked. To select the specific feature you would like to visualize, choose it from the list provided in Features. The features that can be visualized with the debugger in the AdnGlue node are:

  • Distance Constraints: For each pair of vertices forming a constraint a line will be drawn. If the Triangulate Mesh option is disabled the debugged lines will align with the edges of the mesh polygons. If the Triangulate Mesh option is enabled the debugged lines will align with the edges of the underlying triangulation of the mesh.
  • Glue Constraint: A line will be drawn for every vertex to the closest point on the closest neighbor surface.
  • Self Collisions Volume: For each vertex, a sphere will be drawn representing the volume that will collide if its Self Collision Point Radius Multiplier weight and the Point Radius Scale are greater than 0.0.
  • Shape Preservation: For each vertex with a shape preservation weight greater than 0.0, a line will be drawn from each adjacent vertex to the opposite adjacent vertex.
  • Soft Constraints: For each vertex, a line will be drawn from the simulated mesh vertex to the corresponding point on the target mesh if its Soft Constraints weight is greater than 0.0.
  • Acceleration Structure: For each level in the acceleration structure used to solve self-collisions, display a box representing the bounding box encapsulating all the collision primitives in that level. If the value of Debug Level Acceleration Structure is -1, then all levels are displayed. Otherwise, only the specified level is displayed. If the value is greater than the number of levels, then no levels are displayed.
  • Rest Self Collisions: For each triangle intersecting with the mesh at rest, the 3 edges of the triangle are displayed.
AdnGlue debug
Figure 5: AdnGlue debug features. From left to right: Glue Constraints, Distance Constraints and Self-Collisions Volumes.

Advanced

Inputs

Once the AdnGlue node is created, it is possible to add new inputs and remove currently connected ones.

  • Add inputs:
    1. Select one or more mesh nodes to be assigned as inputs to the AdnGlue.
    2. Select the AdnGlue output mesh.
    3. Press Add Inputs in the AdonisFX menu from the Edit Glue submenu.
  • Remove inputs:
    1. Select one or more mesh nodes that are assigned as inputs to the AdnGlue.
    2. Select the AdnGlue output mesh.
    3. Press Remove Inputs in the AdonisFX menu from the Edit Glue submenu.
    4. Alternatively, if only the AdnGlue output mesh is selected, when pressing the Remove Inputs button, all inputs will be removed.
NOTE

Adding and removing inputs will automatically update the painted maps. Undoing the removal of inputs does not restore the previously painted values for the restored inputs. The painted values are set to the default value.

Limitations

After creating the AdnGlue node, it may be possible to smoothen out the resulting geometry (generally called AdnGlue1_GEO). This can be done using an AdnRelax node or any other deformer to reduce artifacts (like deltaMush). In such cases, painting the AdnGlue weights on the output geometry using Maya's paint tool may not be possible. Here is a workaround to enable painting AdnGlue weights again:

  1. Create a cube from the Poly Modelling shelf (remove the polyCube node and keep only pCubeShape1).
  2. Using a script or the node editor, connect AdnGlue1.outputMesh to pCubeShape1.inMesh
  3. Using a script or the node editor, connect pCubeShape1.outMesh to AdnGlue1_GEOShapeOrig.inMesh (the original mesh created by Maya after applying AdnRelax, for example).
  4. To paint AdnGlue weights, select the pCube and follow the standard Maya procedure for painting weights. To paint AdnRelax weights, select the AdnGlue1_GEO and follow the same procedure.
Inbibo Logo

consultancy, automation and digital creatures

65 Compton Street, London, United Kingdom, EC1V 0BN

info@inbibo.co.uk

Information

Products

© 2026 Inbibo LTD. - All rights reserved - Design & Development: def:studio