MaxScript to batch render with automatic texture changes

Hi!

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 :)

Comments

Comment viewing options

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

Same material

Hi Miauu, this script is exactly what we'd need for few hundreds of renders. I'm having a trouble with Standard material since I'm using Corona. Is there a way to use existing material, and only change diffuse map? Thanks

miauu's picture

.

Hi!
Check if this works as you want:

(
	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
			renderSceneDialog.close()
			local originalOutPath = rendOutputFileName
			for m = 1 to matFiles.count do
			(
-- 				curObj.material = standardMaterial  diffuseMap: (Bitmaptexture fileName:matFiles[m]) showInViewport:true
				curObj.material = CoronaMtl  texmapDiffuse: (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
)
jbrckovic's picture

Same material

Hi Miauu, this script is exactly what we'd need for few hundreds of renders. I'm having a trouble with Standard material since I'm using Corona. Is there a way to use existing material, and only change diffuse map? Thanks

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

miauu's picture

.

Replace this lines:

on btn_render pressed do
		(
			local curObj = selection[1]

with this:

on btn_render pressed do
		(
			local curObj = selection as array
kishore25kumar's picture

How to add bump maps to it

After some struggle I figured it out that I have to do the way you specified it. How do I add bump maps path also to it.

thanks for your time

miauu's picture

.

replace this:

curObj.material = standardMaterial  diffuseMap: (Bitmaptexture fileName:matFiles[m]) showInViewport:true

with this:

curObj.material = standardMaterial  diffuseMap:(Bitmaptexture fileName:matFiles[m]) bumpMap:(Bitmaptexture fileName:matFiles[m]) showInViewport:true
nvidia2014's picture

miauu

hello sir ,

Can u makes this script working with 2 objects and separate texture folders for 2 objects ...

thanks ...

cool:)

miauu's picture

Hi, Branko! Regards from BG

Hi, Branko!
Regards from BG :)

barigazy's picture

hi Kostadin. In the same time

hi Kostadin.
In the same time we are post comment :)
Regards!

bga

Comment viewing options

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