Home Technical Talk

Can anyone take a look at these scripts?

polycounter lvl 8
Offline / Send Message
sefice polycounter lvl 8
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

  • Eric Chadwick
    Were you given one of the Max files that this worked with? Looks like a particular setup was used, with specific named parts.

    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?
  • sefice
    Offline / Send Message
    sefice polycounter lvl 8
    Yes I actually have the max files with me. It just doesn't seem to be doing anything though. But I figured I would just have to come up with something else if there's no luck.
  • Swordslayer
    Offline / Send Message
    Swordslayer interpolator
    All the needed files and exactly the same directory structure, though? This script looks like a one-off thing, when anything changes, it breaks - it expects not only exact names of everything, it also has to be placed in the right directory for it to work and all the matlibs (each containing one material; fixed order, if you add one it all breaks once again) in another folder of the structure.

    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.
  • sefice
    Offline / Send Message
    sefice polycounter lvl 8
    Yeah I guess I'll just have to look for an alternative. The files given to me are a complete mess in folder structure. Thanks for the help.
  • amartinez
    Offline / Send Message
    amartinez polycounter lvl 8
    I'm failing to see what the last code snipped tries to do differently than the first code snippet.
    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.
Sign In or Register to comment.