I'm doing some freelance work and it involves rendering a product into different parts as layers. The layers are assembled as one product and uploaded into a website where the user can manipulate the layers with different materials colors etc.,
My contractor had a previous developer write scripts for the rendering process in 3Ds max. My knowledge of maxscript and 3ds max in general is limited and it would be great if someone took a look at these scripts and tell me what they do. I took a look at them and from what I can tell is that they render the parts separately like Maya's render layers however I could not get them to work. I believe there's more to it than loading it and executing the script.
Contacting the the previous developer is a long shot. He's been out of contact for months.
Thanks!
fn parts r=
(
objs=#($BODY,$LEFTSIDE,$RIGHTSIDE,$FRONTHANDLE_S,$FRONTHANDLE_L,$BACKHANDLE_S,$BACKHANDLE_L,$BODYSTRAP,$BODY_seem,$LEFTSIDE_seem,$RIGHTSIDE_seem,$FRONTHANDLE_S_seem,$BACKHANDLE_S_seem,$FRONTHANDLE_L_seem,$BACKHANDLE_L_seem,$BODYSTRAP_seem)
objsNoSeem=#($BODY,$LEFTSIDE,$RIGHTSIDE,$FRONTHANDLE_S,$FRONTHANDLE_L,$BACKHANDLE_S,$BACKHANDLE_L)
sh=$shadow_Matt
sh.primaryVisibility=false
sh.receiveShadows=false
layer0=LayerManager.getLayerFromName "0"
layer0.nodes &theNodes
--set directories
scriptPath=getThisScriptFilename()
scriptPath1=pathConfig.removePathLeaf scriptPath
projectPath=pathConfig.removePathLeaf scriptPath1
MatPath=projectPath+"\matlib"
makedir (projectPath+"\\Renders")
outPath=projectPath+"\\Renders"
--read mat library
global MatFiles=#()
if MatPath !=undefined then MatFiles = getFiles (MatPath+"\\*.mat")
MatFilesNoPath = for f in matfiles collect ( getFilenameFile(filenamefrompath f ))
for i=1 to matfiles.count do
(
matlib = loadTempMaterialLibrary matfiles[i]
meditMaterials[i]=matlib[1]
meditmaterials[i].name= MatFilesNoPath[i]
print meditmaterials[i].name
)
b= bitmap r r
cams=#("TQ","F","T","S","TQR")
layerHandle_S=LayerManager.getLayerFromName "Handle_Short"
layerHandle_L=LayerManager.getLayerFromName "Handle_Long"
LayerStrap=LayerManager.getLayerFromName "Strap"
layerHandle_S.on=false
layerHandle_L.on=false
LayerStrap.on=false
for y=1 to matfiles.count do
(
theNodes.material=meditmaterials[22]
/* for j=1 to objsNoSeem.count do
(
for i=1 to objs.count do
objs[i].material=meditmaterials[22]
LayerStrap.on=false
case of
(
(objsNoSeem[j].name=="BODY"):
(
layerHandle_S.on=false
layerHandle_L.on=false
$BODY.material=meditmaterials[y]
$BODY_seem.material=meditmaterials[20]
addname="BODY_seem"
)
(objsNoSeem[j].name=="LEFTSIDE"):
(
layerHandle_S.on=false
layerHandle_L.on=false
$LEFTSIDE.material=meditmaterials[y]
$LEFTSIDE_seem.material=meditmaterials[20]
addname="LEFTSIDE_seem"
)
(objsNoSeem[j].name=="RIGHTSIDE"):
(
layerHandle_S.on=false
layerHandle_L.on=false
$RIGHTSIDE.material=meditmaterials[y]
$RIGHTSIDE_seem.material=meditmaterials[20]
addname="RIGHTSIDE_seem"
)
(objsNoSeem[j].name=="FRONTHANDLE_S"):
(
layerHandle_S.on=true
layerHandle_L.on=false
$FRONTHANDLE_S.material=meditmaterials[y]
$FRONTHANDLE_S_seem.material=meditmaterials[20]
addname="FRONTHANDLE_S_seem"
)
(objsNoSeem[j].name=="FRONTHANDLE_L"):
(
layerHandle_S.on=false
layerHandle_L.on=true
$FRONTHANDLE_L.material=meditmaterials[y]
$FRONTHANDLE_L_seem.material=meditmaterials[20]
addname="FRONTHANDLE_L_seem"
)
(objsNoSeem[j].name=="BACKHANDLE_S"):
(
layerHandle_L.on=false
layerHandle_S.on=true
$BACKHANDLE_S.material=meditmaterials[y]
$BACKHANDLE_S_seem.material=meditmaterials[20]
addname="BACKHANDLE_S_seem"
)
(objsNoSeem[j].name=="BACKHANDLE_L"):
(
layerHandle_S.on=false
layerHandle_L.on=true
$BACKHANDLE_L.material=meditmaterials[y]
$BACKHANDLE_L_seem.material=meditmaterials[20]
addname="BACKHANDLE_L_seem"
)
)
--render
for i=1 to cams.count do
(
if cams[i]=="TQR" then
(
c=getNodeByName "TQ"
f=1
)
else
(
c=getNodeByName cams[i]
f=0
)
makedir (outPath+"/"+maxFileName+"/"+cams[i]+"/")
render camera:c frame:f to: b vfb:true
b.filename=outPath+"/"+maxFileName+"/"+cams[i]+"/"+addname+meditmaterials[y].name+".png"
save b
)
)
*/
--BODYSTRAP
for i=1 to objs.count do
objs[i].material=meditmaterials[23]
theNodes.material=meditmaterials[23]
--with HANDLE_S
layerHandle_L.on=false
layerHandle_S.on=true
LayerStrap.on=true
$BODYSTRAP.material=meditmaterials[y]
$BODYSTRAP_seem.material=meditmaterials[20]
for i=1 to cams.count do
(
if cams[i]=="TQR" then
(
c=getNodeByName "TQ"
f=1
)
else
(
c=getNodeByName cams[i]
f=0
)
makedir (outPath+"/"+maxFileName+"/"+cams[i]+"/")
render camera:c frame:f to: b vfb:true
b.filename=outPath+"/"+maxFileName+"/"+cams[i]+"/"+"STRAP_S_"+meditmaterials[y].name+".png"
save b
)
--with HANDLE_L
layerHandle_S.on=false
layerHandle_L.on=true
$BODYSTRAP.material=meditmaterials[y]
$BODYSTRAP_seem.material=meditmaterials[20]
for i=1 to cams.count do
(
if cams[i]=="TQR" then
(
c=getNodeByName "TQ"
f=1
)
else
(
c=getNodeByName cams[i]
f=0
)
makedir (outPath+"/"+maxFileName+"/"+cams[i]+"/")
render camera:c frame:f to: b vfb:true
b.filename=outPath+"/"+maxFileName+"/"+cams[i]+"/"+"STRAP_L_"+meditmaterials[y].name+".png"
save b
)
)
)
mas=#("BOD","XBS", "HST", "HLG", "OVTS", "TOTS", "GYMS", "PRTS")
mat=#("LTRBRN","LTRBLU","LTRBLK")
for i=1 to mas.count do
(
for y=1 to mat.count do (
parts mas[i] mat[y] 1000
)
)
--Automate render for material permutations
fn parts r=
(
objs=#($BODY,$LEFTSIDE,$RIGHTSIDE,$FRONTHANDLE_S,$FRONTHANDLE_L,$BACKHANDLE_S,$BACKHANDLE_L,$BODYSTRAP,$BODY_seem,$LEFTSIDE_seem,$RIGHTSIDE_seem,$FRONTHANDLE_S_seem,$BACKHANDLE_S_seem,$FRONTHANDLE_L_seem,$BACKHANDLE_L_seem,$BODYSTRAP_seem)
objsNoSeem=#($BODY,$LEFTSIDE,$RIGHTSIDE,$FRONTHANDLE_S,$FRONTHANDLE_L,$BACKHANDLE_S,$BACKHANDLE_L)
sh=$shadow_Matt
sh.primaryVisibility=false
sh.receiveShadows=false
layer0=LayerManager.getLayerFromName "0"
layer0.nodes &theNodes
--set directories
scriptPath=getThisScriptFilename()
scriptPath1=pathConfig.removePathLeaf scriptPath
projectPath=pathConfig.removePathLeaf scriptPath1
MatPath=projectPath+"\matlib"
makedir (projectPath+"\\Renders")
outPath=projectPath+"\\Renders"
--read mat library
global MatFiles=#()
if MatPath !=undefined then MatFiles = getFiles (MatPath+"\\*.mat")
MatFilesNoPath = for f in matfiles collect ( getFilenameFile(filenamefrompath f ))
for i=1 to matfiles.count do
(
matlib = loadTempMaterialLibrary matfiles[i]
meditMaterials[i]=matlib[1]
meditmaterials[i].name= MatFilesNoPath[i]
print meditmaterials[i].name
)
b= bitmap r r
cams=#("F","T","S","TQ","TQR")
layerHandle_S=LayerManager.getLayerFromName "Handle_Short"
layerHandle_L=LayerManager.getLayerFromName "Handle_Long"
LayerStrap=LayerManager.getLayerFromName "Strap"
layerHandle_S.on=false
layerHandle_L.on=false
LayerStrap.on=false
for y=1 to matfiles.count do
(
theNodes.material=meditmaterials[22]
for j=1 to objsNoSeem.count do
(
for i=1 to objs.count do
objs[i].material=meditmaterials[22]
LayerStrap.on=false
case of
(
(objsNoSeem[j].name=="BODY"):
(
layerHandle_S.on=false
layerHandle_L.on=false
$BODY.material=meditmaterials[y]
$BODY_seem.material=meditmaterials[y]
addname="BODY_seem"
)
(objsNoSeem[j].name=="LEFTSIDE"):
(
layerHandle_S.on=false
layerHandle_L.on=false
$LEFTSIDE.material=meditmaterials[y]
$LEFTSIDE_seem.material=meditmaterials[y]
addname="LEFTSIDE_seem"
)
(objsNoSeem[j].name=="RIGHTSIDE"):
(
layerHandle_S.on=false
layerHandle_L.on=false
$RIGHTSIDE.material=meditmaterials[y]
$RIGHTSIDE_seem.material=meditmaterials[y]
addname="RIGHTSIDE_seem"
)
(objsNoSeem[j].name=="FRONTHANDLE_S"):
(
layerHandle_S.on=true
layerHandle_L.on=false
$FRONTHANDLE_S.material=meditmaterials[y]
$FRONTHANDLE_S_seem.material=meditmaterials[y]
addname="FRONTHANDLE_S_seem"
)
(objsNoSeem[j].name=="FRONTHANDLE_L"):
(
layerHandle_S.on=false
layerHandle_L.on=true
$FRONTHANDLE_L.material=meditmaterials[y]
$FRONTHANDLE_L_seem.material=meditmaterials[y]
addname="FRONTHANDLE_L_seem"
)
(objsNoSeem[j].name=="BACKHANDLE_S"):
(
layerHandle_L.on=false
layerHandle_S.on=true
$BACKHANDLE_S.material=meditmaterials[y]
$BACKHANDLE_S_seem.material=meditmaterials[y]
addname="BACKHANDLE_S_seem"
)
(objsNoSeem[j].name=="BACKHANDLE_L"):
(
layerHandle_S.on=false
layerHandle_L.on=true
$BACKHANDLE_L.material=meditmaterials[y]
$BACKHANDLE_L_seem.material=meditmaterials[y]
addname="BACKHANDLE_L_seem"
)
)
--render
for i=1 to cams.count do
(
if cams[i]=="TQR" then
(
c=getNodeByName "TQ"
f=1
)
else
(
c=getNodeByName cams[i]
f=0
)
makedir (outPath+"/"+maxFileName+"/"+cams[i]+"/")
render camera:c frame:f to: b vfb:true
b.filename=outPath+"/"+maxFileName+"/"+cams[i]+"/"+addname+meditmaterials[y].name+".png"
save b
)
)
--BODYSTRAP
for i=1 to objs.count do
objs[i].material=meditmaterials[23]
theNodes.material=meditmaterials[23]
--with HANDLE_S
layerHandle_L.on=false
layerHandle_S.on=true
LayerStrap.on=true
$BODYSTRAP.material=meditmaterials[y]
$BODYSTRAP_seem.material=meditmaterials[y]
for i=1 to cams.count do
(
if cams[i]=="TQR" then
(
c=getNodeByName "TQ"
f=1
)
else
(
c=getNodeByName cams[i]
f=0
)
makedir (outPath+"/"+maxFileName+"/"+cams[i]+"/")
render camera:c frame:f to: b vfb:true
b.filename=outPath+"/"+maxFileName+"/"+cams[i]+"/"+"STRAP_S_"+meditmaterials[y].name+".png"
save b
)
--with HANDLE_L
layerHandle_S.on=false
layerHandle_L.on=true
$BODYSTRAP.material=meditmaterials[y]
$BODYSTRAP_seem.material=meditmaterials[y]
for i=1 to cams.count do
(
if cams[i]=="TQR" then
(
c=getNodeByName "TQ"
f=1
)
else
(
c=getNodeByName cams[i]
f=0
)
makedir (outPath+"/"+maxFileName+"/"+cams[i]+"/")
render camera:c frame:f to: b vfb:true
b.filename=outPath+"/"+maxFileName+"/"+cams[i]+"/"+"STRAP_L_"+meditmaterials[y].name+".png"
save b
)
)
)
Replies
Without any docs, and without their Max files to explore through, it would take a long time to recreate this pipeline properly. If you don't have that file, and no other docs, it's going to take forever to sort this out.
I'd say discard it and come up with your own solution. Look into State Sets for Max, might help you automate what you need. What version of Max are you using?
By the way, the 'for i=1 to mas.count do...' part won't work with the parts function you've posted - that one expects one integer while the one in the loop is passed two strings and an integer.
Also, what the middle one actually tries to do...
If you could handle the .max file and script files I could maybe take a look and see if it can be patched and make it work? If it is top-secret work as usual, try to substitute the objects by boxes, teapots or similar, that could be enough.