Resultados 1 al 5 de 5

Animar según distancias

  1. #1
    Fecha de ingreso
    Dec 2008
    Mensajes
    963

    Exclamation Animar según distancias

    He visto muchas animaciones en las que un conjunto de objetos similares cambian alguna característica (color, tamaño, hacen un movimiento específico) cuando otro objeto se les acerca.

    Un ejemplo típico sería una superficie cubierta de objetos oscuros, que al paso de un objeto con una trayectoria definida se aclaran gradualmente cuando éste se les acerca, y vuelven a su color oscuro cuando se les aleja.

    Imagino que en la pista de color de cada objeto oscuro debería haber un controlador distinto al usual, pero no tengo idea de cómo hallar la distancia entre los objetos y convertirla automáticamente en los valores necesarios.
    ¿Alguien sabe cómo se hace este efecto?

  2. #2
    Fecha de ingreso
    Mar 2004
    Mensajes
    3,694

    Animar según distancias

    Hola, yo creo que lo que buscas se hace en postproducción, básicamente tienes 2 renders y usas una máscara para mostrar uno u otro (máscara que puede estar dada perfectamente por una luz con atenuación sobre materiales blancos sin textura).

    De todas formas, el comando para medir distancias entre 2 nodos es:
    Código:
    distance $objeto a $objetob
    En ciertos casos donde se quieren lograr efectos muy concretos puede ser útil medir la distancia entre objetos para definir una propiedad, pero sospecho que no es eso a lo que te refieres con la pregunta. Si lo fuera te dejo un ejemplo donde usando la distancia entre múltiples elementos podemos establecer su color (simplemente ejecuta el código en una escena nueva).


    Código:
    (.
    
    Animpoint = point name:animpoint box:on.
    
    Allspheres = point name:allspheres_grp box:of.
    
    For x=-100 todo 100 by 10 do.
    
    For y=-100 todo 100 by 10 do.
    
    Mysphere = sphere pos:[x y,0] Radius:5 name uniquename sphere) color:[0,0,0].
    
    Mysphere, parent = allspheres.
    
    Mysphere, material = standardmaterial().
    
    Mysphere, material, name = mysphere, name + _material.
    
    Mysphere, material, selfillumamount = 100.
    
    Color = mysphere, material, Diffuse, controller = point3_script().
    
    Color. Addnode self mysphere.
    
    Color. Addnode target animpoint.
    
    Txt =( +.
    
    Txt+= local Dist = distance self target +.
    
    Txt+= local fallof = 40 +.
    
    Txt+= local color = (fallof-dist)/fallof +.
    
    Txt+= [color, color, color] +.
    
    Txt+=).
    
    Color, script = txt).
    
    Select animpoint.
    )
    Saludos.

    -- IMÁGENES ADJUNTAS --
    Miniaturas adjuntas Miniaturas adjuntas Clic en la imagen para ver su versión completa. 

