
Que es Cook (cocinar)?
Cocinar es un término que se refiere al estado en el que un operador de la red está ejecutando un cálculo.
Al hacer clic con el botón central del mouse en el operador, puede ver cuándo se cocinó por última vez y cuántas veces se cocinó desde que se lanzó TouchDesigner.
Los operadores de TouchDesigner solo se cocinan cuando se necesita la funcionalidad del operador.
Esto significa que no todos los nodos se cocinan en cada fotograma.
Algunos operadores, especialmente Movie Out TOP, Touch Out OP y otros Out OP, se cocinan en cada fotograma independientemente de los cambios de parámetros o cambios de entrada.
Este comportamiento garantiza que el receptor de la salida, como una película o un canal de comunicación, pueda obtener un flujo continuo de datos.
- Operador con el indicador de visor activado
- Operadores conectados a operadores cuyos valores han cambiado desde el último Cook
- Operador de panel relacionado con el renderizado
- Un operador que envía datos a través de una red fuera de TouchDesigner
Si el cable entre los nodos está animado, significa que el nodo ascendente (izquierdo) está cocinado y los nodos descendentes están cocinando o no (solo solicitando un cocinero).
El cuadro de diálogo PerformanceMonitor le permite ver lo que se cocinó en un cuadro.
Si desea ejecutar su aplicación a 30FPS o 60FPS, deberá reducir la cantidad de nodos cocinados tanto como sea posible.
TouchDesigner cook según el wiki oficial está aquí ←
Ejemplo
La ejecución de todos los operadores incluso cuando no son necesarios hace que el procesamiento general se vuelva pesado, por lo que este sera un ejemplo , que permite a los operadores necesarios ejecutarse (cocinar) solo cuando sea necesario.
De esta manera, se activa (Cook On) el Contenedor COMP correspondiente al valor referenciado en el Índice de Switch Top, y los otros Contenedores COMP permanecen bloqueados (Cook off)
Implementación de la función Switch
En este ejemplo, se crean 5 contenedores COMP (contenedor0 ~ contenedor4), y MoviefileinTOP y OutTOP están conectados en él.
Al conectar OutTOP, podrá conectar cada Container COMP a SwitchTOP.
- Establezca Button-> ButtonType de ButtonCOMP en Momentary.
- Conecte CountCHOP y configure Count-> Limit en Loop Min / Max, Limit Minimo en 0 y Limit Maximum en 4.
- Conecte NullCHOP después de CountCHOP y exporte el valor al índice de SwitchTOP al que está conectado ContainerCOMP.
- Ahora, cuando presione el botón, Container COMP cambiará en orden.
Cocine solo cuando sea necesario
Haga que la referencia CHOPExecuteDAT sea NullCHOP y configure CHOP Execute-> Value Change On. (Está activado de forma predeterminada)
Escriba el siguiente código en onValueChange de CHOPExecuteDAT.
def onValueChange(channel, sampleIndex, val, prev): op('container'+str(int(prev))).allowCooking = 0 op('container'+str(int(val))).allowCooking = 1 return
El tercer argumento val de onValueChange contiene el valor del CHOP al que se hace referencia actualmente, y el cuarto argumento prev contiene el valor anterior. Al mismo tiempo que configura allowCooking del contenedor COMP que desea cocinar en 1 (encendido), configure allowCooking del recipiente COMP que estaba cocinando inmediatamente antes en 0 (apagado). Al hacer esto, solo se podrá cocinar los operadores que lo necesiten.
Cook en tiempo especifico (by Javo)
Podemos activar diferentes contenedores, según un tiempo determinado en nuestro sistema.
Vamos a repetir el proceso del ejemplo anterior, creamos 3 contenedores, dentro habrá un MovieInTOP y OutTOP, Renombramos los contenedores como a,b,c
El operador TimelineCHOP, esta asociado a la cantidad de frames en nuestro sistema, los cuales pueden ser configurados en la siguiente sección.
voy a usar un valor de inicio en 1 y finalizacion en 300
El operador CHOPExecute se encargara de procesar el código de python
def onValueChange(channel, sampleIndex, val, prev): timeline = op('timeline')[0] if timeline == 1: op('a').allowCooking = 1 op('c').allowCooking = 0 op('select_out').par.top = op('a/out1') elif timeline == 100 : op('a').allowCooking = 0 op('b').allowCooking = 1 op('select_out').par.top = op('b/out1') elif timeline == 200 : op('b').allowCooking = 0 op('c').allowCooking = 1 op('select_out').par.top = op('c/out1') return
Cuando el timeline coincida con los valores de nuestro codigo, SelectTOP sera asignado a su salida correspondiente.
Activar contenedor a través de pulsador
Otro método que podemos utilizar, es por medio de pulsadores, que activen o desactiven determinados contenedores en nuestro sistema.
Button1 -> Button Type -> Momentary
Count1 -> Limit -> Loop Min/Max -> 0 a 1
def valueChange(channel, sampleIndex, val, prev): op("container1").allowCooking=val return
Modo de ejecución
Puedes cambiar al modo de interpretación presionando el botón debajo de [WIKI] en la parte superior izquierda.
Cuando se activa el modo ejecución vera la salida de su proyecto, con los sistemas de nodos ocultos.
Puede salir del modo de ejecución con la tecla esc.
La imagen que se estableció en este cuadro llamada Perform ( Window COMP ) que mencioné anteriormente aparece en el modo performance.
Lo bueno del modo Performance es que tiene puede procesar solo lo necesario.
Por ejemplo, en el siguiente ejemplo, además del video del proyecto1 que desea mostrar, se cocina el video de moviefilein1 . Cuando se establece el modo de ejecución, puede generar imágenes con un procesamiento complejo sin cocinar más que lo necesario.
Bypass está bien, o simplemente puede detener la reproducción de Movie File In TOP usando el parámetro ‘Reproducir’. Además, a menudo usamos Switch TOP o Select TOP, siempre que la película no esté seleccionada, TOP no se cocinará (si el visor está apagado o en modo de interpretación)
Resumen
Si un proyecto tiene muchas funciones, el procesamiento general tiende a ser pesado, pero pudimos proteger losFPS incorporando encendido / apagado de las partes en nuestro sistema que deben ejecutarse o no.
Fuente: