Tutorials¶

Important note: Unless otherwise stated, we’ll assume all steps in the tutorials below happen with the timeline set to the solver start frame. That will be frame 1 in these examples.

Let’s make sure the Ziva VFX for Maya Plugin is loaded. We do that by opening the Maya Plug-in Manager; which can be found in the following menu: WindowsSetting/PreferencesPlug-in Manager

If our plugin has been installed correctly, it should be visible in the Plug-in Manager. If it’s not there, please revisit the installation instructions.

After the plugin has been loaded, you should notice that “Ziva”, “Ziva Tools” and “Ziva Transfer” menus have been added to the Maya interface. (These menus are covered in more detail in the Ziva Menus section of the documentation).

Bodies¶

Note

This tutorial will show examples built on geometry from the Mr. Ink asset. If you’d like to use the same geometry presented here, you can find a ready-made file for this in the demo directory located in the Ziva install path. If you did a default install on Windows you would find the file here: C:/Program Files/Ziva/VFX/Ziva-VFX-Maya-Module/ZivaVFX-Maya-<version>/demos/armFlex.ma.

You’ll notice in the file that there are two copies of the skeleton geometry. One is an alembic of the skeleton motion. The second one has a blendshape connection to the first. This effectivley creates a buffer between the two and is in line with our recommendations on how users should drive tissue rigs. We tend to discourage driving a Ziva simulation on directly with a live Maya rig with joints/constraints/controls etc. Following this guidance has several advantages for users:

1. Scenes are lighter, and faster to interact with.

2. Even standard Maya nodes can create cycles in the scenes which frequently cause issues with Ziva simulations at the subframe level.

3. The animator can work without requiring a Ziva license to generate bone motion.

4. It becomes straight forward to drive a simulation with a different animation: Simply import an Alembic of the bones into the muscle rig and create blendshapes between the corresponding bones.

Here is an image of a typical Ziva character pipeline:

Creating a Tissue¶

“Tissue” is the word we use to describe elastic solids in our system. These are simulated soft body objects.

1. Our tools work exclusively with polygonal geometry. You can make almost any mesh into a Tissue (see below for exceptions).

1. Select the mesh and convert to Tissue: ZivaTissue

1. Right click on the timeline and make sure one of the “Play every frame” options is selected, under Playback Speed.

2. Click play forward.

You will see the Tissue drop under gravity.

Note: The first time you create a Tissue, bone or cloth in an empty Maya session, a solver node will automatically be created. The solver node appears in the scene as a custom locator node with three axes (shown below), and in addition to holding all of the global solver parameters, is also responsible for visualizing all of our custom drawing.

By default, our solver node will be scaled to match the current Maya units. One of the axes has a “1m” at the end, showing what Ziva VFX considers to be 1 meter. In the example below, the character is something like 1.5 meters tall. This ‘real world scale’ should be considered with your own characters. You can simply scale the solver to adjust ‘how big’ Ziva VFX considers your Tissues to be.

Requirements for geometry being converted to Tissue:

1. Must be manifold.

2. Must not have extremely thin triangles.

3. Positive volume. If mesh is contiguous (water tight) all normals should be pointing outward for collisions to work correctly.

You can test a mesh before converting it to Tissue by selecting it and running the following MEL command zMeshCheck.

Creating a Bone¶

Typically a geometric mesh representing a bone in an anatomical skeleton for e.g. the humerus bone. As opposed to Tissues, bones are kinematic objects; Generally speaking, Tissues are attached to bones. As the bones move, the Tissues respond.

1. Select a polygonal mesh that is not already a Tissue or Cloth

2. Convert the selected mesh into a bone: ZivaBone

From here you are free to manipulate the bone as you like. You can make deformers, key the transforms etc. You can do this before or after you have converted the mesh to a bone.

Note

Best practice is to animate your bones in a separate file (called the bone rig, or puppet, bake out the bone animation, and import as alembic into your muscles setup).

• Many of Maya’s nodes create unpredictable behaviour on subframes. Ziva VFX needs to know where bones are on subframes in order to compute bones correctly.

• No Ziva VFX license required for animation puppet.

• Scenes are lighter.

Requirements for geometry being converted to a Bone:

1. Must be manifold.

2. Must not have extremely thin triangles.

3. Positive volume. If mesh is contiguous (water tight) all normals should be pointing outward for collisions to work correctly.

