Importing a character from SI3D into XSI - the shape problem and solution

Written by Christoph Schinko

Lets take a look on how to import a character, modeled and textured in Softimage 3.x, into Softimage XSI so we can create an animation library and mix scenes together out of that data.

Here we will look at a problem with the face shapes, how to fix it and how to set up an easy-to-use facial animation slider setup.

  1. The character

As example character I chose Kipper, the kangaroo, which is one of the actors in our kids series "Jelly bean town". All our characters are based on the same bone structure and rigging system, which makes it very easy to transform animation to another character. What has always been a pain is fiddling around with a whole whack of f-curves when using an already existing animation. So building up an animation library and mixing those sequences together was almost more work than creating the entire animation from scratch.

Pic 1: Kipper imported into XSI, shapes restored

  1. Importing

When we import a 3.x scene with the File -> Import SI3d Scene/Model, XSI tells us exactly what it is doing to bring up the scene. The progress beam on the bottom of the screen gives us a general information on the event happening, for example “reading elements”, “connecting objects”, “loading expressions” and so forth. On the lower left corner we can see more detailed information like errors, conversions and lots of stuff that disappears before you can read it. To look at that detailed information, click on the exclamation sign on the bottom of the UI. That brings up the script editor where everything was logged, and everything XSI ever does will be stored in there and in the log file (until you exit). The grey top half of the script editor is like the status line of 3.x, the white bottom half is where users are able to write and execute scripts from simple operations like CreatePrim "Sphere", "NurbsSurface" for creating a NURBS sphere to running VB scripts and more. Enter or drag and drop any command from the top half and hit Run, and those lines will be re-executed.

The xsi.log file is usually found under c:\temp and contains everything XSI did.

TIP: Should XSI crash and not be able so save a backup copy, all operations are still in the log file! So if you copy and paste the list into a new XSI script editor and hit run, XSI will rebuild your whole scene up until the step when the software crashed. So just leave out the last command, that caused the crashing and you won’t have lost ANYTHING you worked on!

Be aware that every time XSI is launched, the old log file gets cleared and overwritten, unless it was saved under a different file name.

In this example, the first try to import Kipper we can see that:

- Multiple objects were converted to NURBS, as there are no b-spline objects anymore

- Errors were encountered during the linking of mouth shapes via expressions

- And a pic file couldn’t be found

Commands are written in black,

Status lines of operations in green

ImportFromSI3D "Z:\JBT\oldDBs\cleanup\SCENES\kipper.1-0.dsc"

'INFORMATION : "4001 - Begin: Import SOFTIMAGE|3D Scene"

'ERROR : "2047 - At least one envelope has been converted from Patch to NURBS.

'Automatic reassignment of weights has been performed."

'WARNING : "3004 - Was converted to a NURBS surface: body"

'WARNING : "3004 - Was converted to a NURBS surface: revol3"

'WARNING : "3004 - Was converted to a NURBS surface: zopf"

'WARNING : "3004 - Was converted to a NURBS surface: revol5"

'WARNING : "3004 - Was converted to a NURBS surface: zopf4"

'WARNING : "3033 - Could not find the image: C:/Softimage/SOFT3D_3.8SP2/3D/bin/."

'INFORMATION : "4034 - To restore the image, use this one line script to change the path, 'where SetValue needs to have the extension ".pic" specified."

'INFORMATION : "4050 - SetValue "Sources.noIcon_pic.FileName","C:/Softimage/SOFT3D_3.8SP2/3D/bin/..pic""

'WARNING : "3033 - Could not find the image: C:/Softimage/SOFT3D_3.8SP2/3D/bin/."

'INFORMATION : "4034 - To restore the image, use this one line script to change the path,'where SetValue needs to have the extension ".pic" specified."

