[vc_row bg_color=”#ffffff” text_color=”dark” ][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”2″][/vc_column][/vc_row][vc_row bg_color=”#c4c4c4″ top_padding=”5″ bottom_padding=”10″ text_color=”dark” bg_image=”3205″ bg_repeat=”stretch” ][vc_column width=”1/1″ text_align=”left” text_color=”dark”]

Advanced Skinning

Maya Rigging

[/vc_column][/vc_row][vc_row bg_color=”#000000″ text_color=”dark” ][vc_column width=”1/1″ text_align=”left” text_color=”dark”][/vc_column][/vc_row][vc_row bg_color=”#ededed” top_padding=”30″ bottom_padding=”30″ text_color=”dark” ][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_alert type=”info” close=”true”]Please Note that this page is depreciated and is not supported in the C3dC Subscription[/minti_alert]

This page will show how we can use more advanced features and scripts to speed up our skinning.
The main tools I use are

– TF Skin Smooth
– Skin Wrangler (which now replaces the max skin weights tool on the vids in this page)

NG Skin Tools is another notable plugin, but I do not have videos for it yet.

See the other pages for the more traditional Maya tools and there’s another page with workflow on how to skin a face.
[minti_spacer height=”13″][/vc_column][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_iconbox icon=”fa-list-ul” style=”1″ iconcolor=”accent” title=”Contents (1:01 hrs)”]

1.1 – Basic Skinning That Works
2.1 – Space Between Pivots
3.1 – Geodesic and Heat
3.2 – Heat/Geodesic Issues
4.1 – Max Skin Weights
5.1 – Mirroring
6.1 – Updating Topology
7.1 – The Magic Skin Tool
8.1 – Lores to Hires
9.1 – Export/Import

[/minti_iconbox][minti_iconbox icon=”fa-pencil” style=”1″ iconcolor=”accent” title=”Instructor”]

Andrew Silke

[/minti_iconbox][minti_iconbox icon=”fa-wrench” style=”1″ iconcolor=”accent” title=”Tools”]

Skin Wrangler
Braverabbit Import Export Skin Tool
Max Tool (old)
Select Influence Joints
TF Skin Smooth

[/minti_iconbox][minti_iconbox icon=”fa-calendar-o” style=”1″ iconcolor=”accent” title=”Last Updated”]

October 2015

[/minti_iconbox][/vc_column][/vc_row][vc_row bg_color=”#ffffff” text_color=”dark” ][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”30″][minti_title align=”left”]1. Basic Skinning That Works (2:29 mins)[/minti_title][vc_column_text]Lets start with a simple skin setup that works, then explore the more advanced features.

Smooth Bind options are as follows…
1. Reset Settings
2. Bind To: Selected Joints
3. Max Influences: 3 (or 4 if your preference)

[/vc_column_text][minti_spacer height=”0″][/vc_column][/vc_row][wpanchor id=”1.1″][vc_row bg_color=”#ffffff” text_color=”dark” ][minti_toggle title=”VIDEO 1.1 : BASIC SKINNING THAT WORKS (2:29 mins)” open=”false” icon=”fa-film”][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”15″]

[/vc_column][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][minti_table style=”2″]

Information
Basic Skinning That Works
Here’s the basic skin settings that will work for all characters. See the next section for helping with a more advanced workflow as sometimes these settings will need a lot of weight adjustment to get right.

Often I’ll skin characters completely manually, especially simple characters. Even though heat mapping seems to get characters skinned quickly, by the time I’ve finished weighting I’ll usually have weighted most of the character manually except in hires geo examples.

1. Reset Settings
2. Bind To: Selected Joints
3. Max Influences: 3

[/minti_table][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][/minti_toggle][/vc_row][vc_row bg_color=”#ededed” text_color=”dark” ][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”30″][minti_title align=”left”]2. Important Note: joint As Space Between (4:32 mins)[/minti_title][vc_column_text]Important note here, I’ll talk a lot about joint as the space between the joint. This is confusing in Maya as maya’s display only shows the pivot of the joint and not it’s length which will extend to the next joint in the chain.

The following video sets that straight.
[/vc_column_text][minti_spacer height=”0″][/vc_column][/vc_row][wpanchor id=”2.1″][vc_row bg_color=”#ededed” text_color=”dark” ][minti_toggle title=”VIDEO 2.1 : JOINTS AS THE SPACE BETWEEN PIVOTS (4:32 mins)” open=”false” icon=”fa-film”][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”15″]

[/vc_column][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][minti_table style=”2″]

Information
Joints As The Space Between Pivots
Joints shouldn’t be seen as the round dots which really mark the pivot points, instead they are the space between joints. Ie a thigh bone goes all the way to the knee fom the hip. The middle of the thigh should be weighted 100% to the thigh bone if we are thinking logically.

Also skeletons that aren’t joined must be weighted more manually than skeletons that have a visual connection. This is because maya is smart if the joints are connected, less so if the joints are hovering and not visually joined.

The video shows in more detail…

[/minti_table][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][/minti_toggle][/vc_row][vc_row bg_color=”#ffffff” text_color=”dark” ][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”30″][minti_title align=”left”]3. Exploring Heat Mapping And Geodesic Voxel Binding (16 mins)[/minti_title][vc_column_text]These very fancy names for skinning simply allow us to auto bind with a little more acuracy. These can be good to get the hang of if you’re skinning loads of characters and need fast good results. Usually I’ll do a lot of manual tweaking that renders a lot of this sort of setup a little negligable, so I’ll often bind simply. Still these are great methods to know about. Simply

– Heat Mapping is a good auto solution for most meshes
– Use Geodesic Voxel in situations where heat fails.

[/vc_column_text][minti_spacer height=”0″][/vc_column][/vc_row][wpanchor id=”3.1″][vc_row bg_color=”#ffffff” text_color=”dark” ][minti_toggle title=”VIDEO 3.1 : GEODESIC VOXEL AND HEAT BINDING SKINNING IN MAYA (9:53 mins)” open=”false” icon=”fa-film”][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”15″]

[/vc_column][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][minti_table style=”2″]

Information
Geodesic Voxel and Heat Binding Skinning in Maya
Heat (2014+) and Geodesic Voxel (2015+) bind methods are available in newer versions of Maya. These methods use smart skinning algorithms to weight characters more efficiently. And they work well except for one large problem… they move the verts after binding. So we need a workflow to get around this. First lets learn about the two methods…

Heat Binding introduced in Maya 2014 uses a very clever algorythm that intelligently recognises the form of objects to skin via surface volume and not closest points to joints. It only works in certain conditions. Non manifold geometry for example will break it.

Geodesic Voxel (2015 only) is touted by Autodesk as more versatile version of heat binding. It converts the mesh into voxels allowing us to heat bind meshes that usually wouldn’t be suitable with heat binding.

From my tests I prefer Heat Mapping, it’s faster and gives better results however Geodesic Voxel is a good fallback if heat mapping fails. Both methods require bones inside a mesh like a characters body and for the polygon normals to point outwards correctly. For any fast simple objects I still use “closest distance”.

[/minti_table][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][/minti_toggle][/vc_row][wpanchor id=”3.2″][vc_row bg_color=”#ffffff” text_color=”dark” ][minti_toggle title=”VIDEO 3.2 : PROBLEMS AND SOLUTIONS FOR HEAT/GEODESIC VOXEL BINDING (6:19 mins)” open=”false” icon=”fa-film”][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”15″]

[/vc_column][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][minti_table style=”2″]

Information
Problems and Solutions for Heat/Geodesic Voxel Binding
Both Heat/Geo methods move the vertices in the bind pose, this can affect mirroring weights and other handy functions. It’s quite annoying.

A work around is to bind two identical meshes, one with heat or geodesic binding the other with closest distance. Then transfer the weights from the heat/geo to the closest distance. This will work around the issue and give us heat/geo weighting without moving the vertices.

2 meshes
Bind Heat Map
List Influenced Joints
Bind Regular
Copy Skin
Delete Heat Mesh

[/minti_table][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][/minti_toggle][/vc_row][vc_row bg_color=”#ededed” text_color=”dark” ][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”30″][minti_title align=”left”]4. Max Skin Weights Script (7:34 mins)[/minti_title][vc_column_text]One of my favorite scripts was this Max Skin Weights Tool, until I found a better replacement in Skin Wrangler. The following Video explains Max Skin Weights but Skin Wrangler is almost identical and has a better search and longer UI for joint names.
[/vc_column_text][minti_spacer height=”0″][/vc_column][/vc_row][wpanchor id=”4.1″][vc_row bg_color=”#ededed” text_color=”dark” ][minti_toggle title=”VIDEO 4.1 : MAX SKIN WEIGHTS SCRIPT, A BETTER COMPONENT EDITOR (7:34 mins)” open=”false” icon=”fa-film”][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”15″]

[/vc_column][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][minti_table style=”2″]

Information
Max Skin Weights Script, A Better Component Editor
The Max Skin Weights script is a great script that weights verts numerically like the component editor (very similar to the way 3dsMax weights verts). It’s often preferable to the component editor because of the simpler interface. Couple of issues mean that it’s still easiest to use the component editor.

I use 80% of my numerical weighting in the Max Script Window and 20% in the component editor.

[/minti_table][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][/minti_toggle][/vc_row][vc_row bg_color=”#ffffff” text_color=”dark” ][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”30″][minti_title align=”left”]5. Mirror Skin Weights Script (2:58 mins)[/minti_title][vc_column_text]Mirror skin weights can be fiddly, but I’ve never encountered a situation where my mesh wouldn’t mirror correctly. But there’s a number of things you need to get right.

Also in the case of joints that lie in exactly the same place we can use “joint labels” which I don’t go through here unfortunately but you can look that up.
[/vc_column_text][minti_spacer height=”0″][/vc_column][/vc_row][wpanchor id=”5.1″][vc_row bg_color=”#ffffff” text_color=”dark” ][minti_toggle title=”VIDEO 5.1 : MIRRORING SKIN WEIGHT SETTINGS (2:58 mins)” open=”false” icon=”fa-film”][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”15″]

[/vc_column][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][minti_table style=”2″]

Information
Mirroring Skin Weight Settings
The following settings will mirror skin weights predictably and well. Be sure to have the character at the bind pose (zero’d controls) when applying. Mesh must be symmetrical and combine L and R objects where possible to save time in skin weighting.
Mirror Across YZ
Positive to Negative On (character L to R)
Closest Point On surface
Influence 1: One To One
Influence2: None
Normalize Off

[/minti_table][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][/minti_toggle][/vc_row][vc_row bg_color=”#ededed” text_color=”dark” ][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”20″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”30″][minti_title align=”left”]6. Updating Topology Changes (7:07 mins)[/minti_title][vc_column_text]Maya has a way of copying skin weights between meshes and it’s very important to understand that we can do this and it’s very powerful. The following script simply automates the cumbersome steps required to copy the skin weights easily from mesh to mesh, even with meshes of differently topology or resolution this feature is a life saver.
[/vc_column_text][minti_spacer height=”0″][/vc_column][/vc_row][wpanchor id=”6.1″][vc_row bg_color=”#ededed” text_color=”dark” ][minti_toggle title=”VIDEO 6.1 : UPDATING MESHES WITH TOPOLOGY CHANGES (7:07 mins)” open=”false” icon=”fa-film”][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_spacer height=”15″]

[/vc_column][vc_column width=”1/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][/vc_column][vc_column width=”2/3″ text_align=”left” text_color=”dark”][minti_spacer height=”25″][minti_table style=”2″]

Information
Updating Meshes With Topology Changes
We can now update meshes with topology changes with the copy and paste skin weights script. This also works well with low res geometry skinning to hires dense meshes (see following sections)

[/minti_table][/vc_column][vc_column width=”1/1″ text_align=”left” text_color=”dark”][minti_table style=”2″]

Code
Copy the following script to the shelf (.mel)

//////////////////////////////////////////
//Select meshes to transfer weight to, then shift-select the mesh with weights, then run this script

string $userSel[] = `ls -sl`;

if(`size($userSel)` > 1)
{

select $userSel[((`size($userSel)`) - 1)];
string $cageMesh[] = `ls -sl`;

select $userSel;
select -tgl $cageMesh;
string $pieces[] = `ls -sl`;

//get inputs of weights in skin
string $theJoints[] = `skinCluster -q -wi $cageMesh`;

if(`size($theJoints)` > 0 && $cageMesh[0] != "")
{

int $counter;
int $sizer = size($pieces);

for ($counter = 0; $counter < $sizer; $counter++)
{

///////////////////////////////////////////////////////////////////////////////////////
//Determine if skinCluster exists on piece
string $skins[] ;
clear $skins ;

string $hist[] = `listHistory -pdo 1 -il 2 $pieces[$counter]` ;
string $h ;

for ($h in $hist)
{
if (nodeType($h) == "skinCluster")
{
$skins[size($skins)] = $h ;
}//end of if skinCluster type exists
}//end of for loop through history


/////////////////////////////////////////////////////////////////////////////////////////
//If skinCluster Doesn't exist, add skinCluster
if(`size($skins)` == 0)
{
select $pieces[$counter] $theJoints;
newSkinCluster "-tsb -mi 10 -dr 10" ;
}//end of apply skinCluster if none found


//////////////////////////////////////////////////////////////////////////////////////////
//Add all influences from cageMesh
int $counterInf;
int $sizerInf = size($theJoints);
string $pieceJoints[] = `skinCluster -q -wi $pieces[$counter]`;

for ($counterInf = 0; $counterInf < $sizerInf; $counterInf++)
{
int $found = stringArrayContains($theJoints[$counterInf], $pieceJoints);
if($found == 0){skinCluster -e -ai $theJoints[$counterInf] $skins[0];}
}//end of for loop through adding all cageJoints


///////////////////////////////////////////////////////////////////////////////////////////
//Remove extra joints that don't match those in cageMesh skinCluster
string $theJoints[] = `skinCluster -q -wi $cageMesh`;
string $pieceJoints[] = `skinCluster -q -wi $pieces[$counter]`;
string $diffJoints[] = stringArrayRemove($theJoints, $pieceJoints);

int $counterInf;
int $sizerInf = size($diffJoints);

if(`size($diffJoints)` > 0)
{
for ($counterInf = 0; $counterInf < $sizerInf; $counterInf++)
{
skinCluster -e -ri $diffJoints[$counterInf] $skins[0];
}//end of for loop through removing extra joints
}//end of if any joints are different


//////////////////////////////////////////////////////////////////////////////////////////
//Transfer the Weights
select $cageMesh $pieces[$counter];
copySkinWeights -noMirror -surfaceAssociation closestPoint -influenceAssociation closestJoint -influenceAssociation oneToOne -influenceAssociation name -normalize;


//////////////////////////////////////////////////////////////////////////////////////////
//Finalize
print ("\nSkin Applied/Weights Transferred: " + ($counter + 1) + "/" + $sizer);

}//end of loop through pieces

select $userSel;

}//end of if there is a skinCluster to copy from

}//end of if user has selected enough items

[/minti_table][/vc_column][vc_column width="1/1" text_align="left" text_color="dark"][minti_spacer height="20"][/vc_column][/minti_toggle][/vc_row][vc_row bg_color="#ffffff" text_color="dark" ][vc_column width="1/3" text_align="left" text_color="dark"][minti_spacer height="20"][/vc_column][vc_column width="2/3" text_align="left" text_color="dark"][minti_spacer height="30"][minti_title align="left"]7. The Magic Skin Smooth Tool! (9:11 mins)[/minti_title][vc_column_text]The following video with the most boring title ever is actually one of the biggest time savers on this page. TF Skin smooth smooths skin weights the way they should be smoothed. The following video explains how this happends regarding Normalisation in Maya. Don't let the big words worry you. It's good to understand this about Maya and it's skin weights.
[/vc_column_text][minti_spacer height="0"][/vc_column][/vc_row][wpanchor id="7.1"][vc_row bg_color="#ffffff" text_color="dark" ][minti_toggle title="VIDEO 7.1 : POST AND INTERACTIVE NORMALISATION MODES AND TF SMOOTH SKIN (9:11 mins)" open="false" icon="fa-film"][vc_column width="1/1" text_align="left" text_color="dark"][minti_spacer height="15"]

[/vc_column][vc_column width="1/3" text_align="left" text_color="dark"][minti_spacer height="25"][/vc_column][vc_column width="2/3" text_align="left" text_color="dark"][minti_spacer height="25"][minti_table style="2"]

Information
Post And Interactive Normalisation Modes and TF Smooth Skin
TFSmoothSkin (Maya Script) is like the magic smooth skinning brush, and here's why in the following video which discusses weight normalisation in Maya.

[/minti_table][/vc_column][vc_column width="1/1" text_align="left" text_color="dark"][/vc_column][vc_column width="1/1" text_align="left" text_color="dark"][minti_spacer height="20"][/vc_column][/minti_toggle][/vc_row][vc_row bg_color="#ededed" text_color="dark" ][vc_column width="1/3" text_align="left" text_color="dark"][minti_spacer height="20"][/vc_column][vc_column width="2/3" text_align="left" text_color="dark"][minti_spacer height="30"][minti_title align="left"]8. Using Lores Meshes to skin hires meshes (6:00 mins)[/minti_title][vc_column_text]One of my favorite techniques is to skin a lores mesh and transfer the skin weights to the hires. This gives remarkable accurate and fast results. the downside is we'll need to create a lores mesh. Many riggers who aren't storng modellers might avoid this techinique but I love it.
[/vc_column_text][minti_spacer height="0"][/vc_column][/vc_row][wpanchor id="8.1"][vc_row bg_color="#ededed" text_color="dark" ][minti_toggle title="VIDEO 8.1 : USING LORES MESHES TO HELP WITH SKINNING DENSE MODELS (6:00 mins)" open="false" icon="fa-film"][vc_column width="1/1" text_align="left" text_color="dark"][minti_spacer height="15"]

[/vc_column][vc_column width="1/3" text_align="left" text_color="dark"][minti_spacer height="25"][/vc_column][vc_column width="2/3" text_align="left" text_color="dark"][minti_spacer height="25"][minti_table style="2"]

Information
Using Lores Meshes to Help With Skinning Dense Models
For dense meshes we can model a lores proxy and skin it easily, then transfer the weights across with the copy and paste skin weights script, this can save time on complex geometries.

[/minti_table][/vc_column][vc_column width="1/1" text_align="left" text_color="dark"][/vc_column][vc_column width="1/1" text_align="left" text_color="dark"][minti_spacer height="20"][/vc_column][/minti_toggle][/vc_row][vc_row bg_color="#ffffff" text_color="dark" ][vc_column width="1/3" text_align="left" text_color="dark"][minti_spacer height="20"][/vc_column][vc_column width="2/3" text_align="left" text_color="dark"][minti_spacer height="30"][minti_title align="left"]9. Import Export Skin Data Between Files (5:02 mins)[/minti_title][vc_column_text]Import and Export Skin data between files with Braverabbits Export Import Skin Weights. His latest version has error checking. Zoo Tools also has this feature which work in world space rather than on vertex count. Both methods have advantages, in the following example I look at Braverabbits tool.

Also worth noting that Maya has this feature also, though it is slow and not as nice to use. It's found under import export deformer weights, and not under skinning!
[/vc_column_text][minti_spacer height="0"][/vc_column][/vc_row][wpanchor id="9.1"][vc_row bg_color="#ffffff" text_color="dark" ][minti_toggle title="VIDEO 9.1 : EXPORT/IMPORT SKIN WEIGHTS BETWEEN RIGS AND FILES (5:02 mins)" open="false" icon="fa-film"][vc_column width="1/1" text_align="left" text_color="dark"][minti_spacer height="15"]

[/vc_column][vc_column width="1/3" text_align="left" text_color="dark"][minti_spacer height="25"][/vc_column][vc_column width="2/3" text_align="left" text_color="dark"][minti_spacer height="25"][minti_table style="2"]

Information
Export/Import Skin Weights Between Rigs and Files
This plugin by Ingo over at BraveRabbit allows us to save skin weights to a file and then reload them onto characters that might be in different scenes. It also works particularly well updating rigs, rebuilding from proxy controls for pivot points and then reweighting meshes together. It avoids the traditional Maya method of saving skin weights to UV'd maps which is complicated and requires accurate UVs.

This plugin can be downloaded for free from BraveRabbit...
http://www.braverabbit.de/playground/?p=915

[/minti_table][/vc_column][vc_column width="1/1" text_align="left" text_color="dark"][/vc_column][vc_column width="1/1" text_align="left" text_color="dark"][minti_spacer height="20"][/vc_column][/minti_toggle][/vc_row]