Disperser script for XSI

nexen - 01/06/2005 17:10
Hola, como no hay sección de scripting por ningún lado, asalte está sección. En el proceso de aprendizaje estoy trabajando sobre un script, dada una incertidumbre que surgió en el foro de modelado, que era colocar una copia de un objeto x sobre una malla, me puse a jugar con el código y ahí van saliendo cosas interesantes.

Disperser 0.9.0.

He tocado algunos puntos:
1) un poco más rápido.
2) añadido: cuadros de mensajes.
3) añadido: color de wire de objetos dispersos.
4) añadido: cuadro de propiedades, ahora se puede espesificar el nombre que se desea para los objetos a dispersar, el número de objetos a dispersar, y seleccionar si se desea clonar en lugar de duplicar solamente.

Posdata: ya no es necesario tener un objeto llamado Cube solo pikar objeto a dispersar y el grid donde se dispersara.

Trabajando sobre:
1) randomize (posición, orientación, escalado).
2) disperse by (edge-poly) (actualmente solo by points).

He de destacar que estoy aprendiendo mientras lo hago por lo que el script no es perfecto, quisiera también sus feedback al respecto y que utilidades especificas se le podrían añadir. Saludos scripta2.

Ver, actual 0.9.0.

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #13776

RavenX - 01/06/2005 17:24
Bien, gracias Nexen por abrir este hilo. Luego vengo y comoneto más, que voy con prisa, ta luego. Posdata: te lo estás trabajando de veras.
Caronte - 01/06/2005 17:38
Esto va teniendo mejor pinta. Una feature que no tiene Blender y que siempre he echado en falta, es poder seleccionar varios objetos y que se repartan todos aleatoriamente en lugar de elegir uno solo.
Rashek - 01/06/2005 17:39
Podrías mirarte la posibilidad de conectar un whight map a script, y en la Zonda donde este pintado (valor 1) cree una cantidad de nulls dependiendo del nuemero de copias especificadas. Me encanta la idea compañero, eres un crack.
RavenX - 01/06/2005 19:31
Vale Nexen, ya lo he probado, un buen avance, hasta te diré que en mí escena tocha (ya tu sabes) ha funcionado (yuju (a medias)).
1º- Me ha hecho la dispersión, pero fuera del Grid, en la otra punta de mi escena.
2º- He descubierto que si hay más de 1 objeto a dispersar con el mismo nombre, pero numerado, es decir: objeto a dispersar = caja, otro objeto por ahí = caja23, al realizar la dispersión da errores referente a caja23, la usa para dispersar éstas y la dispersión de la original caja se montan encima.

Eso es todo por ahora, voy a seguir probando.
nexen - 06/06/2005 04:29
Hola muchachos los pocos que os sigueis este topic. A ver os cuento un poco, en mí afán por aprender scripting en XSI, de primera mano con vbs, me he decepcionado y con toda la razón, quizás para aprender el usar vbs tiene su gracia, pero luego cuando exigues velocidad y acceso más profundo se queda muy corto, por lo que el script disperser se quedará en esta versión 1.5.0, para poder olvidar el lento vbs y meterme de lleno en lo que es el desarrollo con C++, y definir de una ves dll, y empaquetar addons.

Ahora que hay de nuevo en disperser 1.5.0? Bien, os cuento:
* primero lo malo que fue reparado el bug de generación de objetos solo en el centro del mundo, escena, etc fue fixeado ahora lo genera en las coordenadas globales de cualquier mapa de dispersión.

Los features:
*- Ahora podemos pikar más de un objeto a dispersar previa espesificación en la cantidad de objetos que queremos aleatoriamente, 1, 5, 10 o x objetos. (gracias a él comentario de Caronte).
*- El mapa de dispersión como lo llamo donde se colocaran los objetos, puede ser cualquier objeto polygonal.
*- Diferentes opciones de dispersión.
*- Randomize de rotaciones y escalado.
*- Randomize de wire color.
*- Barra de progreso de los procesos realizados.

El menú de opciones presenta 4 tabs que son:
Dispers, randomize rotation, randomize scale, wire color.

