MaxScript to batch render with automatic texture changes


I have a scene with a single cube, and I need to render (and save) pictures of this scene hundreds of times, each with a different texture (diffuse bitmap) on the cube. The bitmap textures are numbered from 001.bmp to 699.bmp

So basically I need a script to automatically change the diffuse bitmap texture of a single material (Material 01), then render the scene to an image file, and repeat for all the textures.

Is it possible to write such a script? If yes, would anybody be kind enough to write it, or at least point me to a resource that might help?

Thanks in advance :)


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
barigazy's picture
worwhite's picture

Looks useful

That looks useful. I'm not sure it does what I need in this case (anyway I already got what I needed), but it might come in really handy in future. Thanks!

Edit: Just something funny - I didn't add a subject for the comment at first, and it automatically took the first few words of the comment, which gave:

"That looks useful. I'm not"


tony07's picture

How did you slove it?

Hello, its been i while but im looking something similar to you, and i would like to know how you face it and the solution to it and if you might be able to share it with me? thanks

miauu's picture

Try this script:( global

Try this script:

	global rol_worwhite
	try(destroyDialog rol_worwhite)catch()
	rollout rol_worwhite "miauu"
		local matDir = undefined
		button btn_browse "Select folder with textures"
		button btn_render "RENDER" enabled:false
		on btn_browse pressed do
			dir = getSavePath caption:"Select folder with textures"
			if dir != undefined do
				matDir = dir
				btn_browse.tooltip = matDir
				btn_render.enabled = true
		on btn_render pressed do
			local curObj = selection[1]
			local matFiles = getFiles (matDir + "\\*.bmp")	--	get only BMP files
			local originalOutPath = rendOutputFileName
			for m = 1 to matFiles.count do
				curObj.material = standardMaterial  diffuseMap: (Bitmaptexture fileName:matFiles[m]) showInViewport:true
				outputPath = (getfilenamepath originalOutPath) + ( getFilenameFile(filenamefrompath originalOutPath)) + "_" + (m as string) + "_"  + (getFilenameType originalOutPath)
				rendOutputFileName =  outputPath
				rendSaveFile = true
				--	disable virtual frame buffer
				rendShowVFB = false
				max quick render
	createdialog rol_worwhite

The RENDER button will be ebanled when you select the valid folder(in this folder you have to have the texture that you want to be added to the cube in BMP format).
Open Render Setup dialog(hotkey F10) and select the width and height of the rendered images, the output path, the base name for rendered images and so on.
Select the cube(or any other object that you want to use).
Press the RENDER button.
The script save rendered images in the folder, specified in the Render Setup Dialog.
The script will render the cub

tony07's picture

i have a question?

hello, i would like your help, i need to know how i can use this but instead change the folder texture and the texture, just after finish the render select an apply the next material and render and save and with all the material i have in the material browser.


kishore25kumar's picture

How can I apply it to multiple objects

Hi, your solution works for single object, but I wanted to apply the same texture to multiple objects in the scene

worwhite's picture

Brilliant! Thanks!

This worked BRILLIANTLY! I loved the select folder option and simply using the number of .bmp files too. Thanks!!!

miauu's picture

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.