Technical Production Notes
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);
Lip Synching Tip #2: Understand the primary (dominate) and secondary phonemes in each word
by Administrator on Jul.02, 2010, under Technical Production Notes, all about Edgar
Identify the Primary Phonemes
I found that there are primary and secondary phonemes for each word. The primary phonemes are animated to its full shape. The secondary phonemes are animated to its shape only to the extent of the time allowed to mouth it out…and is often a blend between the primary phonemes on either side of it. For instance. A simple example…say the word “I grind”. The letter i in “I” is completely shaped out with the mouth…but in the word “grind” the letter i is not nearly as shaped out. It is blended into the shapes of the surrounding consonants as the mouth moves from one to the next. So in this example, the 1st i is a primary phoneme and the i in “grind” is a secondary phoneme with the consonants on either side being primaries. The ordered list below is what I use subconsciously to determine the primary phonemes
1. it is the 1st phoneme in a word
2. the character is enunciating that sound in the word
3. it is the last phoneme in a word with a pause before the next word
4. it is the 1st consonant after a vowel
Lip Synching Tip #1: Careful not to use too many phonemes on the timeline
by Administrator on Jul.02, 2010, under Technical Production Notes, all about Edgar
Much is available to read about lip-synching…much of it very solid. After lip-synching three characters in this production. I have discovered few tips which I did not read/notice before. Maybe they will help you with your production. Here is the 1st.
Over animating the mouth is easy to do…error on the side of less movement.
After making a dozen phoneme’s, I find myself overly eager to use them for every sound in a word. It is useful (at least for me) to under-animate the lips for my first pass then add more phonemes if needed.
Phoneme Timing (my averages):
I am averaging about one phoneme per three or four frames (with a 29.9 frames per second animation). Only about twice a sentence am I putting two phonemes with only one frame separation.
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;
Maya Hair Value and Value Randomness Error
by Administrator on Mar.31, 2010, under Technical Production Notes
Adding value randomness to your hairsystem increases the realism. Even the hair coloring kits from the drug store, promote their hi-lite and multi-colors in their product. Note, however, that odd artifacts can occur in the renderings when the random value added to the standard value of the hair can produce a non-renderable value. Here is an example with black-hair.
Color Value = .1
Value Randomness = .2
For certain hairs maya will produce a hair color value of “-.1″. Naturally, Maya would have a problem rendering this. In the end it renders a hair in pure white with some other hues in there. I now take my hair color value entry and use this as my max in the value randomness…at the most extreme negative number it would be 0.
Maya Paint Effects Texture/Shading Moves with Camera
by Administrator on Jul.31, 2009, under Technical Production Notes
(Used as technical notes for my own troubleshooting and others running into the same problem) (scene #170.05, testing LowFlyingCamera, Object strokeDeadWillow1Freaky2_TTH20093))
The issue: When the paint effects are drawn, they look fine from one frame to next with a still camera, but when a moving camera goes by the texture/shading, slides up the tree.
Environment and Assumptions:
- Maya 2009 64Bit
- Rendering in Maya Software
- Production Level Rendering and Anti-Aliasing
Steps and Results:
- Removed shadows - is this a shadow effect (didn’t solve problem)
- Removed texture applied (didn’t solve problem)
- Made Shading> Color 1 and Tube Shading>Color2 same color (didn’t solve problem)
- Conver t to polygons - While this may work and is not a viable workaround for me, it is good to know (problem does not exist on polys)
- Turned Translucence from 0.2 to 0 (didn’t solve problem)
- Set Twist>ForwardTwist=off (didn’t solve problem)
- Twist =.446 –> 0 (didn’t solve problem)
- Twist Rate =0.289 –> 0 (didn’t solve problem)
- Twist Rand =0.421 –> 0.078 (didn’t solve problem)
- Tip Fade = 0.100 –> 0 (didn’t solve problem)
- Shading>Transparency 1= 0 –> about 10% (didn’t solve problem)
- Tube Shading> Tube Transparency 2= 0 –> abuot 20% (didn’t solve problem)
- Tube Shading>Tip Fade=0.1 –> 0 (didn’t solve problem)
- Map Opacity=0 –> 1 (didn’t solve problem)
- Map Method=Full View –> Tube2D (with additional new settings) (SOLVED IT!) A little Blur Mult and Smear is needed as well.
Apparently the full view texture mapping was causing the shader/texture to slide as the camera moved. The full view texturing is used to map the texture to the paint effect from the view of the camera, as paint effects don’t have UV’s to elegantly attach a texture. So, when the camera moves, the texture is re-sized to fit again. 2d and 3d map methods work well for my fly through animation.