You can test a mesh before converting it to a Bone by selecting it and running the following MEL command zMeshCheck.

Creating a Cloth¶

Ziva Cloth is primarily designed to provide high level, realistic wrinkling detail at the skin level.

1. Select the mesh you want to convert into cloth, and run: ZivaCloth

Requirements for geometry being converted to Cloth:

1. Must be manifold.

2. Must not have extremely thin triangles.

You can test a mesh before converting it to Cloth by selecting it and running the following MEL command: following MEL command zMeshCheck.

Deleting a Body¶

1. Select the Tissue, cloth or bone you wish to remove completely from your scene and run: ZivaDelete selection

Note: All bodies should be deleted in this way. Deleting a Tissue, cloth or bone without using this menu item will leave your scene in a broken state. To remove the body from the simulation, but keep the geometry in the scene, choose: ZivaRemoveTissue, Cloth or Bone

Attachments¶

Fixed Attachments¶

Attachments can be made between two soft bodies, or between a soft body and a bone.

In this tutorial we’ll do a typical Tissue to Bone attachment.

1. Select some vertices on the Tissue.

2. Select a bone.

3. Choose: ZivaAttachment.

Note: You should now see some of the vertices of the Tissue connected to their closest points on the bone with red dotted lines - this indicates that those Tissue points now have a fixed(red) attachment to the bone

4. To modify which vertices are part of the attachment; select the Tissue mesh, then right-click to bring up the context menu for that object. In the right-click menu, navigate to: PaintzAttachmentzAttachment1-weights - and then paint as you normally would with a typical Maya deformer.

Note: If the attachment map on the “source” object is a grey-scale value, the stiffness of the attachment will be attenuated at those attachment proxies. Also, attachment paint on the “target” object will limit where closest-point lookups and/or sliding can occur.

There is no limit to the number of Attachments you can have on a body. A vertex on a body can also have any number of Attachment points.

Sliding Attachments¶

Sliding attachments are useful when you want to have two bodies slide on each other and also preserve the initial distance from each other.

Making a sliding attachment is exactly the same process as making a fixed attachment, except we change its mode. Here, we’ll use Ziva’s proximity selection tool to do the selection for us, and we’ll tune the stiffness to direct the simulation. You can still select the vertices manually if you wish.

1. Select the Tissue object first, then then select the bone object.

2. Choose Ziva ToolsProximity ToolsSelect Vertices[] (option box).

3. Adjust the value to something that makes sense for your scene. Here I’ve used a radius of 1.5.

4. Choose Select.

5. Select the target object again (in this case the bone).

6. Choose ZivaAttachment.

7. Change your new attachment’s type to sliding in the channel box. Notice the color changes from red to purple.

8. Select the source of the attachment – in this case the Tissue. Right click somewhere near the mesh (not on the mesh) and choose PaintzAttachmentzAttachment2-weights. Here, we adjust the map to just have sliding on the belly of the muscle.

9. Adjust the stiffnessExp of the attachment to 10^6 in the channel box. This will make the attachment 1/100th of it’s original stiffness. All the associated Ziva nodes are listed in the channel box when you have a Tissue selected. So make sure you have the Tissue selected in order to see zAttachment2 in the channel box.

The result:

Attaching Cloth¶

A useful thing you can do in Ziva VFX is to simulate fat and skin at the same time. When two soft bodies are simulated at the same time, they are considered ‘coupled’. That is, they both affect each other during the course of the simulation.

Typically, cloth is used as an ‘epidermis’ and it is attached to the fat. The coupled nature of this simulation produces realistic wrinkling as areas of the soft objects squash and stretch.

1. Select your cloth mesh, then add the fat to the selection. Fat is usually solved as a single Tissue, as seen here.

2. Choose ZivaAttachment. Because we did not do a vertex selection first, an attachment is made for every vertex on the source object; in this case, the cloth.

3. By default, cloth is a little bit more sensitive than Tissue to attachment stiffnesses. So change the stiffnessExp to 10^5.

Fibers¶

Fibers in Ziva VFX replicate the functionality of muscle fibers in the real world. A Fiber can contract a Tissue in a specified direction.

1. Select the Tissue you wish to add a fiber to and choose ZivaMuscle Fiber

Ziva VFX will guess the default fiber direction when the Fiber is created. If you wish to alter it afterward, you’ll need to edit the End Points Map.

