This tutorial courtesy of Eric Poirer and XSIStation
This is my first tutorial so if you feel it's need more info please tell me
This is a tutorial to create a expression driven tank transport for a project I'm currently working on called "Code name: THX" (no relations with Lucas) I've always liked to work with expressions, Maya's expression are great BTW, so I decided to try out XSI expressions, unfortunately they are not as good as in Maya, they lake the algorithm like: if, while, for,.. but from what I've been told they will be greatly improve in the next version of XSI (v1.1 ??). Algorithmic expressions will also greatly improve XSI particle system... I hope ! On with the tutorial 1. Import you scene in XSI, in my case 80% was done in Maya, the rest is currently being done in XSI, and since this is a tutorial on expressions I'm only going to used the low rez version of CAT-17. XSI now support layers, so my suggestion is to created several layers for different part of your scene e.i. Background, Tank, Tank_details, Wheels, Treads. To created a layer click on the Layers->New layer button on top of MCA (Main Command Area). Select the object(s) you what in that layer, click the layer you what with the drop down menu, just below the Layers button in the MCA, then go to Layers->Move selection to current layer to put the object(s) in the selected layer. Maya users already knows the many advantages to having a well organist layered scene. For regular Softimage user the layer function is a vast improvement to the old hide/unhide and will greatly improve your workflow. 2. Crated a curve around your wheels, that curve will be the path that the treads will travel around the wheels and name this curve track_path_R BTW having a good naming convention is your best allied in righting expressions and scripts, try to be logical in naming objects, in my case R is Right, L is Left. 3. Select the tread and rename it tread1, the 1 is important you will see why later. Make sure that the center is in the middle of the tread, click the Center button in the MCA and move the center is you have to. If you imported your objects from Maya, you will probably have to. 4. Select tread1 and click on Path->Set Path in the Animate tool bar (green colored). Then click on the curve track_path_R to select it as the path. A window for PathCns should pop up, in the Tangency tab you may have to adjust the Axis to Align to but you tread in the right position, by default it's X. BTW if you lose the window you can get it back by RIGHT click on Property->Kinematics in the MCA 5. Still in the same window, click on the Path tab then RIGHT click on the little icon beside Path Percentage and click on Remove Animation, the icon will turn back to green. 6. Still with tread1 selected click on Edit->Duplicate Multiple and enter the number of treads you need to close your track loop, in my case I needed 74 so I copied 73. It does not matter if you duplicate more, at the end just delete them. You will get 74 objects, tread1 to tread 74. 7. Create a circle curve and rename it contrl_track_R. Move the points around to create a star, this will greatly improve the visual interaction of the rotating circle. This curve will drive the treads around the path, from 0 to 100+% 8. Select tread1, then RIGHT click on Property->Kinematics in the MCA. In the Path tab RIGHT click on the Path Percentage green icon and then on Set Expression. From there there is two ways to enter the expression, the first one is to click on Object and go get the rotation of contrl_track_R, under the Kinematics->Local->Ori->Euler->X. Or, and this where your good naming convention come in to play, just type in the expression: (you may have to delete the 0.0) ( contrl_track_R.kine.local.rotx /360*100 ) + ( 1*1.351 ) contrl_track_R = The circle star kine = Kinematic rotx = Rotation in X /360 = 360 degrees in the circle *100 = x100 is to transfer the result of (rotx/360) in a Path Percentage 1*1.351 = 1.351 will change depending on the length of your tread you have model, the best way to get to a number that will work for you is to try out different numbers until you get the best result. The 1 will change depending on the object e.i tread2->2*1.351, tread3->3*1.351... + = this places the tread at the correct position on the path. tread1 = 1.351%, tread2 = 1.702%, ... 9. Once you have entered the expression: ( contrl_track_R.kine.local.rotx /360*100 ) + ( 1*1.351 ) you can click validate and then Apply. 10. Since they are 74 tracks, editing one be one every track would be long, keep in mind there is a Right and Left side, 148 treads. This is where the XSI VBscripting comes in to save the day ! The first way would be to create a script that will assign the expression to all the treads. The algorithm would go something like: I=1; space = 1.351; for I <= 74 do SetExpr "treadi.kine.pathcns.perc", "( contrl_track_R.kine.local.rotx / 360 * 100 ) + ( I * space )"; I ++; Since I'm new to VBscripting I have not tried it, I'm not sure if treadi would work in XSI. The way I did it was to copy the SetExpr line 74 times in the script editor, I change the numbers from 1 to 74, and then just do a find replace on 1.351 to test out the number in step.7 11. Now to set the expression to the wheels. Select one of the wheels, make sure that the center is position correctly, RIGHT click on Property->Kinematics, click on the Local Transform->Pose tab, RIGHT click on the Rotation X green icon->Set Expression. Again here there is two ways to enter the expression: contrl_track_R.kine.local.rotx*3.7 Again here 3.7 is a number that fits my wheel size, play with that number for your wheels so that they will be synchronize with the treads. 12. Apply this expression to all the wheels 13. Apply the same procedure for the Left side track 14. Now we will control the drive of the tank with one clear object, it's good to keep things clear because, in most cases a TD (Technical Director) will created the expressions and will pass it along to a animator. So by keeping things simple and clear it will cut time in the production pipeline, and what could be clearer that a big arrow ! 15. Created a curve circle and move the points around to create a arrow. Renamed it cat_17_direction (or name_direction) Again the naming convention come in to play, it's important to have a clear picture in a scene with 100 different things going on at the same time. 16. Open the Kinematics window of contrl_track_R, under the Local Transform, Pose, Rotation X, open the Expression Editor and enter this expression: cat_17_direction.kine.global.posz*14.35 Again here 14.35 applies to my tank, to find the correct your correct number adjust it until you see that the treads don't slip as you translate the arrow in Z. 17. Finally make sure that every object is parented correctly or you will see pieces of your tank that will not move.