'INFORMATION : "4050 - SetValue "Sources.noIcon_pic.FileName","C:/Softimage/SOFT3D_3.8SP2/3D/bin/..pic""

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.schnauze1.wshp_4 = kipper_1-0.mund.wshp_4"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.schnauze1.wshp_5 = kipper_1-0.mund.wshp_5"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.nase.wshp_0 = kipper_1-0.mund.wshp_0"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.nase.wshp_1 = kipper_1-0.mund.wshp_1"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.nase.wshp_2 = kipper_1-0.mund.wshp_2"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.nase.wshp_3 = kipper_1-0.mund.wshp_3"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.nase.wshp_4 = kipper_1-0.mund.wshp_4"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.nase.wshp_5 = kipper_1-0.mund.wshp_5"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.schnauze1.wshp_0 = kipper_1-0.mund.wshp_0"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.schnauze1.wshp_1 = kipper_1-0.mund.wshp_1"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.schnauze1.wshp_2 = kipper_1-0.mund.wshp_2"

'WARNING : "3086 - The following expression could not be applied:"

'WARNING : "3055 - kipper_1-0.schnauze1.wshp_3 = kipper_1-0.mund.wshp_3"

'INFORMATION : "4002 - End: Import SOFTIMAGE|3D Scene"


What "The following expression could not be applied" means is pretty clear when you see the imported character. It can be seen in the picture below, the face shapes weren’t imported correctly and couldn’t be connected via expressions, as done in Soft 3.x before. The three objects that represent the mouth are really big and jump all over the screen. Shape animation is still there, but not correct at all.

Pic 2: screwed up shapes

Attempts to reproduce the importing mistake didn’t work out, shapes, envelopes and expressions were imported correctly.

So the individual face shapes were extracted from 3.x and imported seperately into XSI.

Pic 3: Kippers mouth shapes

  1. Shapes

Now all shapes will be re-applied to the objects. Select the main/original object and activate Deform -> Shape -> Mixed Weight Mode in the Animation module, which allows blending between shapes. As everywhere in XSI, there’s other ways to accomplish something, however this is a pretty straight forward Softimage 3.x user way.

Select the default shape mouth. Hit Deform -> Shape -> Save Shape Key to store the original shape as a ground level to deform from. This command saves the shape of the selected cluster (here object) and drops the shape directly into the animation mixer, ranging over the whole length of the timeline in the mixer (which doesn’t have to be the same as in the global timeline of the scene). As we want to blend the shapes, it is practical to have the default shape underneath our other shape track structure. This also ensures that the shapes will “blend” into each other correctly and not jump to the other shape when all other sliders are exactly at 0 (like in 3.x too).

Deform -> Shape -> Store Shape Key also saves the shape, but doesn’t put it on the mixer timeline right away. When you do that manually, the shape action has a length of 10 frames by default.

 After that, select Deform -> Shape -> Select Shape Key and with the pick cursor, activate all different mouth shapes in the order you like. Right click when done. Now all our poses are stored as Shapes and can be placed just like any clips in the animation mixer. Just select the source object, hit Update in the Animation Mixer and by right clicking on one of the two animation tracks (green) you can go Add Track -> Shape (blue). Track -> Add Shape Track in the mixer menu is the other way. Create a couple of tracks, you can always add more or remove some later. In this case, two shape tracks were created. By right clicking on one, we can load in our individual shape actions under Load Source ->

The shape can only be loaded when the mouse is on top of a shape track, same for animation clips. It will be inserted at the position of the mouse cursor, if there was another clip before, the old one will be pushed to the left.

As the default naming convention is a little bit confusing, lets check out where XSI really keeps those clips.

Open a XSI Explorer (or hit “9”) and hit Show -> All Nodes. Now you can see a mixer node on the scene level. Expand it and there will be more nodes, Sources, Tracks and Compounds.

Compounds are several tracks of the same kind combined to one, meaning the tracks will be represented as one track in the main or “Global” mixer, as it says in the upper left corner. Once you double click on a compound clip, it opens up into “Local” mode and displays all tracks that it contains. This is very practical tool (from Softimage DS).

Each of those folders in the explorer can contain information on corresponding animation, shape or audio clips. For now, audio clips cannot be put in a compound clip. Underneath the sources -> shape structure, all stored shapes are found. Via the right click menu, they can be renamed just like tracks or compounds. Clips can even be dragged and dropped directly onto the animation mixer tracks, which comes in really handy.

Pic 4: the animation mixer

On the corners of each clip, orange squares appear as you go over them with the cursor. Three on each side, the upper one for bouncing, the middle one for scaling and the lower square for cycling. All tools, that will make our lives a lot easier.