1. Right click somewhere near the Tissue whose Fiber you wish to edit.

2. Choose PaintzFiberzFiber1-endPoints.

3. Add new end point vertices as you wish and see the Fiber Field update.

Typically, The End Points map is mostly set to a value of 0.5 with one end of the Tissue painted to 0.0 and the other end 1.0. The field is interpolated between the end point vertices and propogated through the Tet Mesh. You must have at least one vertex painted to 0.0 and one painted to 1.0, with the remainder being 0.5. Otherwise the Fiber will fail and the simulation will not solve.

To actually fire (or excite) the Fiber, we look to the Excitation attribute on the zFiber node.

1. Select the Tissue whose Fiber you want to excite.

2. In the channel box, set a keyframe to an Excitation value of 0 on frame 15.

3. Set a keyframe to an Excitation value of 1 on frame 25.

4. Click on Play Forward.

The simulation above has new bones added, and also the brachialis Tissue as well. There are sliding attachments between the humerus and the brachialis, and also the brachialis and the bicep.

If you want the Fiber to only affect a certain part of the Tissue, you can paint the weight map to 0 in the areas you wish to remain unaffected by the Fiber. To do this:

1. Select the Tissue whose Fiber weight map you wish to alter.

2. Right click somewhere near the Tissue and choose PaintzFiberzFiber1-weights.

3. Paint the areas you wish to remain unaffected by the Fiber using Maya’s paint tool.

There is no limit to the number of Fibers you can have on a Tissue.

Adding Line of Action to a Fiber¶

In most cases it would be tedious to hand key the excitation for shot work. Line of Action will excite the muscle automatically based on the changing length of a nurbs curve.

To set up Line of Action for a given Fiber, first we must attach a curve to some bones, to do this:

1. Select the Tissue whose Fiber you want to create a Line of Action setup for.

2. Choose Ziva ToolsMeshingCreate Line of Action Curve

Ziva automatically builds a nurbs curve for you. This is just a standard 2 point nurbs curve. You are free to move the endpoints of this curve around, or create your own using the standard Maya tools

In this example I have moved the lower control vertex (CV) of the curve further down the radialis to exaggerate the effect

1. Select the curve, right click somewhere near the curve and choose Control Vertex.

2. Select the lower CV and then select the closest bone mesh.

3. Choose ZivaAdd Tissue PropertyRivet to Bone.

4. Repeat steps 3 through 5 for the other CV.

You’ll see two dotted red lines running from each CV to the bone you riveted to.

1. To connect the curve to the Fiber, first select the curve.

2. Then also select the Tissue whose Fiber you wish to create Line of Action for.

3. Choose ZivaAdd Tissue PropertyMuscle Line of Action.

You can amplify the effect of Line of Action. To do this:

1. Select the Tissue whose Fiber has the Line of Action.

2. Launch the Ziva Scene Panel by choosing ZivaLaunch Scene Panel. If the panel was already open refresh it using the green refresh button.

3. Roll out zFiber1 and then curve1.

4. Select zLineOfAction1.

5. In the channel box, set Pos Sensitivity to 4. This will make it 4 times more senstitive to changes in curve length.

Materials¶

It can be helpful to have areas of a Tissue behave differently to other areas on the same Tissue.

To do this, Ziva VFX uses a layering approach to varying materials. The tet mesh in this example is set up with spatially varying tet resolution (see Local zTet Resolution).

1. Select the Tissue for which you would like to add Material.

2. Choose ZivaAdd Tissue PropertyMaterial Layer.

3. In the channel box, select zMaterial2 and change youngsModulusExp to 10^5. This makes it 100 times more rigid.

You’ll notice that zMaterial2 is ‘above’ zMaterial1 in the channel box. The Tissue will inherit the properties of the Tissue highest up in the stack. In order to ‘reveal’ the properties of zMaterial1 which is underneath, we need to paint the weight map of zMaterial2. This is similar to how layers function in photoshop. In our case, the weight map is like an alpha channel.

1. Right click somewhere near the Tissue that has the Material you’d like to paint.

2. Paint the weight map of zMaterial2 to black in the areas you’d like to reveal zMaterial1.

Rest Shapes¶

Note

If you want to have more precise direction of the simulation, you can do this by changing the shape of any or all of Tet Meshes during the simulation. You can specify one or more target shapes that Ziva will fit the current Tet Mesh to.