Dispers:
*- Disper name -> nombre que se desea para los objetos dispersos.
*- Disper number -> cantidad de objetos que se desea (actualmente está limitado al número de points que contiene la malla solamente).
*- Disperse by -> disperse by ofrece cuatro caminos de dispersión los cuales son:
Points: por cada punto de la malla.

Edges: por cada Edge de la malla.

Edges by curve system: un medio que me pensé alterno que es a través de la creación de nulls dispersos en una curva creada a partir de todos los Edges de la malla y luego cada objeto es aplicado un constraint de cada null para ubicarlos (la curva y los nulls son eliminados al terminar el proceso).

Polygons: por cada polígono de la malla.
*-method -> ofrece dos métodos de dispersión por duplicado y por clonado.
*-type -> by cluster significa la creación de un clúster ya sea por punto Edge o polígono, y simple (pos) por simple valores de su ubicación en el espacio (solo aplicable para points).
*-constrains -> permite definir constrains de posición y orientación del objeto padre.
*- Subdivisión -> (solo aplicable para disperse by (Edges by curve system)), esto significa que si utilizamos esta forma de dispersión sobre una malla que está suavizada la creación de la curva se adactara al suavizado de la malla y de esta forma la ubicación es más precisa.

Randomize rotation:
*-rotation by cluster -> permite añadir un valor de roll a los clusters por un valor aleatorio generado de una entrada mínima y máxima.
*-rotation by simple (pos-root) -> permite añadir valores de rotación mínimos y máximos para cada eje, el valor final se genera de un random entre el mínimo y el máximo escojido.

Randomize scale:
*- Scale -> aquí definimos igualmente el random para el escalado de cada uno de los objetos a dispersar, por defecto este siempre es uno por lo que si el objeto a dispersar ha sido escalado a un valor negativo y mayor debe ser colocado este valor dentro del valor mínimo o máximo del scale para tomar esa referencia, si no se desea randomizado en el escalado simplemente se pone en ambos campos el mismo valor actual de escalado del objeto.
Wire color.
*- Randomize wire colors -> simplemente si así se desea genera un color aleatorio para el wire de cada objeto disperso.

Bueno a priori esto es lo que he avanzado, el script no está libre de fallos así que, cualquier bug dejenmelo saber, Rasheck el weight map queda para la versión de C++ quiero hacerlo en forma de plugin con muchas otras opciones he ideas que se me han venido mientras lo hacia.

La idea era aprender y compartir con ustedes y eso lo he logrado, he de admitir que el script se pone lento dado que ya maneja muchas opciones y crea bastante cosas en el proceso, pero que tanto se le puede pedir a un lenguaje de script? Por eso voy a por C++.

Aquí os dejo una imagen con unas muestras.

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #14014



🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #14015

RavenX - 06/06/2005 09:51
Te lo has currado Nexen, de veras, me funciona y es una maravilla. Como tú dices algún que otro fallo puede haber, me he tropezado con alguno, pero hasta que sepa explicarlo, creo que más bien era por no saber usar el menú de opciones que creaste, ahora ya casi lo domino y me está funcionando del todo.

Vas a hacerlo en C++? Vas a hacer addons tío, estas no paras ¿eh? Bueno, tienes mi apoyo en lo que quieras, si quieres usarme de tester, adelante.
Leander - 06/06/2005 10:47
Vaya. Que tío. Nexen. Suerte con el C++, vale la pena, no lo lamentaras.
Caronte - 06/06/2005 11:12
Muy bueno, muchas gracias y suerte con el C++.
Rashek - 06/06/2005 11:45
Vaya, tío, eres la historia caña. Posdata: se me ha ocurrido otra idea, hacer bloques, es decir, que tome por referencia el tamaño en bounding box del objeto y puedas colocar un montón de objetos juntos definiendo hacia donde quieres que, aparezcan, por ejemplo, tienes un bloque de una muralla y que con esa opción puedas hacer todas las copias necesarias para hacer la muralla o que tengas una teja y puedas crear un plano de tejas juntas una a la otra.
Ánimo que te lo estás trabajando como nadie.
nexen - 06/06/2005 19:04
Muchas gracias por el apoyo muchachos, realmente lo aprecio muchísimo, es reconfortante recibir esa clase de ánimo de veras.

