Skip to content

Got a little mention on CGTalk

Link to Article about Zambezia


Weight Map Tools v1.1

Just an update for the tool Im working on here and there.

– Fixed some bug issues

– Added invert weight selection

-Smoothing can now be applied as a percentage


Weight Map Tools v1

Hello everyone,

So its been a while since I last posted, I have realized that this blogging thing is alot harder then it seems, but also have been very busy with some side studies and personal projects, and today im happy to release my first plugin for weight maps.

It allows the user to select an object which may have one or multiply weightmaps. Users can specify the weightmap and then do a wide variety of things to there weights.

  • Specify Value for selected points
  • Mirror Weights – a symmetry map is needed
  • Smooth Weight ( does a linear smooth) – you can specify the amount of points you want it to take into consideration and a percentage you want to apply
  • Copy Weights from a specific point onto Selected point

It came to be due to the fact that I was doing alot of shape work and needing to use weights to modulate them.

It was developed in softimage 2013, but should still run on previous version.

If you run into any problems or bugs just leave me a message here or mail me.

download here – wanted on my wordpress site but wasn’t taking .addons

Have fun and enjoy 🙂

p.s. the code isn’t the cleanest as I smashed it out in two evenings 😛

Debugging your Rigs / Scene

Wow, so its been much longer then I had anticipated since my last update, I had hoped to have them appearing more frequently, but better late then never :D.

I have recently discovered the most amazing tool inside softimage, that any rigger or TD should use in trying to figure out why his/hers scene is running slow or ICE tree is not a fast as it should be. When I got introduced to it, it opened my eyes. I now use it soo often to just see where my bottlenecks are occurring, or if I could try and stream line something a bit better….

So whats the tool??

The Debug tool

The Scene Debugger, this little guy is located just to the left of you playback options or right of the scripting options.

How it works:

Its very simple to use, just keep in mind its only evaluating what is currently in the viewport, so if you have isolated something in the viewport it wont evaluate on the hidden objects, that being said is does evaluate the hidden objects that are connected in what ever you have in view on the viewport.

The Debug Toolbar

Once you have clicked on the debug icon, the above menu will appear. You then have to click the stop watch, play your scene (the more frames you play through the more accurate your debug, also remember if your testing a rig, have it animated, as this makes for a better test environment as the system is actually interpreting keys/actions). Once your timeline has come to an and click the stop watch again, and your scene will get broken down into the different process that get evaluated, this also includes OpenGl writing to the sceen.

ICE Debug:

The ICE debug works very similarly to the scene debug, but has a few difference in showing the result. You do the same steps as above:

  1. Click the Stopwatch
  2. Play your timeline
  3. Click the Stopwatch again

Once you have done that you will see there will be no change, to display the result you will have to select it from the drop down menu as you can see in the below diagram no. 3

Using the ICE debug

Before the debug

With the debug visible

As you can see with the debug visible it will show how long it takes to process a node, of will show the cumulative time to get to a specific point in the tree hierarchy, depending on what you specify to be visible.

More Information:

The Autodesk Help file

Hope this helps some of you out there, I know it opened my eyes and really helps in seeing bottle necks.

Until the next post,  keep softing away 😀

The end of one adventure and onto another…….

A day like any other, woke up, got dressed, drove to work, but its not like every other day. Today is my last day at Triggerfish. Many of you out there may not know what Triggerfish is or does, If your reading this blog Im sure you have some inkling as this is mainly a Softimage blog, and that this is where I work so must be some studio which uses Softimage, your are indeed correct,  but for the other people who may have stumbled upon this blog let me delve a bit more into Triggerfish and how amazing my journey has been at this studio, and whats next.

Triggerfish is an animation studio like no other of its kind found in South Africa or Africa if not the world, the reason I say this is that, what other full featured animation studio is based on a farm mere minutes away from a bustling city center, That in itself is something spectacular, but what makes Triggerfish truly an amazing place to work at are the people or fishies that reside in this farm tank. The Company has truly gone out of its way to source the top talent that can be found in South Africa, and has started attracting lots of attention from overseas.

The Barn

The reason why most of you may not have heard of the company before is that its films have not yet been released to the public, ooo I cannot wait for the release of Zambezia. Why you may ask? well first of all its the first movie I got to work on, the first International South African movie that will bring proper attention to the SA 3D Animation Film market, and its got a lot and I mean a lot of technical challenges ( that really were fun and challenging to solve ), but I’ll let you be the judge and point you to the link for the trailer.

My Desk - Attack of the postet ninjas

So any way, back to the last day as a fishie. Upon arriving at my desk it had been blasted with postet love ROFL! which was epic, really awesome, they had stuck postets on everything and under everything, it was like a game of hide and seek, then the normal day of wrapping up loose ends started until lunch where we all missioned of for one last epic Spur meal ( burger resturant ), upon arriving back after lunch I found my desk had once again been assaulted, but this time with sheep haha… was a brilliant surprise, the day continued till about 4pm and then we had some drinks and I got a photo of the entire studio, going to miss everyone as they where like family.

