Notifications
Clear all

[Closed] callback and rendering

hi all, first post in maxscript.

i have 300~ objects with names from 01 to 300, i want to show only one of them at each rendered frame. i guess i want to hide all the rest but cant find the method to tie the [hide] to current rendered frame.
now i use a callback to the slider, only after it worked i red it doesnt perform in render…
i tried with [animate on] but [hide] doesnt animate (i think) and anyways i would like to know if i can without…

btw. ignore the pad function, i ripped it from another thread to handle the padding in the objects name.


unRegisterTimeCallback calcVisiblityOfCloud

fn pad inp ln ch:"0" = (
inp = inp as string
while inp.count < ln do inp = ch + inp
inp
) 
----------------------------------------------------

fn calcVisiblityOfCloud =
(
	/* PlyMesh01 - 284*/
	iFrame = pad (currentTime.frame as integer) 2
	hide $*plyMesh*
	showMe = execute("$PlyMesh"+iFrame) 
	unhide showMe
)

registerTimeCallback calcVisiblityOfCloud

5 Replies

Why not just animate the visibility?

Your first nine objects will need to be single numbers, not ‘01’ but ‘1’.

My objects where “box1” -> “Box300” you can change the prefix in the script in the getnodeby name function.


(
for i=1 to 300 do
	(
	TempNode = getnodeByName ("box"+( i as string))
	if ( isValidNode TempNode == true ) do
		(
-- create Controller and set to zero
		local tnCont= Bezier_Float()
		tnCont.value = 0.0
		animate on
			(
-- add invisible key before and after time you want it to be visible
			tnKey = addNewKey tnCont (i-1)
			tnKey = addNewKey tnCont (i+1)
-- add visible key at the time you want to see it
			tnKey = addNewKey tnCont (i)				
			tnKey.value = 1.0
			)
-- apply controller to node			
		TempNode.visibility.controller = tnCont
		)
	)
)

thanks, i found many useful syntax tidbits in your script.

actully, i guess hidden or invisible my script demands a diffrent method.
i have too many polygons for keeping max stable.
i need to delete and add modifiers at each frame.
i currntly use the callback mathod that ends with a call to a render frame.

so… there is no way to have things happen depending on the current frame at render time?
setup(){}
draw(){}

Max does not like things changing in scene when rendering a range. If you have it working as you like on the slider, you can just call a series of individual renders, instead of trying to render a sequence.


for i= 1 to 300 do
(
sliderTime = i
render filename:("D:\	emp\\Fileout_"+(i as string)+".jpg")
)

thanks so much,
just a quick typo, the render should get a outputfile: and not filename:

oh yeah… Sorry about that… That’s the problem with coding directly to the forum…