2010 Production
Brightening via Screen Blend Mode vs Gamma vs Curves
by Administrator on Jul.17, 2010, under 2010 Production, Technical Production Notes
Lighting a film for theaters and TV can be tricky. Since 80% of the film is at night and dark scenes, this makes it very tricky. This is due to a few reasons. First the visible range on a traditional TV is greatly reduced compared to a computer monitor of film. Second a TV in a bright room often has bounced light on the screen, reflections, etc. Lastly, the brightness setting and ability on various people’s TV’s may range heavily. Even if it rendered perfectly the filmmaker will still have to make two versions or compromise on either side (TV or Film brightness). For instance, watch Sleepy Hallow or Dark City on TV in a daylight bright room…the watch it in a dark room. You will notice a big shift in visibility of the film.
While this film is kicking off in film festivals, it’s primary audience are students and classrooms, which will predominately be on TV’s in a moderately lit classroom. As this discrepancy was realized when working on the project, I quickly adjusted the brightness of the lights in the scenes I was rendering. However, the frames I previously rendered too dark for my target market. Naturally, I investigated how to brighten the rendered scenes. I was surprised to find that the most common and recommended solutions of using Gamma correction or RGB Curves did not work well for brightening the images for my needs within Premiere Pro.
GAMMA CORRECTION - To brighten an image for TV it is often recommended to use a gamma correction in the editing software. This I found I washed out the image…stripping the color and contrast from the scene.
RGB CURVES - For image brightening, Curves has always been a preferred method as it allows for a lot of control of what and where to shift the colors. However, since I needed to only brighten the scene and not adjust the individual R, G, and B channels, the control was not a big selling point for this approach. Curves also stretches or compresses the range of existing colors. While this works fine for minor tweaks in brightness, it increases the stepping of contrast between pixels across a blended area. This causes a blotch-iness to smoothly blended objects or lighting.
SCREEN BLEND MODE (best) - Stacking the same image and setting the above layers with a Blend Mode of Screen, worked best for the project. Since Screen mode is like a reverse Multiply blend mode it multiplies the brightness of each channel of each layer to the layer below. Since this is “adding” brightness to a color range rather than stretching what is already present it does not exasperate the stepping/blotch-iness as much as RGB curves were lighting was gradated.
Below are some screen shots of the original rendering and the various methods…I hope this helps.
- M
(Original Image: too dark.)
click on image to see full-size.
(Gamma Corrected image: Note how the door to the left is washed out.)
click on image to see full-size.

(RGB Curve adjusted image: There is no washout of color. However, there is a stepping of the blended of the light…which is most evident on the leg to the left. )
click on image to see full-size.

(Screen Blend Mode adjusted image: Minimal wash-out and the stepping in the light is less than that of the RGB Curves adjusted version. )
click on image to see full-size.

(Screen Blend Mode adjusted image (each layer offset by one frame): Since I am stacking layers to increase brightness, this allows me to offset each layer by a frame to help reduce the stepping effect in the blended areas. This does produce a blur effect for motion…which is not always preferred but worked well with this shot.)
click on image to see full-size.

