Two Undocumented Lip sync commands in Softimage 2011 SP1

June 21st, 2010 by Luc-Eric - Viewed 1370 times - Popularity: 5% [?]

Hi there! It’s been a while..

In Softimage 2010, a new lip sync feature was added to Face Robot (here’s the doc).  In 2011 SP1, there are three new commands to get the data out into your own tools.  One of them doesn’t even require the use of Face Robot and calls the speech recognition library directly.

The commands return VBScript-compatible multi-dimensional arrays.    This is transparent in VBScript and Python, but it requires a bit of magic in JScript, so check the example in the first command if that’s what you’re using.

Getting Phonemes without Face Robot

SIExtractPhonemes

Description

Extracts phonemes from an audio file using a text to guide the recognition

Scripting Syntax

oReturn = SIExtractPhonemes( Language, FileName, GuideText );

Return Value

Returns a multi-dimentional array of results. Each column will contain

1) The Unicode IPA code of the phoneme

2) The Start Time of the phoneme, in seconds

3) The End Time of the phoneme, in seconds

4) A human-readable hint of phoneme, useful for debugging

Parameters

Parameter Type Description
Language String Language to use. “en” for English, or “jp” for Japanese
FileName String Path to an audio file, for example a .wav or an .avi file. Mono and 16000k is recommend. Same audio formats as Audio in Softimage; MP3 not supported.
GuideText String Text that match the spoken words in the audio file. Avoid any unusual punctuations or strange characters that may throw off the engine

Examples

JScript Example

//returns a VBArray object, which require using the .getItem method in Jscript because they are not
//native objects there.
//However, they work transparently like multi-dimentionnal arrays in VBscript and Python
var res = SIExtractPhonemes ("en", "s:\\here_be_dragons.wav", "Here be dragons, the map says");
arraysize = res.ubound( 1 );
logmessage( arraysize + "phonemes found" );
for (  i=0; i < arraysize; i++)
{
logmessage( "IPA#" + res.getItem(i,0)
         + "(" + res.getItem(i,3) + ") "
         + "Start Time(sec) " + res.getItem(i,1)
         + "End Time(sec) " + res.getItem(i,2) );
}


Getting Lip Sync Stuff Out of Face Robot

This allows the artists to tweak the phonemes with the Face Robot UI, but used the data outside of Face Robot, perhaps in a game engine that does phoneme blending already.

The second command even allows you to get the result of the blend algorithm of Face Robot, so you can make a simplified playback environment.

GetPhonemeFromSpeechClip

Description

Returns the data of the Face Robot speech operator, as shown on the tracks of in the Lip Sync view. The data starts at time zero, and needs to be offsetted by the offset of the Speech Clip.

Scripting Syntax

oReturn = GetPhonemeFromSpeechClip( SpeechClip );

Return Value

Returns a multi-dimentional array of results. Each column will contain

1) The Unicode IPA code of the phoneme

2) The Start Time of the phoneme, in seconds

3) The End Time of the phoneme, in seconds

4) A human-readable hint of phoneme, useful for debugging

5) weight for this phoneme

6) in falloff for this phoneme

7) out falloff for this phoneme

8) shape weight for this phoneme

9) shape in falloff for this phoneme

10) shape out falloff for this phoneme

11) blend start scale factor

12) blend end scale factor

13) phoneme variation

Parameters

Parameter Type Description
SpeechClip String The Speech Clip from the animation mixer

Examples

VBScript Example

phonemes = GetPhonemesFromSpeechClip ("Face.Mixer.Phoneme_Speech.SpeechAction_Clip")
LogMessage "phoneme data"
for i = 0 to UBound( phonemes )
	LogMessage "IPA # " & phonemes(i, 0) & "(" & phonemes(i, 3) & ")" & " Start (sec)" & phonemes(i, 1) & " End (sec)" & phonemes(i, 2)
next

GetPhonemeBlendFromSpeechClip

Description

Queries the Face Robot speech operator for the list of phonemes and weights at a given time, as evaluated by its blend algorithm. At a given time there generally is the current phoneme, as shown in the lipsync view, but also some of the previous and the next one. With its different parameters, the speech operator could evaluate a different blend for the lips, jaw and tongue.

Scripting Syntax

oReturn = GetPhonemeBlendFromSpeechClip( SpeechClip, [Channel], [Time] );

Return Value

Returns a multi-dimentional array of results. Each column will contain

1) The Unicode IPA code of the phoneme. Value zero is the rest pose

2) A human-readable hint of phoneme, useful for debugging

3) The weight of the viseme at this time

