XSIforum.com
Foros 3D => 3D-2D => Otros... (Max, Maya, Lightwave...) => Mensaje iniciado por: Unaided en 21 Septiembre 2011, 11:19:14
-
Tengo una animación en la cual he animado el parámetro 'lenght' de un operador de extrusión. ¿Cómo puedo 'bakear' la animación de ese parámetro para poder exportarlo en .fbx o .xsi?
-
haz un blendshape d eso y luego un plot o saca una secuencia d obj's no tengo el softi en el portatil a ver si t lo explico mejor en cuanto monte el pc, majooo :) ademas etoy a sin luz y las teclas del portatil son negras, no veo un carajo!!! xD
-
He probado a hacer shapes, pero al importarlo en Max, el operador Morpher que tiene incluído el objeto que en XSI tiene la animación de la extrusión, aparecen vacíos los shapes.
Creo que no estoy definiendo correctamente los shapes en XSI. La animación del lenght del opExtrude lo he hecho a través de la linea de tiempo. ¿Debería hacerla sobre un shape animado?
Sacar una secuencia de .obj sería interesante, nunca lo he hecho, pero existe una forma automática o he de hacerlo a mano frame a frame (325f)?
-
Point cache!
-
Sin duda point cache, funcionará perfecto.
-
Desde el cache manager en XSI hago un Write Cache de Point Position, en formato .pc2. La mesh la exporto en .obj en el último fotograma (325) con el total de puntos.
Importo el .obj en Max, y le añado un Point Cache cargando el archivo .pc2.
En primera instancia hay un problema con la escala del objeto al cargar el .pc2, pero la cuestión es que no se mueve o no parece moverse nada. Me da que el problema puede estar en que la extrusión genera puntos nuevos, y el atributo cacheado es PointPosition (¿solo puntos existentes?).
-
Algo no estoy haciendo bien entonces Xuanprada entonces.
Acabo de hacer una prueba. Un grid con un deformador wave. Funciona correctamente, mantiene escala y rotación de objeto de origen pero no tiene importancia. En la lista de atributos a cachear, el PointPosition sería el apropiado, pero parece que no tiene en cuenta los puntos nuevos por frame o algo así.
-
Point cache ha de funcionarte perfect para este caso
-
Lo estoy probando con nueva geometría (extrusión por curva) y no hay manera. Algo no estoy haciendo bien, pero ya no sé más probar. Tanto si cargo el .pc2 en el primer frame o en el último, no hace nada. En uno de los intentos el range era de 9/10 y funcionaba ese frame, pero he vuelto a cargar el .pc2 con el frame en 0 para que coja de 0 a 10 y no se aplica correctamente el cacheado. :(
Estoy con el Max 2009, no vaya a haber algun problema.
-
También puedes buscar la curva de ese parámetro en el FCurve Editor y exportarla
-
También puedes buscar la curva de ese parámetro en el FCurve Editor y exportarla
Eso si que no lo veo claro. Se trata de un parámetro que no existe en Max. No podría aplicar esa curva.
Ahora no entiendo porque solo carga del 9 al 10. No sé si es problema del PointCache del Max, o el .pc2 no contiene el cacheado de los otros frames. En el rango del Cache Manager de XSi le he puesto bien Start 0; End 10. Vaya historia.
-
Ah, ok. No sabía que querías exportar entre softwares; pensaba que era de Softi a Softi. Tonces nada, me sumo a los que te sugieren el point caché.
Concretamente el que yo he usado siempre y me ha ido muy bien es el de Kaipirinha http://www.kai-wolter.com/resources/xsi/kp_pc_xsi
Sospecho que el que integraron en Softi sería éste, pero yo me aclaro mejor con el que llevo usando de toda la vida.
-
Gracias Sumatra. Intentaré probar con ese no sea que haya alguna incompatibilidad con el .pc2 que genera el que se incluye con el Point Cache del Max 2009. Si bien, el Cache Manager que viene en la 2012 ya viene a ser eso, y no tiene gran misterio por lo que he podido probar.
He buscado algún plugin para cargar cacheado de puntos para Max, por si fuese problema del operador. No he conseguido que lea todos los frames que le digo que cachee, y que teoricamente lleva el archivo .pc2.
Voy a hacer otra prueba. Yo sigo pensando que algo no va bien porque son puntos nuevos que se generan en cada frame, pero tampoco estoy seguro. Además del PointPosition he probado con el atributo PointCrease, aunque ese atributo me suena a un valor de peso asignado a un vertice.
-
Alguien puede hacer un prueba sencilla con un ExtrudeOp animando su EndPos, y cacheandolo? Es que yo ya no sé si estoy haciendo algo incorrectamente, o el cacheado no es válido cuando se generan puntos nuevos en cada frame.
Gracias!
-
El problema es que generas nuevos puntos y el cache no lo soporta... es más, no es recomendable generar geometría en tiempo de ejecución porque suele provocar artefactos y problemas con el motion blur en el render.
Lo que yo haría en tu lugar es crear la extrusión con 0 desplazamiento en la malla base y luego simplemente "modificar" esa geometría, de esa forma el objeto siempre tendría el mismo numero de puntos y funcionará bien con cualquier formato de cache.
Si no puedes te puedes plantear hacer un cambio de objeto de un frame a otro (el numero de veces que cambies el numero de vertices de la malla)... o exportar una secuencia de objs y animar la visibilidad (que te dará problemas de motion blur en render).
-
Es lo que me parecía.
Suenan bien los métodos que comentas. La secuencia de objs que también Morphi propuso, es la opción más sencilla en el punto donde estoy, para no tener que rehacer lo que ya tengo.
El método de modificar la geometría lo veo más versátil a priori, por lo que me interesa. El inconviente que veo, es que es una extrusión por un carril, pero lo animado es justamente la extrusión. Se trata de la animación de un gráfismo que se "dibuja" en tiempo de reproducción, por lo que encontrar una forma de modificar la geometría no lo veo tan claro. Tal vez creando una extrusión por un eje y luego con un deformador por curva, y animando el translation by curve, y la visibilidad para cuando se "empieza a dibujar".
Lo curioso es que el operador Extrusión cuando es sobre un eje genera una geometría con una longitud, y son divisiones de esa longitud, mientras que cuando la extrusión se hace por una curva, la longitud pasa a ser posición incial y posición final, y se crea o elimina geometría cuando se modifican sus valores.
-
Usando el deform by curve y animando el translation along curve, tengo el inconveniente de tener que dividir demasiado la malla (es para tiempo real).
Voy a optar por animar la visibilidad de una secuencia de .obj, pero como son 325 frames, cómo podría construir una expresión o un script (en Max) para automatizar la generación de esos keys?
Estoy viendo que en Max no parece ser animable la visibilidad de un objeto (no la propiedad visibility de render), sino el hide/unhide, y la misma propiedad via capas tampoco. No me lo puedo creer!
Via scripting se puede acceder, pero no sé como hacer que el siguiente objeto se desoculte en el siguiente frame y vuelva a ocultarse en el próximo frame. Esto de forma secuencial. Si bien los objetos tienen están nombrados correlativamente.
-
He encontrado un script (OBJ loader) para cargar secuencias obj que mantiene correctamente la animación de origen, aparentemente cargando cada obj por frame.
Pues no me sirve, ya que necesito exportarlo a un formato propio de un software de realidad aumentada y el OBJ Loader al leer cada .obj en tiempo de ejecución hace que no se exporte adecuadamente. No sé si tiene mucho sentido hacer un record con el PointCache ahora, al OBJ loader.
-
...no sé como hacer que el siguiente objeto se desoculte en el siguiente frame y vuelva a ocultarse en el próximo frame. Esto de forma secuencial. Si bien los objetos tienen están nombrados correlativamente.
Dado que cada .obj importado lleva el número de frame en su nombre dentro de la escena, se podría hacer un script que ponga visible el objeto cuando el "current frame" y el nombre del objeto valgan lo mismo, y oculto cuando sea diferente?
-
Tio, que no puede ser tan difícil.
Cargar los obj como secuencia incurrirá en un gasto de recursos desmesurado y problemas de exportación donde sea que lo quieras llevar (más si es para RT), te aseguro que es mejor idea deformar el objeto subdividido previamente a la resolución necesaria y dejarse de historias, de esa forma no tendrás problemas de motion blur, será predecible y fácilmente exportable a lo que sea que necesites.
-
Lo hice, y necesité dividir exageradamente la geometría para que se viera bien. El objeto extrusionado por curva, y animado el EndPos acaba teniendo unos 17mil poligonos, mientras que el mismo objeto, pero extrusionado y deformado por la curva, animando el Translate Along Curve, lo tuve que acabar dividiendo en unos 300mil poligonos.
Al "correr" por la curva, como tiene puntos de curvatura muy cerrados se produce un efecto de fliqueo en esos puntos, por eso necesito dividir enormemente la geometría base.
No sé me ocurre alternativa a eso, y con la secuencia de objs, si puedo animar la visibilidad, creo que a donde lo tengo que exportar aceptará esa información. El problema es que no vi animable el parámetro hide, al menos por keying. Via script si que funciona con un hide $nombreObjeto
-
Cuando he tenido que hecer estas cosas en 3dsmax, los solía escalar a 0 :)
-
Ummm, muy recurrente la verdad. Concepto ancestral donde lo haya tocar la escala, y ni se me hubiese pasado por la cabeza nunca. Las técnicas de "toda la vida" suelen funcionar y mejor en muchos casos, aun cuando el software tenga más capacidades.
Volví con el método de deformar la geometría en lugar de crearla en cada frame, para poder usar el PointCache, y si bien para la importación en Max me funcionó finalmente, no me ha servido puesto que el destino final es otro programa, y claro, no había reparado en que el caso del Point Caché es idéntico al del OBJLoader. Ambos "estiran" información de archivos externos y por medio de un operador de Max.
Probé también otro recurso. Renderizar a mapa la animación de la geometría en XSI, y aplicarla como textura animada en el programa de destino. Lamentablemente esa aplicación no ofrece control para sincronizar un video con el resto de objetos animados. :(
Voy a hacer una prueba ahora mismo, con el método de escalar a 0 los .obj. Si sirve, voy a tener que pelearme para hacer un script, son más de 300 frames!
Gracias!
-
Sep, definitivamente tienes que hacer un script y lo solucionas en un momento.
Hace muuucho que no hago nada en maxscript pero lo de animar la escala debería ser algo como esto (probablemente el código falle, no tengo max instalado y lo he hecho de memoria, pero por ahí van los tiros).
animate on
(
local iFrame = 0
for oObj in $selection do
(
local currentScale
at time iFrame
(
deleteKeys oObj.controller.position.controller #allKeys
deleteKeys oObj.controller.rotation.controller #allKeys
deleteKeys oObj.controller.scale.controller #allKeys
currentScale = oObj.controller.scale.controller.value
)
at time 0f oObj.scale = [0, 0, 0]
at time (iFrame-1) oObj.scale = [0, 0, 0]
at time (iFrame+1) oObj.scale = [0, 0, 0]
at time iFrame oObj.scale = currentScale
iFrame = iFrame + 1
)
)
Ya nos contarás en que termina tu odisea O0