A case studie of modyfing a Characters parameters by a mixer in Softimage|XSI
To animate a human being has always been very difficult because of the complexity of the human body. Trying to manipulate one parameter in the body that are affecting many other parameters, is only one problem to solve when trying to animate a complex character. Softimage|XSI gives the opportunity to let the user solve this problems in a lot of ways, and some solutions are given in this case study. What we first of all wanted to do, was to use an analog mixer, a Peavy PC1600x, to drive the charaters parameters. The choise of using a mixer was done primarly because of two different reasons. First of all Softimage|XSI is supporting the hardware, even if its quite difficult to setting up parameters in the mixer. And the second reason was made by the fact that it’s very useful to drive more than one parameter at a time. In Softimage|XSI there are plenty of ways to modify a objects parameter. The easiest way is to use chains of objects, like skeletonparts and constraints to hold the chain. Another useful instrument and easy to use, is the sliders that Softimage|XSI provides to translate objects. The sliders can even be combined together in custom parameter sets and in that way control more than one object at a time. Other ways that are more complicated but very efficience, is to use expressions or modifying the functioncurves. XSI even provides an animationmixer where you can modify predefined animation made out of shapes or just usual keyframing. Finally another hard but useful way, is to use programming to modify a objects expressions, movement and animated parameters.
PC1600x is a hardware mixer from Peavey with 16 channels and programable up to 96 channels. As said before XSI|Softimage support this mixer and will work together very well with an USB-adapter. The far most biggest advantage by using a mixer is the flexibility. To change more than one parameter at a time will make 2D-parameters suddenly appearing as real 3D movements and the opportunities to calibrate the characters movements will be much wider and more precise. And if you take advantage of the other ways in XSI|Softimage to build 3D sliders and using expression, you have the ultimate tool for steering and manipulating the characters parameters.
PC1600x only have some small disadvantages, one is the graphical user interface in XSI|Softimage, which we’re actually trying to improve. Later on in this article, we’re hopefully giving the reader a useful tool and some suggestions to avoid common problems with the mixer. Even if it seems to be the perfect tool for animating and modelling 3D objects, it stills demands a few skills. To create an object with a natural look a deeper understanding of different parameters are needed, some artistic knowledge of the objects natural behaviors and fundamental theory of perspective.
Finally, and maybe the most important thing about 3D and art, thats often are being missed, it’s to remembering having a good time during work. This is unfortunately something thats very often are being put into second place and particullary when the technical pieces are in focus. So, dont forget to put all of your magination, creativity and fantasy into work.
I think 3D much to often, of course not allways, are used to imitate the reality down to the very last detail, and just strictly following the laws of nature. Unfortunately 3D much to rare are used to explore the limits beyond the ‘real’ world. Often I find it hard realizing the meaning of creating something, thats with advantage, can be done with a simple camera. If Nobody has the capability to see the difference between photos and a 3D modulated pictures, whats the point?
This case study discuss modelling and animating an object by changing its parameters . Every object always has some parameters, and a 3D object has at least three directions in the room. The objects parameters in the room is defined as x, y and z. If we want to, we can call them left-right, up-down and back and forward. But before we proceed, we also must think over one important thing. The parameters on an object can exist as both local and global parameters. We first must know in what reference plane we are changing our parameters in. You can think about it like this and I will try to explain, for example – if I bend one of my fingers, so it moves from two inches from my open hand, to just one inch and want to change this parameter in Softimage, it most likely not a good way to change the y-parameter from 2 to 1. Because, how do we know that is not, 51 to 50 inches it has moved, maybe we shall measure the distance between the foot and the finger and not the distance between the hand and the finger? Of course we can pick what point we want to have as a referencepoint, but even if we can do that, we must be able to understand the difference between global parameters and the more useful and flexibel, local parameters. We can think of the global parameters as descibing the distance of all objects to a point in the room. Like every planet in our solarsystem has different distances to the sun. But if we for example want to draw jupiter and earth according to scale on a peace of paper, we’re just intrested in the distance from the middle of the planet (0) to the planets surface. And we cant care less if it take ten or maybe twenty minutes for the light from the sun to reach the two planets surfaces. There’s also one more parameter to consider when we want to animate an object and it’s the time. Of course the affect of time is very important to the objects behavior and especially when more than one object at a time is involved in the animation. But right now we’re just going to look at the parameters in the room.
As mentioned before, there is different parameters in XSI|Softimage and among others, they differs in functionallity and how they are arranged. But every object has as default, some global and local parameters. Broadly the global parameters sets up where the object appears in XSI|Softimage different windows and the most important local parameters sets the size ,scale and position of the specific object. There’s a few ways to change the values of these parameters, for example we can write them in a window or just to modify their values through the sliders (see pic.) Even if it’s intresting to have the possibility to change an object by a slider, we really want to do some more with an object than just modify its size or length. Ssomething that would be very useful if we have the possibility to change more than one object at a time. To attain this goal, we have to build, what they call in XSI|Softimage, a custom parameter set.
The animatable custom parameter set or the proxy parameters is just two or more sliders that have been combined together. When the new proxy slider is moved in any direction, it moves all parameters on the objects were the original parameters belonged, just before the new custom parameter were build. It’s quit easy to create these parametersets and a convenient way of moving multipel objects at one time. It’s also very useful when you have something that moves linear. An easy example is a face where you can setup sliders for a happy or a sad face. And as you easy can realize, its not a problem to build very komplex slider setups.
To explain expressions in an easy way, we can compare them to the custom parameterset. Expressions can also, like the proxy parameters be tied to a specific slider and both are animatable. The two slidertypes is quit alike, but there is some significant differences. Expressions is taking the movement of an object one step further and you can modify a single objects forms in many ways that are impossible to do with proxy parameters. A big difference between this two approaches of modifying an object is the way how we create them. Expression are almost exclusively made out of mathematical formulas. And because an objects properties is made just out of pure math and the object wouldn’t even exist without math, it’s easy to understand the power of expressions. It’s really not very hard to learn, but it require someone, that in some way, at least understand some basic formulas in algebra and have visions of how mathematical functions can move in space. Witthout any advanced mathematical formulas, and just to give a picture of how expressions can be used, I will take two very easy examples. The f irst example is just one of the most easiest expression we can do. If we’re having two objects and we want them to move in just the same way, it can for example be two very komplex custom parameter sliders. But it makes no difference. The only thing we have to do, is making the both objects equal to eachother and it will be done by just writing an ‘=’ sign between those objects. XSI|Softimage provides us with an expression editor were this short statements can be evaluated and added to the object. The editor also brings us the most usual formulas to use. The second example is more of an explanation what an expression can accomplish, than some mathematical explanation. If we think we have an object and want to change its form, maybe an object that behavs like vawes in a not linear mode i.e not just accelerating in its movement and forms. What approach will we take? One way is ofcourse to change every point on the object and modulate it into the desired form. But it’s quit boring if we also want to animate it somewhere between the movements and it shall come back to the original form and then one more time coming back to the first modulated form But as you propably already have guess, the answer must be an expression. I will not get myself entangled into some advanced formulas, but a not to wild guess, will be an expression where we give the object a sinus formula and using one or more variabels to adjust the frequency and amplitud.
XSI|Softimage provides a little different approach to change animated parameters in realtime. You can store your animated clips and get an opportunity to combine them in a userdefined way through the animation mixer. There also two different sorts of clips to store, shapes and animation clips. Shapeclip can be explained as a surface animation stored in different clips. These clips can contains all information about the specific object, or in some cases it depends on which way the user has stored it. In other words it’s possible to store only some of the parameters. One of the animationclips primary information is the function curves. Softimage|XSI provides a graphical animation editor to inspect and change the objects value. The animation editor primarly shows the objects movement through time and gives good possibilities to change and adjust values. Although Softimage|XSI great capabilities it have a little weakness, mostly because of the nonpossibilities of editing the function curves in realtime animation. But actually we found one way to solve this problem, if an object is created to just ‘hold’ the object we want to change the function curves on, it actually will work. The way to do this is to create an expression between the object, were this new object can affect the old one. Sadly the animationmixer still is a rather an unexplored area because of the lack of time.
Developing in Softimage|XSI
What we wanted to do was a new, more userfriendly interface to communicate with the Peavey PC 1600x hardware mixer. Even if the functions already exist in XSI to setup the mixer, it’s not very easy and takes a lot of time. The first approach we were thinking of was to develop a kind of script were all data was given and at the end of the script take all parameters and write them to the appropriate places. But with 16 channels it seemed a bit messy and even if it was much easier to set up the device, there were no good controllers to adjust values, or a view to see which channels that was already bind to objects. Finally we decided to make some sort of property window for the mixer instead of trying to develop an application. We started out with version 3.5.1, but after some weeks, v.4.0 of Softimage|XSI turned up. And it actually got some new implementation possibilities through the script window. And one of the big advantages was the possibility to directly create listboxes, radio buttons and other useful graphical components. In earlier version, the only possibility to create that kind of interface was to create them direcly in XSI:s SPDL ( Softimage Property Definition Language ) files. The reason why they really have developed this new possibility is because they wants to skip the SPDL files and only wants to use dynamic created propertyfiles. Even if it seems to be a good idea, I decided to implement the SPDL file with the logics, primarly because of the backward compability which disappear if all programming is done dynamically.On the right hand is the final result of the property that’s making the job much easier when working with the mixer. All the logics is programmed in the SPDL file so it must be installed during a add-on, that will be shipped in a near future. The biggest improvements due to the device manager is the easy way to pick the parameters to the channels. Just by picking the parameter it will be combined to the selected channel. It’s also pretty easy to navigate between the channels and check which channel that has a connection to a specific parameter. But one of the simpliest implementation, thats finally seems most useful is the way the offset and scale can be handled. When working with parametersets in complex characters, we found out the importance of having a scale that limits to big movements of the characters objects. So the most useful tool is the sliders to set scale and offset. This property is also shipped with three buttons that take care of starting the device and loading this property window and the other two button has the ability to load and save presets for the mixer. Some minor bugs will appear if the device not is properly mounted i.e not active and added in the device manager. Also must the device and objects being correct implemented. Important when loading a preset is the objects in the loaded scen satisfy the target objects. Theres also one more important notice to make and it considers XSI:s original graphic interface. Because of the limitations in programming the window interface and due to the property windows dynamical update it’s recommended, NOT to use the SAVE and LOAD button. It worst scenario it will cripple the properties.
Softimage|XSI provides a webinterface for interacting with the application. It has some small advantages due to the ‘real’ software. It’s primarily the possibilities to use the pure java and VB-script engine in webpages that’s make it intresting, even if we’re still stuck with the XSI script engine when interacting with the application. But an idea could be to use ActiveX components to interact with XSI or maybe a java application in Netview. The primary reason for this discussion is the idea of creating an applikation that’s independent (see Future development) and taking advantage of real programming, instead of the poor scripting language. Anyway, we have created a singelthreaded software demo in Netview that shows the overall functions of the hardware mixer. It contains two buttons, one to update the sliders and one to launch the properties we build. Obviously the property button needs the add-on installed, to work properly. An advantage with this demo is the handling of the sliders, it takes the initial values of the objects and giving a graphical picture of it values by the sliders.
Because of the great advantages and opportunities a mixer provides, when it comes to handle more than one object at a time, it seems like a good idea to develop an application that’s easy to use and can handle objects in the same way as the hardware mixer. What first comes to my mind, is a softwaremixer working like the real mixer, but can be handled with the keyboard. By changing every channel with different keys on your keybord it would provide at least a couple of object to steer at the same time. Obviously the software must be multithreaded, but the biggest problem I can think of, is how to communicate with Softimage|XSI. Maybe there is a solution by emulating the hardware and taken advantage of the already implemented support for mixers in XSI. We’ll see what the future provides us with.
Jens Pettersson for Michael Johansson