XSIforum.com

Taller de ICE: Construir un CopyOp

0 Usuarios y 1 Visitante están viendo este tema.

Unaided

  • ***
  • 3293
Taller de ICE: Construir un CopyOp
« en: 30 Noviembre 2008, 19:59:32 »
En Houdini existe un operador llamado Copy el cual copia el operador A en cada punto del operador B. Por ejemplo copiar un cubo en cada punto de un grid.




Me había propuesto hacer eso en ICE, puesto que me parecía simple y pensé que podía llegar a hacerlo. No fue así y decidí consultar con Alanf para que me diera algo de luz al asunto.

Según me ha comentado, ICE todavía no acepta setear parametros de kinematics, o no de manera oficial. Así que para conseguir lo que yo quería hacer, se ha apoyado en el Instance Shape, que clona partículas. Hasta ahí el método no me ha parecido mal por lo anteriormente comentado.
 
Este método consiste en crear una partícula en cada punto de la geometría base, y entonces si, usar Instance Shape para aplicar la forma del objeto A a cada partícula.



Para crear partículas en puntos de geometría existente se emplea Add Point, que añade uno o más puntos a una nube de puntos o PointCloud. Y he aquí lo que no me ha convencido, implica tener un PointCloud externo, ya creado, a modo de Null, para que la cosa funcione. En sí no hay ningún inconveniente en ello.

No obstante, me ha parecido una buena idea plantear esto como un taller para crear un operador de copia en ICE, el cual tome los vértices de la geometría y use sus propios vértices como centro (o no) y copie, como instancia, otro objeto. Si se reemplazan los vértices de la geometría base o sí por el contrario, se mantienen lo dejo a gusto de cada uno.
« Última modificación: 30 Noviembre 2008, 21:38:24 por Unaided »

Re: Taller de ICE: Construir un CopyOp
« Respuesta #1 en: 30 Noviembre 2008, 20:14:23 »
Es una propuesta muy buena que además os combierte en turbogays, que ya teneis un nivel de ICE bastante pro y yo me estoy quedando atrás.

Re: Taller de ICE: Construir un CopyOp
« Respuesta #2 en: 30 Noviembre 2008, 22:56:41 »
Está bastante bien, lo que no entiendo muy bien de la iniciativa es que hay que hacer, la solución ya está planteada en el primer mensaje, quizás lo único que yo haría distinto es usar un 'set Data' con 'self.shape' y 'self.size' en lugar del 'Initialize Particle Data' pero básicamente sería exactamente lo mismo que está en tu ICETree :-)

Unaided

  • ***
  • 3293
Re: Taller de ICE: Construir un CopyOp
« Respuesta #3 en: 30 Noviembre 2008, 23:12:01 »
Esa solución pasa por crear particulas en los vértices de la geometría. La idea es buscar una solución con un método que copie el objeto directamente en los propios puntos de la geometría.
Al crear particulas, uno de los problemas que trae consigo es que el objeto base, solo funciona como posicionador y hay que crear un control STR adicional, para que al modificar el objeto base la creación de las particulas se vea afectada.

P.D Ese ICETree es de Alanf. Mio es el de Houdini, que no tiene ninguna dificultad hacerlo xD
« Última modificación: 30 Noviembre 2008, 23:18:10 por Unaided »

Re: Taller de ICE: Construir un CopyOp
« Respuesta #4 en: 01 Diciembre 2008, 01:07:15 »
Según me ha comentado, ICE todavía no acepta setear parametros de kinematics, o no de manera oficial.

Esa solución pasa por crear particulas en los vértices de la geometría. La idea es buscar una solución con un método que copie el objeto directamente en los propios puntos de la geometría.

Sigo sin entender, no sé, si sabes que las kinematics aún no están soportadas como pretendes que las manipulemos con ICE para llegar al resultado que buscas? Entiendo lo que quieres lograr pero por el momento ICE no puede hacerlo, con un SCOP podrías hacerlo pero probeblemente sea más engorroso :)
« Última modificación: 01 Diciembre 2008, 01:17:59 por César Sáez »

Unaided

  • ***
  • 3293
Re: Taller de ICE: Construir un CopyOp
« Respuesta #5 en: 01 Diciembre 2008, 02:06:51 »
¿Por qué no se va a poder hacer un Instance Shape que funcione con meshes?

El Instance Shape internamente tiene la función de crear instancias de un objeto, en cada particula.

Los kine son accesibles por Get, pero por Set, de momento no.

El planteamiento básico sería coger la posición de los puntos de una malla (Get mesh.pointPosition) por una banda, y por otra coger el objeto a replicar (Get mesh.shape).

El compound Set Data acepta la variable pointPosition de objetos. De hecho acepta todas las variables de un Polygon Mesh. Y también los parámetros de Visibility, Display y Geometry Approximation. Lo único que no acepta son los parámetros Kinematics.

Pero no veo porque habría que tener que usarlos dentro de un SetData para copiar un objeto sobre puntos ya existentes.

Por ejemplo, ¿es posible crear un constraint Object to Cluster con ICE?




« Última modificación: 01 Diciembre 2008, 02:47:04 por Unaided »

Re: Taller de ICE: Construir un CopyOp
« Respuesta #6 en: 01 Diciembre 2008, 04:32:51 »
Necesitas moverlos a la posición de cada vértice (posición xyz) y alinearlos a la normal de la superficie (rotación xyz) para lograrlo con geometría y no partículas, eso son kinematics :D

Lo que quizás si se podría hacer es deformar objetos para que aparentemente estén alineados y posicionados tal como quieres (sería hacer un offset a los vértices de cada objeto) pero nuevamente no sería lo que buscas ya que simplemente es una deformación, por el momento no se puede mover objetos directamente con ICE. (esto último podría ser un buen ejercicio para realizar como taller).

Citar
Por ejemplo, ¿es posible crear un constraint Object to Cluster con ICE?
Los constraints son kinematics, por el momento no es posible acceder a nada de eso mediante ICE (al menos no hay soporte para ello).




PD: Todo esto sin mencionar que debes copiar/clonar la geometría el número de veces del count del array de vértices, lo cual hasta el momento tampoco puede hacer ICE (no se puede crear geometría), lamento ser el de las malas noticias en este hilo :(
« Última modificación: 01 Diciembre 2008, 04:38:36 por César Sáez »