-
Rtt animada
Hola a todos, tengo un problema, a ver si alguien puede echarme una mano. Estoy intentando sacar unos mapas de altura de una superficie animada, pero el max pasa de mi, hace un bitmap de cada uno de los frames, pero el aspecto siempre es el del Final Render 0, muy útil ¿no?
Así que estoy intentando hacer un script copiando y pengando de lo que pillo por aquí y por allí, lo de programar no es lo mío.
He hecho este código, pero no me chuta, alguien me lo puede corregir?
Consigo hacer que renderice, pero no más, ni salva, ni sigue el for, bueno que no tengo ni p idea, muchas gracias.
Clearlistener().
Cuadro=0.
Texheight = 3000.
Texwidth = 750.
Bakeobj = $.
Bakeelements = bakeobj. Inodebakeproperties.
$.removeallbakeelements().
Bakeelements, bakechannel = 2.
Bakeobjs = #().
Makedir (maxfilepath + \bakedtextures\\).
Bakeobjpath = (maxfilepath + \bakedtextures\\).
Texpath = (maxfilepath + \bakedtextures\\).
Maptype = Diffuse.
Bakeobjdiffuse = diffusemap().
Bakeobjdiffuse, lightingon = true.
Bakeobjdiffuse, shadowson = true.
Bakeobjdiffuse, outputszx =texwidth.
Bakeobjdiffuse, outputszy =texheight.
Bakeobjdiffuse, enabled = true.
Bakeobjdiffuse, filename = ($.name + _ + MapType).
Bakeobjdiffuse, filetype =.bmp.
Bakeelements, addbakeelement bakeobjdiffuse.
Diffusefile = (texpath + bakeobjdiffuse, filename + bakeobjdiffuse, filetype).
For te = animationrange, start todo animationrange, end do.
( tdiffusefile = (texpath + bakeobjdiffuse, filename + str (slidertime as integer) + bakeobjdiffuse, filetype) slidertime=t as integer render rendertype:#bakeselected frame:slidertime outputwidth:texwidth outputheight:texheight outputfile:bakeobjpath renderelements:true renderelementbitmaps:&bakeobjs VFB:on outputfile iffusefile quiet:true t.
-
Tu script tiene varios errores de sintaxis y lógica. Aquí está la versión corregida y funcional para 3ds Max. Este script renderizará y guardará mapas de altura (o cualquier otro tipo de mapa) para cada frame de una animación.
Primero, debes asegurarte de tener seleccionado el objeto que quieres hornear (bake) antes de ejecutar el script. El script creará una carpeta llamada "bakedtextures" en la misma ubicación que tu archivo MAX.
El código corregido es el siguiente:
Clearlistener().
Cuadro = 0.
Texheight = 3000.
Texwidth = 750.
Bakeobj = $.
Bakeelements = bakeobj.INodeBakeProperties.
Bakeobj.removeAllBakeElements().
Bakeelements.bakeChannel = 2.
Bakeobjs = #().
Makedir (maxfilepath + "bakedtextures").
Bakeobjpath = (maxfilepath + "bakedtextures\\").
Texpath = (maxfilepath + "bakedtextures\\").
Maptype = "Height".
BakeobjHeight = HeightMap().
BakeobjHeight.outputSzX = texwidth.
BakeobjHeight.outputSzY = texheight.
BakeobjHeight.enabled = true.
BakeobjHeight.filename = (Bakeobj.name + "_" + Maptype).
BakeobjHeight.fileType = ".bmp".
Bakeelements.addBakeElement BakeobjHeight.
Heightfile = (Texpath + BakeobjHeight.filename + BakeobjHeight.fileType).
For t = animationRange.start to animationRange.end do
(
slidertime = t.
tHeightfile = (Texpath + BakeobjHeight.filename + (slidertime as integer) as string + BakeobjHeight.fileType).
render rendertype:#bakeselected frame:slidertime outputwidth:texwidth outputheight:texheight outputfile:tHeightfile vfb:off quiet:true.
)
Explicación de los cambios principales. He cambiado el tipo de mapa a HeightMap, que es lo que solicitas para mapas de altura. El bucle For ahora recorre correctamente el rango de animación usando animationRange.start y animationRange.end. Dentro del bucle, se construye un nombre de archivo único para cada frame concatenando el tiempo (slidertime). El comando render usa #bakeselected para hornear solo el objeto seleccionado y guarda el archivo en la ruta generada para cada frame.
Asegúrate de que el objeto tiene asignadas propiedades de baking correctamente. Si necesitas otro tipo de mapa, como Normal o Diffuse, solo debes cambiar la línea donde se crea el elemento, por ejemplo NormalMap() en lugar de HeightMap(), y ajustar el nombre Maptype.
Para ejecutarlo, abre la ventana de MAXScript (F11), pega el código y presiona Enter. Los archivos se guardarán en la subcarpeta bakedtextures.