Copy and paste into a .mel file or download it here.
//=========================== GT Sprite Tools v1.1 ===============================//
//
// GT Sprite Tools v1.0
// GTProductions.net
// Created by Alex Schwartz 2008 Copyright
//
// To be used freely with the acknowledgement that the author is not responsible
// for any perceived damage this script may directly (or indirectly) cause.
// Please contact the author if you plan to use this script in a commercial project.
//
// Simple script for the automation of isometric sprite creation. Allows for the rendering
// of 4 isometric and 4 direct angles. The debug mode checkbox allows you to preview results
// without actually rendering. The mel script should be placed in the default scripts directory
//
// The user can execute or source and execute any mel script from a conveinent list gadget.
//
// Installation: Place the script in the scripts folder under the version number
// ie. ../maya/2008/scripts , or copy and paste the contents of the .mel script into
// the script editor dialog and execute using Ctrl-Enter.
// Tip: You might want to make a shelf button for easy retrieval.
//
// Version 1.1 - modified light creation to avoid accidental light deletion
// Version 1.0 - release version
//
//=========================== GT Sprite Tools v1.1 ===============================//
// Global Variables
global string $sceneName = "untitled";
global int $debugMode;
global string $startFrame;
global string $endFrame;
global string $path;
global string $dir;
global float $scalarValue = 1;
global float $heightValue;
global float $myHeight = 410;
global float $myDist = 200;
// Initializing function
proc beginInit(){
global float $scalarValue, $heightValue, $myDist;
// Clean up commands - delete your created items if you already ran the script
if(objExists("spritecam1")){
delete spritecam1;}
if(objExists("spriteLight1")){
delete spriteLight1;
delete spriteLight2;
delete spriteLight3;
delete spriteLight4;}
// Make the sprite camera
camera -centerOfInterest 5 -name spritecam1 -displayResolution 1 -focalLength 35 -lensSqueezeRatio 1
-cameraScale 1 -horizontalFilmAperture 1.41732 -horizontalFilmOffset 0 -verticalFilmAperture 0.94488
-verticalFilmOffset 0 -filmFit Fill -overscan 1 -motionBlur 0 -shutterAngle 144 -nearClipPlane 0.01
-farClipPlane 1000 -orthographic 0 -orthographicWidth 30; objectMoveCommand; cameraMakeNode 1 "";
// Set render globals
select -r defaultRenderGlobals;
setAttr "defaultRenderGlobals.imageFormat" 32; /* PNG Output */
setAttr "defaultRenderGlobals.startFrame" 0;
setAttr "defaultRenderGlobals.endFrame" 0;
setAttr "defaultRenderGlobals.animation" 1;
setAttr "defaultRenderGlobals.putFrameBeforeExt" 1;
setAttr "defaultRenderGlobals.periodInExt" 1;
setAttr "defaultRenderGlobals.extensionPadding" 2;
setAttr "defaultResolution.width" 100;
setAttr "defaultResolution.height" 100;
setAttr "frontShape.renderable" 0;
setAttr "perspShape.renderable" 0;
setAttr "sideShape.renderable" 0;
setAttr "topShape.renderable" 0;
select -r spritecam1;
setAttr "spritecam1.renderable" 1;
setCurrentRenderer mayaSoftware;
// create lights
pointLight -n "spriteLight1" -i 1;
xform -t (-$myDist*$scalarValue) ($myDist*$scalarValue) ($myDist*$scalarValue);
pointLight -n "spriteLight2" -i 1;
xform -t ($myDist*$scalarValue) ($myDist*$scalarValue) (-$myDist*$scalarValue);
pointLight -n "spriteLight3" -i 1;
xform -t ($myDist*$scalarValue) ($myDist*$scalarValue) ($myDist*$scalarValue);
pointLight -n "spriteLight4" -i 1;
xform -t (-$myDist*$scalarValue) ($myDist*$scalarValue) (-$myDist*$scalarValue);
select -r spritecam1;
setAttr "spritecam1.translateX" ($myDist * $scalarValue);
setAttr "spritecam1.translateY" ($heightValue * $scalarValue);
setAttr "spritecam1.translateZ" ($myDist * $scalarValue);
setAttr "spritecam1.rotateX" -45;
setAttr "spritecam1.rotateY" 45;
select -r spritecam1;
lookThroughModelPanelClipped spritecam1 modelPanel4 0.001 1000;
}
// GUI creation
if ( `window -exists theWindow` ) {deleteUI theWindow;}
window -resizeToFitChildren true -title "GTProductions Sprite Tools" theWindow;
rowLayout -numberOfColumns 2 -columnWidth2 300 300 MainRow;
columnLayout -columnAttach "both" 10 -rowSpacing 8 -columnWidth 300 -parent MainRow Column1;
text -l "Isometric Angles";
button -label "Render Front-Left Isometric" -command "renderFrontLeftIso()";
button -label "Render Front-Right Isometric" -command "renderFrontRightIso()";
button -label "Render Back-Right Isometric" -command "renderBackRightIso()";
button -label "Render Back-Left Isometric" -command "renderBackLeftIso()";
separator -h 25;
rowLayout -numberOfColumns 2 Row2;
columnLayout -rowSpacing 4 -columnWidth 80 -parent Row2 ColumnA;
text -l "Scene Name";
text -l "Path";
text -l "";
columnLayout -rowSpacing 4 -columnWidth 80 -parent Row2 ColumnB;
textField -w 80 -text "untitled" -changeCommand ("sceneNameChange") sceneName;
textField -w 80 -text "path/to/file" -changeCommand ("setPath") pathName;
setParent ..;
setParent ..;
separator -h 25;
text -l "Global scalar value:" -al "right";
text -l "Global camera height:" -al "right";
columnLayout -columnAttach "both" 10 -rowSpacing 8 -columnWidth 300 -parent MainRow Column2;
text -l "Direct Angles";
button -label "Render Front" -command "renderFront()";
button -label "Render Back" -command "renderBack()";
button -label "Render Left" -command "renderLeftSide()";
button -label "Render Right" -command "renderRightSide()";
separator -h 25;
rowLayout -numberOfColumns 2 Row2;
columnLayout -rowSpacing 4 -columnWidth 80 -parent Row2 ColumnA;
text -l "Start Frame";
text -l "End Frame";
checkBox -label "Debug Mode" -onCommand "$debugMode=1;print(\"Debug Mode: On!\");"
-offCommand "$debugMode=0;print(\"Debug Mode: Off!\");" myCheckBox;
columnLayout -rowSpacing 4 -columnWidth 80 -parent Row2 ColumnB;
textField -w 45 -text "0" -changeCommand ("startFrameChange") startFrame;
textField -w 45 -text "0" -changeCommand ("endFrameChange") endFrame;
setParent ..;
setParent..;
separator -h 25;
floatSliderGrp -cal 1 left -field true -fieldMinValue 0 -fieldMaxValue 25
-minValue 0 -maxValue 5 -value 1 -changeCommand ("setScalar") scalarslider;
floatSliderGrp -cal 1 left -field true -fieldMinValue -99000 -fieldMaxValue 99000
-minValue -300 -maxValue 1000 -value $myHeight -changeCommand ("setHeight") heightslider;
showWindow;
beginInit();
// Set path
proc setPath(){
global string $sceneName;
global string $path;
global string $dir;
$path = `textField -q -text pathName`;
$dir = `workspace -q -dir`;
print("Path name set to: " + $path + "\n");
print("Output to: " + $dir + $path + "/" + $sceneName);
}
// Change scene name
proc sceneNameChange(){
global string $sceneName = "";
$sceneName = `textField -q -text sceneName`;
setAttr -type "string" defaultRenderGlobals.imageFilePrefix $sceneName;
print("Scene name changed to: " + $sceneName + "\n");
}
// Change Scalar Value
proc setScalar(){
global float $scalarValue = 1;
$scalarValue = `floatSliderGrp -q -v scalarslider`;
print("Scalar value set to : " + $scalarValue + "\n");
beginInit();
}
// Change Camera Height
proc setHeight(){
global float $heightValue;
$newheightValue = `floatSliderGrp -q -v heightslider`;
$heightValue = $newheightValue;
print("Height value set to : " + $heightValue + "\n");
beginInit();
}
// Change start frame
proc startFrameChange(){
global string $startFrame;
$startFrame = `textField -q -text startFrame`;
setAttr defaultRenderGlobals.startFrame $startFrame;
print("Start frame changed to: " + $startFrame + "\n");
}
// Change end frame
proc endFrameChange(){
global string $endFrame;
$endFrame = `textField -q -text endFrame`;
setAttr defaultRenderGlobals.endFrame $endFrame;
print("End frame changed to: " + $endFrame + "\n");
}
// Render left side view
proc renderLeftSide() {
global string $path,$dir,$sceneName;
global float $scalarValue;
setAttr "spritecam1.translateX" (500 * $scalarValue);
setAttr "spritecam1.translateY" (90 * $scalarValue);
setAttr "spritecam1.translateZ" 0;
setAttr "spritecam1.rotateY" 90;
setAttr "spritecam1.rotateX" 0;
$newPath = $dir + $path + "/" + $sceneName + "/l";
workspace -renderType "images" $newPath;
workspace -saveWorkspace ;
renderMe("la");
}
// Render right side view
proc renderRightSide() {
global string $path,$dir,$sceneName;
global float $scalarValue;
setAttr "spritecam1.translateX" (-500 * $scalarValue);
setAttr "spritecam1.translateY" (90 * $scalarValue);
setAttr "spritecam1.translateZ" 0;
setAttr "spritecam1.rotateY" -90;
setAttr "spritecam1.rotateX" 0;
$newPath = $dir + $path + "/" + $sceneName + "/r";
workspace -renderType "images" $newPath;
workspace -saveWorkspace ;
renderMe("r");
}
// Render front view
proc renderFront() {
global string $path,$dir,$sceneName;
global float $scalarValue;
setAttr "spritecam1.translateX" 0;
setAttr "spritecam1.translateY" (90 * $scalarValue);
setAttr "spritecam1.translateZ" (500 * $scalarValue);
setAttr "spritecam1.rotateX" 0;
setAttr "spritecam1.rotateY" 0;
$newPath = $dir + $path + "/" + $sceneName + "/f";
workspace -renderType "images" $newPath;
workspace -saveWorkspace ;
renderMe("f");
}
// Render back view
proc renderBack() {
global string $path,$dir,$sceneName;
global float $scalarValue;
setAttr "spritecam1.translateX" 0;
setAttr "spritecam1.translateY" (90 * $scalarValue);
setAttr "spritecam1.translateZ" (-500 * $scalarValue);
setAttr "spritecam1.rotateX" 0;
setAttr "spritecam1.rotateY" 180;
$newPath = $dir + $path + "/" + $sceneName + "/b";
workspace -renderType "images" $newPath;
workspace -saveWorkspace ;
renderMe("b");
}
// Render front left isometric view
proc renderFrontLeftIso() {
global string $path,$dir,$sceneName;
global float $scalarValue, $heightValue, $myDist;
setAttr "spritecam1.translateX" ($myDist * $scalarValue);
setAttr "spritecam1.translateY" ($heightValue * $scalarValue);
setAttr "spritecam1.translateZ" ($myDist * $scalarValue);
setAttr "spritecam1.rotateX" -45;
setAttr "spritecam1.rotateY" 45;
$newPath = $dir + $path + "/" + $sceneName + "/fl";
workspace -renderType "images" $newPath;
workspace -saveWorkspace ;
renderMe("fl");
}
// Render front right isometric view
proc renderFrontRightIso() {
global string $path,$dir,$sceneName;
global float $scalarValue, $heightValue, $myDist;
setAttr "spritecam1.translateX" (-$myDist * $scalarValue);
setAttr "spritecam1.translateY" ($heightValue * $scalarValue);
setAttr "spritecam1.translateZ" ($myDist * $scalarValue);
setAttr "spritecam1.rotateX" -45;
setAttr "spritecam1.rotateY" -45;
$newPath = $dir + $path + "/" + $sceneName + "/fr";
workspace -renderType "images" $newPath;
workspace -saveWorkspace ;
renderMe("fr");
}
// Render back right isometric view
proc renderBackRightIso() {
global string $path,$dir,$sceneName;
global float $scalarValue, $heightValue, $myDist;
setAttr "spritecam1.translateX" (-$myDist * $scalarValue);
setAttr "spritecam1.translateY" ($heightValue * $scalarValue);
setAttr "spritecam1.translateZ" (-$myDist * $scalarValue);
setAttr "spritecam1.rotateX" -45;
setAttr "spritecam1.rotateY" -135;
$newPath = $dir + $path + "/" + $sceneName + "/br";
workspace -renderType "images" $newPath;
workspace -saveWorkspace ;
renderMe("br");
}
// Render back left isometric view
proc renderBackLeftIso() {
global string $path,$dir,$sceneName;
global float $scalarValue, $heightValue, $myDist;
setAttr "spritecam1.translateX" ($myDist * $scalarValue);
setAttr "spritecam1.translateY" ($heightValue * $scalarValue);
setAttr "spritecam1.translateZ" (-$myDist * $scalarValue);
setAttr "spritecam1.rotateX" -45;
setAttr "spritecam1.rotateY" 135;
$newPath = $dir + $path + "/" + $sceneName + "/bl";
workspace -renderType "images" $newPath;
workspace -saveWorkspace ;
renderMe("bl");
}
// Rendering procedure
proc renderMe(string $angle){
select -r spritecam1;
lookThroughModelPanelClipped spritecam1 modelPanel4 0.001 1000;
global string $sceneName;
setAttr -type "string" defaultRenderGlobals.imageFilePrefix ($sceneName + "." + $angle);
global int $debugMode;
if($debugMode == 0){
mayaBatchRender;
}
}