For this example I will work on the Jellyphant.

1. Duplicate the Jellyphant Tissue mesh and call it back_spikes.

2. Sculpt your changes on the sculpt mesh, in this example back_spikes. Do not change any topology.

1. Select your original Tissue mesh in this case jellyphant_tissue.

2. Shift select the scuplted target, in this case back_spikes.

3. Choose ZivaAdd Tissue PropertyRest Shape.

If you play the simulation now, you’ll see that by default, the Rest Shape is activated to full effect on the first frame of simulation. Notice that all the functionality of the simulation (fibers, attachments, secondary motion, etc) is all preserved.

Extracting a Rest Shape from the World¶

If you are creating rest shapes for a rig, you’ll want to extract the correct mesh to feed in as a Rest Shape target.

In this example we’ll be working on the arm from the Mr. Ink character.

1. On the solver start frame, duplicate the Tissue you’d like to extract a rest shape for. In this example we will call it bicep_tissue_neutral.

2. Simulate the character into a pose that you wish to create a Rest Shape for. In this example I simulate to frame 20.

3. Duplicate the Tissue you wish to create a Rest Shape for at the current frame. In this example we will call it bicep_tissue_sculpt.

4. Sculpt this duplicated mesh into the shape you would like to see at this pose.

1. Be sure that your timeline is still at the frame where you duplicated the Tissue to do the sculpting. In this case, frame 20.

2. Select all of the following in the specified order:

• The neutral shape (bicep_tissue_neutral).

• The Tissue after simulation (bicep_tissue).

• The sculpted shape (bicep_tissue_sculpt).

1. Type the following into the MEL command box and run:

zRestShape -pullBackGeo

1. You will get a new mesh with the suffix “_restShapeCorrective”. Select your Tissue (in this example bicep_tissue), then select your newly generated corrective.

1. Choose ZivaAdd Tissue PropertyRest Shape.

2. Select your Tissue mesh and roll out the node zRestShape1 in the channel box.

3. You can keyframe or connect other nodes to the target weight in the zRestShape1 node. In this example the curve from the line of action is used in conjunction with some standard Maya nodes to drive the target weight.

Below: An example node setup to drive the Rest Shape target.

Below: an example of a Rest Shape target being triggered over time.

Below: Toggling between the sim results with and without the Rest Shape applied.

1. Select the Tissue with a pre-existing Rest Shape node.

2. Shift select the target mesh which you wish to add.

3. Choose ZivaAdd Tissue PropertyRest Shape.

Global zTet Resolution¶

The tetrahedral lattice that is drawn over your Tissues is called the ‘Tet Mesh’. This is the mesh that is actually being simulated, and your original geometry is embedded within the Tet Mesh. Its properties are located on the zTet node. Every Tissue has a single zTet node.

Often you will need to increase the resolution of the Tet Mesh, because you need to represent more complex curvature, or wave propogation in your simulations.

To change the resolution of your Tet Mesh globally for a Tissue:

1. Select the Tissue whose Tet Mesh you would like to alter.

2. In the channel box, change the value of the Tet Size attribute.

In this example we change the Tet Size from 6.7 to 3. Notice the difference:

Local zTet Resolution¶

The drawback to adding more resolution to your Tet Meshes is that computation times go up. To optimize, we can paint the resolution of the Tet Mesh spatially.

In this example we have a mesh that represents armoured plates, and we want the areas between the plates to deform, but the plates to preserve their shape.

To paint zTet resolution: 1. Select the Tissue whose Tet Mesh you would like to alter. 2. Right click somewhere near the Tissue and choose: PaintzTetzTet1-weights and then paint as you normally would with a typical Maya deformer.

The map being painted is multiplying against the surface refinement attribute on the zTet node. You can amplify the effect by increasing the value of surface refinement, here we change it to 2:

Creating a Subtissue¶

Subtissues are Tissues within Tissues. They can be helpful when you want very precise control over a region of a Tissue. Some advantages of Subtissues are the ability to make Attachments to the Subtissues, create Fibers on the Subtissues, and have different a Material just in one area.

The mesh of the parent Tissue should completely envelop the mesh of the Subtissue.

1. Make sure the parent Tissue and the Subtissues are already Tissues. (See Creating a Tissue above.)

2. Select the mesh you wish to be the parent Tissue first. Then shift select the mesh of the Subtissue.