To the right of each track, there is a slider with two buttons underneath it. This resembles the weighting or influence of the actual clip on the whole animation. Key of course animates that weighting information, so it is very simple to ease in an action. Under Animation the standard links to the animation and expression editors, linking the curve to something, copy/pasting it and so forth.

So now everything is ready to go for facial animation. Just drag and drop the desired shapes onto a shape track, keyframe the weighting and voila, shape animation easily done.

Pic 5: shape animation using weighting curves

Instead of using the default shape as a base over the whole timeline, just put the shapes in the desired length alternating on two tracks, then to create smooth transitions use Mix -> Transition Tool and click on all the shape clips one after another, starting with the most left one. Right click when done. That causes the different clips to “morph” into each other, a transition is created. Basically it just interpolates the value differences of each f-curve involved.

TIP: Watch out that all clips are using the same function curves! If there is no key saved for a value that the transition wants to interpolate, weird jumping or twisting will occur.

In XSI 1.5 there will be “smart transitions” that can be adjusted exactly as needed and modified to a degree that is not possible yet.

Pic 6: shape animation using transitions

  1. Slider Setup

So that animating is even more fun, a field of face shape sliders will be created, from which you can comfortably animate your facial expressions. In order to do that, a little window called new parameter set will be created. With Create -> Parameter -> New Custom Parameter Set under the animation module an empty toolbar opens up and can be filled with any self defined parameter sliders. The node for the parameter set can be found in the Explorer, under the node of the object that was selected when the parameter set was created. So you can choose where you want to place these parameter set nodes, in the root or under objects to maintain a good structured scene. To see the node in the Explorer, make sure that All Nodes or Selection is activated. Otherwise it can also be accessed under Property to the right of the screen in the selection area.

To add parameters hit Create -> Parameter -> New Custom Parameter. A window with various options will pop up. After labeling the slider, Floating Point Number is chosen as the type of value, that’s what we’ll need for shape animation.

The available types are:

  • Text: a character string of any length.
  • Boolean: True or False.
  • Integer: Any integer between +/-2147483647.
  • Small Integer Number: Any integer between 0 and 255.
  • Floating Point Number: Any decimal value.

The value range defines how far the slider can be pulled both ways. To get back the beauty of shape animation – the overshooting of values, a UI Range can be defined aswell. That way for example only the values –1 to 1 can be visible and reachable with dragging the slider (UI range), but it is still possible to enter a higher or lower value via keyboard (value range).

This is a great feature, because it is not always smart to define the ranges generously to begin with, as it will negativly affect the precision of dragging the slider with the mouse.

Pic 7: creating a new custom parameter

The only thing left to do is link the sliders to the individual shape clips. Back in the animation mixer in the Animation menu under the weighting slider for each track, the Expression Editor can be called up.

That’s where the point from the beginning comes in. When the shapes were saved, one way only inserted 10 frame long clips, which works great for directly animating the weighting curves in the animation mixer. The other way fills out the shapes over the whole time line which is just perfect for our slider setup, as we need all shapes present over the whole time line.

When the Expression Editor is opened (from underneath the slider), it automatically fills in the active weighting curve as affected element. The grey part of the expression editor (ee) shows status lines, the white area is for entering expressions (even more than one line long ones!).

The Object button from the menu opens an explorer window, where the affecting element can be chosen. In this case we need the slider ShapeLaugh for our track 1. In the scene root under Face Sliders there is a ShapeLaugh node. Click on it and XSI will fill in the necessary syntax into the ee. Apply connects the two attributes and the feedback line appears in the grey area.

Pic 8: Expression editor: linking the weighting curve to the slider

All sliders are linked to the shape tracks that way, and we will get a very simple yet effective control slider field in our little window.

Pic 9: the generated slider field

You can set up your characters hands in a similar way, one slider to bend or stretch each finger (all joints) and another to control the stride of the fingers. For simplistic or comicy hand movement a pretty good solution.

That’s it for now, I hope you enjoyed reading this tutorial and got something out of it.

Another problem that occurred when importing Kipper was that the branch lattice setup for her eyes didn’t work anymore…we’ll look at that another time.

All elements were provided by Asset Media International

For feedback or questions, please e-mail schinkster@hotmail.com

Written by Christoph Schinko - 07/09/2000