
Descargue el archivo toe del siguiente link:
https://github.com/tolchx/Particulas-Movimiento
Interpretación y traducción: Tolch
Tutorial Original by Ken-ichi KAWAMURA
Analizaremos un proyecto de partículas, que se generan en las partes móviles de nuestra imagen.
Dentro del proyecto de muestra tenemos segmentados diferentes ejemplos, por un lado se encuentra la sección con nuestro material visual, podemos elegir entre video, ndi, video in
Esta será la entrada de información visual al sistema, para poder generar las partículas.
Utilizaremos las variaciones en los pixels, para emitir partículas cuando la imagen se encuentra en movimiento
Hay varios niveles que nos serán útiles para comprender las diferentes partes que conforman el proyecto
Vamos a explicar cada uno de estos niveles, previamente debemos conocer un poco mas acerca de como se generan estas partículas en el sistema, para eso tenemos el contenedor Basic
Construiremos las partículas utilizando operadores SOPs
Sphere Sops: Aumentamos el Radio de la esfera, al igual que su cantidad de filas y columnas, así obtendremos varios puntos donde las partículas podrán nacer.
Sort Sop: Los puntos que emiten las partículas, los vamos a colocar de manera aleatoria a través de toda la esfera.
Particle Sops:
Birth: Numero de partículas que nacen por segundo.
Life Expect: Cuanto tiempo existirá cada partícula.
Convertimos el operador Sop a Chop, para obtener los valores numéricos del sistema, Posición, Velocidad, Vida, color y Alpha (Cd)
Por ultimo creamos la escena 3D utilizando los Componentes Luz, Cámara y Geometría, unidos al Render Top
Ese fue un resumen de como generar un sistemas de partículas simples dentro de Touchdesigner, si quiere profundizar con esta tecnica le comparto material donde explico con otro ejemplo:
Ya vimos como crear un sistema de partículas dentro de TD, podemos generar esas partículas a través de imágenes planas.
Analicemos los ejemplos.
Demo1
El primer grupo de operadores Tops esta conformado por
Top Selector: Selecciona la imagen del operador ../img que se encuentra un nivel por fuera del contenedor actual
Top Flip: Se encarga de girar la imagen en el eje X, puede utilizarlo cuando selecciona la WebCam si desea ver en modo espejado.
Top Level: Para controlar los valores de brillo, gama, contraste, etc
Top Mono: Aplicamos un efecto monocromático para reducir el numero de canales rgb.
Top Res: Vamos a reducir el tamaño de nuestra entrada visual, en este ejemplo utilice una división en 1/20
La resolución original es de 1280 x 720, nos da una cantidad de datos bastante grande, es por es que se recomienda reducirla.
A continuación generamos un efecto Feedback leve y aplicamos una sustracción entre las dos entradas de datos en el Comp Top
Top Comp1: La diferencia de pixeles entre FeedBack1 y Null1, se ven reflejados en el operador Comp1, al utilizar la operación Substrac los sectores de la imagen donde hay movimiento se visualizaran.
Top Level: Corrección de niveles oscuros, gamma y filtrado de pixels
Este fue un ejemplo simple de extracción por diferencia de pixels entre frames, en la paleta de Touchdesigner puede encontrar un sistema mas avanzado para obtener los sectores con movimiento en imágenes. OpticalFlow
Demo2
Para este ejemplo el inicio del sistema será igual al demo1, pero obtendremos solo una parte de los pixels detectados en el movimiento de la imagen.
Los sectores rojos de la imagen son los lugares donde hubo un cambio, y se usaran para generar las partículas.
Estuvimos trabajando con operadores Top, y necesitamos que los datos lleguen a través de un Sop.
Vamos a hacer uso de algunos Chops para generar esa transición de datos y recortar la parte que necesitamos para emitir las partículas.
Para explicar de una forma mas simple utilizare un constant Top blanco, transformamos los valores usando el Chop TopTo para seleccionar solo el canal R
Chop Shuffle1: Convertimos lo valores en una secuencia sucesiva de datos R.
Chop Rename1: Renombramos los datos a TX .
Chop Express1: revertimos los valores.
Ahora que tenemos los datos de nuestra imagen convertida, vamos a pasar esos valores a un operador Sop.
Primero creamos una grilla con la misma cantidad de pixels que nuestra imagen reducida, 64 x 36
Luego convertimos los datos con un Chop To, seleccionando los valores P(2), que corresponden al eje TZ [ P(1) = ty, P(0)= tx]
Este desplazamiento en nuestra grilla nos va a servir para poder eliminar la parte del Sop que no queremos interactuar, pueden ver como los pixels que coinciden con la imagen Top Constact permacen en nuestro eje X, mientras que los pixels que valen 0 se desplazan hacia adelante, formando esa curvatura en la grilla. Ese efecto nos va a ser util en el siguiente operador Sop Group, para determinar que área queremos conservar de nuestro elemento.
En el parámetro Sop Group/Create/Bounds, podemos crear una área delimitada marcada con un cubo de líneas rojas.
Basado en el grupo creado, ahora conectamos a un Sop Delete, y le indicamos que seleccione el grupo 1
Luego que elimine la parte no seleccionada de los puntos, así obtendremos la misma figura del operador Top, convertida en un Sop.
Sop Sort1: Random, para que los puntos se dispersen de manera aleatoria en la grilla.
Cuando volvemos a conectar nuestra imagen animada, podemos notar ahora como solo se generan pequeñas fracciones dentro de nuestro Sop Delete,
estas fracciones serán las encargadas de emitir las partículas.
Vemos como ahora se visualizan de color rojo las secciones que el sistema filtra, y las que usaremos a continuación para desprender partículas.
Demo3
Vamos a conservar lo visto en el anterior, pero remplazaremos el loop de circulos por una imagen de video webcam, para poder ver el efecto en tiempo real con movimiento corporales.
Demo 4
Para este ejemplo vamos a agregar un operador SOP Particles luego del Sop Sort, para que la detección del movimiento se convierta en un sistema de partículas.
A la derecha se ve la sección de movimiento detectada, a la izquierda el sistema de partículas actuando desde esos puntos.
Demo 5
Ahora que tenemos el sistema base creado, podemos remplazar la posición de estas partículas por diferentes objetos y formas.
En esta área del sistema se analiza el sonido
Chop AudioSpect1: Se convierte en un espectro de señal con valores mayores a 0
Chop Math3: Se combinan los canales para tener un valor promedio y formar 1 sola señal.
Chop Math4: Agregando el valor 0.1 evitamos que los valores lleguen a 0.
Chop Math2: Luego esos valores se amplían en un rango de 0.1 a 6, estos datos se asocian a la escala de nuestro objeto instanciado mas adelante.
Chop Analyze: Selecciona los valores máximos.
Chop Count1: Cuenta entre 0 y 2 para ir cambiando la forma asignada a las partículas, cada vez que haya un valor máximo superior a 0.6.
Chop Resample1: Acortamos el tamaño de la muestra, el audio original tiene un tamaño de 22.050, lo acortamos a la cantidad de muestras que tiene nuestro sistema: 505
Chop Null7: El valor obtenido de la operación anterior, es asignado al Sop Switch, para intercalar entre 3 objetos diferentes como partículas.
El tamaño del objeto será determinado por Chop Math2, y cambiaran al ritmo de la música.
Demo 6
Ahora vamos a mejorar el anterior ejemplo haciendo que las partículas tengas diferentes colores.
Para eso debemos analizar esta sección del proyecto
Primero se genera una escala de colores utilizando Top Ramp, en el parámetro Phase se usa la expresión de python absTime.seconds*1.3 para que tenga un movimiento continuo.
Convertimos esos colores en valores numericos a traves de Chop Top4, y sequenciamos los canales segun su nombre R,G,B
Esos 3 canales se colocan dentro del operador Sop Chop3 de la siguiente manera
Los canales R,G,B de nuestra Rampa se convierte en atributos Cd para el sistema de operadores Sops
Ahora veremos como cada partícula obtiene un color diferente.
El parámetro Birth del Sop Particles, esta conectado a la detección de movimiento, se toma un promedio de los valores R obtenidos en la imagen de entrada.
Cuanto mayor movimiento y velocidad, mas partículas serán creadas.
Por ultimo agrupamos con Chop Merge los valores obtenidos tx, ty, tz, vx, vy, vz, Age, LifeSpan, r, g ,b, a, lifecurve, size
Estos valores se asignan a las instancias de geometría, en sus respectivos lugares.
Puede aprender mas sobre instancias en este video tutorial:
Puede parecer un poco difícil, pero la técnica principal que estamos haciendo es simple, en resumen creamos un SOP Grid que cubra toda la pantalla, hacer coincidir el número de vértices del SOP con las resoluciones de la pantalla, y basándonos en la diferencia entre fotogramas, creamos un sistema de partículas a partir de esos elementos. El punto clave esta en cómo usar el SOP de grupo y SOP Eliminar
Espero que les haya sido de ayuda para comprender un poco mas como funcionan estos sistemas interactivos de partículas, se puede combinar utilizando sensores Kinect, para obtener una mejor segmentación de la silueta y sus movimientos.
A partir de estos ejemplos lo ideal es que luego pueda hacer sus propias modificaciones y crear algo nuevo aplicando las técnicas aprendidas.
Las próximas semanas seguiré compartiendo mas tutoriales, éxitos!
Interpretación y traducción: Tolch
Tutorial Original by Ken-ichi KAWAMURA