Ha RavenX estoy en cuenta serás el tester oficial.

Muy buena idea Rasheck, es muy buena, eso me gusta entre todos aportamos ideas que al final harán más optimas y usables las cosas.

Otra idea tomada de un videotutorial que tengo es usar un bitmap como mapa, no sé si lo han visto es un tutorial donde el tío crea como un gif del logotipo XSI dibujándose por partes entonces asigna unas partículas a esa textura y luego las partículas van apareciendo de acuerdo a cómo se va formado el logotipo en el gif (supongo), se podría aplicar para que generara la dispersión de acuerdo a esa textura, bueno ideas ideas todas serán bienvenidas.
RavenX - 06/06/2005 20:57

Ha RavenX estoy en cuenta serás el tester oficial.

\ \ gracias, gracias, cuanto honor.
Leander - 06/06/2005 23:23
Nexen, ¿sabes que el dispenser se parece mucho a un plugin de pelo? Yo como usuario del foundation sería el primer agradecido si lo sacaras, harías negocio con el plugin.

Atencion. En este foro hay un crack. Nexen.
Leander - 06/06/2005 23:44
Una pregunta, si tanto te va la programación de scripts y add-ons. ¿Has probado Python y Blender? Te va a encantar, tienes abundante información.
Ballo - 07/06/2005 00:03
Oyes los usuarios de 3ds Max, también queremos de tus virtudes, guapetón. Vaya, buen trabajo.
nexen - 07/06/2005 01:06

Nexen, ¿sabes que el dispenser se parece mucho a un plugin de pelo? Yo como usuario del foundation sería el primer agradecido si lo sacaras, harías negocio con el plugin.

Atencion. En este foro hay un crack. Nexen.

Gracias Leander, no realmente no sabia, poco se de pelo en XSI, pero si puede aplicarse.

Una pregunta, si tanto te va la programación de scripts y add-ons.
¿Has probado Python y Blender?

Bueno de Blender he tocado casi nada, no me gustó de primer impacto y bueno son cuestiones de gustos, como todos saben, sobre Python también estoy considerando, ya que también se trabaja con Python sobre XSI, pero no se C++ es más robusto, quizás aún hay que estudiar las bondades de ellos.

En estos momentos me encuentro en una completa sesión de documentación y estudio sobre los lenguajes a ver qué decisión tomo, sigue siendo mi favorito C++.

Oyes los usuarios de 3ds Max, también queremos de tus virtudes, guapetón.

Vaya, buen trabajo.

Muchas gracias Ballo creo que será más fácil que te pases a XSI.
Ballo - 07/06/2005 01:12
Vaya, gracias por el ofrecimiento, pero yo soy hombre de una sola mujer.
Leander - 07/06/2005 01:13
Sigue con XSI, y muchas gracias por tus aportes Nexen, estaré siempre pendiente de ti. Un abrazo.
RavenX - 07/06/2005 12:10

Sigue con XSI, y muchas gracias por tus aportes Nexen, estaré siempre pendiente de ti. Un abrazo.

Estaremos, estaremos.
Rashek - 07/06/2005 14:02
Se me ha ocurrió otra cosa más, viendo un mensaje de jhotun de otro guerrero, me fije el la malla de anillas que lleva el personaje, y pensé, fastidiar, con este plugin, se podría hacer. Básicamente podríamos crear una tela, para que se deforme como queramos y luego con el plugin le ponemos sobre la superficie un montón de anillas, pudiendo controlar la distancia entre ellas (incluso distancia en negativo para que se enlacen) y la rotación de cada una de ellas para que si una esta acostada la otra este rotada y no se atraviesen unas con otras, sería la historia caña.

Posdata: tu no te agobies, yo te voy dando ideas y tu coges las que te gusten.

Animo campeon.
Ballo - 07/06/2005 14:06
Una duda novata de programación, ¿si C++ también sirve para programar plugin para max en que parte se diferencian para hacerlo para un programa u otro? Gracias.
nexen - 07/06/2005 18:13

