TouchDesigner es un lenguaje visual en base a nodos. En TD es posible añadir códigos utilizando python o bien un lenguaje propio del sistema llamado Tscript.
En TD las funciones son llamadas operadores y son clasificados en 6 categorías.
Los operadores de canal (CHOP) nos permiten interactuar con el sistema.
Cada nodo (o cajita) puede ser conectado a otro nodo de su misma categoría. Cada nodo tiene su cuadro de inspección que permite definir los parámetros públicos del nodo seleccionado.
Así, por ejemplo, para obtener la intensidad sonora (rms) de un archivo de audio renormalizado en el rango [0 -360] podemos configurar las siguiente red.
Los operadores de textura (TOP) son nodos que procesan recursos gráficos en la GPU.
Así, por ejemplo para componer un texto sobre un imagen de fondo podemos acudir a la siguiente red.
Los operadores de superficies son los encargados de procesar los recursos en 3D.
Es posible, por ejemplo, componer un entorno 3D mediante la siguiente red.
Es posible asignar materiales a las geometrías utilizando los operadores de Material (MAT).
Así, por ejemplo, podemos asignar el shader phong a un material y así consignar los mapas de color, textura, normales, reflexión, etc…
Los operadores de datos (DAT), nos permite procesar datos.
Entre muchas otras cosas, en TD es posible interactuar con APIs mediante el intercambio de archivos de datos XML y JSON.
Para esto, se puede utilizar el operador Cliente web dispuesto en la categoría.
Trabajar un archivo XML es muy sencillo. Como ejemplo vamos a utilizar un API con información del clima llamada tuTiempo.net. En la página encontraras la forma de hacer la solicitud. En nuestro caso, pediremos los datos de la temperatura máxima y mínima en Chile haciendo un GET al endpoint requerido. Nuestra solicitud la haremos entonces a https://api.tutiempo.net/xml/?lan=es&apid=zwDX4azaz4X4Xqs&ll=-33.4372,-70.6506, en donde (-33.4372,-70.6506) son las coordenadas de Santiago de Chile en el planeta Tierra.
El operador SELECT nos permite filtrar bajo diversos criterios. Aveces, el criterio de selección depende de un determinado <Tag>. Por ejemplo, podríamos querer filtrar no solo la temperatura máxima y minia hoy, sino que también la sugerida para los próximos días.
Y bueno…. Utilizando el operador de sustitución puedes quitar las etiquetas y quedarte con los valores!!!
A decir verdad los archivos de datos en XML están perdiendo popularidad con la llegada de las REST API y la incorporación de los archivos de datos JSON.
Para este ejemplo, utilizaremos el API que nos permite conocer datos de los astronautas en el espacio en este momento. Como vera el archivo JSON esta compuesto por duplas que pueden complejizarse incorporando arreglos en los elementos. En este caso, el endpoint (http://api.open-notify.org/astros.json) solicitado me entrega:
{"message": "success", "number": 5, "people": [{"craft": "ISS", "name": "Chris Cassidy"}, {"craft": "ISS", "name": "Anatoly Ivanishin"}, {"craft": "ISS", "name": "Ivan Vagner"}, {"craft": "ISS", "name": "Doug Hurley"}, {"craft": "ISS", "name": "Bob Behnken"}]}
Para filtrar la información requerida (en nuestro caso el nombre de los astronautas en el espacio ahora), se debe parsear los datos escribiendo un pequeño código en python. Básicamente, lo que hay que hacer es asignar un determinado elemento a una tabla.
import json
def onTableChange(dat):
response = dat.text
imported_data = json.loads(response)
op(‘json_data’)[0,0] = “Astronauta1”
op(‘json_data’)[0,1] = imported_data[“people”][0][“name”]
op(‘json_data’)[1,0] = “Astronauta2”
op(‘json_data’)[1,1] = imported_data[“people”][1][“name”]
op(‘json_data’)[2,0] = “Astronauta3”
op(‘json_data’)[2,1] = imported_data[“people”][2][“name”]
op(‘json_data’)[3,0] = “Astronauta4”
op(‘json_data’)[3,1] = imported_data[“people”][3][“name”]
op(‘json_data’)[4,0] = “Astronauta5”
op(‘json_data’)[4,1] = imported_data[“people”][4][“name”]
return
def onRowChange(dat, rows):
return
def onColChange(dat, cols):
return
def onCellChange(dat, cells, prev):
return
def onSizeChange(dat):
return
Como podrá intuir, todo lo anterior puede combinarse con el fin de obtener lo que su creatividad, técnica y tiempo le permitan…. Animo!
Marchiweu!