// =========================================================================== // Copyright 2018 Autodesk, Inc. All rights reserved. // // Use of this software is subject to the terms of the Autodesk license // agreement provided at the time of installation or download, or which // otherwise accompanies this software in either electronic or hard copy form. // =========================================================================== // // Description: // This procedure is called when an image sequence is to be rendered and the // current renderer doesn't have a custom render sequence procedure. // The render procedure of the current renderer is called for each frame. // proc string formatDigits(int $number, int $startNumber, int $finalNumber){ // Format $number to the right amount of digits // Add the right amount of zeros to match max(abs($finalNumber), abs($startNumber)) number of digits // If the $startNumber is negative, add a minus if $number is negative and a zero // if $number is positive. int $numOfDigits = 0; int $maxNumOfDigits = 0; if($number != 0){ $numOfDigits = log10(abs($number)); } if($finalNumber != 0 || $startNumber < $finalNumber){ $maxNumOfDigits = log10(max(abs($finalNumber), abs($startNumber))); } string $res = ""; for($i=0; $i < $maxNumOfDigits - $numOfDigits; $i++){ $res += "0"; } // Handle negatives frames if($startNumber < 0){ if($number < 0){ $res = "-" + $res; } else { $res += "0"; } } return $res+abs($number); } global proc int mayaRenderSequence(int $width, int $height, string $camera, string $saveToRenderView) { string $currRenderer = currentRenderer(); string $rendererUIName = `renderer -query -rendererUIName $currRenderer`; string $renderCmd = `renderer -query -renderProcedure $currRenderer`; if ($renderCmd == "") { string $msg = (uiRes("m_mayaRenderSequence.kNoRenderProcedure")); warning (`format -stringArg $rendererUIName $msg`); return 1; } // Get render view panel string $renderViewPanelName; string $allPanels[] = `getPanel -scriptType renderWindowPanel`; if (size($allPanels) > 0) { $renderViewPanelName = $allPanels[0]; } else { error((uiRes("m_mayaRenderSequence.kNoRenderViewPanelFound"))); return 1; } // Set animation frame range int $animation = `getAttr defaultRenderGlobals.animation`; float $startFrame = `getAttr defaultRenderGlobals.startFrame`; float $endFrame = `getAttr defaultRenderGlobals.endFrame`; float $byFrame = `getAttr defaultRenderGlobals.byFrameStep`; float $currentime = `currentTime -q`; if (!$animation) { $startFrame = $currentime; $endFrame = $currentime; $byFrame = 1; } int $padding = `getAttr defaultRenderGlobals.extensionPadding`; int $maxPaddingFrame = pow(10, $padding) - 1; string $layer = `editRenderLayerGlobals -q -currentRenderLayer`; string $layerDisplayName = `renderLayerDisplayName $layer`; // Find cameras to render string $cameras[]; if ($camera != "") { $cameras[0] = $camera; } else { $cameras = getRenderableCameras(); } if (size($cameras) == 0) { error((uiRes("m_mayaRenderSequence.kNoCamerasFound"))); return 1; } // No extra options by default string $extraOptions = ""; int $numberOfFrames = ceil(($endFrame - $startFrame + 1.0) / $byFrame); int $currentFrame = 1; for ($time = $startFrame; $time <= $endFrame; $time += $byFrame) { currentTime $time; for ($cam in $cameras) { // Call the render command for this frame and camera string $args = `format -s $width -s $height -s $cam -s $extraOptions "(^1s, ^2s, 1, 1, \"^3s\", \"^4s\")"`; string $cmd = $renderCmd + $args; // Feedback print (`format -s $time -s $currentFrame -s $numberOfFrames -s $cam -s $layerDisplayName (uiRes("m_mayaRenderSequence.kFrameFeedback"))`); // Print the full path name of the current frame's generated image. string $frameWithPadding = formatDigits($time, 0, $maxPaddingFrame); string $imageName[] = `renderSettings -fullPathTemp -genericFrameImageName $frameWithPadding -camera $cam -layer $layer`; print ("\t" + $imageName[0] + "\n"); float $startTime = `timerX`; eval($cmd); if ($saveToRenderView == "all" || $saveToRenderView == $cam) { // Set the image caption float $renderTime = `timerX -startTime $startTime`; string $caption = renderWindowCaption("", $renderTime); renderWindowEditor -edit -pca $caption $renderViewPanelName; // Keep the image renderWindowMenuCommand("keepImageInRenderView", $renderViewPanelName); } } $currentFrame += 1; } return 0; }