Se me ha ocurrió otra cosa más, viendo un mensaje de jhotun de otro guerrero, me fije el la malla de anillas que lleva el personaje, y pensé, fastidiar, con este plugin, se podría hacer. Básicamente podríamos crear una tela, para que se deforme como queramos y luego con el plugin le ponemos sobre la superficie un montón de anillas, pudiendo controlar la distancia entre ellas (incluso distancia en negativo para que se enlacen) y la rotación de cada una de ellas para que si una esta acostada la otra este rotada y no se atraviesen unas con otras, sería la historia caña.

Posdata: tu no te agobies, yo te voy dando ideas y tu coges las que te gusten.

Animo campeon.

Tomo nota tomo nota, vaya eres una máquina de ideas.

Una duda novata de programación, ¿si C++ también sirve para programar plugin para max en que parte se diferencian para hacerlo para un programa u otro? Gracias.

En el Api (application programmers interface) que proporcione cada uno, o sea la colección de clases que exponen la funcionalidad de 3ds Max o XSI a través de sus respectivos métodos y propiedades.

Me imagino que tú duda viene al hecho de que haya plugins para muchas suites como los de Next Limit, por ejemplo, simplemente se valen del SDK de cada paquete si quieren rotar un objeto ven como es el método para 3ds Max, y como es para XSI etc y así lo van sacando, al igual que con el software con el SDK hacen lo mismo, pero de una u otra forma. Saludos enc+dos.
RavenX - 07/06/2005 22:26
Hey Nexen, siento no haberte comentado nada en 2 días de las pruebas de tu nuevo dispenser, me entretuve con otras cosas.

Mañana le echo un vistazo profundo, ahora me tengo que ir. Hasta luego.
RavenX - 08/06/2005 12:59
Nexen, ya he probado más a fondo tu v.1.5. Prácticamente me ha funcionado todo a la perfección con distintos objetos y superficies. Solo me ha dado algún fallo tonto al duplicar y no al clonar. En modo duplicar, en ocasiones se dejaba puntos o caras vacías sin crear el objeto duplicado. Pero te digo que ya he hecho varias pruebas y muy buen resultado me está dando.

En cuanto a darte ideas, lo siento, soy malo dando ideas, que se encargue, que parece darse bien.

Bueno, lo que ya es sabido, es lento, pero eso no afecta a la función principal, pues ésta funciona. Suerte y nos contaras como te va con la v, C++.
nexen - 10/06/2005 04:24

Nexen, ya he probado más a fondo tu v.1.5. Prácticamente me ha funcionado todo a la perfección con distintos objetos y superficies. Solo me ha dado algún fallo tonto al duplicar y no al clonar. En modo duplicar, en ocasiones se dejaba puntos o caras vacías sin crear el objeto duplicado. Pero te digo que ya he hecho varias pruebas y muy buen resultado me está dando.

En cuanto a darte ideas, lo siento, soy malo dando ideas, que se encargue, que parece darse bien.

Bueno, lo que ya es sabido, es lento, pero eso no afecta a la función principal, pues ésta funciona. Suerte y nos contaras como te va con la v, C++.

Muchas gracias betatester por el informe, muy bien si tiene algunos detalles, sobre la velocidad esta puede ser muy bien reducida colocando el script en un botón, ya que se evita el log del script en la ventana de comandos y mejora ampliamente la velocidad. Crea un toolbar y seleccione todo el código del script y lo arrastras hacia el toolbar de aquí crearas en botón, cierra la ventana de comandos y llama al script desde el botón, ya no saldrán todos los logs de mensajes del script sino solamente los que fueron programados como lo son los mensajitos de si seleccionastes el objeto 1(me he estado tragando el SDK estos días dios ya no aguanto no me alcanza el tiempo, el trabajo el modeling el texturing, animation, tutoriales tutoriales tutoriales, scripting el SDK dios) por que el día tiene unas simple y tan miserables 24 horas? Creo que dios cometido un error en la creación.

Estoy pensando trabajar íntegramente C++ de la mano de jscript, pero con el objetmodel para incrementar la velocidad, os contare mucho más adelante hago una pausa para seguir con XSI como tal (modeling, rendering, etc). Saludos enc+dos.