4) The viseme variation selected by the user

Parameters

Parameter Type Description
SpeechClip String The Speech Clip from the animation mixer
Channel Integer 0 for Lips, 1 for Jaw, 2 for TongueDefault Value: 1
Time Integer Frame at which to evaluate the blendDefault Value: Current frame.

Examples

VBScript Example

phonemes = GetPhonemeBlendFromSpeechClip ("Face.Mixer.Phoneme_Speech.SpeechAction_Clip")
LogMessage "phoneme blend"
for i = 0 to UBound( phonemes )
	LogMessage "IPA # " & phonemes(i, 0) & "(" & phonemes(i, 1) & ")" & " Weight " & phonemes(i, 2 )
next

Popularity: 5% [?]

Vintage Softimage – A tribute to Phoenix Tools and Arete

June 4th, 2010 by Stefano Jannuzzo - Viewed 2138 times - Popularity: 10% [?]

The middle-aged of you will probably remember those names from the 90s.

Phoenix Tools was a plugin company for Softimage 3D, and I was one of the founders. We did good and bad, and we eventually closed down in 2002.

Arete had an excellent reputation for their ocean and atmospheric library, called Digital Nature Tools. I think their main business was in military simulation, however they had a part in every cg-generated ocean in the movies of the 90s.

In 2001 we joined forces to port their software under XSI (I think it was 2.0). Unfortunately, after the first version came out, both companies shut down.

8 years later, I am working on a feature animation with a few shots in water, and I realized I still had on some cd the arete psunami libraries. So, I decided to give it a try. I removed the license check from the shaders and I compiled them with good old Visual Studio 6, linking against the oldest mental ray library I could find (3.3), and in the end it worked. I was kind of touched when I finally saw the displaced grid rendering in Softimage 2010.

I think I will do no harm to anybody releasing these shaders. Both companies are dead since long, and this is my little tribute to them and the talented people who worked there.

The addon is only available for win32, and no, no chances for other platforms. That Arete library is the only one I have. If you do, use it at your own risk (and fun, i would say. There are probably better ways to do oceans nowadays).

And, you know what, I don’t even know how the full package works. I don’t have anymore the documentation, nor the scripts we provided. If my old companions will find them, I will post them later.

The basic usage however is easy. You have to connect a DNT_Ocean_Sh and DNT_Time to a DNT_Ocean_Evolver. What come out is the ocean instance, that can then go into the other nodes. Also, you want to apply DNT_Air as environment to have nice reflection and the atmosphere.

Popularity: 10% [?]

Sixbirds PixelParticles 1.0

March 3rd, 2010 by Helge Mathee - Viewed 4563 times - Popularity: 16% [?]

Hey folks,

time to release another plugin under the flag of Sixbirds Barcelona!

As already shown in a teaser video on vimeo.com, we worked on a plugin to use particles as pixels to unleash the power of ICE to textures.

Read the rest of this entry »

Popularity: 16% [?]

Constant passes without constant materials

February 19th, 2010 by Stefano Jannuzzo - Viewed 4364 times - Popularity: 11% [?]

Recently we had to face this interesting problem: extracting a constant pass out of an arbitrarely complex rendertree. In short, we received scenes set up for rendering, with a given number of passes and channels already set up. However, we needed an extra constant pass which was not planned in advance.

The rendertrees have all kinds of materials, with bump, transparency and reflection in place.

The most obvious approach to solve the problem is brute force: writing a script that would traverse all the materials, and substitute each material with a constant one, using as color the diffuse color of the original material, and inheriting all the subtrees for the transparency and reflection mixing. This would have required a couple of days of scripting, and, as any brute force approach, is not really elegant.

Read the rest of this entry »

Popularity: 11% [?]

Sixbirds Rigging Solvers (UPDATE V1.3)

January 19th, 2010 by Helge Mathee - Viewed 11629 times - Popularity: 38% [?]

Hey folks!

Edit: I upgraded the addon to version 1.3, see the 13th solver for new description of the Nulls 2 Nurbssurface. Additionally I fixed two bugs and removed some nasty logmessages from the Null 2 Curve solver. Some solvers are NOT compatible with the version 1.3, so I will keep the link to the previous versions around.

So finally after a good first round here at Sixbirds in Spain we decided to release some of the tools we are using for production to the community. At this point we are sharing our rigging solvers, a collection of custom operators for “solving” certain equations, like IK, Bezier projection, curve lookup etc. The collection includes 12 different solvers. Please have a look at this video, which gives you a quick runover of the technology…

Read the rest of this entry »

Popularity: 38% [?]