When Sheep Attack

One of the weirdest things for myself , and really hit home that I was leaving was cleaning up my desk, Im sure all of you out there in a studio have a desk space that is your own and some have been able to decorate it how you like. As we all spend a lot of time at our desks its great to try and make them your own, Im a major vynil enthusiast and have a small horde of vinyl toys that keep me company and some scribbles, so packing them up really made me realize that this was it, I was leaving.

All the fishies

It was sad to say good bye to everyone and leave mid production during Khumba, but I cannot wait to see the finished product as if you see Zambezia know this, Khumba is a whole lot better, and they have pushed the bar.

So where to next I can hear some of you whisper…. ( cant really hear that would mean I would be particularly crazy )……

A hop on a plane, plus minus 30 hour flight and BOOM! down under I am 🙂

Now to start at Animal Logic 😀 DAMN I CANT WAIT!!! SOOO AMPED XD ( thats also the main reason why I haven’t been able to post any updates on my Matrix’s and other blog entries, packing been crazy ) , but I have arrived and with this post up ill be back on track to start posting an entry a week ( the plan, I hope I can make it come to pass ). Now to hunt  for an apartment and complete my SCOP’s YEAH!!!

hope everyone out there is doing well.


P.S. here some links

Zambezia Facebook Page

Khumba Facebook Page

Sending out flares

Hi everyone,

So the biggest problem with having a blog is

1. Keeping it up to date, most blogs I have come by seem to end up going stale and die 😦 and alot of them are done by some extremly talented guys and girls.

2. Keeping people up to date, publicity and such things, ie letting people know when a new article has been writen.

Im not one for blatant spamming of people out there, so I have created a Facebook page that you can like if you wish to just get some information, to interact a bit more with the blog and topics I may cover.

Have never been a Tweeter, but thinking about maybe jumping on that also so people can follow if they want.

I really want this blog to do well, and actually add to the community and help people out 🙂

Have to get back to the Matrix’s, I have my Rotations now working, just wanting to get the SCOP’s done 😀

Simple Introduction to Matrix’s in Softimage

Hi Everyone,

I saw on Tuesday someone brought up the topic of matrices, and there where few comments about them so I thought I would get my first blog post done on the topic of Matrices, what are they, how are they helpfull in Softimage and most of all how do we use them.

What is a Matrix:

In simple terms a Matrix is a 2D array of numbers that represent some sort of information, in our case its the Global or Local Kinematics Property.

What most people assume is that a matrices are a very simple representation of Translation, Rotation and Scale and some other arb grouping or numbers in a list

[ rotX, rotY, rotZ, ??]
[ sclX, sclY, sclZ, ??]
[ tranX, tranY, tranZ, ??]
[ ??, ??, ??, ??]

This is infact incorrect, yes the values that are represented in an matricie are the Translation, Rotations and Scale values, but there represented in a much more complicated way and rotations are interacted with differently not just direct rotations along the X, Y,Z. In a Matrice you have your rotation and point from where you want to rotate or your relative space of rotation as one could think of it.

So a quick break down or the simple information a Matrice has:

Matrices are relative to one another, in other words if you multiple matricies together it will use the matricies multiplied as its relative to an arbitary point.

A matrix in Softimage looks like this:

 [ scale X , matriXinfo, matriXinfo, matriXinfo ]
 [ matriXinfo, scaleY, matriXinfo,matriXinfo ]
 [ matriXinfo, matriXinfo, scale Z, matriXinfo ]
 [ translate X, translateY, translate Z, matriXinfo ]

The basics of a Matrix in Softimage

Most Matrices outside of Softimage have the translation along the right hand side.

As you see above alot of the elements I have named matriXinfo, this is due to special equation one will perform on a matricie that will use these specific elements place holders, I will ge to that at a later stage. matrixInfo is not the correct mathematical term, its just a way I think of it in my head, Please feel free to correct me.

If you where to now create an ICE Tree now on a null and attach a Matrix to the global position of a null you would be able to see the different ways you can quickly interact with the null and move it and scale it.

Please note Scaling is relative to a arbitary point, so if you just have a simple matrix snad scale it will scale correctly if you have two Matrices multiplied together and scale the one you will see it will scale from the point of the other matrix. I will show you how to get around that later.

With Matrices you never add you always multiply.

Why Use Matrix’s:

Using a Matric is faster then doing all the other property process to worm your way down to your rotation, translation values, and is extremly fast when trying to compute children to parent combinations.

Interacting with Matrices

In Math 1* 1 = 1
In Math X * 1 = X
In Matrix X * [ 1,0,0,0]
              [ 0,1,0,0] = Matrix X
              [ 0,0,1,0]
              [ 0,0,0,1]

