Resultados 1 al 2 de 2

Script para renderizar y guardar mapas de altura de una animación en 3ds

  1. #1
    Fecha de ingreso
    Jun 2002
    Mensajes
    567

    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.

  2. #2
    Fecha de ingreso
    Dec 2025
    Mensajes
    0
    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.

Temas similares

  1. Autodesk Maya ¿Cómo crear animaciones realistas de agua para videojuegos?
    Por andyy31 en el foro Animación y Rigging
    Respuestas: 1
    : 15-08-2025, 22:34
  2. Blender Textura animada
    Por Freemind en el foro Blender
    Respuestas: 0
    : 11-05-2012, 16:40
  3. Respuestas: 0
    : 07-05-2012, 17:10
  4. Autodesk Maya Textura animada
    Por TRSD en el foro Animación y Rigging
    Respuestas: 3
    : 14-06-2010, 14:09
  5. Blender Textura animada
    Por 3dpoder en el foro Blender
    Respuestas: 0
    : 15-09-2008, 14:47