Lip Synch Tip #4: You talk with your face
by Administrator on Jul.02, 2010, under 2010 Production, Technical Production Notes
Ok…that sounds odd. But, it is true. When we talk our nose, chin, cheeks, and furrows move with the lips depending on the phoneme. Say “ah” and most likely, the tip of your nose dips, the cheeks fall into your mouth, and maybe your chin scrunches a little.
Don’t forget to add these into your phoneme blendshapes.
But, be careful with this…the cheeks can look like they are stuttering or flexing too often if the words are switching between phonemes that do and do not use the cheek blendshape, rapidly. This is because in real life cheeks flex in reaction to jaw motion and the motion lags…and often can be dampened by a following cheek sink motion. To avoid any issues I error on the side of caution and add the cheek sinking to only the phonemes that have the jaw open the most.
It is also a good idea, after animating a lip synch sequence, to soften and sometimes bridge the keys of the cheek sinking curve via the graph editor. The dips and valleys of the cheek sinking is quite apparent in the graph editor.
I have not tried it…yet (as time is scarce on the project). But, performing a set-driven key on the cheek sink blendshape to the amount the jaw is open might work well.
Lip Synching Tip #3: Creating the Secondary Phonemes
by Administrator on Jul.02, 2010, under 2010 Production, Technical Production Notes
Creating the primary phoneme is easy, as you use the blendshape as it is designed…maybe a little tweeking on the jaw for emphasis or de-emphasis. Creating the secondary phoneme takes a little more artistry and logic. This is what works for me half of the time.
- Place both the primary phonemes down. For the Grind example…I would place the “Gr” and the “n”.
- Then I would go inbetween the “gr” and “n” and additively insert the “i”…By additively, I mean do not return the mouth shape to a neutral before adding the blendshapes of the “i” phoneme….basically merging the “i” shape with the half way between “Gr” and “n” shape.
- Tweak it as visually needed from here. Often this is just reducing the jaw attribute setting…reducing how much the mouth is open.
FOR EXAMPLE:
My phoneme for the “G” or “R” (which is the same)…The attributes for the blendshape is set in the timeline.
* (setAttr “PabodieChar:Mouth_P_CTRLCurveMovable.translateY” -0.0022;
* setAttr “PabodieChar:blendShape13.M_EndDrop” -0.6;
* setAttr “PabodieChar:blendShape13.M_Press” 0.2;
Then the “n” phoneme is placed down several frames down.
* setAttr “PabodieChar:Mouth_P_CTRLCurveMovable.translateY” -.002;
* setAttr “PabodieChar:blendShape13.M_UpperLip_Raise” 0.5;
* setAttr “PabodieChar:blendShape13.M_LowerLowerLip” 0.2;
* setAttr “PabodieChar:blendShape13.M_Press” 0.2;
* setAttr “PabodieChar:blendShape13.CNC_FurrowNostrilRaise” 0.4;
* setAttr “PabodieChar:blendShape8.toungeMidRaised” 0.5;
* setAttr “PabodieChar:blendShape13.M_EndDrop” -0.6;
Then in-between on the timeline, the “i” attributes are keyed.
* setAttr “PabodieChar:blendShape13.CNC_FurrowNostrilRaise” 0.5;
* setAttr “PabodieChar:Mouth_P_CTRLCurveMovable.translateY” -0.003;
* setAttr “PabodieChar:blendShape13.CNC_CheekSink” .5;
* setAttr “PabodieChar:blendShape13.M_EndDrop” -0.6;
* setAttr “PabodieChar:blendShape13.M_Press” 0.2;
Since it the face was partially morphed between the blend shape…the “i” shape takes on the blend shape attributes not overwritten by the “i” blend shape…So additively the “i” shape takes on the following additional blend shape attributes.
* setAttr “PabodieChar:blendShape13.M_UpperLip_Raise” (some value between 0 and 0.5);
* setAttr “PabodieChar:blendShape13.M_LowerLowerLip” (some value between between 0 and 0.2);
* setAttr “PabodieChar:blendShape8.toungeMidRaised” (some value between between 0 and 0.5);
New Maya Rendering Script “YoRender”
by Administrator on Jun.01, 2010, under 2010 Production, Technical Production Notes
Below is a link to a Maya rendering script I created called “YoRender”. It allows the user to render a series of frames from inside Maya. While normally one wants to use command line and batch rendering for rendering out scenes, this is a substitute if those fail (for instance, when the rendering run-up is over 8 hours before the 1st frame is rendered).
I hope it helps out other Maya filmmakers. While there are other in app rendering scripts out there, this worked best for my pipeline. At the bottom of this post is a description of YoRender to help you identify if this script will work for you.
Note this will also be uploaded to Creative Crash and referenced on Area Autodesk and cgsociety.org.
While time may impede my responsiveness to all programming questions and requests regarding this script, I will try to attend to all of them. Please send me your questions. The best route would be to post in this blog or email me.
Best Regards,
Michael Swertfager
michael@TheTell-TaleHeart.com
WHAT IS YoRender? v.0.8
YoRender is a custom script that moves frame by frame through your timeline, rendering and saving each frame as it moves through…using Render Current Frame. This is to be used as an alternative rendering method when Batch and Command Line rendering fails. YoRender uses the settings from your Render Globals.
INSTRUCTIONS:
1) Set-up your Render Globals as you normally would in Maya. Close Render Globals.
2) Click on the viewport you want to render from (note: in the main work-area not in Render Globals).
3) Start YoRender.
4) Review the settings in YoRender pulled from Render Globals.
5) Enter your settings.
6) Open a window to the path listed for stopping the script.
7) Click the “Yo…Render it NOW!” button.
SPECIAL CONSIDTERATIONS: If you use the same filename as a previously rendering, every frame will ask if you want to overwrite the existing file. This is because each frame is saved individually. To avoid this use a new name or delete the previously rendered images.
- The Frame\Animation Extension used is name.#.ext
- By default when Maya performs a Render Current Frame function (which this script uses), Maya auto saves a rendering in your projects temp directory. If YoRender is used extensively you might want to clean out these temp copies.
LIMITATIONS:
- renders only whole frames.
- no special considertaions for render layers; renders the currently selected layer only and saves it in the same directory.
- The Render Log does not include the extension on the filename.
SPECIAL NOTES:
I made this tool to cover rendering issue I had with Maya Hair and other dynamics. It has been extended to a UI layout with all three rendering formats so others in the Maya community can benefit from it. While this is a use at your own risk MEL script, I would like to hearing from you…on how YoRender is working for you and the project (good and bad). For bug reports and features requests, I cannot guarantee I’ll will have the time to fix all of them…But, I will do my best to get to them.
I hope this helps you with your project.
-Michael Swertfager
michael@TheTell-TaleHeart.com
INSTALL / START INSTRUCTIONS:
1) Copy the script to a local directory
2) In Maya “source” the script within Maya.
2a) in the Maya script editor type the word source then follow it by the path to the location of the mel YoRender script and press enter…(example source “C:/Users/michael/Documents/TTH/TTH2009/TTH2009_CG/mel/YoRender.mel”l;
3) type YoRender () and press enter.
Maya: Joint Placement of the Shoulders
by Administrator on Apr.13, 2010, under 2010 Production, Technical Production Notes
After creating 5 characters for animation, I have found a problem with many of the skeleton set-up’s out there, when it comes to the shoulder joints. While it may not sound too sexy of a topic. Trust me…if when your character moves his arm and the shoulders deform horribly, you will see that nice shoulders are quite sexy. ;)
When putting skeleton joints in the shoulder and arm many tutorials just have you put the shoulder joint right down the center…that will lead to hours of reconstruction in the future. Position the joint higher up towards the top of the shoulder mass. Just like it is in your own body…go figure!.
Maya Finger Rigging Script (MEL): create attributes and set-driven keys
by Administrator on Apr.12, 2010, under 2010 Production, Technical Production Notes
If you have rigged characters before, rigging the fingers probably conjures
up memories that make you twitch… If you rigged multiple characters, that is probably when you started drinking heavily. Below is a MEL script I tossed together which will set-up the attributes, rotate & create the set-driven keys for all the joints.
Fairly well commented with some directions for naming conventions and variable setting at the top of the script.
Enjoy.
- Michael
//Finger Attribute and Set-Driven Keys : Rigging Script
//written by Michael Swertfager 2010
//
//This script is designed to work with the following naming conventions
// - Control Curves –> [part]_[character abbreviation]_CTRLCurve_[Hand} EX. Wrist_B_CTRLCurve_L
// - Joints --> [Finger]_[Hand]_[Character abbreviation]Skel EX. Wrist_L_BSkel
//update these 3 varibles as you run this script for each hand of each character
$CharShort=”B”;
$Hand = “L_”;
$Curve = “Wrist_B_CTRLCurve_L”;
$Char = $CharShort+”_”;
//The name of each finger, update as needed. Note: If you used a different name for Thumb, you will also want to update the hard coding for the section “Thumb X Twist ATTRIBUTE” below.
string $Fingers[] ={”Thumb”,”IndexFinger”,”MiddleFinger”,”RingFinger”,”PinkyFinger”};
//JOINT CURL ATTRIBUTES
for ($MyJoint in $Fingers)
{
$MyCharHandJoint=$Char+$Hand+$MyJoint;
$MySkelJoint1=$MyJoint+”_1st”+”_”+$Hand+$CharShort+”Skel”;
$MySkelJoint2=$MyJoint+”_2nd”+”_”+$Hand+$CharShort+”Skel”;
$MySkelJoint3=$MyJoint+”_3rd”+”_”+$Hand+$CharShort+”Skel”;
//**Create Empty Attribbutes**
$MyaddAttr1=$MyCharHandJoint+”_1st”;
$MySetAttrCurve1=”\|”+$Curve +”.”+$MyCharHandJoint+”_1st”;
$MyaddAttr2=$MyCharHandJoint+”_2nd”;
$MySetAttrCurve2=”\|”+$Curve +”.”+$MyCharHandJoint+”_2nd”;
$MyaddAttr3=$MyCharHandJoint+”_3rd”;
$MySetAttrCurve3=”\|”+$Curve +”.”+$MyCharHandJoint+”_3rd”;
addAttr -ln $MyaddAttr1 -at double $Curve;
setAttr -e -keyable true $MySetAttrCurve1;
addAttr -ln $MyaddAttr2 -at double $Curve;
setAttr -e -keyable true $MySetAttrCurve2;
if ($MyJoint != “Thumb”)
{
addAttr -ln $MyaddAttr3 -at double $Curve;
setAttr -e -keyable true $MySetAttrCurve3;
}
//print “Testing Key Varible Values”;
//print $MyaddAttr1;
//print “ “;
//print $MySetAttrCurve1;
//print “ “;
//print “ “;
//**Create Set-Driven Keys: Assign joint rotation to attribute**
//Set Driven Keys for 1st Joint
setAttr ($Curve+”.”+$MyCharHandJoint+”_1st”) 0;
setAttr ($MySkelJoint1+”.rotateZ”) 0;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_1st”) ($MySkelJoint1+”.rotateZ”);
setAttr ($Curve+”.”+$MyCharHandJoint+”_1st”) 75;
setAttr ($MySkelJoint1+”.rotateZ”) -75;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_1st”) ($MySkelJoint1+”.rotateZ”);
setAttr ($Curve+”.”+$MyCharHandJoint+”_1st”) -45;
setAttr ($MySkelJoint1+”.rotateZ”) 45;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_1st”) ($MySkelJoint1+”.rotateZ”);
//Set Driven Keys for 2nd Joint
setAttr ($Curve+”.”+$MyCharHandJoint+”_2nd”) 0;
setAttr ($MySkelJoint2+”.rotateZ”) 0;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_2nd”) ($MySkelJoint2+”.rotateZ”);
setAttr ($Curve+”.”+$MyCharHandJoint+”_2nd”) 75;
setAttr ($MySkelJoint2+”.rotateZ”) -75;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_2nd”) ($MySkelJoint2+”.rotateZ”);
setAttr ($Curve+”.”+$MyCharHandJoint+”_2nd”) -45;
setAttr ($MySkelJoint2+”.rotateZ”) 45;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_2nd”) ($MySkelJoint2+”.rotateZ”);
//Set Driven Keys for 3rd Joint — Thumb only has 2 joints so it needs to skipped here for the thumb joint.
if ($MyJoint != “Thumb”)
{
setAttr ($Curve+”.”+$MyCharHandJoint+”_3rd”) 0;
setAttr ($MySkelJoint3+”.rotateZ”) 0;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_3rd”) ($MySkelJoint3+”.rotateZ”);
setAttr ($Curve+”.”+$MyCharHandJoint+”_3rd”) 75;
setAttr ($MySkelJoint3+”.rotateZ”) -75;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_3rd”) ($MySkelJoint3+”.rotateZ”);
setAttr ($Curve+”.”+$MyCharHandJoint+”_3rd”) -45;
setAttr ($MySkelJoint3+”.rotateZ”) 45;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_3rd”) ($MySkelJoint3+”.rotateZ”);
}
//print “\n\n** Test Printing Values for Set-Driven Keys.\n”;
//print ($Curve+”.”+$MyCharHandJoint+”_1st”);
//print “\n”;
//print ($MySkelJoint1+”.rotateZ”);
//print “\n”;
//print ($Curve+”.”+$MyCharHandJoint+”_1st”);
//print “\n”;
//print ($MySkelJoint1+”.rotateZ”);
//print “\n”;
//Actual Reference from Maya for Set-Driven Keys
//setAttr “Wrist_B_CTRLCurve_L.B_L_IndexFinger_2nd” 75;
//setAttr “IndexFinger_2nd_L_BSkel.rotateZ” -75;
//setDrivenKeyframe -currentDriver Wrist_B_CTRLCurve_L.B_L_IndexFinger_2nd IndexFinger_2nd_L_BSkel.rotateZ;
//setAttr “Wrist_B_CTRLCurve_L.B_L_IndexFinger_2nd” -45;
//setAttr “IndexFinger_2nd_L_BSkel.rotateZ” 45;
//setDrivenKeyframe -currentDriver Wrist_B_CTRLCurve_L.B_L_IndexFinger_2nd IndexFinger_2nd_L_BSkel.rotateZ;
}
//SPREAD FINGERS ATTRIBUTES
for ($MyJoint in $Fingers)
{
if ($MyJoint != “Thumb”)
{
$MyCharHandJoint=$Char+$Hand+$MyJoint;
$MySkelJoint1=$MyJoint+”_1st”+”_”+$Hand+$CharShort+”Skel”;
$MyaddAttrSpread=$MyCharHandJoint+”_Spread”;
$MySetAttrCurveSpread=”\|”+$Curve +”.”+$MyCharHandJoint+”_Spread”;
addAttr -ln $MyaddAttrSpread -at double $Curve;
setAttr -e -keyable true $MySetAttrCurveSpread;
//Set Driven Keys for all fingers - Spread
setAttr ($Curve+”.”+$MyCharHandJoint+”_Spread”) 0;
setAttr ($MySkelJoint1+”.rotateY”) 0;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_Spread”) ($MySkelJoint1+”.rotateY”);
setAttr ($Curve+”.”+$MyCharHandJoint+”_Spread”) 25;
setAttr ($MySkelJoint1+”.rotateY”) -25;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_Spread”) ($MySkelJoint1+”.rotateY”);
setAttr ($Curve+”.”+$MyCharHandJoint+”_Spread”) -25;
setAttr ($MySkelJoint1+”.rotateY”) 25;
setDrivenKeyframe -currentDriver ($Curve+”.”+$MyCharHandJoint+”_Spread”) ($MySkelJoint1+”.rotateY”);
}
}
//Thumb X Twist ATTRIBUTE
$MyaddAttrTwist=$Char+$Hand+”Thumb_Twist”;
$MySetAttrCurveTwist=”\|”+$Curve +”.”+$Char+$Hand+”Thumb_Twist”;
$MySkelJoint1=”Thumb”+”_1st”+”_”+$Hand+$CharShort+”Skel”;
addAttr -ln $MyaddAttrTwist -at double $Curve;
setAttr -e -keyable true $MySetAttrCurveTwist;
//Set Driven Keys for Thumb - Twist
if ($Hand == “L_”)
{
setAttr ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) 0;
setAttr ($MySkelJoint1+”.rotateY”) 0;
setDrivenKeyframe -currentDriver ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) ($MySkelJoint1+”.rotateY”);
setAttr ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) 50;
setAttr ($MySkelJoint1+”.rotateY”) -50;
setDrivenKeyframe -currentDriver ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) ($MySkelJoint1+”.rotateY”);
setAttr ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) -35;
setAttr ($MySkelJoint1+”.rotateY”) 35;
setDrivenKeyframe -currentDriver ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) ($MySkelJoint1+”.rotateY”);
}
else
{
setAttr ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) 0;
setAttr ($MySkelJoint1+”.rotateY”) 0;
setDrivenKeyframe -currentDriver ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) ($MySkelJoint1+”.rotateY”);
setAttr ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) -50;
setAttr ($MySkelJoint1+”.rotateY”) 50;
setDrivenKeyframe -currentDriver ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) ($MySkelJoint1+”.rotateY”);
setAttr ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) 35;
setAttr ($MySkelJoint1+”.rotateY”) -35;
setDrivenKeyframe -currentDriver ($Curve +”.”+$Char+$Hand+”Thumb_Twist”) ($MySkelJoint1+”.rotateY”);
}
//Actual Reference from Maya for Set-Driven Keys
//setAttr “Wrist_B_CTRLCurve_L.B_L_IndexFinger_2nd” 75;
//setAttr “IndexFinger_2nd_L_BSkel.rotateZ” -75;
//setDrivenKeyframe -currentDriver Wrist_B_CTRLCurve_L.B_L_IndexFinger_2nd IndexFinger_2nd_L_BSkel.rotateZ;
//setAttr “Wrist_B_CTRLCurve_L.B_L_IndexFinger_2nd” -45;
//setAttr “IndexFinger_2nd_L_BSkel.rotateZ” 45;
//setDrivenKeyframe -currentDriver Wrist_B_CTRLCurve_L.B_L_IndexFinger_2nd IndexFinger_2nd_L_BSkel.rotateZ;
Movie Preview 1
by Administrator on Jan.13, 2010, under 2010 Production, Trailer and Previews: The Tell-Tale Heart, Uncategorized, for the Teachers
The movie has evolved a lot since the release of trailer a few years back… Now that this movie is nearing completion, it is time to start sharing the new darker and more refined look of the movie. I hope you enjoy.
The video is also available for download to your cell phone at http://www.zedge.net/videos/228314/the-tell-tale-heart-video/
-Michael
Axing em up…too gory for Teachers Bundle?
by Administrator on Jan.11, 2010, under 2010 Production, for the Teachers
Here is a tasty little morsel for you all…
While my favorite horror movies frighten the audience through eerie suspense and anxiety build-up rather than getting the screams through gore, this movie does address the dismemberment of the Old Man. Most of the dismemberment is alluded to except the swing of the Axe…I couldn’t resist.
Teachers, is this too much gore in your classrooms, if included in the Teachers Bundle version? I am considering an optional toned down version on the DVD…Do you foresee a toned down version valuable or necessary?
Dark Music and Ambient Sounds by Virgil Franklin
by Administrator on Oct.05, 2009, under 2010 Production
Without music or ambient sounds, even the scariest scenes can fall flat…Well, we are not going to let you down.
Much work has gone into creating fantastically dark music for Edgar’s evil deeds. Teaming up with the skills of horror musician Virgil Franklin (www.VirgilMusic.net), we have enhanced the mood evermore with chilling music and unsettling ambient sounds.
Sample of The Tell-Tale Heart theme music…(one of my favorites scores).
thememusic_thetell-taleheart_by_virgilmusic
-Michael
Special Thanks to Virgil Music…
It is all in the Eyes
by Administrator on Sep.23, 2009, under 2010 Production
The eyes are the portal to the soul…So, it is important to get it right. Below is a shot of Pabodie (the young police officer in the group) before he gets the rest of his hair. As you can tell from his eyelashes and eyebrows, he is a red head.