That is the basic building block for interaction with a Matrix for u.


To translate a Matrix all you have to do is multiply the matrix’s together and change the Translation X, Translation Y or Translation Z on the Matrix.

[ 1,0,0,0]              [ 1,0,0,0]            [ 1,0,0,0]
[ 0,1,0,0]              [ 0,1,0,0]            [ 0,1,0,0]
[ 0,0,1,0]       X      [ 0,0,1,0]       =    [ 0,0,1,0]
[ 0,0,0,1]              [ 0,2,0,1]            [ 0,2,0,1]

in the example above we added 2 to the Y-axis


Note: Scaling is relative to an arbitery point or the origin

[ 1, 0, 0, 0]              [ 1, 0, 0, 0 ]            [ 1, 0, 0, 0 ]
[ 0, 2, 0, 0]              [ 0, 1, 0 ,0 ]            [ 0, 2, 0, 0 ]
[ 0, 0, 1, 0]       X      [ 0, 0, 1, 0 ]       =    [ 0, 0, 1, 0 ]
[ 0, 0, 0, 1]              [ 0, 2, 0, 1 ]            [ 0, 2, 0, 1 ]

The above scaling example you will think that you have scaled your object by 2 on the X axis at the objects origin, but infact you have scaled it by two from the objects origin.

To scale an Object around the objects center you have to input the objects center in an equation in specific places I mentioned earlier ‘MatrixInfo’

for the next example

Object Center or Arbitary point = 3,0,0

[ 1, 0, 0, 0 ]                               [ 1, 0, 0, 0 ]                 [ 1, 0, 0, 0 ]
[ 0, 2, 0, 0 ]                               [ 0, 1, 0, 0 ]                 [ 0, 2, 0, 0 ]
[ 0, 0, 1, 0 ]              X                [ 0, 0, 1, 0 ]        =        [ 0 ,0, 1, 0 ]
[ 3( 1 - 1), 0( 1 - 2), 0( 1 - 1), 1 ]       [ 0, 0, 0, 1 ]                 [ 0, 1, 0, 1 ]

It might look a bit hard to grasp but what I have done above, is taken Arbitary point’s X position and then multiplied it by the result of 1 – scale X and performed that on X, Y, Z

ArbitaryPointX( 1 – scaleX ) which can be writen as [ apX( 1 – sX ) , apY( 1 – sY ) apZ( 1 – sZ ) ]

An ICE tree showing how to setup a Scale Matrix


The Z-Axis (Roll)

rotZ = The Angle of Rotation you wish to apply

[ cos( rotZ ),-sin( rotZ ),0,0 ]
[ sin( rotZ ), cos( rotZ ),0,0 ]
[ 0,0,1,0 ]
[ 0,0,0,1 ]

The X-Axis( Pitch)

rotX = The Angle of Rotation you wish to apply

[ 1, 0, 0, 0]
[0, cos( rotX ), -sin( rotX ) , 0 ]
[0, sin( rotX ) , cos( rotX ) , 0 ]
[0, 0, 0, 1]

The Y-Axis (YAW)

rotY = The Angle of Rotation you wish to apply

[ cos( rotY ) , 0, sin( rotY ) , 0 ]
[ 0, 1, 0, 0 ]
[ -sin( rotY ) , 0, cos( rotY ) , 0 ]
[ 0, 0, 0, 1 ]

*Note: If you multiply the 3 Axis before you multiply the translation onto the matrix it will rotate around the world center with an offset of the translation Matrix. If you Multipe the Tranlsation after the Rotations then the object will rotate around its own center and keep the translation position

How to setup an ICE Treeto rotate around the origin

Rotation around an axis ie Rotating around an arbitary point: When you rotate an object, you are always rotate around the world axis, so in order to rotate around a specific point in world space you have to offset the world axis which you will be rotating around. As you have seen above we always rotate one axis at a time, so we shift the world axis one at a time. To test if my rotations where correct I would set a 2 keys and nable ghosting to see how the object rotating rotates around my arbitary point.

NOTE: Busy working on the rotation around an arbitary point ICE tree and Python scripted operators which I will attach at a later Stage( hopefully this weekend)

Reflection or Mirroring

Mirror X

 [ -1,0,0,0]
 [ 0,1,0,0]
 [ 0,0,1,0]
 [ 0,0,0,1]

Mirror Y

 [ 1,0,0,0]
 [ 0,-1,0,0]
 [ 0,0,1,0]
 [ 0,0,0,1]

Mirror Z

 [ 1,0,0,0 ]
 [ 0,1,0,0 ]
 [ 0,0,-1,0]
 [ 0,0,0,1 ]

They can be combined in any way you like, depending on the axis you wish to mirror

Hope you found this helpful, let me know if anything I wrote was incorrect or you want me to explain or cover something else.

Cheers for now