Nombre: csaez_ColorByDist.jpg 
Visitas: 497 
Tamaño: 13.3 KB 
ID: 97146  
    Última edición por Cesar Saez; 08-03-2009 a las 08:31

  3. #3
    Fecha de ingreso
    Dec 2008
    Mensajes
    963

    Unhappy Animar según distancias

    Hola, César. Te agradezco la profundidad con que abordaste mi mensaje. Mis conocimientos de Maxscript son prácticamente nulos, de modo que hasta la menor edición me sería incomprensible.

    Sin embargo, me invadió la curiosidad, y pegué el código en una ventana de Listener nueva (imagino que era eso lo que había que hacer) y me tiró el siguiente mensaje en rojo:
    - Syntax error: at), expected <factor>.

    In line.

    Ahora.
    puede ser útil medir la distancia entre objetos para definir una propiedad, pero sospecho que no es eso , sí, es algo como esto en verdad.

    Para alterar no sólo el color, sino el tamaño u otras características de los objetos.

    Pero en realidad esperaba que el problema se pudiera resolver con utilidades como el diálogo parameter wiring o el controlador expresión, por ejemplo. ¿tienes idea cómo se usa (n), especialmente luego de obtener la distancia entre objetos (que ya sabes usar)?
    Estuve probando, con el código distance $a $b que me pasaste, y a veces no puede convertir los valores a float, y otras trunca la expresión.

    Obviamente estoy dando manotazos de ahogado, antes que trabajar metódicamente.
    Última edición por deloeste33; 11-03-2009 a las 02:59

  4. #4
    Fecha de ingreso
    Mar 2004
    Mensajes
    3,694

    Animar según distancias

    Hola, no tienes nada que agradecer, este tipo de mini desafíos me resultan sumamente entretenidos de discutir, lástima que no se dan muy a menudo.
    Sin embargo, me invadió la curiosidad, y pegué el código en una ventana de Listener nueva (imagino que era eso lo que había que hacer) y me tiró el siguiente mensaje en rojo:
    - Syntax error: at), expected <factor>.

    In line.
    Para ejecutar un código que comprenda más que un par de líneas tendrías que ir al menú Maxscript/new script y pegar en la nueva ventana el código, para ejecutarlo basta presionar Control + e o bien ir al menú file/evaluate all.
    (no tengo max al frente y los nombres puede diferir levemente, pero se entiendel concepto).
    Pero en realidad esperaba que el problema se pudiera resolver con utilidades como el diálogo parameter wiring o el controlador expresión, por ejemplo. ¿tienes idea cómo se usa (n), especialmente luego de obtener la distancia entre objetos (que ya sabes usar)?
    Estuve probando, con el código distance $a $b que me pasaste, y a veces no puede convertir los valores a float, y otras trunca la expresión.
    La verdad es que, si se puede hacer de forma gráfica, puedes crear un helper del tipo tape y vinculando sus extremos obtener la distancia entre ellos, luego mediante un wireparameters o el tipo de conexión que más te acomode puedes usar ese valor.

    La forma de usar la distancia para hacer algo útil depende absolutamente de lo que necesites, no hay automatismos en transformar distancia a color o cosas por el estilo (al menos hasta dónde entiendo).

    Por ejemplo, en el script del mensaje anterior básicamente hice lo siguiente:
    1.- Creo un helper del tipo point que será el control que animaremos.
    2.- Creo una serie de esferas (21x21=441 esferas.) que cambiaran su color según la distancia con el helper creado anteriormente.
    3.- Para cada esfera creo un material y se lo asigno (ya que es la forma de darle un color diferente a cada uno).
    4.- En el canal Diffuse de cada material crea un controlador tipo point3 script que permite poner cierta lógica a la forma de obtener el color.
    3.- En cada controlador point3 script escribo una expresión para obtener el color basado en la distancia, las líneas verdes son sólo comentarios descriptivos para explicar que hace cada cosa.
    Código:
    - En la siguiente línea cálculo la distancia entre la esfera y el point.
    
    Dist = distance self target.
    - Establezco un radio de 40 unidades para el decaimiento del color.
    
    Puede ser cualquier valor.
    
    Fallof = 40.
    - Normalización de la distancia para obtener color, esta es la parte.
    
    Ingeniosa donde debes buscar una relación entre la distancia y un valor.
    
    Entre 0~1 que represente cada componente del color.
    
    Color = (fallof - Dist) / fallof.
    - Valor final entregado por el controlador en formato RGB.
    Hacer esto a mano (con helpers para medir distancias y tal) es un proceso largo y tedioso, la lógica sigue siendo totalmente aplicable, pero dado que son muchos elementos se tornaría en algo sumamente repetitivo (sin mencionar que tendrías el doble de elementos en tu escena). Por eso te comenté sobre el comando de Maxscript para medir distancias en lugar del helper taper, a la larga termina siendo una opción mucho más viable para este tipo de cosas. Saludos.
    Última edición por Cesar Saez; 11-03-2009 a las 06:13

  5. #5
    Fecha de ingreso
    Dec 2008
    Mensajes
    963

    Unhappy Animar según distancias

    Hacer esto a mano (con helpers para medir distancias y tal) es un proceso largo y tedioso.
    ¿te parece? ¿no es posible trabajar con instancias y el controlador expression?
    Estuve haciendo pruebas con ellos (y con parameter wiring), que juntos parecen herramientas flexibles y potentes. Pero justo por eso hay algo que todavía no capto respecto a la sintaxis admitida en la ventana evaluate expression.

    Mi pregunta iba orientada al posible uso combinado de estas dos herramientas. ¿las usas a menudo? ¿puedes decirme cómo hacer que el $a $b (o algo parecido) funcione allí? ¿conoces la función que humilde coordenadas a floatí.

    Imagino que sabiendo eso, se podría usar esto sin necesidad del objeto taper. Gracias de antemano.
    Última edición por deloeste33; 13-03-2009 a las 14:40 Razón: otrografía

Temas similares

  1. Script medidor distancias
    Por 3dpoder en el foro Plugins y Scripts
    Respuestas: 0
    : 19-05-2014, 09:27
  2. Mi modelo desaparece a grandes distancias
    Por HydraTeam en el foro Modelado
    Respuestas: 2
    : 22-12-2012, 22:18
  3. Spline por distancias
    Por alex222 en el foro Modelado
    Respuestas: 2
    : 31-01-2009, 02:41
  4. Hardware Distancias de trabajo ojos monitor
    Por neozenit en el foro Hardware
    Respuestas: 6
    : 06-09-2007, 00:31
  5. Distancias solo ortogonales
    Por franquy en el foro Programas de Diseño 3D y CAD
    Respuestas: 8
    : 02-10-2005, 15:33

Etiquetas para este tema