Voy a comentar algo sobre el proyecto en que estoy ahora desarrollando en Blue bolt, los primeros dias me explicaron la idea que tenian ellos para publicacion de assets o mejor dicho de publicacion de bundles (grupos de assets), al cabo de unos dias me dijeron que me pusiese a desarrollar la idea y prepare una prueba de concepto que funcionaba para explicar mi idea y como se ajustaba a la suya, el problema es que funciono y ahora soy el encargado de todo el proyecto que comprende practicamente todo el pipeline de la empresa :).
La idea base es que en vez de tener varios scripts que cada uno hiciese todo el proceso de una sola vez, tener una serie de scripts simples que pudiesemos enlazarlos entre ellos y nos generasen los procesos, en cierto modo seria tener un sistema nodal de pipeline seteado por unos archivos de configuracion, cada uno de esos nodos haria funciones simples, lanzar un render, hablar con la base de datos, copiar archivos, y unos ficheros de descripcion del trabajo definirian las conexiones entre estos trabajos
Para poder hacerlo de un modo flexible el principal problema era como pasar unos datos que seteabamos en la definicion a variables en cada uno de los nodos, o como se pasaban datos de un nodo a otro, al final gracias a una de las caracteristicas de python fue relativamente sencillo, y es la introspeccion, gracias a ella podemos saber que variables tenemos en una clase, y facilmente leer su valor y pasarselo a otra clase.
Por ejemplo: suponer que tenemos dos clases,la clase renderMaya que hemos llamado 'render1' y la clase mkQuicktime que hemos llamado 'quicktime' y queremos que primero renderice maya para luego crear un quicktime con esas imagenes, 'render1' tiene una variable outputPath que es la que usa para setear el trabajo en la granja, desde la definicion le decimos que al nodo 'quicktime', la variable 'inputSequence' tiene el valor '^/render1/outputPath', lo hacemos con
setatt(self,'quicktime','^/render1/outputPath')
asi hemos creado en nuestra clase una variable y le hemos seteado un valor a partir de dos strings
Para empezar se ejecuta primero el nodo 'render1' y cuando va a ejecutar el nodo 'quicktime' lo primero que le decimos es que resuelva las dependencias, para ello recorremos todas las variables de la clase que se encuentran en el diccionario __dict__ y vemos cuales son string y comienzan con '^', cogemos los valores que nos dan de nodo y variable, el script busca en todas las clases una que tenga la variable name con valor 'render1', y mira a ver si en esa clase existe la variable 'outputPath' con
hasattr(nodo, atributo)
si existe lo que hacemos es recoger su valor con getattr
value=getattr (clase, 'outputPath')
y lo seteamos en la clase actual
setattr(self,'quicktime',value)
De este modo tenemos acceso a TODAS las variables de las distintas clases que conforman nuestro arbol de dependencias, asi podemos setear los valores de cada modulo ya sea con un valor fijo o relativo a la salida de otro modulo como puede ser la version que estamos creando o el path a los fotogramas renderizados
Otra de los puntos fuertes de este proyecto es que creamos todos los nodos llamando a la misma clase y dependiendo del parametro 'type' que le pasemos nos devuelve una u otro, por ejemplo la llamamos aqui nodoBase, leemos el tipo y el nombre desde la definicion y creamos el nodo 'render1' del modo
nodo=nodoBase(name='render1',nType='renderMaya')
si le hacemos un type a 'nodo' lo que nos devolvera sera una clase renderMaya, no una clase nodoBase, esto es usando el metodo __new__ que comente hace unas cuantas entradas
con estas dos aproximaciones podemos crear y conectar nodos de un modo muy sencillo a partir de una fichero de configuracion, y por lo tanto generar archivos de configuracion para generar trabajos complejos de un modo bastante facil y sobre todo muy reutilizable
programacion, recursos y tecnicas para solucionar marrones en programacion de vfx
Entradas populares
-
Muchas veces tenemos que crear cadenas de texto a partir de variables que tenemos, estas cadenas de texto pueden ser lineas en un archivo, ...
-
con el cambio de la interface de maya a qt, la creacion de interfaces que era bastante complicada en versiones anteriores se ha simplificado...
-
Como ya comente en el post anterior estamos preparando un proyecto para el cual massive va a ser una gran complicacion ya que no es tan faci...