Friday Flashback #169

Ruby the CG parrot in a Softimage-Live virtual set.

From the SOFTIMAGE|3D docs:

You can synchronize live action and computer-generated (CG) animation in real-time to create a virtual set by using SOFTIMAGE channels and SOFTIMAGE Live. This involves creating a set and virtual characters in SOFTIMAGE|3D to interact with real actors that are positioned in front of a blue screen. Real people control the movements of the virtual character and the camera in real-time!

Softimage 2015 User Guide compiled help file

It took a bit more work this year, but here’s a CHM version (210MB) of the Softimage 2015 User Guide.
The User Guide is available online , and you can also download an offline HTML version.

Update: If you don’t see any content in the right-hand pane, right-click the .chm file in Explorer, and click Unblock.

The CHM version has a better index. I was able to use all the index entries, not just the top-level entries. See the difference in the screenshot below?

This year, I had to generate the CHM toc and index from these huge JScript arrays of anonymous objects. It was actually pretty simple, I just needed one little recursive function to handle arrays that look something like this:

ixdata = [
{ l: '', c: [
{ l: '_ADSK_LicServers', f: './files/distrib_render_SettingUpForDistributedRendering.htm'},
{ l: '.motor (normalized motion) files', f: './files/mocap_SavingAnimationDatainNormalizedMotionFiles.htm'},
{ l: '.xsi_n.n (Linux environment script), editing environment variables', f: './files/configfiles_EditingtheEnvironmentScriptsetenvbatand.htm'}
{ l: '', c: [
{ l: '2-point constraints', f: './files/constraints_ConstraintsbetweenPoints.htm'},
{ l: '2D and 3D chains', f: './files/char_skel_WhatMakesUpaSkeleton.htm'},
{ l: '2D motion blur', f: './files/cam_motion_blur.htm'},
{ l: '2D paint', f: './files/compfx_paint.htm'
,c: [
{ l: 'also raster paint, vector paint', f: './files/compfx_paint.htm'},
{ l: 'background color', f: './files/2D_paint_GettingStartedPaintingonImages.htm'},
{ l: 'brush cursor', f: './files/2D_paint_GettingStartedPaintingonImages.htm'},

Friday Flashback #167

From Feb 2003, an xsibase interview With The Mill’s Jordi Bares And Stephen Venning about using Softimage|XSI to bring buffalos to life in the Levi’s Stampede Commercial.


Interview With The Mill’s Jordi Bares And Stephen Venning
The Technical Director and the Producer about bringing the buffalos to life in the Levi’s stampede commercial, using Softimage|XSI.
February, 3rd, 2003, by Raffael Dickreuter

Jordi Bares was responsible for the crowds.

Technical Director Jordi Bares:

-When working on a commercial like this, where do you basically start?
You start listening the client, having a few long chats and trying to know what he really want and needs, trying to understand the project. From the first conversation with them we (the 3D dept., production, 2D dept.) sit down several times to analyse the project as well as those technical challenges that we are going to find (sometimes doing some internal tests) down the road trying to be very honest with ourselves and putting those effects where really are required. If we think this is not going to work to the very highest quality we just sit down with them and tell them.

How was the production process split up between the different specialists?
Well, in this commercial it was a special case because there was two challenges, first the CG animals close to camera and running along with real animals, then the crowd extension and substitution in some shots. So one TD for the modelling/hair/texturing/lighting and one Character Animator/Character TD for the rigging and animation of individual actions and run cycles. For the crowd one animator doing the crowd rigging, writing custom tools for flocking and animating the shots. After that we have got the help from other two animators, one for one crowd shot and one for one hero guy. Also the Environment of the city has been completely stylised so Russell build a lot of buildings and streets and made LA a futuristic city you can not recognize easily.

In what aspects of the commercial were you involved?
The crowd, I spent the first part of the project researching and developing tools and the second animating it.

What was a big challenge in creating the buffalos?
Everything, from the hair, texturing to animation seamless with real animals in front of the camera, full frame. After the first tests we showed to the agency it was clear we were in the right direction and the director started to push even more the animation side of the hero guys, not only putting them in the back as a filling but in the very front of the shot and acting, not just running.

Can you describe what was the approach to create the buffalos?
I am speaking here for others, but Yann spent the major part working the hair and its behaviour while Dadi built a very clever rig and animate from scratch the animal. Everything was keyframed. All has been a polygonal mesh created from references of real buffalos (obviously the ones of the shoot) and a deep analysis on its musculature, mechanics of walking…

What techniques were used to make the animation as realistic as possible?
Dadi worked very hard to make it look perfect, he used common techniques but he knows how this animal moves.
Modeler Yann Mabille (left) and Animator Dadi Einarsson.

To what extent have you used the Animation Mixer?
Dadi used it to animate by layering animation and then “consolidating” those clips that worked well. In the crowd, the mixer was used to offset and randomise the motion as well as the whole library of motion was built around that. Layers of detail for each character.

How much scripting was needed?
I ported an in-house tool developed by Dave Levy some time ago from Softimage3D to XSI, adding some extra things that the bosons would thank…

What unexpected problems did you encounter? And how did you solve them?
It is inherent to the nature of the advertising industry, every time reinventing yourself to catch you for 30 sec. Obviously this is a challenge every time and more than problems you encounter hard decisions, you have to take tough decisions, those that permit you to do it in such a limited time.

It is vital you can solve it and I measure my success on my job by the number of nights I have to stay there.
In this particular project the main problem to me was how to render the crowd in our farm in a way it is fast enough to review/change/review in half a day, so at least I can have 2 full interactions on final quality every day and one extra at the night.
I discarded using any real AI solution just because the import process and the layering of renders would kill the pipeline, and that was a good decision that proved vital as we could render 100 frames with 600 full animals in just 1 hour (using only 40 processors) and our MI files where 100Mb per frame which is nothing.

Personally I have been working in 2 shots for the last part of the job, it was very complex to make it look good as moving procedurally things means that is a trial/error loop.

Are the sets CG or real? If real, where were they shot?
Real and it was shot in downtown LA, apart from that there was a lot of work to add buildings, sky, delete things… lots of flame work.

To what extent have you used post editing to achieve the shots? Was it more a 3D or 2D project?
I would say something close to 50/50… they tweak our CG to make it sit down and I take special care preparing some handy passes in order they can tweak the lights per bison, that is very helpful for the client so they can really tweak things without losing quality plus usually avoids doing another render which is also nice.

To what extent was the FX Tree a big help?
We used in this project a few times… nothing important just fast comps…

What type of editing suite were used for the post editing?
Flame. It is the best tool for commercials and when in hands of a talented artist it becomes completely incredible… I have seen guys here doing things I could ever dream that was possible to do in a 2D suite.

How well did it work to apply hair to that many buffalos?
That was spectacular, it worked really really well, no crashes at all and the results were impressive. The hair renderer is damn fast and pushed the job forward. In fact nobody could point which one of the bisons was CG in the earlier tests.
For the crowd, it was a “few” number of bisons instantiated with hair, in total 600 instances and 20 different 3D bisons. Some shots have 200 of them with motion blur and many area lights so it was quite impressive to see mental ray deal with such a monster…

What techniques were used to create the big amount of buffalos ?
I tried Softimage|Behaviour and it was great, I really plan to use it in the near future but for this job my concern was to put 600 hairy buffalos together, so I could not go in the AI direction, which I was really excited to try, and I am not crazy so I tried every imaginable combination to manage them thru particles and that was the right tool for this job.

To what extent was Softimage|XSI a big help to complete this project?
Without XSI v3 we could not have done this job with this level of quality and in such a small time. The ability to instantiate things, although still in its infancy proved key, and I only see Houdini as a viable solution to do it, specially the crowd part of it. For the hair I reckon we would have to struggle writing our own tools to have this hair quality which obviously would take too long.

Producer Stephen Venning:

At what time was the Mill involved in creating the commercial?
There was already a detailed treatment and storyboard with a clear idea of the commercial, although there was not a plan of how to do it, here is where a company like The Mill enters and offers its expertise.

Tell us more about the creating the Animation/Effects from the point of view of a producer.
I should point out that my role is as the dedicated Cgi producer on this production. Helen Weil was the sterling producer who oversaw the complete post production process.
It is all about putting together a good team, one with experience and knowledge of how to create these kind of effects, it is crucial to find the very best in modellers, animators, and renders etc. The challenge I think in the early stages of a job like this is to keep cool and not panic. Everyone is asking can you do it, can you make a convincing photoreal white bison, can you make 600 of them? You know in theory it can be all be done, but everyone wants you to say “yep, here’s one”. So it’s a mater of putting the right things in place, the people, the schedule etc., then it’s a case of monitoring the progress, and helping the team out along the way, chasing reference, getting approvals, making the tea, and generally poking your nose in and saying what you thinks working or not.

How many people in the end were involved at The Mill to create this commercial?
Actively working on the job were 6 CG people, a core of 4 which took the production at the very beginning, and from a Flame point of view, led by one main artist, 6 others plus 3 supporting flames, so with 2 producers around 18 people, plus all those people in the background that tend to get forgotten that deserve a mention.

To what extent was Softimage|XSI a big help to complete this project?
Pure and simply the fur/hair. We very quickly got some fantastic results, which made us and very importantly our client very happy, and that was largely due to the fur.

Main 3D Team
Jordi Bares
Dadi Einarsson
Yann Mabille
Russell Tickner

Extra Animators:
Koji Monihiro
Rob van den Bragt

View Levi’s Stampede Commercial

How to check if an object exists with no error handling

Yes, this old chestnut…I thought I had posted this ages ago, but I don’t see in the archives, so:

If you want to check if an object exists, and you don’t want to deal with any error handling, then do it this way:

from sipyutils import disp		# win32com.client.Dispatch

def objExists( name ):
    c = disp( "XSI.Collection" )
    c.Items = name
    return not( c.Count == 0 )

print 'Object does exist' if objExists( "XSI_Man.geom" ) else 'Does not exist'

Getting the plugin path

You can use the OriginPath property to get the location of a plugin, but OriginPath is available in the scope of a plugin callback only.

__sifile__ and __sipath__, however, can be used in the global scope.

import win32com.client
from win32com.client import constants

import sipyutils

Application.LogMessage( "Global: __sipath__=%s" % __sipath__ )
Application.LogMessage( "Global: __sifile__=%s" % __sifile__ )

null = None
false = 0
true = 1

def XSILoadPlugin( in_reg ):
	in_reg.Author = "SOLIDANGLE"
	in_reg.Name = "TestPlugin"
	in_reg.Major = 1
	in_reg.Minor = 0

	#Register plugin items

	Application.LogMessage( "XSILoadPlugin: __sipath__=%s" % __sipath__ )
	Application.LogMessage( "XSILoadPlugin: __sifile__=%s" % __sifile__ )
	Application.LogMessage( "XSILoadPlugin: in_reg.OriginPath=%s" % in_reg.OriginPath )

	return true

The above will output something like the following:

# INFO : Global: __sipath__=C:\Users\SOLIDANGLE\Autodesk\Softimage_2015\Application\Plugins
# INFO : Global: __sifile__=C:\Users\SOLIDANGLE\Autodesk\Softimage_2015\Application\Plugins\
# INFO : XSILoadPlugin: __sipath__=C:\Users\SOLIDANGLE\Autodesk\Softimage_2015\Application\Plugins
# INFO : XSILoadPlugin: __sifile__=C:\Users\SOLIDANGLE\Autodesk\Softimage_2015\Application\Plugins\
# INFO : XSILoadPlugin: in_reg.OriginPath=C:\Users\SOLIDANGLE\Autodesk\Softimage_2015\Application\Plugins\