Hey Mel gurus!
I'm a noob when it comes to Mel and I really would appreciate some help with a script I've been working on to batch render props with the Hardware Render Buffer. It's necessary to use this method to render the objects correctly (cgfx). The script I have works if I manually run it in sections, but mel get's ahead of itself if I let it go on its own. I've been searching to see if mel had any means of waiting to insure a command like a file open succeeds before continuing but haven't had any luck. Pause doesn't work...in fact it looks as if it runs all the pause commands in the entire script before it executes anything else. I'll comment in the problem spots for the script. Any help anyone can offer will be greatly appreciated!
As far as I can tell, I can't do this from dos with maya batch because of cgfx shaders and the need for the hardware render buffer.
====================================================================
I have a seperate script I generate with the file names to load and render that looks something like this:
====================================================================
CODE
file -o -f "C:/Props/PropA.mb";
pause -sec 2;
RenderPreviewSetup;
file -o -f "C:/Props/PropB.mb";
pause -sec 2;
RenderPreviewSetup;
etc...
==============================================================================
My RenderPreviewSetup script is below. It creates a camera, groups the mesh and frames it. Pulls back a bit, angles up, and does an 8 frame rotation around it. Then it renders it using the Hardware Render Buffer.
==============================================================================
CODE
source "C:/Program Files/Alias/Maya7.0/scripts/others/buildImagePlaneMenu.mel";
global proc SelectColA() {
select -add "ProxyShape*";
}
global proc SelectColB() {
select -add "proxyShape*";
}
global proc SelectColC() {
select -add "Col_Shape";
}
global proc HideSelCol() {
hide ls -sl
;
}
global proc RenderPreviewSetup()
{
trace "beginning";
catch( SelectColA
);
catch( HideSelCol
);
catch( SelectColB
);
catch( HideSelCol
);
catch( SelectColC
);
catch( HideSelCol
);
// Setup Render Camera
camera -n renderCam -centerOfInterest 5 -focalLength 35 -lensSqueezeRatio 1 -cameraScale 1 -horizontalFilmAperture 1.4173 -horizontalFilmOffset 0 -verticalFilmAperture 0.9449 -verticalFilmOffset 0 -filmFit Vertical -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.01 -farClipPlane 100000 -orthographic 0 -orthographicWidth 30; objectMoveCommand; cameraMakeNode 1 "";
catch(rename "renderCam"
);
lookThroughModelPanelClipped renderCam modelPanel4 0.001 1000;
setAttr "renderCamShape.backgroundColor" -type double3 1 1 1;
setAttr "renderCamShape.journalCommand" 1;
setAttr "renderCamShape.displayResolution" 1;
setAttr "defaultResolution.width" 640;
setAttr "defaultResolution.height" 480;
setAttr "defaultResolution.deviceAspectRatio" 1.333;
setAttr "defaultResolution.pixelAspect" 1;
camera -e -displayFilmGate off -displayResolution on -overscan 2 renderCam;
setFocus modelPanel4;
// Group mesh together in scene to get new camera pivot
SelectAllGeometry;
select -r listTransforms -geometry
;
Group;
catch(rename "RenderGroup"
);
trace "after rename";
CenterPivot;
trace "float point";
float $Pos[] = xform -q -ws -piv RenderGroup
;
// Move Camera and Pivot
trace "select renderCam";
select -r renderCam;
xform -ws -piv $Pos[0] $Pos[1] $Pos[2];
rotate -r -ws -26 0 0;
pause -sec 1;
// Select All Geometry and frame for render
//select -cl ;
select -r listTransforms -geometry
;
setFocus modelPanel4;
pause -sec 1;
FrameAll; // ######## Here's a problem sometimes...maya will lose focus on modelPanel4 and it doesn't frame the object correctly.
fitPanel -all;
pause -sec 1;
select -r renderCam;
move -r -os 0 0 1.5;
trace "guess";
// Reset Camera Pivot to 0 0 0
select -r renderCam;
xform -ws -piv $Pos[0] $Pos[1] $Pos[2];
// Create Animation for Render Camera
select -r renderCam;
setKeyframe -t 0 -at ry -v 0 {"renderCam"}; // Set starting keyframe at 0 (-t 0)
setKeyframe -t 8 -at ry -v 360 {"renderCam"}; // Set ending keyframe at 8 (-t 8)
// Create Background Image Plane
createImportedImagePlane modelPanel4 "c:/RenderBG01.bmp" "image";
rename "ImagePlaneRender";
setAttr "ImagePlaneRender.sizeX" 2.52;
setAttr "ImagePlaneRender.sizeY" 1.89;
setAttr ImagePlaneRender.displayOnlyIfCurrent on;
setAttr ImagePlaneRender.fit 4;
// Create Light Source (SUN)
CreatePointLight;
setAttr "pointLight1.translateX" 500;
setAttr "pointLight1.translateY" 1500;
setAttr "pointLight1.translateZ" 200;
rename "pointLight1" "sun";
// Set Rendering Attributes
HardwareRenderBuffer;
setAttr defaultHardwareRenderGlobals.extension 1;
setAttr -l false "defaultHardwareRenderGlobals.startFrame";
setAttr -l false "defaultHardwareRenderGlobals.endFrame";
setAttr "defaultHardwareRenderGlobals.startFrame" 0; // Set Start Frame of Render
setAttr "defaultHardwareRenderGlobals.endFrame" 7; // Set End Frame of Render
setAttr defaultHardwareRenderGlobals.imageFormat 8; //JPEG
setAttr defaultHardwareRenderGlobals.lightingMode 1;
setAttr defaultHardwareRenderGlobals.alphaSource 1;
setAttr "defaultHardwareRenderGlobals.lineSmoothing" 1;
setAttr "defaultHardwareRenderGlobals.fullImageResolution" 1;
setAttr "defaultHardwareRenderGlobals.backgroundColor" -type double3 0.5 0.5 0.5;
setAttr -type "string" "defaultHardwareRenderGlobals.resolution" "640x480 640 480 1.333";
string $path = file -q -loc
;
string $base = basenameEx $path
;
setAttr -type "string" defaultHardwareRenderGlobals.filename $base;
glRenderEditor -e -lookThru renderCamShape hardwareRenderView;
scaleBufMenuRW glRenderWindow 0;
// Render Sequence
evalDeferred StartHWRender;
float $RenderStatus = 0;
do {
print("$RenderStatus equals: " +$RenderStatus+"\n");
print("glRender status equals: " +glRender -q -cf
+ "\n");
trace "Waiting for RenderStatus";
$RenderStatus = glRender -q -fe
; // set render status to current frame
}
while ($RenderStatus < glRender -q -fe
);
evalDeferred StartHWRender;
//playbackOptions -min 0 -max 300 -ps 30;
//play -w;
trace "end";
}
global proc StartHWRender() {
glRender -renderSequence hardwareRenderView; // ####### This never seems to wait until it's done rendering, even with my do while loop and evalDeferred....HELP!
}